În 14 dintre cele 42 de limbi ale noastre, forma de plural numită „one” nu este doar pentru 1

Limbi

Un șir de text al unei aplicații, „One habit left today”, are un partener de plural, „%d habits left today”. Android alege între ele pe categorii: engleza folosește „one” pentru 1 și „other” pentru restul. În rusă, categoria „one” este folosită pentru 1, 21, 31, 41 și așa mai departe. Verificarea noastră de traducere a greșit acest lucru de două ori în aceeași zi, o dată în fiecare direcție.

Traducerea corectă pe care a respins-o

Pe 2 noiembrie, am rulat din nou kitul nostru de traducere pe aplicația sa de exemplu. Pentru „one” în rusă, modelul a scris „Осталась %d привычка на сегодня”: „%d habit left today”, cu numărul. Verificarea noastră l-a comparat cu forma „one” din engleză, a găsit un %d pe care engleza nu îl avea și a respins-o ca fiind un placeholder inventat. Modelul avea dreptate. Un utilizator cu 21 de obiceiuri rămase primește această formă, deci trebuie să afișeze numărul. Am modificat verificarea: o formă poate adăuga numărul pe care îl folosește forma „other” din engleză. Rularea următoare a scris toate cele 350 de șiruri ale exemplului.

Traducerea greșită pe care ar fi acceptat-o

Aceeași verificare a lăsat să treacă opusul. Dacă modelul ar fi scris „Осталась одна привычка” („one habit left”), nimic din șir nu s-ar fi pierdut, deci ar fi trecut, iar utilizatorul cu 21 de obiceiuri rămase ar fi fost informat că are unul. Regula veche permitea oricărei forme „one” să elimine numărul, deoarece în engleză „one” este doar 1.

Acum verificarea știe ce numere acoperă fiecare categorie, din CLDR, regulile Unicode de plural folosite de Android și ICU. O formă pentru o categorie care acoperă mai multe numere trebuie să afișeze numărul. O formă pentru un singur număr îl poate omite: „one” în germană este doar 1, deci „Noch eine Gewohnheit” este corect acolo.

Unde „one” nu este doar 1

În 14 dintre cele 41 de limbi țintă pe care datele CLDR din Babel 2.10 le cunoaște, „one” acoperă mai mult decât numărul 1:

În mesajele ICU, o ramură proprie schimbă acest lucru. Cu =0{…} în mesaj, „one” în franceză rămâne doar pentru 1, iar verificarea ține cont de acest lucru.

Verificat față de șirurile proprii Android

Înainte de a publica regula, am rulat-o pe mesajele cu plural din șirurile de caractere ale framework-ului Android: 897 de traduceri în 39 dintre limbile noastre. Nu a semnalat nimic. Traducătorii Google au pus numărul în fiecare ramură care acoperă mai multe numere, inclusiv ramura „unul” din rusă, chiar și acolo unde engleza oferă lui 1 o ramură proprie. Când am scos manual numărul dintr-o ramură „unul” din rusă, verificarea a indicat faptul că forma este folosită și pentru 21, 31, 41 și 51.

Regula se află în translation-checks 1.2.0, gratuit pe GitHub, pentru mesajele ICU, și în Polyglot 1.2.0 pentru pluralurile Android și mesajele ICU. Celelalte verificări adăugate în această săptămână se găsesc în nota despre literele unui alt alfabet.

Actualizat: