
CLDR Plural Rules: I-validate ang mga Kategorya ng Maramihan sa i18n sa Iba’t Ibang Wika
May 2 anyo ng maramihan ang English. May 6 ang Arabic. May 4 ang Russian. Kung ang i18n setup ninyo ay humahawak lang ng 'one' at 'other', sira ang app ninyo sa karamihan ng mga wika. Ipinapaliwanag ng gabay na ito ang mga patakaran ng CLDR sa maramihan at kung paano i-validate ang mga ito.
Ano ang CLDR Plural Rules?
Itinatakda ng Unicode CLDR (Common Locale Data Repository) ang anim na kategorya ng maramihan: zero, one, two, few, many, at other. Bawat wika ay gumagamit ng subset ng mga kategoryang ito na may partikular na mga patakarang numeriko. Gumagamit ang English ng one (eksaktong 1) at other (lahat ng iba). Ngunit mas kumplikado ang karamihan ng mga wika—at kapag mali ang plural forms, nagreresulta ito sa tekstong mali ang gramatika at nagpapamukhang hindi propesyonal ang app ninyo.
// English has 2 plural forms: one, other
// "1 item" vs "2 items"
// But many languages have more:
// Arabic: 6 forms (zero, one, two, few, many, other)
// Polish: 3 forms (one, few, other)
// Japanese: 1 form (other)
// Czech: 3 forms (one, few, other)
// If you only provide "one" and "other",
// Arabic and Polish users see broken text.Ang Anim na Kategorya ng Maramihan
Eksaktong anim na kategorya ng maramihan ang itinatakda ng CLDR. Hindi lahat ng wika ay gumagamit ng lahat ng anim—dalawa lang ang gamit ng English, habang lahat ng anim ay gamit ng Arabic. Dapat ideklara ng mga i18n file ninyo ang mga kategoryang kailangan ng bawat target na wika; kung hindi, makakakita ang mga user ng mga crash, raw keys, o tekstong mali ang gramatika.
// CLDR defines 6 plural categories:
// zero - 0 items (Arabic, Latvian)
// one - 1 item (most languages)
// two - 2 items (Arabic, Welsh)
// few - 2-4 items (Polish, Czech, Russian)
// many - 5-19 items (Arabic, Polish, Russian)
// other - everything else (required for ALL languages)
// Examples by language:
// English: one, other (2 forms)
// French: one, many, other (3 forms)
// Arabic: zero, one, two, few, many, other (6 forms)
// Japanese: other (1 form)
// Polish: one, few, many, other (4 forms)
// Russian: one, few, many, other (4 forms)Mga Kategorya ng Maramihan ayon sa Wika
Mabilisang sanggunian para sa mga kategorya ng maramihan na kailangan ng mga karaniwang target na wika. Gamitin ito kapag nagdedeklara kayo ng plural forms sa inyong mga translation file.
// MISTAKE 1: Only providing "one" and "other"
// en.json
{
"items_one": "{{count}} item",
"items_other": "{{count}} items"
}
// This breaks for Arabic (missing zero, two, few, many)
// MISTAKE 2: Hardcoded plural logic
// WRONG:
const text = count === 1 ? "1 item" : `${count} items`
// This fails for languages where "1" isn't the only "one" form
// MISTAKE 3: Missing "other" category
// "other" is REQUIRED for every language
// Without it, some numbers show raw keys
// MISTAKE 4: Translating plural RULES instead of text
// The CLDR rules (one, few, many) are universal
// Only the TEXT after each rule should be translatedAwtomatikong Pag-validate ng Maramihan
Sinusuri ng i18n-validate na ang bawat plural key sa inyong mga translation file ay nagdedeklara ng lahat ng CLDR category na kailangan ng target na wika. Kung ang Russian file ninyo ay may 'one' at 'other' lang, ifa-flag ng tool bilang error ang nawawalang 'few' at 'many' category. Patakbuhin ito sa CI para mahuli ang mga isyu sa maramihan bago ito makarating sa mga user.
# Validate plural forms match CLDR requirements
npx i18n-validate --check-plurals \
--source locales/en.json \
--targets 'locales/*.json'
# Output:
# locales/ar.json:
# items: missing plural forms: zero, two, few, many
# Expected: zero, one, two, few, many, other
# Found: one, other
#
# locales/pl.json:
# items: missing plural forms: few, many
# Expected: one, few, many, other
# Found: one, other
# Fix: Add all required forms for each language
# See https://unicode.org/cldr/charts/latest/supplemental/language_plural_rules.htmlICU MessageFormat para sa Maramihan
Ang inirerekomendang paraan para magdeklara ng mga plural translation ay ICU MessageFormat. Gumagamit ito ng iisang string na may nakabaong plural rules: {count, plural, one {# item} other {# items}'}. Sinusuportahan ang ICU ng react-intl, vue-i18n, Angular Transloco, Flutter, at karamihan ng mga modernong i18n framework.
// ICU MessageFormat handles plurals correctly
// It uses CLDR rules internally
// en.json
{
"items": "{count, plural, one {# item} other {# items}}"
}
// ar.json
{
"items": "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}"
}
// pl.json
{
"items": "{count, plural, one {# element} few {# elementy} many {# elementów} other {# elementu}}"
}
// ICU also handles ordinals:
{
"ranking": "{pos, selectordinal, one {#st} two {#nd} few {#rd} other {#th}}"
}# Validate ICU message syntax
npx i18n-validate --check-icu \
--source locales/en.json \
--targets 'locales/*.json'
# Catches:
# - Missing plural categories for the target language
# - Syntax errors in ICU messages
# - Mismatched variable names
# - Missing "other" (always required)Subukan ang i18n Agent Ngayon
I-drop dito ang inyong translation file
JSON, YAML, PO, XML, CSV, Markdown, Properties
o i-click para mag-browse
Mga target language