14:ssa 42:sta kielestämme monikkomuoto nimeltä "one" ei ole vain luvulle 1
Kielet
Sovelluksen merkkijono "One habit left today" on monikkomuodon "%d habits left today" kumppani. Android valitsee niiden välillä luokan perusteella: englannissa "one" käytetään luvusta 1 ja "other" kaikista muista. Venäjässä luokkaa "one" käytetään luvuista 1, 21, 31, 41 jne. Käännöstarkistuksemme erehtyi tästä kahdesti samana päivänä, kerran kumpaankin suuntaan.
Oikea käännös, jonka se hylkäsi
2. marraskuuta ajoimme käännöspakettimme uudelleen esimerkkisovelluksella. Venäjän "one"-muodolle malli kirjoitti "Осталась %d привычка на сегодня": "%d habit left today", luvun kanssa. Tarkistuksemme vertasi sitä englannin "one"-muotoon, löysi sieltä %d:n, jota englannissa ei ollut, ja hylkäsi sen keksittynä paikkamerkkinä. Malli oli oikeassa. Käyttäjä, jolla on jäljellä 21 tapaa, saa tämän muodon, joten sen on näytettävä luku. Muutimme tarkistusta: muoto saa lisätä laskurin, jota englannin "other"-muoto käyttää. Seuraavassa ajossa malli kirjoitti kaikki esimerkin 350 merkkijonoa.
Väärä käännös, jonka se olisi hyväksynyt
Sama tarkistus päästi päinvastaisen läpi. Jos malli olisi kirjoittanut "Осталась одна привычка" ("one habit left"), merkkijonosta ei ollut kadonnut mitään, joten se hyväksyttiin, ja käyttäjälle, jolla on jäljellä 21 tapaa, olisi kerrottu, että hänellä on yksi. Vanha sääntö salli minkä tahansa "one"-muodon jättää luvun pois, koska englannissa "one" on vain 1.
Nyt tarkistus tietää, mitkä luvut kumpikin luokka kattaa, CLDR:stä, Unicode-monikkosäännöistä, joita Android ja ICU käyttävät. Muodon, joka kattaa useita lukuja, on näytettävä luku. Yhden luvun muoto saa jättää sen pois: saksan "one" on vain 1, joten "Noch eine Gewohnheit" on siellä oikein.
Missä "one" ei ole vain 1
14:ssä 41:stä kohdekielestä, jotka Babel 2.10:n CLDR-tiedot tuntee, "one" kattaa enemmän kuin luvun 1:
- 1, 21, 31, 41…: venäjä, ukraina, serbia, makedonia.
- 0 ja 1: ranska, portugali, persia, armenia, kannada, punjabi, amhara. "Une habitude restante" näytettäisiin 0:lle tapaa.
- 1 ja 11: skottigaeli. 1, 101, 201…: sloveeni, jonka "two" on myös 102 ja 202.
- Jokainen luku, joka ei pääty numeroihin 4, 6 tai 9: filippiini.
ICU-viesteissä oma haara muuttaa tätä. Kun viestissä on =0{…}, ranskan "one" jää vain luvulle 1, ja tarkistus ottaa sen huomioon.
Tarkistettu Androidin omia merkkijonoja vasten
Ennen säännön julkaisemista testasimme sen Androidin framework-merkkijonojen monikollisissa viesteissä: 897 käännöstä 39:ssä kielestämme. Se ei löytänyt virheitä. Googlen kääntäjät laittoivat luvun jokaiseen haaraan, joka kattaa useita lukuja, mukaan lukien venäjän "yksi", vaikka englannissa luvulla 1 on oma haara. Kun poistimme luvun käsin yhdestä venäjän "yksi"-haarasta, tarkistus ilmoitti, että samaa muotoa käytetään myös luvuille 21, 31, 41 ja 51.
Sääntö on translation-checks 1.2.0:ssa, ilmainen GitHubissa, ICU-viesteille, ja Polyglot 1.2.0:ssa Androidin monikoille ja ICU-viesteille. Muut tällä viikolla lisäämämme tarkistukset ovat huomiossa toisen kirjoitusjärjestelmän kirjaimista.