Skip to main content

Règles de pluriel CLDR : validez les catégories de pluriel i18n dans toutes les langues

L'anglais compte 2 formes de pluriel. L'arabe en compte 6. Le russe en compte 4. Si votre configuration i18n ne gère que « one » et « other », votre application est cassée dans la plupart des langues. Ce guide explique les règles de pluriel CLDR et comment les valider.

1

Que sont les règles de pluriel CLDR ?

Le CLDR (Common Locale Data Repository) d'Unicode définit six catégories de pluriel : zero, one, two, few, many et other. Chaque langue utilise un sous-ensemble de ces catégories avec des règles numériques spécifiques. L'anglais utilise one (exactement 1) et other (tout le reste). Mais la plupart des langues sont plus complexes — et se tromper dans les formes de pluriel produit un texte grammaticalement incorrect qui donne à votre application un air amateur.

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.
La catégorie « other » est obligatoire pour toutes les langues. C'est la catégorie de repli utilisée quand aucune autre ne correspond. Si vous ne définissez que « one » et « other », vous êtes en sécurité en anglais mais votre application est cassée dans plus de 60 % des langues du monde.
2

Les six catégories de pluriel

Le CLDR définit exactement six catégories de pluriel. Toutes les langues ne les utilisent pas toutes — l'anglais n'en utilise que deux, l'arabe les utilise toutes les six. Vos fichiers i18n doivent définir les catégories requises par chaque langue cible, sous peine de plantages, de clés brutes affichées ou de texte grammaticalement incorrect pour les utilisateurs.

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

Catégories de pluriel par langue

Référence rapide des catégories de pluriel requises par les langues cibles courantes. Utilisez-la lors de la définition des formes de pluriel dans vos fichiers de traduction.

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

Validation automatisée des pluriels

i18n-validate vérifie que chaque clé de pluriel de vos fichiers de traduction définit toutes les catégories CLDR requises par la langue cible. Si votre fichier russe ne contient que les formes « one » et « other », l'outil signale en erreur les catégories manquantes « few » et « many ». Exécutez-le en intégration continue pour détecter les problèmes de pluriel avant qu'ils n'atteignent les utilisateurs.

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 pour les pluriels

La méthode recommandée pour définir des traductions avec pluriel est ICU MessageFormat. Il utilise une seule chaîne avec des règles de pluriel intégrées : {count, plural, one {# item} other {# items}'}. ICU est pris en charge par react-intl, vue-i18n, Angular Transloco, Flutter et la plupart des frameworks i18n modernes.

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)
Le symbole # dans ICU MessageFormat est remplacé par le nombre formaté. Utilisez # plutôt que de coder en dur le nom de la variable dans vos formes de pluriel. Par exemple, écrivez « # item / # items » plutôt que de répéter explicitement la variable de comptage.

Essayez i18n Agent maintenant

Déposez votre fichier de traduction ici

JSON, YAML, PO, XML, CSV, Markdown, Properties

ou cliquez pour parcourir

Langues cibles

Aucune inscription requiseEstimation instantanée

FAQ sur les règles de pluriel CLDR