Մեր 42 լեզուներից 14-ում «մեկ» կոչվող բազմակի ձևը միայն 1-ի համար չէ
Լեզուներ
Հավելվածի «One habit left today» տողը ունի բազմակի զույգ՝ «%d habits left today»: Android-ը դրանց միջև ընտրում է կատեգորիայի հիման վրա. անգլերենը «one» օգտագործում է 1-ի համար, իսկ «other»՝ մնացած բոլորի համար: Ռուսերենում «one» կատեգորիան օգտագործվում է 1, 21, 31, 41 և այլնի համար: Մեր թարգմանության ստուգումը սխալվեց երկու անգամ նույն օրը՝ մեկը յուրաքանչյուր ուղղությամբ:
Ճիշտ թարգմանությունը, որը մերժվեց
Նոյեմբերի 2-ին մենք կրկին գործարկեցինք մեր թարգմանության հավաքածուն իր օրինակելի հավելվածի վրա: Ռուսերենի «one»-ի համար մոդելը գրեց «Осталась %d привычка на сегодня»՝ «%d habit left today», թվով: Մեր ստուգումը համեմատեց այն անգլերենի «one» ձևի հետ, գտավ %d, որը անգլերենում չկար, և մերժեց այն որպես հորինված placeholder: Մոդելը ճիշտ էր: 21 սովորույթ ունեցող օգտատերը ստանում է այս ձևը, ուստի այն պետք է ցույց տա թիվը: Մենք փոխեցինք ստուգումը. ձևը կարող է ավելացնել այն հաշվարկը, որն օգտագործում է անգլերենի «other» ձևը: Հաջորդ գործարկումը գրեց օրինակելի բոլոր 350 տողերը:
Սխալ թարգմանությունը, որը կանցներ
Նույն ստուգումը թողեց հակառակը: Եթե մոդելը գրեր «Осталась одна привычка» («մեկ սովորույթ է մնացել»), ոչինչ չէր կորչեր տողից, ուստի այն անցավ, և 21 սովորույթ ունեցող օգտատերը կիմանար, որ ունի մեկը: Հին կանոնը թույլ էր տալից ցանկացած «one» ձևի դեպքում բաց թողնել թիվը, քանի որ անգլերենում «one»-ը միայն 1 է:
Այժմ ստուգումը գիտի, թե յուրաքանչյուր կատեգորիա ինչ թվեր է ընդգրկում՝ CLDR-ից, Unicode-ի բազմակի կանոններ, որոնք օգտագործում են Android-ը և ICU-ն: Կատեգորիայի ձևը, որը ընդգրկում է մի քանի թիվ, պետք է ցույց տա թիվը: Մեկ թվի համար նախատեսված ձևը կարող է բաց թողնել այն. գերմաներենի «one»-ը միայն 1 է, ուստի «Noch eine Gewohnheit»-ը այնտեղ ճիշտ է:
Որտեղ «one»-ը միայն 1 չէ
CLDR-ի տվյալները Babel 2.10-ում ճանաչում են 41 թիրախային լեզուներից 14-ում, որտեղ «one»-ը ընդգրկում է 1-ից ավելի թիվ:
- 1, 21, 31, 41…: Ռուսերեն, ուկրաիներեն, սերբերեն, մակեդոներեն:
- 0 և 1: Ֆրանսերեն, պորտուգալերեն, պարսկերեն, հայերեն, կաննադա, պենջաբերեն, ամհարերեն: «Une habitude restante»-ը կցուցադրվի 0 սովորույթի դեպքում:
- 1 և 11: Շոտլանդական գելերեն: 1, 101, 201…: Սլովեներեն, որի «two»-ն նաև 102 և 202 է:
- Ցանկացած թիվ, որը չի ավարտվում 4, 6 կամ 9-ով: Ֆիլիպիներեն:
ICU հաղորդագրություններում իր ճյուղը փոխում է սա: Հաղորդագրության մեջ =0{…} ունենալիս ֆրանսերենի «one»-ը մնում է միայն 1-ի համար, և ստուգումը հաշվի է առնում դա:
Ստուգված Android-ի սեփական տողերի համեմատ
Մինչև կանոնի ուղարկումը մենք այն գործարկեցինք Android-ի framework strings-ի բազմակի հաղորդագրությունների վրա՝ 39 լեզուներով 897 թարգմանություն։ Այն ոչ մի սխալ չհայտնաբերեց։ Google-ի թարգմանիչները թիվը տեղադրել են բոլոր ճյուղերում, որոնք ընդգրկում են մի քանի թվեր, ներառյալ ռուսերենի «մեկ» ձևը, նույնիսկ այն դեպքերում, երբ անգլերենում 1-ն ունի իր առանձին ճյուղը։ Երբ մենք ձեռքով հեռացրեցինք թիվը ռուսերենի «մեկ» ձևի մի ճյուղից, ստուգումը ցույց տվեց, որ այդ ձևը օգտագործվում է նաև 21, 31, 41 և 51 թվերի համար։
Կանոնը գտնվում է translation-checks 1.2.0-ում, անվճար GitHub-ում, ICU հաղորդագրությունների համար, և Polyglot 1.2.0-ում՝ Android-ի բազմակի թվերի և ICU հաղորդագրությունների համար։ Այս շաբաթ ավելացված մյուս ստուգումները ներկայացված են գրության այլ այբուբենի նշումներում։