In 14 unserer 42 Sprachen ist die Pluralform "one" nicht nur für 1 gedacht
Sprachen
Die Zeichenkette "One habit left today" einer App hat eine Plural-Partnerin: "%d habits left today". Android wählt zwischen beiden anhand der Kategorie: Englisch verwendet "one" für 1 und "other" für alles andere. Im Russischen wird die Kategorie "one" für 1, 21, 31, 41 usw. verwendet. Unsere Übersetzungsprüfung lag an einem einzigen Tag zweimal daneben, jeweils in die entgegengesetzte Richtung.
Die richtige Übersetzung, die sie ablehnte
Am 2. November ließen wir unser Übersetzungs-Kit erneut auf seiner Beispiel-App laufen. Für das russische "one" schrieb das Modell "Осталась %d привычка на сегодня": "%d habit left today", mit der Zahl. Unsere Prüfung verglich sie mit der englischen "one"-Form, fand ein %d, das im Englischen nicht vorkam, und lehnte sie als erfundenen Platzhalter ab. Das Modell hatte recht. Ein Benutzer mit 21 verbleibenden Gewohnheiten erhält diese Form, also muss sie die Zahl anzeigen. Wir änderten die Prüfung: Eine Form darf die Anzahl hinzufügen, die die englische "other"-Form verwendet. Der nächste Durchlauf schrieb alle 350 Zeichenketten der Beispiel-App.
Die falsche Übersetzung, die sie durchgewinkt hätte
Derselbe Check ließ das Gegenteil durch. Hätte das Modell "Осталась одна привычка" ("one habit left") geschrieben, wäre nichts in der Zeichenkette verloren gegangen, also wurde sie durchgewinkt, und dem Benutzer mit 21 verbleibenden Gewohnheiten wäre mitgeteilt worden, er habe eine. Die alte Regel erlaubte jeder "one"-Form, die Zahl wegzulassen, weil im Englischen "one" nur 1 ist.
Nun weiß die Prüfung, welche Zahlen jede Kategorie abdeckt, basierend auf CLDR, den Unicode-Pluralregeln, die Android und ICU verwenden. Eine Form für eine Kategorie, die mehrere Zahlen abdeckt, muss die Zahl anzeigen. Eine Form für eine einzelne Zahl darf sie weglassen: Das deutsche "one" ist nur 1, daher ist "Noch eine Gewohnheit" dort in Ordnung.
Wo "one" nicht nur 1 ist
In 14 der 41 Zielsprachen, die die CLDR-Daten in Babel 2.10 kennt, deckt "one" mehr als nur die Zahl 1 ab:
- 1, 21, 31, 41…: Russisch, Ukrainisch, Serbisch, Mazedonisch.
- 0 und 1: Französisch, Portugiesisch, Persisch, Armenisch, Kannada, Punjabi, Amharisch. "Une habitude restante" würde für 0 Gewohnheiten angezeigt.
- 1 und 11: Schottisch-Gälisch. 1, 101, 201…: Slowenisch, dessen "two" auch 102 und 202 ist.
- Jede Zahl, die nicht auf 4, 6 oder 9 endet: Filipino.
In ICU-Nachrichten ändert ein eigener Zweig dies. Mit =0{…} in der Nachricht verbleibt beim französischen "one" nur die 1, und die Prüfung berücksichtigt dies.
Geprüft anhand der eigenen Zeichenketten von Android
Bevor wir die Regel auslieferten, haben wir sie auf die Plural-Nachrichten in den Android-Framework-Strings getestet: 897 Übersetzungen in 39 unserer Sprachen. Sie hat keine Fehler gefunden. Googles Übersetzer haben die Zahl in jedem Zweig platziert, der mehrere Zahlen abdeckt, einschließlich des russischen „one“-Zweigs, selbst dort, wo Englisch der 1 einen eigenen Zweig gibt. Als wir die Zahl aus einem russischen „one“-Zweig von Hand entfernten, meldete die Prüfung, dass die Form auch für 21, 31, 41 und 51 verwendet wird.
Die Regel ist in translation-checks 1.2.0, kostenlos auf GitHub, für ICU-Nachrichten, und in Polyglot 1.2.0 für Android-Plurale und ICU-Nachrichten gleichermaßen. Die anderen Prüfungen, die wir diese Woche hinzugefügt haben, finden Sie in der Notiz über Buchstaben einer anderen Schrift.