Sa 14 sa aming 42 wika, ang pormang pangmaramihan na tinatawag na "one" ay hindi lamang para sa 1
Mga wika
Ang string ng app na "One habit left today" ay may katambal na pangmaramihan, "%d habits left today". Pinipili ng Android ang isa sa kanila ayon sa kategorya: ginagamit ng English ang "one" para sa 1 at "other" para sa lahat ng iba. Sa Russian, ginagamit ang kategoryang "one" para sa 1, 21, 31, 41 at iba pa. Mali ang aming pagsusuri ng pagsasalin nito nang dalawang beses sa parehong araw, isang beses sa bawat direksyon.
Ang tamang pagsasalin na tinanggihan nito
Noong 2 Nobyembre, pinatakbo namin muli ang aming kit ng pagsasalin sa halimbawa nitong app. Para sa "one" ng Russian, isinulat ng modelo ang "Осталась %d привычка на сегодня": "%d habit left today", kasama ang numero. Inihambing ng aming pagsusuri ito sa pormang "one" ng English, nakita ang %d na wala sa English, at tinanggihan ito bilang isang placeholder na imbento. Tama ang modelo. Ang user na may 21 habits left ay makakatanggap ng pormang ito, kaya kailangan nitong ipakita ang numero. Binago namin ang pagsusuri: maaaring idagdag ng isang porma ang bilang na ginagamit ng pormang "other" ng English. Sa susunod na pagtakbo, isinulat nito ang lahat ng 350 strings ng halimbawa.
Ang maling pagsasalin na papasa nito
Pinayagan ng parehong pagsusuri ang kabaligtaran nito. Kung isinulat ng modelo ang "Осталась одна привычка" ("one habit left"), walang nawala sa string, kaya ito ay pumasa, at ang user na may 21 habits left ay sasabihing mayroon silang isa. Pinayagan ng dating tuntunin ang anumang pormang "one" na tanggalin ang numero, dahil sa English ang "one" ay 1 lamang.
Ngayon, alam ng pagsusuri kung aling mga numero ang saklaw ng bawat kategorya, mula sa CLDR, ang mga tuntunin ng pangmaramihan ng Unicode na ginagamit ng Android at ICU. Ang porma para sa kategoryang sumasaklaw sa maraming numero ay kailangang ipakita ang numero. Maaaring iwanan ng porma para sa isang numero ang numero: ang "one" ng German ay 1 lamang, kaya okay ang "Noch eine Gewohnheit" doon.
Kung saan ang "one" ay hindi lamang 1
Sa 14 sa 41 target na wika na alam ng data ng CLDR sa Babel 2.10, sumasaklaw ang "one" sa higit pa sa numerong 1:
- 1, 21, 31, 41…: Russian, Ukrainian, Serbian, Macedonian.
- 0 at 1: French, Portuguese, Persian, Armenian, Kannada, Punjabi, Amharic. Ipapakita ang "Une habitude restante" para sa 0 habits.
- 1 at 11: Scottish Gaelic. 1, 101, 201…: Slovenian, na ang "two" ay 102 at 202 din.
- Ang lahat ng numero na hindi nagtatapos sa 4, 6 o 9: Filipino.
Sa mga mensahe ng ICU, binabago ito ng isang hiwalay na sangay. Gamit ang =0{…} sa mensahe, iniwanan ang "one" ng French na 1 lamang, at isinasaalang-alang ng pagsusuri ito.
Sinuri laban sa mga sariling strings ng Android
Bago ipadala ang rule, pinatakbo namin ito sa mga plural na mensahe sa framework strings ng Android: 897 translations sa 39 sa aming mga wika. Walang na-flag ito. Inilagay ng mga translator ng Google ang numero sa bawat branch na sumasaklaw sa maraming numero, kabilang ang Russian "one", kahit na sa English ay may sariling branch ang 1. Nang alisin namin ang numero sa isang Russian "one" branch nang manu-mano, sinabi ng check na ginagamit din ang form para sa 21, 31, 41 at 51.
Nasa translation-checks 1.2.0 ang rule, libre sa GitHub, para sa ICU messages, at nasa Polyglot 1.2.0 para sa Android plurals at ICU messages. Ang ibang checks na dinagdag namin ngayong linggo ay nasa note tungkol sa mga letra ng ibang script.