Skip to main content

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.

1

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.

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.
Die Kategorie other ist für jede Sprache erforderlich. Sie dient als Fallback, wenn keine andere Kategorie zutrifft. Wenn Sie nur one und other definieren, funktioniert Englisch, aber mehr als 60 % der Sprachen weltweit werden falsch dargestellt.
2

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

Pluralkategorien nach Sprache

Schnellreferenz der von häufigen Zielsprachen benötigten Pluralkategorien. Verwenden Sie sie zur Definition von Pluralformen in Ihren Übersetzungsdateien.

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

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

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 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 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)
Das Symbol # in ICU MessageFormat wird durch die formatierte Anzahl ersetzt. Verwenden Sie #, statt den Variablennamen in Ihren Pluralformen fest zu codieren. Schreiben Sie beispielsweise „# item / # items“, statt die count-Variable ausdrücklich zu wiederholen.

i18n Agent jetzt testen

Legen Sie Ihre Übersetzungsdatei hier ab

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

oder zum Auswählen klicken

Zielsprachen

Keine Registrierung erforderlichSofortiges Angebot

Häufig gestellte Fragen zu CLDR-Pluralregeln