
CLDR-meervoudsregels: valideer i18n-meervoudscategorieën voor verschillende talen
Het Engels heeft 2 meervoudsvormen, het Arabisch 6 en het Russisch 4. Als je i18n-configuratie alleen 'one' en 'other' verwerkt, werkt je app in de meeste talen niet goed. In deze gids lees je hoe CLDR-meervoudsregels werken en hoe je ze valideert.
Wat zijn CLDR-meervoudsregels?
Unicode CLDR (Common Locale Data Repository) definieert zes meervoudscategorieën: zero, one, two, few, many en other. Elke taal gebruikt een deel van deze categorieën met specifieke numerieke regels. Het Engels gebruikt one (precies 1) en other (alle overige getallen). De meeste talen zijn echter ingewikkelder. Verkeerde meervoudsvormen leiden tot grammaticaal onjuiste tekst, waardoor je app onprofessioneel overkomt.
// 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.De zes meervoudscategorieën
CLDR definieert precies zes meervoudscategorieën. Niet elke taal gebruikt ze allemaal: het Engels gebruikt er slechts twee en het Arabisch alle zes. Je i18n-bestanden moeten de categorieën bevatten die voor elke doeltaal vereist zijn. Anders krijgen gebruikers crashes, onbewerkte sleutels of grammaticaal onjuiste tekst te zien.
// 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)Meervoudscategorieën per taal
Beknopt overzicht van de meervoudscategorieën die veelgebruikte doeltalen vereisen. Gebruik dit wanneer je meervoudsvormen in je vertaalbestanden definieert.
// 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 translatedGeautomatiseerde meervoudsvalidatie
i18n-validate controleert of elke meervoudssleutel in je vertaalbestanden alle CLDR-categorieën definieert die de doeltaal vereist. Als je Russische bestand alleen de vormen 'one' en 'other' bevat, markeert het hulpprogramma de ontbrekende categorieën 'few' en 'many' als fouten. Voer het uit in CI om problemen met meervoudsvormen te onderscheppen voordat gebruikers ermee te maken krijgen.
# 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 voor meervoudsvormen
De aanbevolen manier om vertalingen met meervoudsvormen te definiëren is ICU MessageFormat. Hierbij gebruik je één tekenreeks met ingesloten meervoudsregels: {count, plural, one {# item} other {# items}'}. ICU wordt ondersteund door react-intl, vue-i18n, Angular Transloco, Flutter en de meeste moderne i18n-frameworks.
// 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)Probeer i18n Agent nu
Zet je vertaalbestand hier neer
JSON, YAML, PO, XML, CSV, Markdown, Properties
of klik om een bestand te selecteren
Doeltalen