/* 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) list.indexOf(n) !== -1; function isBetween(n, start, end) 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]; }