Source code
Revision control
Copy as Markdown
Other Tools
# 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
"Mapping of locales to CLDR plural categories as implemented by PluralForm.jsm"
CATEGORIES_BY_INDEX = (
# 0 (Chinese)
("other",),
# 1 (English)
("one", "other"),
# 2 (French)
("one", "other"),
# 3 (Latvian)
("zero", "one", "other"),
# 4 (Scottish Gaelic)
("one", "two", "few", "other"),
# 5 (Romanian)
("one", "few", "other"),
# 6 (Lithuanian)
# CLDR: one, few, many (fractions), other
("one", "other", "few"),
# 7 (Russian)
# CLDR: one, few, many, other (fractions)
("one", "few", "many"),
# 8 (Slovak)
# CLDR: one, few, many (fractions), other
("one", "few", "other"),
# 9 (Polish)
# CLDR: one, few, many, other (fractions)
("one", "few", "many"),
# 10 (Slovenian)
("one", "two", "few", "other"),
# 11 (Irish Gaelic)
("one", "two", "few", "many", "other"),
# 12 (Arabic)
# CLDR: zero, one, two, few, many, other
("one", "two", "few", "many", "other", "zero"),
# 13 (Maltese)
("one", "few", "many", "other"),
# 14 (Unused)
# CLDR: one, other
("one", "two", "other"),
# 15 (Icelandic, Macedonian)
("one", "other"),
# 16 (Breton)
("one", "two", "few", "many", "other"),
# 17 (Shuar)
# CLDR: (missing)
("zero", "other"),
# 18 (Welsh),
("zero", "one", "two", "few", "many", "other"),
# 19 (Bosnian, Croatian, Serbian)
("one", "few", "other"),
)
CATEGORIES_EXCEPTIONS = {}
CATEGORIES_BY_LOCALE = {
"ace": 0,
"ach": 1,
"af": 1,
"ak": 2,
"an": 1,
"ar": 12,
"arn": 1,
"as": 1,
"ast": 1,
"az": 1,
"be": 7,
"bg": 1,
"bn": 2,
"bo": 0,
"br": 16,
"brx": 1,
"bs": 19,
"ca": 1,
"cak": 1,
"ckb": 1,
"crh": 1,
"cs": 8,
"csb": 9,
"cv": 1,
"cy": 18,
"da": 1,
"de": 1,
"dsb": 10,
"el": 1,
"en": 1,
"eo": 1,
"es": 1,
"et": 1,
"eu": 1,
"fa": 2,
"ff": 1,
"fi": 1,
"fr": 2,
"frp": 2,
"fur": 1,
"fy": 1,
"ga": 11,
"gd": 4,
"gl": 1,
"gn": 1,
"gu": 2,
"he": 1,
"hi": 2,
"hr": 19,
"hsb": 10,
"hto": 1,
"hu": 1,
"hy": 1,
"hye": 1,
"ia": 1,
"id": 0,
"ilo": 0,
"is": 15,
"it": 1,
"ja": 0,
"jiv": 17,
"ka": 1,
"kab": 1,
"kk": 1,
"km": 0,
"kn": 1,
"ko": 0,
"ks": 1,
"ku": 1,
"lb": 1,
"lg": 1,
"lij": 1,
"lo": 0,
"lt": 6,
"ltg": 3,
"lv": 3,
"lus": 0,
"mai": 1,
"meh": 0,
"mix": 0,
"mk": 15,
"ml": 1,
"mn": 1,
"mr": 1,
"ms": 0,
"my": 0,
"nb": 1,
"ne": 1,
"nl": 1,
"nn": 1,
"nr": 1,
"nso": 2,
"ny": 1,
"oc": 2,
"or": 1,
"pa": 2,
"pai": 0,
"pl": 9,
"pt": 1,
"quy": 1,
"qvi": 1,
"rm": 1,
"ro": 5,
"ru": 7,
"rw": 1,
"sah": 0,
"sat": 1,
"sc": 1,
"scn": 1,
"sco": 1,
"si": 1,
"sk": 8,
"skr": 1,
"sl": 10,
"son": 1,
"sq": 1,
"sr": 19,
"ss": 1,
"st": 1,
"sv": 1,
"sw": 1,
"szl": 9,
"ta": 1,
"te": 1,
"tg": 1,
"th": 0,
"tl": 1,
"tn": 1,
"tr": 1,
"trs": 1,
"ts": 1,
"tsz": 1,
"uk": 7,
"ur": 1,
"uz": 1,
"ve": 1,
"vi": 0,
"wo": 0,
"xh": 1,
"zam": 1,
"zh-CN": 0,
"zh-TW": 0,
"zu": 2,
}
def get_plural(locale):
plural_form = get_plural_rule(locale)
if plural_form is None:
return None
return CATEGORIES_BY_INDEX[plural_form]
def get_plural_rule(locale):
if locale is None:
return None
if locale in CATEGORIES_BY_LOCALE:
return CATEGORIES_BY_LOCALE[locale]
locale = locale.split("-", 1)[0]
return CATEGORIES_BY_LOCALE.get(locale)