kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
531 wiersze
13 KiB
JavaScript
531 wiersze
13 KiB
JavaScript
/* eslint-disable no-tabs */
|
|
/* global pluralRuleParser */
|
|
(function ($)
|
|
{
|
|
"use strict";
|
|
|
|
// jscs:disable
|
|
var language = {
|
|
// CLDR plural rules generated using
|
|
// libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html
|
|
pluralRules: {
|
|
ak: {
|
|
one: "n = 0..1"
|
|
},
|
|
am: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
ar: {
|
|
zero: "n = 0",
|
|
one: "n = 1",
|
|
two: "n = 2",
|
|
few: "n % 100 = 3..10",
|
|
many: "n % 100 = 11..99"
|
|
},
|
|
ars: {
|
|
zero: "n = 0",
|
|
one: "n = 1",
|
|
two: "n = 2",
|
|
few: "n % 100 = 3..10",
|
|
many: "n % 100 = 11..99"
|
|
},
|
|
as: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
be: {
|
|
one: "n % 10 = 1 and n % 100 != 11",
|
|
few: "n % 10 = 2..4 and n % 100 != 12..14",
|
|
many: "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14"
|
|
},
|
|
bh: {
|
|
one: "n = 0..1"
|
|
},
|
|
bn: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
br: {
|
|
one: "n % 10 = 1 and n % 100 != 11,71,91",
|
|
two: "n % 10 = 2 and n % 100 != 12,72,92",
|
|
few: "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99",
|
|
many: "n != 0 and n % 1000000 = 0"
|
|
},
|
|
bs: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"
|
|
},
|
|
cs: {
|
|
one: "i = 1 and v = 0",
|
|
few: "i = 2..4 and v = 0",
|
|
many: "v != 0"
|
|
},
|
|
cy: {
|
|
zero: "n = 0",
|
|
one: "n = 1",
|
|
two: "n = 2",
|
|
few: "n = 3",
|
|
many: "n = 6"
|
|
},
|
|
da: {
|
|
one: "n = 1 or t != 0 and i = 0,1"
|
|
},
|
|
dsb: {
|
|
one: "v = 0 and i % 100 = 1 or f % 100 = 1",
|
|
two: "v = 0 and i % 100 = 2 or f % 100 = 2",
|
|
few: "v = 0 and i % 100 = 3..4 or f % 100 = 3..4"
|
|
},
|
|
fa: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
ff: {
|
|
one: "i = 0,1"
|
|
},
|
|
fil: {
|
|
one: "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"
|
|
},
|
|
fr: {
|
|
one: "i = 0,1"
|
|
},
|
|
ga: {
|
|
one: "n = 1",
|
|
two: "n = 2",
|
|
few: "n = 3..6",
|
|
many: "n = 7..10"
|
|
},
|
|
gd: {
|
|
one: "n = 1,11",
|
|
two: "n = 2,12",
|
|
few: "n = 3..10,13..19"
|
|
},
|
|
gu: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
guw: {
|
|
one: "n = 0..1"
|
|
},
|
|
gv: {
|
|
one: "v = 0 and i % 10 = 1",
|
|
two: "v = 0 and i % 10 = 2",
|
|
few: "v = 0 and i % 100 = 0,20,40,60,80",
|
|
many: "v != 0"
|
|
},
|
|
he: {
|
|
one: "i = 1 and v = 0",
|
|
two: "i = 2 and v = 0",
|
|
many: "v = 0 and n != 0..10 and n % 10 = 0"
|
|
},
|
|
hi: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
hr: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"
|
|
},
|
|
hsb: {
|
|
one: "v = 0 and i % 100 = 1 or f % 100 = 1",
|
|
two: "v = 0 and i % 100 = 2 or f % 100 = 2",
|
|
few: "v = 0 and i % 100 = 3..4 or f % 100 = 3..4"
|
|
},
|
|
hy: {
|
|
one: "i = 0,1"
|
|
},
|
|
is: {
|
|
one: "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0"
|
|
},
|
|
iu: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
iw: {
|
|
one: "i = 1 and v = 0",
|
|
two: "i = 2 and v = 0",
|
|
many: "v = 0 and n != 0..10 and n % 10 = 0"
|
|
},
|
|
kab: {
|
|
one: "i = 0,1"
|
|
},
|
|
kn: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
kw: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
lag: {
|
|
zero: "n = 0",
|
|
one: "i = 0,1 and n != 0"
|
|
},
|
|
ln: {
|
|
one: "n = 0..1"
|
|
},
|
|
lt: {
|
|
one: "n % 10 = 1 and n % 100 != 11..19",
|
|
few: "n % 10 = 2..9 and n % 100 != 11..19",
|
|
many: "f != 0"
|
|
},
|
|
lv: {
|
|
zero: "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",
|
|
one: "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"
|
|
},
|
|
mg: {
|
|
one: "n = 0..1"
|
|
},
|
|
mk: {
|
|
one: "v = 0 and i % 10 = 1 or f % 10 = 1"
|
|
},
|
|
mo: {
|
|
one: "i = 1 and v = 0",
|
|
few: "v != 0 or n = 0 or n != 1 and n % 100 = 1..19"
|
|
},
|
|
mr: {
|
|
one: "i = 0 or n = 1"
|
|
},
|
|
mt: {
|
|
one: "n = 1",
|
|
few: "n = 0 or n % 100 = 2..10",
|
|
many: "n % 100 = 11..19"
|
|
},
|
|
naq: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
nso: {
|
|
one: "n = 0..1"
|
|
},
|
|
pa: {
|
|
one: "n = 0..1"
|
|
},
|
|
pl: {
|
|
one: "i = 1 and v = 0",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14",
|
|
many: "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14"
|
|
},
|
|
prg: {
|
|
zero: "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19",
|
|
one: "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1"
|
|
},
|
|
pt: {
|
|
one: "i = 0..1"
|
|
},
|
|
ro: {
|
|
one: "i = 1 and v = 0",
|
|
few: "v != 0 or n = 0 or n != 1 and n % 100 = 1..19"
|
|
},
|
|
ru: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14",
|
|
many: "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"
|
|
},
|
|
se: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
sh: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"
|
|
},
|
|
shi: {
|
|
one: "i = 0 or n = 1",
|
|
few: "n = 2..10"
|
|
},
|
|
si: {
|
|
one: "n = 0,1 or i = 0 and f = 1"
|
|
},
|
|
sk: {
|
|
one: "i = 1 and v = 0",
|
|
few: "i = 2..4 and v = 0",
|
|
many: "v != 0"
|
|
},
|
|
sl: {
|
|
one: "v = 0 and i % 100 = 1",
|
|
two: "v = 0 and i % 100 = 2",
|
|
few: "v = 0 and i % 100 = 3..4 or v != 0"
|
|
},
|
|
sma: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
smi: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
smj: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
smn: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
sms: {
|
|
one: "n = 1",
|
|
two: "n = 2"
|
|
},
|
|
sr: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14"
|
|
},
|
|
ti: {
|
|
one: "n = 0..1"
|
|
},
|
|
tl: {
|
|
one: "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9"
|
|
},
|
|
tzm: {
|
|
one: "n = 0..1 or n = 11..99"
|
|
},
|
|
uk: {
|
|
one: "v = 0 and i % 10 = 1 and i % 100 != 11",
|
|
few: "v = 0 and i % 10 = 2..4 and i % 100 != 12..14",
|
|
many: "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14"
|
|
},
|
|
wa: {
|
|
one: "n = 0..1"
|
|
},
|
|
zu: {
|
|
one: "i = 0 or n = 1"
|
|
}
|
|
},
|
|
// jscs:enable
|
|
|
|
/**
|
|
* Plural form transformations, needed for some languages.
|
|
*
|
|
* @param {integer} count
|
|
* Non-localized quantifier
|
|
* @param {Array} forms
|
|
* List of plural forms
|
|
* @return {string} Correct form for quantifier in this language
|
|
*/
|
|
convertPlural: function (count, forms)
|
|
{
|
|
var pluralRules,
|
|
pluralFormIndex,
|
|
index,
|
|
explicitPluralPattern = /\d+=/i,
|
|
formCount,
|
|
form;
|
|
|
|
if (!forms || forms.length === 0)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
// Handle for Explicit 0= & 1= values
|
|
for (index = 0; index < forms.length; index++)
|
|
{
|
|
form = forms[index];
|
|
if (explicitPluralPattern.test(form))
|
|
{
|
|
formCount = parseInt(form.slice(0, form.indexOf("=")), 10);
|
|
if (formCount === count)
|
|
{
|
|
return (form.slice(form.indexOf("=") + 1));
|
|
}
|
|
forms[index] = undefined;
|
|
}
|
|
}
|
|
|
|
forms = $.map(forms, function (form)
|
|
{
|
|
if (form !== undefined)
|
|
{
|
|
return form;
|
|
}
|
|
});
|
|
|
|
pluralRules = this.pluralRules[$.i18n().locale];
|
|
|
|
if (!pluralRules)
|
|
{
|
|
// default fallback.
|
|
return (count === 1) ? forms[0] : forms[1];
|
|
}
|
|
|
|
pluralFormIndex = this.getPluralForm(count, pluralRules);
|
|
pluralFormIndex = Math.min(pluralFormIndex, forms.length - 1);
|
|
|
|
return forms[pluralFormIndex];
|
|
},
|
|
|
|
/**
|
|
* For the number, get the plural for index
|
|
*
|
|
* @param {integer} number
|
|
* @param {Object} pluralRules
|
|
* @return {integer} plural form index
|
|
*/
|
|
getPluralForm: function (number, pluralRules)
|
|
{
|
|
var i,
|
|
pluralForms = ["zero", "one", "two", "few", "many", "other"],
|
|
pluralFormIndex = 0;
|
|
|
|
for (i = 0; i < pluralForms.length; i++)
|
|
{
|
|
if (pluralRules[pluralForms[i]])
|
|
{
|
|
if (pluralRuleParser(pluralRules[pluralForms[i]], number))
|
|
{
|
|
return pluralFormIndex;
|
|
}
|
|
|
|
pluralFormIndex++;
|
|
}
|
|
}
|
|
|
|
return pluralFormIndex;
|
|
},
|
|
|
|
/**
|
|
* Converts a number using digitTransformTable.
|
|
*
|
|
* @param {number} num Value to be converted
|
|
* @param {boolean} integer Convert the return value to an integer
|
|
* @return {string} The number converted into a String.
|
|
*/
|
|
convertNumber: function (num, integer)
|
|
{
|
|
var tmp, item, i,
|
|
transformTable, numberString, convertedNumber;
|
|
|
|
// Set the target Transform table:
|
|
transformTable = this.digitTransformTable($.i18n().locale);
|
|
numberString = String(num);
|
|
convertedNumber = "";
|
|
|
|
if (!transformTable)
|
|
{
|
|
return num;
|
|
}
|
|
|
|
// Check if the restore to Latin number flag is set:
|
|
if (integer)
|
|
{
|
|
if (parseFloat(num, 10) === num)
|
|
{
|
|
return num;
|
|
}
|
|
|
|
tmp = [];
|
|
|
|
for (item in transformTable)
|
|
{
|
|
tmp[transformTable[item]] = item;
|
|
}
|
|
|
|
transformTable = tmp;
|
|
}
|
|
|
|
for (i = 0; i < numberString.length; i++)
|
|
{
|
|
if (transformTable[numberString[i]])
|
|
{
|
|
convertedNumber += transformTable[numberString[i]];
|
|
}
|
|
else
|
|
{
|
|
convertedNumber += numberString[i];
|
|
}
|
|
}
|
|
|
|
return integer ? parseFloat(convertedNumber, 10) : convertedNumber;
|
|
},
|
|
|
|
/**
|
|
* Grammatical transformations, needed for inflected languages.
|
|
* Invoked by putting {{grammar:form|word}} in a message.
|
|
* Override this method for languages that need special grammar rules
|
|
* applied dynamically.
|
|
*
|
|
* @param {string} word
|
|
* @param {string} form
|
|
* @return {string}
|
|
*/
|
|
// eslint-disable-next-line no-unused-vars
|
|
convertGrammar: function (word, form)
|
|
{
|
|
return word;
|
|
},
|
|
|
|
/**
|
|
* Provides an alternative text depending on specified gender. Usage
|
|
* {{gender:[gender|user object]|masculine|feminine|neutral}}. If second
|
|
* or third parameter are not specified, masculine is used.
|
|
*
|
|
* These details may be overriden per language.
|
|
*
|
|
* @param {string} gender
|
|
* male, female, or anything else for neutral.
|
|
* @param {Array} forms
|
|
* List of gender forms
|
|
*
|
|
* @return {string}
|
|
*/
|
|
gender: function (gender, forms)
|
|
{
|
|
if (!forms || forms.length === 0)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
while (forms.length < 2)
|
|
{
|
|
forms.push(forms[forms.length - 1]);
|
|
}
|
|
|
|
if (gender === "male")
|
|
{
|
|
return forms[0];
|
|
}
|
|
|
|
if (gender === "female")
|
|
{
|
|
return forms[1];
|
|
}
|
|
|
|
return (forms.length === 3) ? forms[2] : forms[0];
|
|
},
|
|
|
|
/**
|
|
* Get the digit transform table for the given language
|
|
* See http://cldr.unicode.org/translation/numbering-systems
|
|
*
|
|
* @param {string} language
|
|
* @return {Array|boolean} List of digits in the passed language or false
|
|
* representation, or boolean false if there is no information.
|
|
*/
|
|
digitTransformTable: function (language)
|
|
{
|
|
var tables = {
|
|
ar: "٠١٢٣٤٥٦٧٨٩",
|
|
fa: "۰۱۲۳۴۵۶۷۸۹",
|
|
ml: "൦൧൨൩൪൫൬൭൮൯",
|
|
kn: "೦೧೨೩೪೫೬೭೮೯",
|
|
lo: "໐໑໒໓໔໕໖໗໘໙",
|
|
or: "୦୧୨୩୪୫୬୭୮୯",
|
|
kh: "០១២៣៤៥៦៧៨៩",
|
|
nqo: "߀߁߂߃߄߅߆߇߈߉", // Note that the digits go right to left
|
|
pa: "੦੧੨੩੪੫੬੭੮੯",
|
|
gu: "૦૧૨૩૪૫૬૭૮૯",
|
|
hi: "०१२३४५६७८९",
|
|
my: "၀၁၂၃၄၅၆၇၈၉",
|
|
ta: "௦௧௨௩௪௫௬௭௮௯",
|
|
te: "౦౧౨౩౪౫౬౭౮౯",
|
|
th: "๐๑๒๓๔๕๖๗๘๙", // FIXME use iso 639 codes
|
|
bo: "༠༡༢༣༤༥༦༧༨༩" // FIXME use iso 639 codes
|
|
};
|
|
|
|
if (!tables[language])
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return tables[language].split("");
|
|
}
|
|
};
|
|
|
|
$.extend($.i18n.languages, {
|
|
default: language
|
|
});
|
|
}(jQuery));
|