gridtracker/package.nw/lib/jquery.i18n.language.js

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));