A 42 nyelvünkből 14-ben az „egy” nevű többes számú forma nem csak az 1-re vonatkozik
Nyelvek
Egy alkalmazás „One habit left today” karakterlánca rendelkezik többes számú párjával: „%d habits left today”. Az Android kategóriák alapján választ közöttük: az angol az „one” kategóriát használja az 1-hez, az „other” kategóriát pedig minden más esetre. Az oroszban az „one” kategóriát használjuk az 1, 21, 31, 41 stb. számokhoz. A fordításellenőrzésünk kétszer is elrontotta ezt ugyanazon a napon, egyszer mindkét irányban.
A helyes fordítás, amelyet elutasított
November 2-án újra futtattuk a fordítási csomagunkat a példaalkalmazáson. Az orosz „one” kategóriához a modell ezt írta: „Осталась %d привычка на сегодня”, vagyis „%d habit left today”, a számmal együtt. Az ellenőrzésünk összehasonlította az angol „one” formával, talált benne egy %d helykitöltőt, amely az angolban nem volt, és kitalált helykitöltőként elutasította. A modellnek igaza volt. Az a felhasználó, akinek 21 szokása maradt, ezt a formát kapja, így a számnak meg kell jelennie. Módosítottuk az ellenőrzést: egy forma felveheti azt a darabszámot, amelyet az angol „other” forma használ. A következő futtatás megírta a példaalkalmazás mind a 350 karakterláncát.
A hibás fordítás, amelyet átengedett volna
Ugyanez az ellenőrzés átengedte az ellenkező esetet. Ha a modell ezt írta volna: „Осталась одна привычка” („one habit left”), semmi sem veszett el a karakterláncból, így átment, és a 21 megmaradt szokással rendelkező felhasználónak azt mondták volna, hogy csak egy van. A régi szabály lehetővé tette, hogy bármely „one” forma elhagyja a számot, mert angolul az „one” csak az 1-et jelenti.
Most az ellenőrzés tudja, hogy egyes kategóriák milyen számokat fednek le a CLDR-ből, az Unicode többes számú szabályokból, amelyeket az Android és az ICU használ. Egy olyan kategória formája, amely több számot fed le, kötelezően megjeleníti a számot. Egy egyetlen számhoz tartozó forma elhagyhatja: a német „one” csak az 1-et jelenti, így ott a „Noch eine Gewohnheit” rendben van.
Ahol az „one” nem csak az 1
A CLDR Babel 2.10-ban elérhető adatai által ismert 41 célnyelv közül 14-ben az „one” forma az 1-es számon kívül is használatos:
- 1, 21, 31, 41…: orosz, ukrán, szerb, macedón.
- 0 és 1: francia, portugál, perzsa, örmény, kannada, pandzsábi, amhara. A „Une habitude restante” formát 0 szokás esetén jelenítenék meg.
- 1 és 11: skót gael. 1, 101, 201…: szlovén, amelynek a „two” kategóriája a 102-t és a 202-t is lefedi.
- Minden szám, amely nem 4-re, 6-ra vagy 9-re végződik: filippínó.
ICU-üzenetekben egy saját ág ezt megváltoztatja. Ha az üzenetben szerepel a =0{…}, a francia „one” kategória csak az 1-re marad, és az ellenőrzés ezt figyelembe veszi.
Ellenőrizve az Android saját karakterláncaihoz képest
A szabály kiadása előtt futtattuk az Android keretrendszer-sztringjeiben lévő többesszámos üzeneteken: 897 fordítás a mi 39 nyelvünk közül. Egyet sem jelölt meg. A Google fordítói minden olyan ágban szerepeltették a számot, amely több számot fed le, beleértve az orosz „one” ágat is, még ott is, ahol az angol az 1-esnek külön ágat ad. Amikor kézzel kivettük a számot egy orosz „one” ágból, az ellenőrzés azt jelezte, hogy a forma 21, 31, 41 és 51 esetén is használatos.
A szabály a translation-checks 1.2.0 verziójában található, ingyenesen elérhető a GitHubon, ICU-üzenetekhez, valamint a Polyglot 1.2.0 verziójában Android-többesszámokhoz és ICU-üzenetekhez egyaránt. A héten hozzáadott többi ellenőrzés a más írásrendszer betűiről szóló jegyzetben található.