3 * Base language object with methods related to language support, attempting to mirror some of the
4 * functionality of the Language class in MediaWiki:
6 * - storing and retrieving language data
7 * - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`, `{{GENDER:}}`)
15 * Language-related data (keyed by language, contains instances of mw.Map).
16 * Loaded dynamically (see ResourceLoaderLanguageDataModule class in PHP, registered
17 * as mediawiki.language.data on the client).
21 * // Override, extend or create the language data object of 'nl'
22 * mw.language.setData( 'nl', 'myKey', 'My value' );
24 * // Set multiple key/values pairs at once
25 * mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
27 * To get GrammarForms data for language 'nl':
29 * var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
33 * - `digitTransformTable`
34 * - `separatorTransformTable`
35 * - `minimumGroupingDigits`
38 * - `digitGroupingPattern`
39 * - `fallbackLanguages`
46 * Convenience method for retrieving language data.
48 * Structured by language code and data key, covering for the potential inexistence of a
49 * data object for this language.
51 * @param {string} langCode
52 * @param {string} dataKey
53 * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the
56 getData: function ( langCode
, dataKey
) {
57 var langData
= mw
.language
.data
;
58 langCode
= langCode
.toLowerCase();
59 if ( langData
&& langData
[ langCode
] instanceof mw
.Map
) {
60 return langData
[ langCode
].get( dataKey
);
66 * Convenience method for setting language data.
68 * Creates the data mw.Map if there isn't one for the specified language already.
70 * @param {string} langCode
71 * @param {string|Object} dataKey Key or object of key/values
72 * @param {Mixed} [value] Value for dataKey, omit if dataKey is an object
74 setData: function ( langCode
, dataKey
, value
) {
75 var langData
= mw
.language
.data
;
76 langCode
= langCode
.toLowerCase();
77 if ( !( langData
[ langCode
] instanceof mw
.Map
) ) {
78 langData
[ langCode
] = new mw
.Map();
80 if ( arguments
.length
> 2 ) {
81 langData
[ langCode
].set( dataKey
, value
);
83 langData
[ langCode
].set( dataKey
);