mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-29 18:58:40 +09:00
407 lines
7.7 KiB
JavaScript
407 lines
7.7 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
// This file is automatically generated with /python-lib/plural-rules-generator.py
|
|
// Fetching data from: http://unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml
|
|
|
|
// Mapping of short locale name == to == > rule index in following list
|
|
|
|
module.metadata = {
|
|
"stability": "unstable"
|
|
};
|
|
|
|
const LOCALES_TO_RULES = {
|
|
"af": 3,
|
|
"ak": 4,
|
|
"am": 4,
|
|
"ar": 1,
|
|
"asa": 3,
|
|
"az": 0,
|
|
"be": 11,
|
|
"bem": 3,
|
|
"bez": 3,
|
|
"bg": 3,
|
|
"bh": 4,
|
|
"bm": 0,
|
|
"bn": 3,
|
|
"bo": 0,
|
|
"br": 20,
|
|
"brx": 3,
|
|
"bs": 11,
|
|
"ca": 3,
|
|
"cgg": 3,
|
|
"chr": 3,
|
|
"cs": 12,
|
|
"cy": 17,
|
|
"da": 3,
|
|
"de": 3,
|
|
"dv": 3,
|
|
"dz": 0,
|
|
"ee": 3,
|
|
"el": 3,
|
|
"en": 3,
|
|
"eo": 3,
|
|
"es": 3,
|
|
"et": 3,
|
|
"eu": 3,
|
|
"fa": 0,
|
|
"ff": 5,
|
|
"fi": 3,
|
|
"fil": 4,
|
|
"fo": 3,
|
|
"fr": 5,
|
|
"fur": 3,
|
|
"fy": 3,
|
|
"ga": 8,
|
|
"gd": 24,
|
|
"gl": 3,
|
|
"gsw": 3,
|
|
"gu": 3,
|
|
"guw": 4,
|
|
"gv": 23,
|
|
"ha": 3,
|
|
"haw": 3,
|
|
"he": 2,
|
|
"hi": 4,
|
|
"hr": 11,
|
|
"hu": 0,
|
|
"id": 0,
|
|
"ig": 0,
|
|
"ii": 0,
|
|
"is": 3,
|
|
"it": 3,
|
|
"iu": 7,
|
|
"ja": 0,
|
|
"jmc": 3,
|
|
"jv": 0,
|
|
"ka": 0,
|
|
"kab": 5,
|
|
"kaj": 3,
|
|
"kcg": 3,
|
|
"kde": 0,
|
|
"kea": 0,
|
|
"kk": 3,
|
|
"kl": 3,
|
|
"km": 0,
|
|
"kn": 0,
|
|
"ko": 0,
|
|
"ksb": 3,
|
|
"ksh": 21,
|
|
"ku": 3,
|
|
"kw": 7,
|
|
"lag": 18,
|
|
"lb": 3,
|
|
"lg": 3,
|
|
"ln": 4,
|
|
"lo": 0,
|
|
"lt": 10,
|
|
"lv": 6,
|
|
"mas": 3,
|
|
"mg": 4,
|
|
"mk": 16,
|
|
"ml": 3,
|
|
"mn": 3,
|
|
"mo": 9,
|
|
"mr": 3,
|
|
"ms": 0,
|
|
"mt": 15,
|
|
"my": 0,
|
|
"nah": 3,
|
|
"naq": 7,
|
|
"nb": 3,
|
|
"nd": 3,
|
|
"ne": 3,
|
|
"nl": 3,
|
|
"nn": 3,
|
|
"no": 3,
|
|
"nr": 3,
|
|
"nso": 4,
|
|
"ny": 3,
|
|
"nyn": 3,
|
|
"om": 3,
|
|
"or": 3,
|
|
"pa": 3,
|
|
"pap": 3,
|
|
"pl": 13,
|
|
"ps": 3,
|
|
"pt": 3,
|
|
"rm": 3,
|
|
"ro": 9,
|
|
"rof": 3,
|
|
"ru": 11,
|
|
"rwk": 3,
|
|
"sah": 0,
|
|
"saq": 3,
|
|
"se": 7,
|
|
"seh": 3,
|
|
"ses": 0,
|
|
"sg": 0,
|
|
"sh": 11,
|
|
"shi": 19,
|
|
"sk": 12,
|
|
"sl": 14,
|
|
"sma": 7,
|
|
"smi": 7,
|
|
"smj": 7,
|
|
"smn": 7,
|
|
"sms": 7,
|
|
"sn": 3,
|
|
"so": 3,
|
|
"sq": 3,
|
|
"sr": 11,
|
|
"ss": 3,
|
|
"ssy": 3,
|
|
"st": 3,
|
|
"sv": 3,
|
|
"sw": 3,
|
|
"syr": 3,
|
|
"ta": 3,
|
|
"te": 3,
|
|
"teo": 3,
|
|
"th": 0,
|
|
"ti": 4,
|
|
"tig": 3,
|
|
"tk": 3,
|
|
"tl": 4,
|
|
"tn": 3,
|
|
"to": 0,
|
|
"tr": 0,
|
|
"ts": 3,
|
|
"tzm": 22,
|
|
"uk": 11,
|
|
"ur": 3,
|
|
"ve": 3,
|
|
"vi": 0,
|
|
"vun": 3,
|
|
"wa": 4,
|
|
"wae": 3,
|
|
"wo": 0,
|
|
"xh": 3,
|
|
"xog": 3,
|
|
"yo": 0,
|
|
"zh": 0,
|
|
"zu": 3
|
|
};
|
|
|
|
// Utility functions for plural rules methods
|
|
function isIn(n, list) {
|
|
return list.indexOf(n) !== -1;
|
|
}
|
|
function isBetween(n, start, end) {
|
|
return start <= n && n <= end;
|
|
}
|
|
|
|
// List of all plural rules methods, that maps an integer to the plural form name to use
|
|
const RULES = {
|
|
"0": function (n) {
|
|
|
|
return "other"
|
|
},
|
|
"1": function (n) {
|
|
if ((isBetween((n % 100), 3, 10)))
|
|
return "few";
|
|
if (n == 0)
|
|
return "zero";
|
|
if ((isBetween((n % 100), 11, 99)))
|
|
return "many";
|
|
if (n == 2)
|
|
return "two";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"2": function (n) {
|
|
if (n != 0 && (n % 10) == 0)
|
|
return "many";
|
|
if (n == 2)
|
|
return "two";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"3": function (n) {
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"4": function (n) {
|
|
if ((isBetween(n, 0, 1)))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"5": function (n) {
|
|
if ((isBetween(n, 0, 2)) && n != 2)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"6": function (n) {
|
|
if (n == 0)
|
|
return "zero";
|
|
if ((n % 10) == 1 && (n % 100) != 11)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"7": function (n) {
|
|
if (n == 2)
|
|
return "two";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"8": function (n) {
|
|
if ((isBetween(n, 3, 6)))
|
|
return "few";
|
|
if ((isBetween(n, 7, 10)))
|
|
return "many";
|
|
if (n == 2)
|
|
return "two";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"9": function (n) {
|
|
if (n == 0 || n != 1 && (isBetween((n % 100), 1, 19)))
|
|
return "few";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"10": function (n) {
|
|
if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))
|
|
return "few";
|
|
if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"11": function (n) {
|
|
if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
|
|
return "few";
|
|
if ((n % 10) == 0 || (isBetween((n % 10), 5, 9)) || (isBetween((n % 100), 11, 14)))
|
|
return "many";
|
|
if ((n % 10) == 1 && (n % 100) != 11)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"12": function (n) {
|
|
if ((isBetween(n, 2, 4)))
|
|
return "few";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"13": function (n) {
|
|
if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
|
|
return "few";
|
|
if (n != 1 && (isBetween((n % 10), 0, 1)) || (isBetween((n % 10), 5, 9)) || (isBetween((n % 100), 12, 14)))
|
|
return "many";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"14": function (n) {
|
|
if ((isBetween((n % 100), 3, 4)))
|
|
return "few";
|
|
if ((n % 100) == 2)
|
|
return "two";
|
|
if ((n % 100) == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"15": function (n) {
|
|
if (n == 0 || (isBetween((n % 100), 2, 10)))
|
|
return "few";
|
|
if ((isBetween((n % 100), 11, 19)))
|
|
return "many";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"16": function (n) {
|
|
if ((n % 10) == 1 && n != 11)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"17": function (n) {
|
|
if (n == 3)
|
|
return "few";
|
|
if (n == 0)
|
|
return "zero";
|
|
if (n == 6)
|
|
return "many";
|
|
if (n == 2)
|
|
return "two";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"18": function (n) {
|
|
if (n == 0)
|
|
return "zero";
|
|
if ((isBetween(n, 0, 2)) && n != 0 && n != 2)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"19": function (n) {
|
|
if ((isBetween(n, 2, 10)))
|
|
return "few";
|
|
if ((isBetween(n, 0, 1)))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"20": function (n) {
|
|
if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(isBetween((n % 100), 10, 19) || isBetween((n % 100), 70, 79) || isBetween((n % 100), 90, 99)))
|
|
return "few";
|
|
if ((n % 1000000) == 0 && n != 0)
|
|
return "many";
|
|
if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))
|
|
return "two";
|
|
if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"21": function (n) {
|
|
if (n == 0)
|
|
return "zero";
|
|
if (n == 1)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"22": function (n) {
|
|
if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"23": function (n) {
|
|
if ((isBetween((n % 10), 1, 2)) || (n % 20) == 0)
|
|
return "one";
|
|
return "other"
|
|
},
|
|
"24": function (n) {
|
|
if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))
|
|
return "few";
|
|
if (isIn(n, [2, 12]))
|
|
return "two";
|
|
if (isIn(n, [1, 11]))
|
|
return "one";
|
|
return "other"
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Return a function that gives the plural form name for a given integer
|
|
* for the specified `locale`
|
|
* let fun = getRulesForLocale('en');
|
|
* fun(1) -> 'one'
|
|
* fun(0) -> 'other'
|
|
* fun(1000) -> 'other'
|
|
*/
|
|
exports.getRulesForLocale = function getRulesForLocale(locale) {
|
|
let index = LOCALES_TO_RULES[locale];
|
|
if (!(index in RULES)) {
|
|
console.warn('Plural form unknown for locale "' + locale + '"');
|
|
return function () { return "other"; };
|
|
}
|
|
return RULES[index];
|
|
}
|
|
|