fast-plural-rules
Version:
Evaluates locale-specific plural rules to identify the right plural form for a cardinal number, which represents an item count.
1 lines • 39.5 kB
Source Map (JSON)
{"version":3,"file":"index.min.mjs","sources":["../src/cardinals.js","../src/index.js"],"sourcesContent":["// See the plural rules at https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals#List_of_Plural_Rules\n// See the expressions to identify the plural form at http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html#pluralforms-list\n// and at https://hg.mozilla.org/releases/mozilla-release/file/837bbcb850cd58eb07c7f6437078d5229986967c/intl/locale/PluralForm.jsm (resource://gre/modules/PluralForm.jsm)\n\n/* eslint-disable no-confusing-arrow, no-nested-ternary */\n/* istanbul ignore file */\n\nconst cardinals = {\n rules: [\n // Plural rule #0 (1 form)\n // Families: Asian (Chinese, Japanese, Korean), Persian,\n // Turkic/Altaic (Turkish), Thai, Lao\n // Locales: ay (Aymará), bo (Tibetan), cgg (Chiga), dz (Dzongkha),\n // id (Indonesian), ja (Japanese), jbo (Lojban), ka (Georgian),\n // km (Khmer), ko (Korean), lo (Lao), ms (Malay), my (Burmese),\n // sah (Yakut), su (Sundanese), th (Thai), tt (Tatar), ug (Uyghur),\n // vi (Vietnamese), wo (Wolof), zh-CN (Simplified Chinese)\n // Forms: other\n // everything: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n // 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n // 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, ...\n () => 0,\n\n // Plural rule #1 (2 forms)\n // Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German,\n // Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian),\n // Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew),\n // Romanic (Italian, Portuguese, Spanish, Catalan), Vietnamese\n // Locales: af (Afrikaans), an (Aragonese), anp (Angika), as (Assamese),\n // ast (Asturian), az (Azerbaijani), bg (Bulgarian), bn (Bengali),\n // brx (Bodo), ca (Catalan), da (Danish), de (German), doi (Dogri),\n // el (Greek), en (English), eo (Esperanto), es (Spanish),\n // es-AR (Argentinean Spanish), et (Estonian), eu (Basque),\n // ff (Fulah), fi (Finnish), fo (Faroese), fur (Friulian),\n // fy (Frisian), gl (Galician), gu (Gujarati), ha (Hausa),\n // he (Hebrew), hi (Hindi), hne (Chhattisgarhi), hu (Hungarian),\n // hy (Armenian), ia (Interlingua), it (Italian), kk (Kazakh),\n // kl (Greenlandic), kn (Kannada), ku (Kurdish), ky (Kyrgyz),\n // lb (Letzeburgesch), mai (Maithili), ml (Malayalam), mn (Mongolian),\n // mni (Manipuri), mr (Marathi), nah (Nahuatl), nap (Neapolitan),\n // nb (Norwegian Bokmal), ne (Nepali), nl (Dutch),\n // nn (Norwegian Nynorsk), no (Norwegian), nso (Northern Sotho),\n // or (Oriya), pa (Punjabi), pap (Papiamento), pms (Piemontese),\n // ps (Pashto), pt (Portuguese), rm (Romansh), rw (Kinyarwanda),\n // sat (Santali), sco (Scots), sd (Sindhi), se (Northern Sami),\n // si (Sinhala), so (Somali), son (Songhay), sq (Albanian),\n // sv (Swedish), sw (Swahili), ta (Tamil), te (Telugu), tk (Turkmen),\n // ur (Urdu), yo (Yoruba)\n // Forms: one, other\n // is 1: 1\n // everything else: 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n // 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n // 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ...\n n => n === 1 ? 0 : 1,\n\n // Plural rule #2 (2 forms)\n // Families: Romanic (French, Brazilian Portuguese)\n // Locales: ach (Acholi), ak (Akan), am (Amharic), arn (Mapudungun),\n // br (Breton), fa (Persian), fil (Filipino), fr (French), gun (Gun),\n // ln (Lingala), mfe (Mauritian Creole), mg (Malagasy), mi (Maori),\n // oc (Occitan), pt-BR (Brazilian Portuguese), tg (Tajik), ti (Tigrinya),\n // tr (Turkish), uz (Uzbek), wa (Walloon), zh-TW (Traditional Chinese)\n // Forms: one, other\n // is 0 or 1: 0, 1\n // everything else: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n // 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n // 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ...\n n => n <= 1 ? 0 : 1,\n\n // Plural rule #3 (3 forms)\n // Families: Baltic (Latvian, Latgalian)\n // Locales: lv (Latvian)\n // Forms: zero, one, other\n // ends in 0: 0\n // ends in 1, excluding 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131,\n // 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // everything else: 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,\n // 19, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 42,\n // 43, 44, 45, 46, 47, 48, 49, 52, 53, ...\n n => n % 10 === 1 && n % 100 !== 11 ? 1 : n % 10 !== 0 ? 2 : 0,\n\n // Plural rule #4 (4 forms)\n // Families: Celtic (Scottish Gaelic)\n // Locales: gd (Scottish Gaelic)\n // Forms: one, two, few, other\n // is 1 or 11: 1, 11\n // is 2 or 12: 2, 12\n // is 3-10 or 13-19: 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19\n // everything else: 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,\n // 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n // 51, ...\n n => n === 1 || n === 11 ? 0 : n === 2 || n === 12 ? 1 : n > 2 && n < 20 ? 2 : 3,\n\n // Plural rule #5 (3 forms)\n // Families: Romanic (Romanian)\n // Locales: ro (Romanian)\n // Forms: one, few, other\n // is 1: 1\n // is 0 or ends in 01-19, excluding 1: 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n // 13, 14, 15, 16, 17, 18, 19, 101, 102, 103, 104, 105, 106, 107, 108, 109,\n // 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 201, 202, 203, 204, 205,\n // 206, 207, 208, 209, 210, 211, 212, ...\n // everything else: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n // 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n // 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ...\n n => n === 1 ? 0 : n === 0 || (n % 100 > 0 && n % 100 < 20) ? 1 : 2,\n\n // Plural rule #6 (3 forms)\n // Families: Baltic (Lithuanian)\n // Locales: lt (Lithuanian)\n // Forms: one, few, other\n // ends in 1, excluding 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131,\n // 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // ends in 0 or ends in 11-19: 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,\n // 30, 40, 50, 60, 70, 80, 90, 100, 110, 111, 112, 113, 114, 115, 116, 117,\n // 118, 119, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 211, 212, 213,\n // 214, 215, 216, 217, 218, 219, 220, ...\n // everything else: 2, 3, 4, 5, 6, 7, 8, 9, 22, 23, 24, 25, 26, 27, 28, 29,\n // 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53,\n // 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, ...\n n => n % 10 === 1 && n % 100 !== 11\n ? 0\n : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 2 : 1,\n\n // Plural rule #7 (3 forms)\n // Families: Slavic (Belarusian, Bosnian, Croatian, Serbian, Russian, Ukrainian)\n // Locales: be (Belarusian), bs (Bosnian), hr (Croatian), ru (Russian),\n // sr (Serbian), uk (Ukrainian)\n // Forms: one, few, other\n // ends in 1, excluding 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131,\n // 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // ends in 2-4, excluding 12-14: 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44,\n // 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104,\n // 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164,\n // 172, 173, 174, 182, 183, ...\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 45, 46, 47, 48, 49,\n // 50, 55, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 75, 76, 77, ..., 112,\n // 113, ..., 212, 213, ...\n n => n % 10 === 1 && n % 100 !== 11\n ? 0\n : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2,\n\n // Plural rule #8 (3 forms)\n // Families: Slavic (Slovak, Czech)\n // Locales: cs (Czech), sk (Slovak)\n // Forms: one, few, other\n // is 1: 1\n // is 2-4: 2, 3, 4\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,\n // 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ...\n n => n === 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2,\n\n // Plural rule #9 (3 forms)\n // Families: Slavic (Polish)\n // Locales: pl (Polish)\n // Forms: one, few, other\n // is 1: 1\n // ends in 2-4, excluding 12-14: 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44,\n // 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104,\n // 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164,\n // 172, 173, 174, 182, 183, ...\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 41, 45, 46,\n // 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 65, 66, 67, 68, ...\n n => n === 1\n ? 0\n : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2,\n\n // Plural rule #10 (4 forms)\n // Families: Slavic (Slovenian, Sorbian)\n // Locales: sl (Slovenian)\n // Forms: one, two, few, other\n // ends in 01: 1, 101, 201, ...\n // ends in 02: 2, 102, 202, ...\n // ends in 03-04: 3, 4, 103, 104, 203, 204, ...\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,\n // 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ...\n n => n % 100 === 1 ? 0 : n % 100 === 2 ? 1 : n % 100 === 3 || n % 100 === 4 ? 2 : 3,\n\n // Plural rule #11 (5 forms)\n // Families: Celtic (Irish Gaelic)\n // Locales: ga (Irish)\n // Forms: one, two, few, many, other\n // is 1: 1\n // is 2: 2\n // is 3-6: 3, 4, 5, 6\n // is 7-10: 7, 8, 9, 10\n // everything else: 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n // 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,\n // 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ...\n n => n === 1 ? 0 : n === 2 ? 1 : n > 2 && n < 7 ? 2 : n > 6 && n < 11 ? 3 : 4,\n\n // Plural rule #12 (6 forms)\n // Families: Semitic (Arabic)\n // Locales: ar (Arabic)\n // Forms: one, two, few, many, other, zero\n // is 1: 1\n // is 2: 2\n // ends in 03-10: 3, 4, 5, 6, 7, 8, 9, 10, 103, 104, 105, 106, 107, 108, 109,\n // 110, 203, 204, 205, 206, 207, 208, 209, 210, ...\n // everything else but is 0 and ends in 00-02, excluding 0-2: 11, 12, 13, 14,\n // 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,\n // 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n // 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, ...\n // ends in 00-02, excluding 0-2: 100, 101, 102, 200, 201, 202, ...\n // is 0: 0\n n => n === 1\n ? 0\n : n === 2\n ? 1\n : n % 100 >= 3 && n % 100 <= 10\n ? 2\n : n % 100 >= 11 ? 3 : n !== 0 ? 4 : 5,\n\n // Plural rule #13 (4 forms)\n // Families: Semitic (Maltese)\n // Locales: mt (Maltese)\n // Forms: one, few, many, other\n // is 1: 1\n // is 0 or ends in 01-10, excluding 1: 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 101,\n // 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206,\n // 207, 208, 209, 210, ...\n // ends in 11-19: 11, 12, 13, 14, 15, 16, 17, 18, 19, 111, 112, 113, 114,\n // 115, 116, 117, 118, 119, 211, 212, 213, 214, 215, 216, 217, 218, 219, ...\n // everything else: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n // 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n // 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ...\n n => n === 1\n ? 0\n : n === 0 || (n % 100 > 0 && n % 100 < 11)\n ? 1\n : n % 100 > 10 && n % 100 < 20 ? 2 : 3,\n\n // Plural rule #14 (3 forms)\n // Families: Unused\n // Forms: one, few, other\n // ends in 1: 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141,\n // 151, 161, 171, 181, 191, 201, 211, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // ends in 2: 2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102, 112, 122, 132, 142,\n // 152, 162, 172, 182, 192, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292,\n // ...\n // everything else: 0, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19,\n // 20, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 43,\n // 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 60, 63, ...\n n => n % 10 === 1 ? 0 : n % 10 === 2 ? 1 : 2,\n\n // Plural rule #15 (2 forms)\n // Families: Icelandic, Macedonian\n // Locales: is (Icelandic), mk (Macedonian)\n // Forms: one, other\n // ends in 1, excluding 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131,\n // 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // everything else: 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n // 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36,\n // 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, ...\n n => n % 10 === 1 && n % 100 !== 11 ? 0 : 1,\n\n // Plural rule #16 (5 forms)\n // Families: Celtic (Breton)\n // Forms: one, two, few, many, other\n // ends in 1, excluding 11, 71, 91: 21, 31, 41, 51, 61, 81, 101, 121, 131,\n // 141, 151, 161, 181, 201, 221, 231, 241, 251, 261, 281, ...\n // ends in 2, excluding 12, 72, 92: 2, 22, 32, 42, 52, 62, 82, 102, 122, 132,\n // 142, 152, 162, 182, 202, 222, 232, 242, 252, 262, 282, ...\n // ends in 3, 4 or 9 excluding 13, 14, 19, 73, 74, 79, 93, 94, 99: 3, 4, 9,\n // 23, 24, 29, 33, 34, 39, 43, 44, 49, 53, 54, 59, ...\n // ends in 000000: 1000000, 2000000, 3000000, 4000000, 5000000,\n // 6000000, 7000000, 8000000, 9000000, 10000000, ...\n // everything else: 0, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 25, 26, 27, 28, 30, 35, 36, 37, 38, 40, ...\n n => n % 10 === 1 && n % 100 !== 11 && n % 100 !== 71 && n % 100 !== 91\n ? 0\n : n % 10 === 2 && n % 100 !== 12 && n % 100 !== 72 && n % 100 !== 92\n ? 1\n : (n % 10 === 3 || n % 10 === 4 || n % 10 === 9) &&\n n % 100 !== 13 && n % 100 !== 73 && n % 100 !== 93 &&\n n % 100 !== 14 && n % 100 !== 74 && n % 100 !== 94 &&\n n % 100 !== 19 && n % 100 !== 79 && n % 100 !== 99\n ? 2\n : n !== 0 && n % 1000000 === 0\n ? 3\n : 4,\n\n // Plural rule #17 (2 forms)\n // Families: Ecuador indigenous languages (Shuar)\n // Locales: jv (Javanese)\n // Forms: zero, other\n // is 0: 0\n // everything else: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n // 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n // 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ...\n n => n !== 0 ? 1 : 0,\n\n // Plural rule #18 (6 forms)\n // Families: Welsh\n // Locales: cy (Welsh)\n // Forms: zero, one, two, few, many, other\n // is 0: 0\n // is 1: 1\n // is 2: 2\n // is 3: 3\n // is 6: 6\n // everything else: 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,\n // 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ...\n n => n === 1 ? 1 : n === 2 ? 2 : n === 3 ? 3 : n === 6 ? 4 : n !== 0 ? 5 : 0,\n\n // Plural rule #19 (3 forms)\n // Locales: csb (Kashubian)\n // Forms: one, few, other\n // is 1: 1\n // ends in 2-4, excluding 12-14: 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44,\n // 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104,\n // 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164,\n // 172, 173, 174, 182, 183, ...\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 41, 45, 46,\n // 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 65, 66, 67, 68, 69, 70,\n // 71, 75, 76, 77, ..., 111, 115, ..., 211, 215, ...\n n => n === 1\n ? 0\n : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2,\n\n // Plural rule #20 (4 forms)\n // Locales: kw (Cornish)\n // Forms: one, two, few, other\n // is 1: 1\n // is 2: 2\n // is 3: 3\n // everything else: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,\n // 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ...\n n => n === 1 ? 0 : n === 2 ? 1 : n === 3 ? 2 : 3,\n\n // Plural rule #21 (3 forms)\n // Locales: me (Montenegro)\n // Forms: one, few, other\n // ends in 1, excluding 11: 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131,\n // 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291,\n // ...\n // ends in 2-4, excluding 12-14: 2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44,\n // 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104,\n // 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164,\n // 172, 173, 174, 182, 183, ...\n // everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n // 20, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 45, 46, 47, 48, 49,\n // 50, 55, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 75, 76, 77, ..., 112,\n // 113, ..., 212, 213, ...\n n => n % 10 === 1 && n % 100 !== 11\n ? 0\n : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2,\n\n // Plural rule #22 (3 forms)\n // Locales: mnk (Mandinka)\n // Forms: zero, one, other\n // is 0: 0\n // is 1: 1\n // everything else: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n // 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n // 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, ...\n n => n === 0 ? 0 : n === 1 ? 1 : 2\n ],\n\n rulesByLocale: {\n ach: 2, // Acholi\n af: 1, // Afrikaans\n ak: 2, // Akan\n am: 2, // Amharic\n an: 1, // Aragonese\n anp: 1, // Angika\n ar: 12, // Arabic\n arn: 2, // Mapudungun\n as: 1, // Assamese\n ast: 1, // Asturian\n ay: 0, // Aymará\n az: 1, // Azerbaijani\n be: 7, // Belarusian\n bg: 1, // Bulgarian\n bn: 1, // Bengali\n bo: 0, // Tibetan\n br: 2, // Breton\n brx: 1, // Bodo\n bs: 7, // Bosnian\n ca: 1, // Catalan\n cgg: 0, // Chiga\n cs: 8, // Czech\n csb: 19, // Kashubian\n cy: 18, // Welsh\n da: 1, // Danish\n de: 1, // German\n doi: 1, // Dogri\n dz: 0, // Dzongkha\n el: 1, // Greek\n en: 1, // English\n eo: 1, // Esperanto\n es: 1, // Spanish\n 'es-ar': 1, // Argentinean Spanish\n et: 1, // Estonian\n eu: 1, // Basque\n fa: 2, // Persian\n ff: 1, // Fulah\n fi: 1, // Finnish\n fil: 2, // Filipino\n fo: 1, // Faroese\n fr: 2, // French\n fur: 1, // Friulian\n fy: 1, // Frisian\n ga: 11, // Irish\n gd: 4, // Scottish Gaelic\n gl: 1, // Galician\n gu: 1, // Gujarati\n gun: 2, // Gun\n ha: 1, // Hausa\n he: 1, // Hebrew\n hi: 1, // Hindi\n hne: 1, // Chhattisgarhi\n hr: 7, // Croatian\n hu: 1, // Hungarian\n hy: 1, // Armenian\n ia: 1, // Interlingua\n id: 0, // Indonesian\n is: 15, // Icelandic\n it: 1, // Italian\n ja: 0, // Japanese\n jbo: 0, // Lojban\n jv: 17, // Javanese\n ka: 0, // Georgian\n kk: 1, // Kazakh\n kl: 1, // Greenlandic\n km: 0, // Khmer\n kn: 1, // Kannada\n ko: 0, // Korean\n ku: 1, // Kurdish\n kw: 20, // Cornish\n ky: 1, // Kyrgyz\n lb: 1, // Letzeburgesch\n ln: 2, // Lingala\n lo: 0, // Lao\n lt: 6, // Lithuanian\n lv: 3, // Latvian\n mai: 1, // Maithili\n me: 21, // Montenegro\n mfe: 2, // Mauritian Creole\n mg: 2, // Malagasy\n mi: 2, // Maori\n mk: 15, // Macedonian\n ml: 1, // Malayalam\n mn: 1, // Mongolian\n mni: 1, // Manipuri\n mnk: 22, // Mandinka\n mr: 1, // Marathi\n ms: 0, // Malay\n mt: 13, // Maltese\n my: 0, // Burmese\n nah: 1, // Nahuatl\n nap: 1, // Neapolitan\n nb: 1, // Norwegian Bokmal\n ne: 1, // Nepali\n nl: 1, // Dutch\n nn: 1, // Norwegian Nynorsk\n no: 1, // Norwegian\n nso: 1, // Northern Sotho\n oc: 2, // Occitan\n or: 1, // Oriya\n pa: 1, // Punjabi\n pap: 1, // Papiamento\n pl: 9, // Polish\n pms: 1, // Piemontese\n ps: 1, // Pashto\n pt: 1, // Portuguese\n 'pt-br': 2, // Brazilian Portuguese\n rm: 1, // Romansh\n ro: 5, // Romanian\n ru: 7, // Russian\n rw: 1, // Kinyarwanda\n sah: 0, // Yakut\n sat: 1, // Santali\n sco: 1, // Scots\n sd: 1, // Sindhi\n se: 1, // Northern Sami\n si: 1, // Sinhala\n sk: 8, // Slovak\n sl: 10, // Slovenian\n so: 1, // Somali\n son: 1, // Songhay\n sq: 1, // Albanian\n sr: 7, // Serbian\n su: 0, // Sundanese\n sv: 1, // Swedish\n sw: 1, // Swahili\n ta: 1, // Tamil\n te: 1, // Telugu\n tg: 2, // Tajik\n th: 0, // Thai\n ti: 2, // Tigrinya\n tk: 1, // Turkmen\n tr: 2, // Turkish\n tt: 0, // Tatar\n ug: 0, // Uyghur\n uk: 7, // Ukrainian\n ur: 1, // Urdu\n uz: 2, // Uzbek\n vi: 0, // Vietnamese\n wa: 2, // Walloon\n wo: 0, // Wolof\n yo: 1, // Yoruba\n 'zh-cn': 0, // Simplified Chinese\n 'zh-tw': 2 // Traditional Chinese\n },\n\n formsByIndex: [\n ['other'], // 0: Asian\n ['one', 'other'], // 1: Germanic\n ['one', 'other'], // 2: Romanic (French)\n ['zero', 'one', 'other'], // 3: Baltic (Latvian, Latgalian)\n ['one', 'two', 'few', 'other'], // 4: Celtic (Scottish Gaelic)\n ['one', 'few', 'other'], // 5: Romanic (Romanian)\n ['one', 'few', 'other'], // 6: Baltic (Lithuanian)\n ['one', 'few', 'other'], // 7: Slavic (Russian)\n ['one', 'few', 'other'], // 8: Slavic (Slovak, Czech)\n ['one', 'few', 'other'], // 9: Slavic (Polish)\n ['one', 'two', 'few', 'other'], // 10: Slavic (Slovenian, Sorbian)\n ['one', 'two', 'few', 'many', 'other'], // 11: Celtic (Irish Gaelic)\n ['one', 'two', 'few', 'many', 'other', 'zero'], // 12: Semitic (Arabic)\n ['one', 'few', 'many', 'other'], // 13: Semitic (Maltese)\n ['one', 'few', 'other'], // 14: Unused\n ['one', 'other'], // 15: Icelandic, Macedonian\n ['one', 'two', 'few', 'many', 'other'], // 16: Celtic (Breton)\n ['zero', 'other'], // 17: Ecuador (Shuar)\n ['zero', 'one', 'two', 'few', 'many', 'other'], // 18: Welsh\n ['one', 'few', 'other'], // 19: csb (Kashubian)\n ['one', 'two', 'few', 'other'], // 20: kw (Cornish)\n ['one', 'few', 'other'], // 21: me (Montenegro)\n ['zero', 'one', 'other'] // 22: mnk (Mandinka)\n ]\n}\n\nexport default cardinals\n","import cardinals from './cardinals.js'\n\nconst { rules, rulesByLocale, formsByIndex } = cardinals\n\nfunction normalizeLocale (locale) {\n return locale.toLowerCase().replace('_', '-')\n}\n\nfunction getLanguage (locale) {\n const separator = locale.indexOf('-')\n return separator > 0 ? locale.substr(0, separator) : locale\n}\n\nfunction getPluralRuleIndexForCardinalsByLocale (locale) {\n locale = normalizeLocale(locale)\n let index = rulesByLocale[locale]\n if (index === undefined) {\n const language = getLanguage(locale)\n index = rulesByLocale[language]\n }\n if (index === undefined) {\n throw new Error(`Unrecognized locale: \"${locale}\".`)\n }\n return index\n}\n\nfunction adaptPluralRuleForFormName (rule, index) {\n const forms = formsByIndex[index]\n return function (count) {\n return forms[rule(count)]\n }\n}\n\nfunction getPluralRuleForCardinalsByLocale (locale) {\n const index = getPluralRuleIndexForCardinalsByLocale(locale)\n return rules[index]\n}\n\nfunction getPluralRuleForCardinalsByIndex (index) {\n const rule = rules[index]\n if (rule === undefined) {\n throw new Error(`Invalid index: \"${index}\".`)\n }\n return rule\n}\n\nfunction getPluralRuleForNamedFormsForCardinalsByLocale (locale) {\n const index = getPluralRuleIndexForCardinalsByLocale(locale)\n return adaptPluralRuleForFormName(rules[index], index)\n}\n\nfunction getPluralRuleForNamedFormsForCardinalsByIndex (index) {\n const rule = rules[index]\n if (rule === undefined) {\n throw new Error(`Invalid index: \"${index}\".`)\n }\n return adaptPluralRuleForFormName(rules[index], index)\n}\n\nfunction getPluralFormForCardinalByLocale (locale, count) {\n const rule = getPluralRuleForCardinalsByLocale(locale)\n return rule(count)\n}\n\nfunction getPluralFormForCardinalByIndex (index, count) {\n const rule = getPluralRuleForCardinalsByIndex(index)\n return rule(count)\n}\n\nfunction getPluralFormNameForCardinalByLocale (locale, count) {\n const rule = getPluralRuleForNamedFormsForCardinalsByLocale(locale)\n return rule(count)\n}\n\nfunction getPluralFormNameForCardinalByIndex (index, count) {\n const rule = getPluralRuleForNamedFormsForCardinalsByIndex(index)\n return rule(count)\n}\n\nlet supportedLocales\n\nfunction getSupportedLocales() {\n if (!supportedLocales) supportedLocales = Object.keys(rulesByLocale)\n return supportedLocales\n}\n\nfunction getPluralFormCountForLocale(locale) {\n const index = rulesByLocale[locale]\n if (index === undefined) return\n return formsByIndex[index].length\n}\n\nfunction getPluralFormNamesForLocale(locale) {\n const index = rulesByLocale[locale]\n if (index === undefined) return\n return formsByIndex[index]\n}\n\nexport {\n getPluralRuleForCardinalsByLocale, getPluralRuleForNamedFormsForCardinalsByLocale,\n getPluralFormForCardinalByLocale, getPluralFormNameForCardinalByLocale,\n getPluralRuleForCardinalsByIndex, getPluralRuleForNamedFormsForCardinalsByIndex,\n getPluralFormForCardinalByIndex, getPluralFormNameForCardinalByIndex,\n getSupportedLocales, getPluralFormCountForLocale, getPluralFormNamesForLocale\n}\n"],"names":["cardinals","rules","n","rulesByLocale","ach","af","ak","am","an","anp","ar","arn","as","ast","ay","az","be","bg","bn","bo","br","brx","bs","ca","cgg","cs","csb","cy","da","de","doi","dz","el","en","eo","es","et","eu","fa","ff","fi","fil","fo","fr","fur","fy","ga","gd","gl","gu","gun","ha","he","hi","hne","hr","hu","hy","ia","id","is","it","ja","jbo","jv","ka","kk","kl","km","kn","ko","ku","kw","ky","lb","ln","lo","lt","lv","mai","me","mfe","mg","mi","mk","ml","mn","mni","mnk","mr","ms","mt","my","nah","nap","nb","ne","nl","nn","no","nso","oc","or","pa","pap","pl","pms","ps","pt","rm","ro","ru","rw","sah","sat","sco","sd","se","si","sk","sl","so","son","sq","sr","su","sv","sw","ta","te","tg","th","ti","tk","tr","tt","ug","uk","ur","uz","vi","wa","wo","yo","formsByIndex","normalizeLocale","locale","toLowerCase","replace","getLanguage","separator","indexOf","substr","getPluralRuleIndexForCardinalsByLocale","index","undefined","language","Error","adaptPluralRuleForFormName","rule","forms","count","getPluralRuleForCardinalsByLocale","getPluralRuleForCardinalsByIndex","getPluralRuleForNamedFormsForCardinalsByLocale","getPluralRuleForNamedFormsForCardinalsByIndex","getPluralFormForCardinalByLocale","getPluralFormForCardinalByIndex","getPluralFormNameForCardinalByLocale","getPluralFormNameForCardinalByIndex","supportedLocales","getSupportedLocales","Object","keys","getPluralFormCountForLocale","length","getPluralFormNamesForLocale"],"mappings":"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"}