Skip to main content

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.

1

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.

The plural problem
// 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.
Kinakailangan ang kategoryang 'other' para sa bawat wika. Ito ang fallback kapag walang ibang kategoryang tumutugma. Kung 'one' at 'other' lang ang idinedeklara ninyo, ligtas ito sa English pero sira sa mahigit 60% ng mga wika sa mundo.
2

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 plural categories
// 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)
3

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.

Common mistakes
// 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 translated
4

Awtomatikong 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.

Terminal
# 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.html
5

ICU 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 plural messages
// 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}}"
}
Terminal
# 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)
Sa ICU MessageFormat, pinapalitan ang simbolong # ng na-format na count. Gumamit ng # sa halip na i-hardcode ang pangalan ng variable sa inyong plural forms. Halimbawa, isulat ang '# item / # items' sa halip na ulit-ulitin ang count variable nang tahasan.

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

Hindi kailangan ang signupInstant na estimate

FAQ sa CLDR Plural Rules