Dans 14 de nos 42 langues, la forme plurielle appelée « one » ne concerne pas seulement 1

Langues

La chaîne d'une application « One habit left today » a un partenaire pluriel, « %d habits left today ». Android choisit entre eux par catégorie : l'anglais utilise « one » pour 1 et « other » pour tout le reste. En russe, la catégorie « one » est utilisée pour 1, 21, 31, 41, etc. Notre contrôle de traduction s'est trompé deux fois le même jour, une fois dans chaque sens.

La bonne traduction qu'il a refusée

Le 2 novembre, nous avons relancé notre Kit de traduction sur son application d'exemple. Pour le « one » russe, le modèle a écrit « Осталась %d привычка на сегодня » : « %d habit left today », avec le nombre. Notre contrôle l'a comparé à la forme « one » anglaise, a trouvé un %d que l'anglais n'avait pas, et l'a refusé comme un espace réservé inventé. Le modèle avait raison. Un utilisateur ayant 21 habitudes restantes obtient cette forme, elle doit donc afficher le nombre. Nous avons modifié le contrôle : une forme peut ajouter le nombre que la forme « other » anglaise utilise. La prochaine exécution a écrit les 350 chaînes de l'exemple.

La mauvaise traduction qu'il aurait acceptée

Le même contrôle a laissé passer l'inverse. Si le modèle avait écrit « Осталась одна привычка » (« one habit left »), rien dans la chaîne n'était perdu, donc cela passait, et l'utilisateur ayant 21 habitudes restantes aurait reçu le message qu'il en a une. L'ancienne règle autorisait toute forme « one » à omettre le nombre, car en anglais « one » ne concerne que 1.

Désormais, le contrôle sait quels nombres chaque catégorie couvre, grâce à CLDR, les règles de pluriel Unicode qu'Android et ICU utilisent. Une forme pour une catégorie couvrant plusieurs nombres doit afficher le nombre. Une forme pour un nombre unique peut l'omettre : le « one » allemand ne concerne que 1, donc « Noch eine Gewohnheit » est correct ici.

Où « one » ne concerne pas seulement 1

Dans 14 des 41 langues cibles que les données de CLDR dans Babel 2.10 connaissent, « one » couvre plus que le nombre 1 :

Dans les messages ICU, une branche propre modifie cela. Avec =0{…} dans le message, le « one » français ne couvre plus que 1, et le contrôle en tient compte.

Vérifié par rapport aux chaînes d'Android

Avant la livraison de la règle, nous l'avons exécutée sur les messages pluriels des chaînes de framework d'Android : 897 traductions dans 39 de nos langues. Elle n'en a signalé aucune. Les traducteurs de Google ont placé le nombre dans chaque branche couvrant plusieurs nombres, y compris le « un » russe, même lorsque l'anglais réserve une branche propre au nombre 1. Lorsque nous avons retiré manuellement le nombre d'une branche « un » russe, la vérification a indiqué que cette forme est également utilisée pour 21, 31, 41 et 51.

La règle est disponible dans translation-checks 1.2.0, gratuite sur GitHub, pour les messages ICU, et dans Polyglot 1.2.0 pour les pluriels Android et les messages ICU. Les autres vérifications ajoutées cette semaine sont décrites dans la note sur les lettres d'un autre alphabet.

Mis à jour: