Localisation updates from https://translatewiki.net.
[mediawiki.git] / resources / src / mediawiki.language / mediawiki.language.init.js
blob34e46e61882bb2501d27a32cb28482ae0acc34c8
1 ( function () {
2         /**
3          * Methods for transforming message syntax.
4          *
5          * Base language object with methods related to language support, attempting to mirror some of the
6          * functionality of the Language class in MediaWiki:
7          *
8          *   - storing and retrieving language data
9          *   - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`,
10          *     `{{GENDER:}}`, `{{#FORMAL:}}`)
11          *   - formatting numbers
12          *
13          * @namespace mw.language
14          * @singleton
15          */
16         mw.language = {
17                 /**
18                  * Language-related data (keyed by language, contains instances of mw.Map).
19                  *
20                  * Exported dynamically by the ResourceLoader\LanguageDataModule class in PHP.
21                  *
22                  * To set data:
23                  * ```
24                  * // Override, extend or create the language data object of 'nl'
25                  * mw.language.setData( 'nl', 'myKey', 'My value' );
26                  *
27                  * // Set multiple key/values pairs at once
28                  * mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
29                  * ```
30                  *
31                  * To get GrammarForms data for language 'nl':
32                  * ```
33                  * var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
34                  * ```
35                  *
36                  * Possible data keys:
37                  *
38                  *  - `digitTransformTable`
39                  *  - `separatorTransformTable`
40                  *  - `minimumGroupingDigits`
41                  *  - `formalityIndex`
42                  *  - `grammarForms`
43                  *  - `pluralRules`
44                  *  - `digitGroupingPattern`
45                  *  - `fallbackLanguages`
46                  *  - `bcp47Map`
47                  *  - `languageNames`
48                  *
49                  * @type {Object}
50                  */
51                 data: {},
53                 /**
54                  * Convenience method for retrieving language data.
55                  *
56                  * Structured by language code and data key, covering for the potential inexistence of a
57                  * data object for this language.
58                  *
59                  * @param {string} langCode
60                  * @param {string} dataKey
61                  * @return {any} Value stored in the mw.Map (or `undefined` if there is no map for the
62                  *  specified langCode)
63                  */
64                 getData: function ( langCode, dataKey ) {
65                         const langData = mw.language.data;
66                         langCode = langCode.toLowerCase();
67                         if ( langData && langData[ langCode ] instanceof mw.Map ) {
68                                 return langData[ langCode ].get( dataKey );
69                         }
70                         return undefined;
71                 },
73                 /**
74                  * Convenience method for setting language data.
75                  *
76                  * Creates the data {@link mw.Map} if there isn't one for the specified language already.
77                  *
78                  * @param {string} langCode
79                  * @param {string|Object} dataKey Key or object of key/values
80                  * @param {any} [value] Value for dataKey, omit if dataKey is an object
81                  */
82                 setData: function ( langCode, dataKey, value ) {
83                         const langData = mw.language.data;
84                         langCode = langCode.toLowerCase();
85                         if ( !( langData[ langCode ] instanceof mw.Map ) ) {
86                                 langData[ langCode ] = new mw.Map();
87                         }
88                         if ( arguments.length > 2 ) {
89                                 langData[ langCode ].set( dataKey, value );
90                         } else {
91                                 langData[ langCode ].set( dataKey );
92                         }
93                 }
94         };
96 }() );