I 14 av de 42 språkene våre er flertallsformen som heter "one", ikke bare for 1
Språk
Strengen "One habit left today" i en app har en flertallspartner, "%d habits left today". Android velger mellom dem etter kategori: Engelsk bruker "one" for 1 og "other" for alt annet. I russisk brukes kategorien "one" for 1, 21, 31, 41 og så videre. Vår oversettelsessjekk tok feil av dette to ganger samme dag, én gang i hver retning.
Den riktige oversettelsen den avviste
Den 2. november kjørte vi oversettelseskittet vårt på eksempelappen igjen. For russisk "one" skrev modellen "Осталась %d привычка на сегодня": "%d habit left today", med tallet. Sjekken vår sammenlignet det med den engelske "one"-formen, fant en %d som den engelske ikke hadde, og avviste den som en oppfunnet plassholder. Modellen hadde rett. En bruker med 21 gjenværende vaner får denne formen, så den må vise tallet. Vi endret sjekken: En form kan legge til antallet som den engelske "other"-formen bruker. Neste kjøring skrev alle de 350 strengene i eksemplet.
Den feil oversettelsen den ville ha godkjent
Den samme sjekken slapp gjennom det motsatte. Hvis modellen hadde skrevet "Осталась одна привычка" ("one habit left"), gikk ingenting tapt i strengen, så den ble godkjent, og brukeren med 21 gjenværende vaner ville fått vite at de har én. Den gamle regelen tillot enhver "one"-form å utelate tallet, fordi "one" på engelsk bare er 1.
Nå vet sjekken hvilke tall hver kategori dekker, fra CLDR, Unicode-reglene for flertall som Android og ICU bruker. En form for en kategori som dekker flere tall, må vise tallet. En form for ett enkelt tall kan utelate det: Tysk "one" er bare 1, så "Noch eine Gewohnheit" er greit der.
Hvor "one" ikke bare er 1
I 14 av de 41 målspråkene som CLDRs data i Babel 2.10 kjenner, dekker "one" mer enn tallet 1:
- 1, 21, 31, 41…: Russisk, ukrainsk, serbisk, makedonsk.
- 0 og 1: Fransk, portugisisk, persisk, armensk, kannada, punjabi, amharisk. "Une habitude restante" ville blitt vist for 0 vaner.
- 1 og 11: Skotsk-gælisk. 1, 101, 201…: Slovensk, hvis "two" også er 102 og 202.
- Hvert tall som ikke slutter på 4, 6 eller 9: Filippinsk.
I ICU-meldinger endrer en egen gren dette. Med =0{…} i meldingen står fransk "one" igjen med bare 1, og sjekken tar hensyn til det.
Sjekket mot Androids egne strenger
Før vi sendte regelen, kjørte vi den på flertallsbeskjedene i Androids rammeverkstrenger: 897 oversettelser på 39 av språkene våre. Den fant ingen feil. Googles oversettere plasserte tallet i hver grein som dekker flere tall, inkludert russisk «én», selv der engelsk gir 1 en egen grein. Da vi manuelt fjernet tallet fra én russisk «én»-grein, sa sjekken at formen også brukes for 21, 31, 41 og 51.
Regelen finnes i translation-checks 1.2.0, gratis på GitHub, for ICU-meldinger, og i Polyglot 1.2.0 for både Android-flertall og ICU-meldinger. De andre sjekkene vi la til denne uken, finnes i notatet om bokstaver fra et annet skriftsystem.