Saltar al contenido principal

Guía del agente: Uso de i18n-rosetta

i18n-rosetta es una herramienta CLI que traduce los archivos de configuración regional (locale) de su aplicación con un solo comando. Esta guía es para agentes de IA (o desarrolladores que trabajan con agentes de IA) que desean pasar de cero a tener archivos de configuración regional traducidos rápidamente.

:::tip ¿Ya está familiarizado? Si solo necesita los comandos, vaya a la Referencia de la CLI. Si desea crear y evaluar un método de traducción, consulte la Guía del agente de Arena. :::


Configuración del entorno

# No global install needed — npx runs it directly
npx i18n-rosetta sync

Requisitos:

  • Node.js 18+
  • Una clave API para su proveedor de traducción

Configuración de la clave API — rosetta necesita al menos una clave dependiendo de los métodos que utilice:

# Option 1: export (session only)
export OPENROUTER_API_KEY="sk-or-..." # for llm / llm-coached methods
export GOOGLE_TRANSLATE_API_KEY="AIza..." # for google-translate method

# Option 2: .env file in your project root (persistent, gitignored)
echo 'OPENROUTER_API_KEY=sk-or-...' > .env

Rosetta lee .env automáticamente. Obtenga una clave de OpenRouter en openrouter.ai/keys.


Primera sincronización

Rosetta detecta automáticamente sus archivos de configuración regional, su formato (JSON, TOML, YAML, PO) y sus idiomas de destino:

npx i18n-rosetta sync

Qué sucede:

  1. Carga i18n-rosetta.config.json (o detecta automáticamente la configuración)
  2. Escanea su archivo de configuración regional de origen, aplana las claves anidadas
  3. Compara con .i18n-rosetta.lock (hashes SHA-256 de valores traducidos anteriormente)
  4. Revisa .rosetta/tm.json en busca de traducciones en caché (Translation Memory)
  5. Traduce solo las claves modificadas, faltantes o desactualizadas mediante el método configurado
  6. Ejecuta el control de calidad (5 comprobaciones) en cada traducción
  7. Escribe las traducciones aprobadas en el archivo de configuración regional de destino
  8. Actualiza el archivo de bloqueo y la caché de TM

En una ejecución típica después de cambiar una clave, el paso 4 sirve 142 claves desde la caché y el paso 5 traduce 1 clave. Es por esto que las sincronizaciones posteriores son rápidas y económicas.


Configuración

Cree i18n-rosetta.config.json en la raíz de su proyecto:

{
"inputLocale": "en",
"pairs": {
"en-fr": { "method": "llm-coached" },
"en-ja": { "method": "google-translate" },
"en-crk": { "method": "api", "endpoint": "http://localhost:3000/translate" }
}
}

Campos clave:

CampoPropósitoPredeterminado
inputLocaleIdioma de origenen
pairsMapa de origen→destino con la configuración del método(requerido)
localesDirDónde se encuentran los archivos de configuración regional(detectado automáticamente)
modelModelo LLM para los métodos llm/llm-coachedgoogle/gemini-2.5-flash
batchSizeClaves por llamada a la API80 (LLM), 128 (Google)
jsonConcurrencyTraducciones regionales paralelas para claves JSON200
contentConcurrencyLlamadas a la API paralelas para la traducción de contenido48

Referencia completa: Configuración


Métodos de traducción

MétodoCuándo usarloCostoClave API necesaria
llmPropósito general, bueno para idiomas con muchos recursosPor token (depende del modelo)OPENROUTER_API_KEY
llm-coachedCuando tiene reglas gramaticales/diccionario para el idioma de destinoPor token + contexto de entrenamientoOPENROUTER_API_KEY
google-translateIdiomas con muchos recursos donde GT funciona bien$20/millón de caracteresGOOGLE_TRANSLATE_API_KEY
apiCanalización personalizada alojada detrás de un endpoint HTTPDeterminado por el servidorNinguna (el endpoint maneja la autenticación)
pluginMétodo preempaquetado instalado localmenteVaríaVaría

Detalles: Métodos de traducción


Datos de entrenamiento

Para los pares llm-coached, los datos de entrenamiento guían al LLM con conocimiento lingüístico explícito. Cree un archivo de entrenamiento:

coaching/fr.json
{
"grammar_rules": [
"Use formal register (vous) for all UI text",
"Adjectives agree in gender and number with the noun"
],
"dictionary": {
"dashboard": "tableau de bord",
"settings": "paramètres"
},
"style_notes": "Prefer active voice. Avoid anglicisms."
}

Haga referencia a él en la configuración de su par:

"en-fr": { "method": "llm-coached", "coachingFile": "coaching/fr.json" }

El control de calidad verifica que los términos del diccionario realmente aparezcan en el resultado; las infracciones se registran como advertencias [TERM].

Detalles: Datos de entrenamiento


Control de calidad

Cada traducción pasa por cinco comprobaciones automatizadas antes de escribirse en el disco:

ComprobaciónQué detectaEjemplo
Vacío/en blancoEl modelo no devolvió nada""
Eco de origenEl modelo devolvió la entrada en inglés sin cambios"Welcome" para japonés
Bucle de alucinaciónTrigramas repetidos"Qo' Qo' Qo' Qo'"
Inflación de longitudEl resultado es 4 veces o más largo que el origenOrigen de 10 caracteres → resultado de 50 caracteres
Cumplimiento de escrituraSistema de escritura incorrecto para la configuración regionalTexto latino para configuración regional en árabe

Las fallas se registran con el prefijo [GATE]. No hay alternativas silenciosas: si una traducción falla, se informa, no se acepta en silencio.

Detalles: Control de calidad


Memoria de traducción

Rosetta almacena en caché las traducciones en .rosetta/tm.json, indexadas por texto de origen + configuración regional + método. En sincronizaciones posteriores, las claves sin cambios se sirven desde la caché: sin llamadas a la API, sin costo.

[TM] 142 key(s) served from cache
Translating 3 key(s) to French (llm)... [OK]

Para omitir la caché en una ejecución: npx i18n-rosetta sync --no-tm

Detalles: Memoria de traducción


Archivos generados

Rosetta crea varios archivos en su proyecto. Conozca cuáles son para no eliminar o confirmar (commit) accidentalmente los incorrectos:

ArchivoPropósito¿Git?
.i18n-rosetta.lockHashes SHA-256 de los valores de origen traducidos (detección de cambios) — confirme esto
.i18n-rosetta-content.lockLo mismo, pero para archivos de contenido Markdown/MDX — confirme esto
.rosetta/tm.jsonCaché de la memoria de traducción — confirme esto (ahorra costos de API para el equipo)
.rosetta/coaching/Directorio de datos de entrenamiento — este es su conocimiento lingüístico
i18n-rosetta.config.jsonConfiguración del proyecto — confirme esto

Patrones comunes

Traducir un par de idiomas:

npx i18n-rosetta sync --pair en-fr

Traducir todos los pares configurados:

npx i18n-rosetta sync

Rosetta traduce todas las configuraciones regionales en paralelo. Con el almacenamiento en caché de TM, solo las claves modificadas llegan a la API.

Modo de contenido (Markdown/MDX para Docusaurus, Hugo, etc.):

npx i18n-rosetta sync --content

Traduce documentos, publicaciones de blog y archivos de contenido junto con el JSON de configuración regional. Utiliza concurrencia paralela (predeterminado: 48 llamadas simultáneas a la API). Ajústelo con --content-concurrency.

Ejecución de prueba (vista previa sin escribir):

npx i18n-rosetta sync --dry-run

Forzar la retraducción de claves específicas:

npx i18n-rosetta sync --force-keys "hero.title,nav.about"

Forzar la retraducción de todos los archivos de contenido:

npx i18n-rosetta sync --force-content

Comprobar el estado de la traducción:

npx i18n-rosetta status

Muestra la cobertura, los niveles de calidad y la información de los complementos para cada par.

Auditar alternativas no traducidas:

npx i18n-rosetta audit

Enumera todos los valores de alternativa [EN] que necesitan traducción.


Solución de problemas

ProblemaSolución
OPENROUTER_API_KEY not setExporte la clave o agréguela a .env en la raíz de su proyecto
No locale files foundEstablezca localesDir en la configuración, o asegúrese de que sus archivos de configuración regional coincidan con la nomenclatura estándar (en.json, fr.json)
[GATE] Script compliance failedSu configuración regional de destino obtuvo texto latino en lugar del sistema de escritura esperado: pruebe con un modelo diferente o agregue datos de entrenamiento
[GATE] Source echoEl modelo devolvió el inglés sin cambios: los datos de entrenamiento o un modelo diferente generalmente solucionan esto
Todas las traducciones en cachéEjecute con --no-tm para omitir la caché, o --force-keys para claves específicas
Conflictos en el archivo de bloqueo.i18n-rosetta.lock usa hashes SHA-256: los conflictos de fusión son seguros de resolver manteniendo cualquiera de las versiones y luego volviendo a ejecutar la sincronización

Qué sigue