En 14 de nuestros 42 idiomas, la forma plural llamada "one" no es solo para 1

Idiomas

La cadena de una app "One habit left today" tiene una pareja plural, "%d habits left today". Android elige entre ellas por categoría: el inglés usa "one" para 1 y "other" para todo lo demás. En ruso, la categoría "one" se usa para 1, 21, 31, 41, etc. Nuestra comprobación de traducción falló dos veces el mismo día, una en cada dirección.

La traducción correcta que rechazó

El 2 de noviembre volvimos a ejecutar nuestro kit de traducción en su app de ejemplo. Para el "one" en ruso, el modelo escribió "Осталась %d привычка на сегодня": "%d habit left today", con el número. Nuestra comprobación la comparó con la forma "one" en inglés, encontró un %d que el inglés no tenía y la rechazó como un marcador de posición inventado. El modelo tenía razón. Un usuario con 21 hábitos restantes recibe esta forma, por lo que debe mostrar el número. Cambiamos la comprobación: una forma puede añadir el recuento que usa la forma "other" en inglés. La siguiente ejecución escribió las 350 cadenas del ejemplo.

La traducción incorrecta que habría aprobado

La misma comprobación dejó pasar lo contrario. Si el modelo hubiera escrito "Осталась одна привычка" ("one habit left"), no se perdía nada en la cadena, así que pasó, y al usuario con 21 hábitos restantes se le habría dicho que tiene uno. La regla antigua permitía que cualquier forma "one" omitiera el número, porque en inglés "one" es solo 1.

Ahora la comprobación sabe qué números cubre cada categoría, según CLDR, las reglas de plural de Unicode que usan Android e ICU. Una forma de una categoría que cubre varios números debe mostrar el número. Una forma para un solo número puede omitirlo: el "one" en alemán es solo 1, así que "Noch eine Gewohnheit" está bien allí.

Dónde "one" no es solo 1

En 14 de los 41 idiomas de destino que conoce la información de CLDR en Babel 2.10, "one" cubre más que el número 1:

En los mensajes de ICU, una rama propia cambia esto. Con =0{…} en el mensaje, el "one" en francés se queda solo con 1, y la comprobación lo tiene en cuenta.

Comprobado con las cadenas propias de Android

Antes de publicar la regla, la ejecutamos con los mensajes plurales de las cadenas del framework de Android: 897 traducciones en 39 de nuestros idiomas. No detectó ninguna. Los traductores de Google ponen el número en cada rama que cubre varios números, incluida la rama «uno» del ruso, incluso donde el inglés le da a 1 una rama propia. Cuando sacamos el número a mano de una rama «uno» del ruso, la comprobación indicó que esa forma también se usa para 21, 31, 41 y 51.

La regla está en translation-checks 1.2.0, gratis en GitHub, para mensajes ICU, y en Polyglot 1.2.0 para plurales de Android y mensajes ICU. Las otras comprobaciones que añadimos esta semana están en la nota sobre letras de otro alfabeto.

Actualizado: