4d5a0a796ca06471c61eba882eec09a97b2e98a0
[lhc/web/wiklou.git] / resources / mediawiki.language / mediawiki.language.js
1 /**
2 * Base language object
3 *
4 * Localized Language support attempts to mirror some of the functionality of
5 * Language.php in MediaWiki. This object contains methods for loading and
6 * transforming message text.
7 */
8
9 mediaWiki.language = {
10 /**
11 * Process the PLURAL template substitution
12 *
13 * @param {object} template Template object
14 * @format template
15 * {
16 * 'title': [title of template],
17 * 'parameters': [template parameters]
18 * }
19 * @example {{Template:title|params}}
20 */
21 'procPLURAL': function( template ) {
22 if ( template.title && template.parameters && mediaWiki.language.convertPlural ) {
23 // Check if we have forms to replace
24 if ( template.parameters.length == 0 ) {
25 return '';
26 }
27 // Restore the count into a Number ( if it got converted earlier )
28 var count = mediaWiki.language.convertNumber( template.title, true );
29 // Do convertPlural call
30 return mediaWiki.language.convertPlural( parseInt( count ), template.parameters );
31 }
32 // Could not process plural return first form or nothing
33 if ( template.parameters[0] ) {
34 return template.parameters[0];
35 }
36 return '';
37 },
38 /**
39 * Plural form transformations, needed for some languages.
40 *
41 * @param count integer Non-localized quantifier
42 * @param forms array List of plural forms
43 * @return string Correct form for quantifier in this language
44 */
45 'convertPlural': function( count, forms ){
46 if ( !forms || forms.length == 0 ) {
47 return '';
48 }
49 return ( parseInt( count ) == 1 ) ? forms[0] : forms[1];
50 },
51 /**
52 * Pads an array to a specific length by copying the last one element.
53 *
54 * @param forms array Number of forms given to convertPlural
55 * @param count integer Number of forms required
56 * @return array Padded array of forms
57 */
58 'preConvertPlural': function( forms, count ) {
59 while ( forms.length < count ) {
60 forms.push( forms[ forms.length-1 ] );
61 }
62 return forms;
63 },
64 /**
65 * Converts a number using digitTransformTable.
66 *
67 * @param {number} number Value to be converted
68 * @param {boolean} integer Convert the return value to an integer
69 */
70 'convertNumber': function( number, integer ) {
71 if ( !mediaWiki.language.digitTransformTable ) {
72 return number;
73 }
74 // Set the target Transform table:
75 var transformTable = mediaWiki.language.digitTransformTable;
76 // Check if the "restore" to Latin number flag is set:
77 if ( integer ) {
78 if ( parseInt( number ) == number ) {
79 return number;
80 }
81 var tmp = [];
82 for ( var i in transformTable ) {
83 tmp[ transformTable[ i ] ] = i;
84 }
85 transformTable = tmp;
86 }
87 var numberString = '' + number;
88 var convertedNumber = '';
89 for ( var i = 0; i < numberString.length; i++ ) {
90 if ( transformTable[ numberString[i] ] ) {
91 convertedNumber += transformTable[numberString[i]];
92 } else {
93 convertedNumber += numberString[i];
94 }
95 }
96 return integer ? parseInt( convertedNumber ) : convertedNumber;
97 },
98 // Digit Transform Table, populated by language classes where applicable
99 'digitTransformTable': null
100 };