Por qué un plural cambia de un idioma a otro
Las categorías zero, one, two, few, many y other siguen las reglas CLDR de cada idioma. En inglés y en español, one solo significa 1; en francés cubre el 0 y el 1; el ruso y el polaco añaden few y many; el árabe usa las seis; el japonés tiene una sola, other. Un mensaje de dos ramas escrito para el inglés queda incompleto en cuanto lo traduces.
La herramienta lee estas reglas en tu navegador (Intl.PluralRules): las categorías y los números de ejemplo que se muestran son los del propio idioma, sin ninguna tabla que mantener.
La trampa del =1 con gen-l10n
Una rama =1 se convierte en la categoría one en el código que genera flutter gen-l10n. En francés esa categoría también se aplica al cero: con count = 0, se mostraría "1 article restant" (1 artículo restante). Es preferible la categoría one con el número en el texto, o añadir una rama =0: la herramienta la ofrece como casilla. Los detalles están en la guía sobre plurales y placeholders ICU.
Cómo usar el resultado
- Copia la línea
"key": "{count, plural, …}" de cada idioma en el archivo app_xx.arb correspondiente.
- Añade los metadatos
@key una sola vez, en el archivo de plantilla.
- Ejecuta
flutter gen-l10n: una rama other que falta o una llave sin cerrar detiene la generación con el nombre del archivo.
Para verificar después que ninguna traducción ha omitido o renombrado su placeholder, usa el verificador de claves faltantes ARB.
Limitaciones de la herramienta
La herramienta genera la estructura; el texto de cada forma lo escribes tú. No gestiona mensajes select ni plurales anidados, y no duplica los apóstrofos si activaste use-escaping en l10n.yaml.