Skip to main content

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.

1

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

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.
Categoria „other” este obligatorie pentru fiecare limbă. Aceasta este varianta de rezervă atunci când nu se potrivește nicio altă categorie. Dacă definiți numai „one” și „other”, configurația este corectă pentru engleză, dar greșită pentru peste 60% dintre limbile lumii.
2

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

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.

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

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

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 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 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)
Simbolul # din ICU MessageFormat este înlocuit cu numărul formatat. Utilizați # în loc să introduceți direct numele variabilei în formele de plural. De exemplu, scrieți '# item / # items' în loc să repetați explicit variabila numerică.

Î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ă

Nu este necesară înregistrareaEstimare instantanee

Întrebări frecvente despre regulile de plural CLDR