
CLDR-Pluralregeln: i18n-Pluralkategorien sprachübergreifend validieren
Englisch hat zwei Pluralformen, Arabisch sechs und Russisch vier. Wenn Ihre i18n-Einrichtung nur one und other verarbeitet, funktioniert Ihre App in den meisten Sprachen nicht korrekt. Dieser Leitfaden erklärt CLDR-Pluralregeln und ihre Validierung.
Was sind CLDR-Pluralregeln?
Unicode CLDR (Common Locale Data Repository) definiert sechs Pluralkategorien: zero, one, two, few, many und other. Jede Sprache verwendet eine Teilmenge dieser Kategorien mit bestimmten Zahlenregeln. Englisch verwendet one (genau 1) und other (alles andere). Die meisten Sprachen sind jedoch komplexer – falsche Pluralformen ergeben grammatikalisch fehlerhaften Text und lassen Ihre App unprofessionell wirken.
// 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.Die sechs Pluralkategorien
CLDR definiert genau sechs Pluralkategorien. Nicht jede Sprache verwendet alle sechs – Englisch nutzt nur zwei, Arabisch alle sechs. Ihre i18n-Dateien müssen die von jeder Zielsprache benötigten Kategorien definieren, sonst sehen Personen Abstürze, unverarbeitete Schlüssel oder grammatikalisch falschen Text.
// 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)Pluralkategorien nach Sprache
Schnellreferenz der von häufigen Zielsprachen benötigten Pluralkategorien. Verwenden Sie sie zur Definition von Pluralformen in Ihren Übersetzungsdateien.
// 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 translatedAutomatisierte Pluralvalidierung
i18n-validate prüft, ob jeder Pluralschlüssel in Ihren Übersetzungsdateien sämtliche von der Zielsprache benötigten CLDR-Kategorien definiert. Enthält Ihre russische Datei nur one und other, kennzeichnet das Werkzeug die fehlenden Kategorien few und many als Fehler. Führen Sie es in CI aus, um Pluralprobleme vor Ihren Benutzerinnen und Benutzern zu erkennen.
# 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 für Pluralformen
Die empfohlene Definition von Pluralübersetzungen ist ICU MessageFormat. Es verwendet eine einzelne Zeichenfolge mit eingebetteten Pluralregeln: {count, plural, one {# item} other {# items}'}. ICU wird von react-intl, vue-i18n, Angular Transloco, Flutter und den meisten modernen i18n-Frameworks unterstützt.
// 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)i18n Agent jetzt testen
Legen Sie Ihre Übersetzungsdatei hier ab
JSON, YAML, PO, XML, CSV, Markdown, Properties
oder zum Auswählen klicken
Zielsprachen