
Regole del plurale CLDR: convalidare le categorie i18n tra le lingue
L'inglese ha 2 forme plurali, l'arabo 6 e il russo 4. Se la configurazione i18n gestisce soltanto 'one' e 'other', l'app non funziona nella maggior parte delle lingue. Questa guida spiega le regole del plurale CLDR e come convalidarle.
Cosa sono le regole del plurale CLDR?
Unicode CLDR (Common Locale Data Repository) definisce sei categorie del plurale: zero, one, two, few, many e other. Ogni lingua usa un sottoinsieme di queste categorie con regole numeriche specifiche. L'inglese usa one (esattamente 1) e other (tutto il resto), ma la maggior parte delle lingue è più complessa. Forme plurali errate causano testo grammaticalmente scorretto, che rende l'app poco professionale.
// 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.Le sei categorie del plurale
CLDR definisce esattamente sei categorie del plurale. Non tutte le lingue le usano tutte: l'inglese ne usa soltanto due, l'arabo tutte e sei. I file i18n devono definire le categorie richieste da ogni lingua di destinazione; in caso contrario, gli utenti vedono arresti anomali, chiavi non elaborate o testo grammaticalmente errato.
// 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)Categorie del plurale per lingua
Riferimento rapido delle categorie del plurale richieste dalle lingue di destinazione più comuni. Lo usi quando definisce le forme plurali nei file di traduzione.
// 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 translatedConvalida automatizzata dei plurali
i18n-validate controlla che ogni chiave plurale nei file di traduzione definisca tutte le categorie CLDR richieste dalla lingua di destinazione. Se il file russo contiene soltanto le forme 'one' e 'other', lo strumento segnala come errori le categorie 'few' e 'many' mancanti. Lo esegua nella CI per rilevare i problemi prima che raggiungano gli utenti.
# 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 per i plurali
Il modo consigliato per definire le traduzioni plurali è ICU MessageFormat. Usa un'unica stringa con regole del plurale incorporate: {count, plural, one {# item} other {# items}'}. ICU è supportato da react-intl, vue-i18n, Angular Transloco, Flutter e dalla maggior parte dei framework i18n moderni.
// 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)Provi subito i18n Agent
Trascinare qui il file di traduzione
JSON, YAML, PO, XML, CSV, Markdown, Properties
oppure fare clic per selezionarlo
Lingue di destinazione