Warum sich Pluralformen von Sprache zu Sprache unterscheiden
Die Kategorien zero, one, two, few, many und other folgen den CLDR-Regeln jeder Sprache. Im Englischen und Deutschen bedeutet one nur 1; im Französischen umfasst es 0 und 1; Russisch und Polnisch ergänzen few und many; Arabisch nutzt alle sechs; Japanisch hat nur eine, other. Eine für Englisch geschriebene Nachricht mit zwei Zweigen ist also unvollständig, sobald Sie sie übersetzen.
Das Tool liest diese Regeln in Ihrem Browser (Intl.PluralRules): Die angezeigten Kategorien und Beispielzahlen sind die der jeweiligen Sprache, ohne Tabelle, die gepflegt werden müsste.
Die =1-Falle mit gen-l10n
Ein Zweig =1 wird in dem Code, den flutter gen-l10n erzeugt, zur Kategorie one. Im Französischen gilt diese Kategorie auch für null: Mit count = 0 würde „1 article restant“ (1 Artikel übrig) angezeigt. Nutzen Sie lieber die Kategorie one mit der Zahl im Text, oder fügen Sie einen Zweig =0 hinzu: Das Tool bietet ihn als Kontrollkästchen an. Details finden Sie in der Anleitung zu ICU-Pluralformen und Platzhaltern.
So verwenden Sie das Ergebnis
- Kopieren Sie die Zeile
"key": "{count, plural, …}" jeder Sprache in die passende Datei app_xx.arb.
- Fügen Sie die
@key-Metadaten einmal hinzu, in der Template-Datei.
- Führen Sie
flutter gen-l10n aus: Ein fehlender Zweig other oder eine nicht geschlossene Klammer bricht die Generierung mit Angabe des Dateinamens ab.
Um danach zu prüfen, dass keine Übersetzung ihren Platzhalter verloren oder umbenannt hat, nutzen Sie den Check für fehlende ARB-Schlüssel.
Grenzen des Tools
Das Tool erzeugt die Struktur, nicht die Übersetzung: Den Text jeder Form schreiben Sie selbst. Es unterstützt keine select-Nachrichten und keine verschachtelten Pluralformen und verdoppelt keine Apostrophe, wenn Sie use-escaping in l10n.yaml aktiviert haben.