W 14 z naszych 42 języków forma mnoga o nazwie "one" nie dotyczy wyłącznie liczby 1
Języki
Tekst aplikacji "One habit left today" ma odpowiednik w liczbie mnogiej: "%d habits left today". Android wybiera między nimi na podstawie kategorii: angielski używa "one" dla 1 i "other" dla wszystkiego innego. W rosyjskim kategoria "one" jest używana dla 1, 21, 31, 41 i tak dalej. Nasza kontrola tłumaczeń pomyliła się co do tego dwukrotnie tego samego dnia, raz w każdą stronę.
Prawidłowe tłumaczenie, którego odmówiono
2 listopada ponownie uruchomiliśmy nasz zestaw do tłumaczeń na jego przykładowej aplikacji. Dla rosyjskiego "one" model zapisał "Осталась %d привычка на сегодня": "%d habit left today", z liczbą. Nasza kontrola porównała to z angielską formą "one", znalazła %d, którego nie było w angielskim, i odrzuciła to jako wymyślony placeholder. Model miał rację. Użytkownik, któremu zostało 21 nawyków, otrzymuje tę formę, więc musi ona pokazywać liczbę. Zmieniliśmy kontrolę: forma może dodać liczbę, której używa angielska forma "other". Kolejne uruchomienie zapisało wszystkie 350 tekstów przykładowych.
Błędne tłumaczenie, które zostałoby zaakceptowane
Ta sama kontrola przepuściła sytuację odwrotną. Gdyby model zapisał "Осталась одна привычка" ("one habit left"), nic nie zostało utracone w tekście, więc przeszło, a użytkownikowi, któremu zostało 21 nawyków, powiedziano by, że został mu jeden. Stara zasada pozwalała formie "one" pominąć liczbę, ponieważ w angielskim "one" oznacza tylko 1.
Teraz kontrola wie, jakie liczby obejmuje każda kategoria, na podstawie CLDR, czyli reguł mnogich Unicode, których używają Android i ICU. Forma dla kategorii obejmującej wiele liczb musi pokazywać liczbę. Forma dla pojedynczej liczby może ją pominąć: niemieckie "one" to tylko 1, więc "Noch eine Gewohnheit" jest tam w porządku.
Gdzie "one" to nie tylko 1
W 14 z 41 języków docelowych, które zna dane CLDR w Babel 2.10, "one" obejmuje więcej niż tylko liczbę 1:
- 1, 21, 31, 41…: rosyjski, ukraiński, serbski, macedoński.
- 0 i 1: francuski, portugalski, perski, ormiański, kannada, pendżabski, amharski. "Une habitude restante" byłoby wyświetlane dla 0 nawyków.
- 1 i 11: szkocki gaelicki. 1, 101, 201…: słoweński, którego "two" to również 102 i 202.
- Każda liczba, która nie kończy się na 4, 6 lub 9: filipiński.
W komunikatach ICU własna gałąź to zmienia. Z =0{…} w komunikacie francuskie "one" pozostaje tylko dla 1, a kontrola bierze to pod uwagę.
Sprawdzone na podstawie własnych tekstów Androida
Zanim wysłaliśmy tę regułę, przetestowaliśmy ją na komunikatach liczby mnogiej w stringach frameworka Androida: 897 tłumaczeń w 39 naszych językach. Nie wykryła żadnych błędów. Tłumacze Google'a umieszczali liczbę w każdej gałęzi obejmującej wiele liczb, w tym w rosyjskiej gałęzi „one”, nawet tam, gdzie angielski daje liczbie 1 własną gałąź. Gdy ręcznie usunęliśmy liczbę z jednej rosyjskiej gałęzi „one”, kontrola zgłosiła, że ta forma jest używana również dla 21, 31, 41 i 51.
Reguła znajduje się w translation-checks 1.2.0, dostępna za darmo na GitHubie, dla komunikatów ICU, oraz w Polyglot 1.2.0 dla liczby mnogiej w Androidzie i komunikatów ICU. Pozostałe kontrole dodane w tym tygodniu znajdziesz w uwadze dotyczącej liter innego pisma.