Implement extension registration from an extension.json file
[mediawiki.git] / resources / src / mediawiki.language / mediawiki.language.init.js
blobdf95d75148bb0b6267e3e4b7b13fe74f65e71021
1 ( function ( mw ) {
2         /**
3          * Base language object with methods related to language support, attempting to mirror some of the
4          * functionality of the Language class in MediaWiki:
5          *
6          *   - storing and retrieving language data
7          *   - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`, `{{GENDER:}}`)
8          *   - formatting numbers
9          *
10          * @class
11          * @singleton
12          */
13         mw.language = {
14                 /**
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).
18                  *
19                  * To set data:
20                  *
21                  *     // Override, extend or create the language data object of 'nl'
22                  *     mw.language.setData( 'nl', 'myKey', 'My value' );
23                  *
24                  *     // Set multiple key/values pairs at once
25                  *     mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
26                  *
27                  * To get GrammarForms data for language 'nl':
28                  *
29                  *     var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
30                  *
31                  * Possible data keys:
32                  *
33                  *  - `digitTransformTable`
34                  *  - `separatorTransformTable`
35                  *  - `grammarForms`
36                  *  - `pluralRules`
37                  *  - `digitGroupingPattern`
38                  *  - `fallbackLanguages`
39                  *
40                  * @property
41                  */
42                 data: {},
44                 /**
45                  * Convenience method for retrieving language data.
46                  *
47                  * Structured by language code and data key, covering for the potential inexistence of a
48                  * data object for this language.
49                  *
50                  * @param {string} langCode
51                  * @param {string} dataKey
52                  * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the
53                  *  specified langCode)
54                  */
55                 getData: function ( langCode, dataKey ) {
56                         var langData = mw.language.data;
57                         if ( langData && langData[langCode] instanceof mw.Map ) {
58                                 return langData[langCode].get( dataKey );
59                         }
60                         return undefined;
61                 },
63                 /**
64                  * Convenience method for setting language data.
65                  *
66                  * Creates the data mw.Map if there isn't one for the specified language already.
67                  *
68                  * @param {string} langCode
69                  * @param {string|Object} dataKey Key or object of key/values
70                  * @param {Mixed} [value] Value for dataKey, omit if dataKey is an object
71                  */
72                 setData: function ( langCode, dataKey, value ) {
73                         var langData = mw.language.data;
74                         if ( !( langData[langCode] instanceof mw.Map ) ) {
75                                 langData[langCode] = new mw.Map();
76                         }
77                         langData[langCode].set( dataKey, value );
78                 }
79         };
81 }( mediaWiki ) );