Blog
Feature
14 de febrero de 20267 min

i18n: 1993 claves, 6 idiomas, 9 pasadas de traducción automática

TAMSIV nació en francés. Toda la interfaz, cada mensaje de error, todo codificado. Cuando decidí soportar 6 idiomas (FR, EN, DE, ES, IT, PT), conté las cadenas a extraer: 1993 claves de traducción.

La extracción

Primer paso: reemplazar cada cadena francesa por una llamada t('key'). En 35 archivos. A mano. Estructuré las claves por pantalla: feed.empty_state, agenda.filter.participating, profile.settings.language.

El script de traducción automática

¿Traducir 1993 claves manualmente a 5 idiomas? Imposible. Escribí un script npm run translate que envía las claves francesas a OpenRouter (Gemini 2.5 Flash). El LLM comprende el contexto de la aplicación: "Mémo vocal" se convierte en "Voice memo" y no "Vocal memo".

Las 9 pasadas

La primera pasada tradujo la mayor parte del corpus. Luego, cada nueva función añadía claves: gamificación (47 claves), agenda (62), grupos (89). El script detecta las claves que faltan y solo vuelve a traducir el delta.

La detección automática de idioma

En el primer lanzamiento, TAMSIV detecta el idioma del sistema. Si es compatible, lo usa. Si no, recurre al inglés. La elección se guarda en la base de datos.

Mantener la sincronización

Lo más difícil: el mantenimiento. Cada modificación en francés debe propagarse. Si se modifica fr.json, el script se ejecuta automáticamente a través de GitHub Actions. 6 idiomas mantenidos casi en tiempo real por unos pocos céntimos por pasada.