U 14 od naših 42 jezika, množinski oblik zvani "one" nije samo za 1
Jezici
String aplikacije "One habit left today" ima množinskog partnera, "%d habits left today". Android bira između njih po kategoriji: engleski koristi "one" za 1 i "other" za sve ostalo. U ruskom se kategorija "one" koristi za 1, 21, 31, 41 i tako dalje. Naša provera prevoda je to dva puta pogrešno protumačila istog dana, jednom u svakom smeru.
Ispravan prevod koji je odbio
2. novembra smo ponovo pokrenuli naš komplet za prevod na primeru aplikacije. Za ruski "one" model je napisao "Осталась %d привычка на сегодня": "%d habit left today", sa brojem. Naša provera ga je uporedila sa engleskom "one" formom, pronašla %d koji engleski nije imao i odbila ga kao izmišljeni placeholder. Model je bio u pravu. Korisniku sa 21 navikom koja je preostala prikazuje se ova forma, pa ona mora da prikaže broj. Promenili smo proveru: forma sme da doda broj koji engleska "other" forma koristi. Sledeće pokretanje je napisalo svih 350 stringova primera.
Pogrešan prevod koji bi prošao
Ista provera je pustila suprotno. Da je model napisao "Осталась одна привычка" ("one habit left"), ništa u stringu nije izgubljeno, pa je prošlo, a korisniku sa 21 navikom koja je preostala bilo bi rečeno da ima jednu. Staro pravilo je dozvoljavalo bilo kojoj "one" formi da izbaci broj, jer je u engleskom "one" samo 1.
Sada provera zna koje brojeve svaka kategorija pokriva, iz CLDR-a, Unicode pravila za množinu koja koriste Android i ICU. Forma za kategoriju koja pokriva više brojeva mora da prikaže broj. Forma za jedan broj sme da ga izostavi: nemački "one" je samo 1, pa je "Noch eine Gewohnheit" tu u redu.
Gde "one" nije samo 1
U 14 od 41 ciljnog jezika koje podaci CLDR-a u Babel 2.10 poznaju, "one" pokriva više od broja 1:
- 1, 21, 31, 41…: ruski, ukrajinski, srpski, makedonski.
- 0 i 1: francuski, portugalski, perzijski, jermenski, kanada, pendžapski, amharski. "Une habitude restante" bi se prikazivalo za 0 navika.
- 1 i 11: škotski gelski. 1, 101, 201…: slovenački, čija je "two" takođe 102 i 202.
- Svaki broj koji se ne završava na 4, 6 ili 9: filipinski.
U ICU porukama, sopstvena grana menja ovo. Sa =0{…} u poruci, francuskom "one" ostaje samo 1, a provera to uzima u obzir.
Provereno u odnosu na Android-ove sopstvene stringove
Pre nego što smo pravilo isporučili, pokrenuli smo ga na porukama u množini iz Androidovih framework stringova: 897 prevoda u 39 naših jezika. Nije pronašlo nijednu grešku. Googleovi prevodioci su stavili broj u svaku granu koja pokriva više brojeva, uključujući rusku granu za „jedan“, čak i tamo gde engleski daje broju 1 sopstvenu granu. Kada smo ručno uklonili broj iz jedne ruske grane za „jedan“, provera je rekla da se taj oblik koristi i za 21, 31, 41 i 51.
Pravilo se nalazi u translation-checks 1.2.0, besplatno na GitHubu, za ICU poruke, i u Polyglot 1.2.0 za Android množine i ICU poruke. Ostale provere koje smo dodali ove nedelje nalaze se u napomeni o slovima drugog pisma.