fd77025b074bf942df20ddfbbdbcb6cf0e71dc3e
[lhc/web/wiklou.git] / resources / src / mediawiki.language / mediawiki.language.init.js
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). Loaded dynamically
16 * (see ResourceLoaderLanguageDataModule in PHP docs, aka mediawiki.language.data module).
17 *
18 * To set data:
19 *
20 * // Override, extend or create the language data object of 'nl'
21 * mw.language.setData( 'nl', 'myKey', 'My value' );
22 *
23 * // Set multiple values at once
24 * mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
25 *
26 * To get GrammarForms data for language 'nl':
27 *
28 * var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
29 *
30 * Possible data keys:
31 *
32 * - `digitTransformTable`
33 * - `separatorTransformTable`
34 * - `grammarForms`
35 * - `pluralRules`
36 * - `digitGroupingPattern`
37 *
38 * @property
39 */
40 data: {},
41
42 /**
43 * Convenience method for retrieving language data.
44 *
45 * Structured by language code and data key, covering for the potential inexistence of a
46 * data object for this language.
47 *
48 * @param {string} langCode
49 * @param {string} dataKey
50 * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the specified
51 * langCode).
52 */
53 getData: function ( langCode, dataKey ) {
54 var langData = mw.language.data;
55 if ( langData && langData[langCode] instanceof mw.Map ) {
56 return langData[langCode].get( dataKey );
57 }
58 return undefined;
59 },
60
61 /**
62 * Convenience method for setting language data.
63 *
64 * Creates the data mw.Map if there isn't one for the specified language already.
65 *
66 * @param {string} langCode
67 * @param {string|Object} dataKey Key or object of key/values.
68 * @param {Mixed} value Value for dataKey, ignored if dataKey is an object.
69 */
70 setData: function ( langCode, dataKey, value ) {
71 var langData = mw.language.data;
72 if ( !( langData[langCode] instanceof mw.Map ) ) {
73 langData[langCode] = new mw.Map();
74 }
75 langData[langCode].set( dataKey, value );
76 }
77 };
78
79 }( mediaWiki ) );