
Regulile de plural CLDR: validați categoriile de plural i18n în toate limbile
Engleza are 2 forme de plural. Araba are 6. Rusa are 4. Dacă configurația dumneavoastră i18n gestionează numai „one” și „other”, aplicația nu funcționează corect în majoritatea limbilor. Acest ghid explică regulile de plural CLDR și modul în care le puteți valida.
Ce sunt regulile de plural CLDR?
Unicode CLDR (Common Locale Data Repository) definește șase categorii de plural: zero, one, two, few, many și other. Fiecare limbă utilizează un subset al acestor categorii, cu reguli numerice specifice. Engleza utilizează one (exact 1) și other (toate celelalte valori). Majoritatea limbilor sunt însă mai complexe, iar utilizarea greșită a formelor de plural produce texte incorecte gramatical, care fac aplicația să pară neprofesionistă.
// 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.Cele șase categorii de plural
CLDR definește exact șase categorii de plural. Nu toate limbile le utilizează pe toate: engleza folosește numai două, iar araba le folosește pe toate șase. Fișierele dumneavoastră i18n trebuie să definească toate categoriile necesare fiecărei limbi-țintă; în caz contrar, utilizatorii se pot confrunta cu blocări, chei afișate ca atare sau texte incorecte gramatical.
// 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)Categoriile de plural în funcție de limbă
Referință rapidă pentru categoriile de plural necesare limbilor-țintă uzuale. Consultați-o atunci când definiți formele de plural în fișierele de traducere.
// 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 translatedValidarea automată a pluralului
i18n-validate verifică dacă fiecare cheie cu forme de plural din fișierele dumneavoastră de traducere definește toate categoriile CLDR necesare limbii-țintă. Dacă fișierul în limba rusă conține numai formele „one” și „other”, instrumentul semnalează drept erori categoriile „few” și „many” care lipsesc. Executați-l în CI pentru a identifica problemele de plural înainte ca acestea să ajungă la utilizatori.
# 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 pentru formele de plural
Modul recomandat de definire a traducerilor cu forme de plural este ICU MessageFormat. Acesta utilizează un singur șir cu reguli de plural încorporate: {count, plural, one {# item} other {# items}'}. ICU este compatibil cu react-intl, vue-i18n, Angular Transloco, Flutter și majoritatea cadrelor moderne de i18n.
// 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)Încercați acum i18n Agent
Plasați aici fișierul de traducere
JSON, YAML, PO, XML, CSV, Markdown, Properties
sau faceți clic pentru a-l selecta
Limbi țintă