Skip to content
··10 min de lectura

Traduje 3,9 Millones de Palabras en 4 Días con Agentes de IA en Paralelo

493 posts de blog a lo largo de 17 años, traducidos a 10 idiomas, ~4.900 archivos, ~3,9 millones de palabras. Los agentes en paralelo de Claude Code lo hicieron posible — pero el desastre con el coreano, el problema de la voz en cantonés y el límite de uso de 5 horas me enseñaron más que los éxitos.

Hace un mes, agregué 5 idiomas a DIALØGUE en 48 horas y escribí sobre cómo los documentos de planificación son el secreto para que la IA ejecute rápido.

Eso fueron 5 idiomas para una sola app con quizás 400 cadenas de UI.

Esta semana intenté algo mucho más grande: localizar todo mi blog — 493 posts que abarcan 17 años — en 10 idiomas. Vietnamita, indonesio, español, francés, portugués, alemán, japonés, coreano, chino simplificado y cantonés.

~4.900 archivos traducidos. ~3,9 millones de palabras. 4 días.

Esto no es una historia sobre la magia de la IA. Es una historia sobre lo que pasa de verdad cuando le lanzas miles de tareas de traducción a agentes de IA en paralelo — la orquestación que funciona, los fallos que no se notan hasta que lees el resultado, y la incómoda verdad sobre el control de calidad cuando las máquinas escriben a escala.


El Problema de la Escala

Mi blog se remonta a 2007. Algunos posts son actualizaciones de 300 palabras sobre marketing de búsqueda en Singapur. Otros son análisis de 5.000 palabras sobre relaciones entre EE.UU. y China o guías de reubicación para expatriados. El archivo incluye de todo: desde análisis de Yahoo SEM hasta reseñas de libros y lanzamientos de productos de IA.

Traducir 493 posts manualmente a 9 idiomas le llevaría semanas a un equipo de traductores profesionales. Quizás meses. Y costaría algo entre "incómodo" y "hipoteca la casa."

Pero yo ya había construido la infraestructura de i18n — el ruteo de next-intl, los componentes conscientes del locale, ISR para páginas en idiomas distintos al inglés — como parte de un esfuerzo de internacionalización más amplio. El stack técnico estaba listo. Solo necesitaba el contenido.


Día 1: Vietnamita y las Primeras Lecciones

Empecé con el vietnamita porque es algo personal — es mi primer idioma. Podía leer cada post traducido y notar de inmediato si algo sonaba mal.

Claude Code tradujo los 493 posts en una sola sesión. El proceso se veía limpio:

  1. Leer el archivo MDX en inglés
  2. Traducir el contenido, preservando toda la estructura del frontmatter
  3. Mantener las URLs, los bloques de código y los términos técnicos intactos
  4. Escribir el archivo traducido en content/blog/vi/YYYY/MM/DD/slug.mdx
  5. Despedirse con el equivalente vietnamita de "Cheers, Chandler"

La primera revisión de QA detectó el patrón que perseguiría a todos los idiomas: las URLs y las despedidas. El agente "traducía" las URLs internas del blog (convirtiendo /blog/2024/... en slugs en vietnamita que no existen), reemplazaba "Chandler" con una variante de nombre en vietnamita y, ocasionalmente, perdía el campo slug del frontmatter por completo.

Construí una lista de verificación de QA:

  • El número de archivos coincide con el original (493)
  • Sin archivos vacíos ni stub
  • Todo frontmatter tiene slug, title, date, categories
  • Sin URLs internas reescritas
  • La despedida sigue la convención del locale correspondiente
  • Para idiomas CJK: los caracteres nativos están efectivamente presentes

Esa lista se convirtió en la columna vertebral de cada locale siguiente.


Día 2: El Gran Avance con Agentes en Paralelo

Con el vietnamita terminado y la lista de QA probada, necesitaba ir más rápido. La característica estrella de Claude Code para este tipo de trabajo es el despacho de subagentes en paralelo — puedes lanzar múltiples agentes independientes que trabajan en archivos separados al mismo tiempo.

Así se veía la orquestación para el español:

Dispatching 30 translation agents...
├── Agent 1: 2007-2008 posts (42 posts)
├── Agent 2: 2009 posts (38 posts)
├── Agent 3: 2010-2011 posts (35 posts)
├── ...
├── Agent 28: 2025 Nov-Dec posts (12 posts)
├── Agent 29: 2026 Jan posts (8 posts)
└── Agent 30: 2026 Feb posts (9 posts)

Cada agente recibió un lote de posts, la guía de estilo, la lista de QA y la convención de despedida. Corrían en paralelo, escribiendo archivos de forma independiente. Sin necesidad de coordinación, porque cada agente toca archivos distintos.

Español: 493 posts traducidos en una sola sesión. Luego francés. Luego portugués. Luego alemán. Luego japonés.

Cinco idiomas en aproximadamente 12 horas. Esa es la parte que se siente como el futuro — ver tu terminal llenarse de 30 indicadores de progreso simultáneos, cada agente procesando una década de posts del blog mientras tú haces la cena.

Aquí hay una simulación de cómo se veía la sesión de traducción al cantonés (zh-HK) en la realidad — desde la planificación hasta el despacho y el QA:

Claude Code

El Patrón de Orquestación

El patrón que emergió:

  1. Pre-crear todos los directorios — los agentes fallan en silencio si el directorio de destino no existe
  2. Agrupar por rango de años — 10-15 posts por agente para posts normales, 2-3 por agente para posts de más de 3.000 palabras
  3. Incluir la guía de estilo en cada despacho — los agentes no tienen memoria compartida, así que cada uno necesita el contexto completo
  4. Ejecutar QA después de completar cada locale — conteo de archivos, archivos vacíos, frontmatter roto, reescritura de URLs, consistencia en la despedida
  5. Corregir los rezagados con agentes de limpieza específicos — siempre hay entre 5 y 15 posts que quedan incompletos o mal formados

El Desastre Coreano

Se suponía que el coreano sería rutinario. El mismo patrón que los otros 7 idiomas. Despachar agentes, esperar, QA, corregir rezagados.

En cambio, fue la peor calidad de traducción de cualquier locale.

El 72% de los posts en coreano no eran traducciones — eran resúmenes. Los agentes habían truncado más de 350 posts en abstracts de 2-3 párrafos, perdiendo todo el detalle, toda la personalidad, toda la matiz. Un análisis de 4.000 palabras sobre "Principles" de Ray Dalio se convirtió en un resumen de 200 palabras. Un tutorial detallado de SEM se redujo a "Este post habla sobre estrategias de marketing en motores de búsqueda."

El archivo de cadenas de UI (messages/ko.json) estaba incluso peor. Mezcla de coreano e inglés a lo largo de todo el archivo, con caracteres corruptos como "Ch및ler" en lugar de "Chandler." El carácter es coreano para "y" — de alguna manera el modelo lo sustituyó a mitad de una palabra.

Tuve que rehacer todo el locale desde cero. Cada uno de los posts. El segundo intento, con instrucciones más estrictas sobre preservar el contenido completo y respetar la extensión del post original, salió limpio.

Lección: la ejecución en paralelo amplifica los errores. Si tu prompt tiene un defecto sutil, 30 agentes cometerán el mismo error 30 veces más rápido. El QA no es opcional — es lo único que separa "listo" de "desastre."


El Problema Chino: 43 Commits para Hacerlo Bien

El chino simplificado (zh) fue el locale más laborioso. No por problemas de calidad — las traducciones estaban bien — sino porque 493 posts a lo largo de 43 commits separados te dice que la sesión seguía alcanzando límites.

Claude Code funciona sobre la API de Anthropic, y hay un límite de uso. Incluso en el nivel Max con Sonnet 4.6, las sesiones extendidas que despachan docenas de agentes en paralelo eventualmente alcanzan un período de enfriamiento de 5 horas. Para el chino, eso significó traducir en oleadas: ~50 posts, llegar al límite, esperar, continuar, llegar al límite de nuevo.

Las traducciones al chino también necesitaron más QA porque el contenido CJK tiene modos de fallo únicos:

  • Caracteres del script equivocado (kanji japonés mezclado en chino simplificado)
  • Un registro demasiado formal que suena a documento gubernamental en vez de blog
  • Puntuación occidental en lugar de puntuación china (,vs. , y 。vs. .)
  • Nombres traducidos que no deberían traducirse ("Claude" es "Claude" en chino, no 克劳德)

El Problema de la Voz en Cantonés

Cuando agregué el chino tradicional con voz cantonesa (zh-HK), me enfrenté a un desafío completamente diferente. Las traducciones necesitaban usar partículas específicas del cantonés — 嘅 (posesivo), 咗 (tiempo pasado), 喺 (en), 啲 (algunos), 冇 (no tener) — y mantener el tono casual y conversacional que define la escritura en cantonés.

Las traducciones al mandarín estándar suenan burocráticas en Hong Kong. "本网站提供中文版本" es mandarín correcto, pero un lector cantonés espera "呢個網站有中文版本." El mismo significado, una voz completamente diferente.

El desafío no es la exactitud de la traducción — es la autenticidad de la voz. El modelo puede producir cantonés gramaticalmente correcto, pero por defecto adopta un registro mandarín a menos que le indiques explícitamente que use partículas coloquiales y patrones de code-mixing.

Mi verificación de QA para el cantonés incluía hacer grep en cada archivo para verificar la presencia de partículas específicas del cantonés. 493 de 493 pasaron. Pero aún tuve que reescribir manualmente todo el archivo de cadenas de UI messages/zh-HK.json porque la primera versión era ~70% en inglés — el agente se había saltado la mayoría de las traducciones.


Lo Que Intenté con OpenAI Codex

En algún punto de las traducciones al alemán, llegué al límite de uso de Claude Code y decidí probar Codex de OpenAI mientras esperaba. Tenía un mes gratis de ChatGPT Plus, que incluye acceso a Codex.

Lo bueno: Codex produce documentos de planificación sólidos. Su análisis inicial del codebase y el enfoque de traducción propuesto era bien estructurado y razonable. Los tiempos de respuesta eran rápidos. Y sigue las instrucciones de cerca — casi demasiado de cerca, lo que puede ser una ventaja.

Lo malo: La versión que usé (gpt-5.2-codex) no podía ejecutar subagentes en paralelo. Procesaba los posts de forma secuencial — uno a la vez. Para 493 posts, eso no es viable. También trabajaba en ráfagas cortas, completando 5-10 posts antes de detenerse para pedir feedback. Cada vez, tenía que decir "continúa" para obtener el siguiente lote.

Cuando gpt-5.3-codex estuvo disponible a mitad de sesión, cambié. Mejor, pero sin ejecución en paralelo. La diferencia arquitectónica fundamental — Claude Code puede despachar 30+ agentes independientes que corren simultáneamente, mientras que Codex opera como un único proceso secuencial — hace que Claude Code sea dramáticamente más rápido para tareas de contenido masivo.

La comparación honesta: Codex es bueno para trabajo enfocado en un solo archivo. Es responsivo y sigue bien las instrucciones. Pero para el tipo de ejecución paralela masiva que yo necesitaba — 4.437 archivos en 9 locales — la arquitectura de agentes de Claude Code está en una categoría completamente diferente.


La Lista de Verificación Que lo Salvó Todo

Cada locale pasó por el mismo pipeline de QA:

✓ File count: 493/493
✓ Empty files: 0
✓ Small files (<100 bytes): 0
✓ Missing slugs: 0
✓ Rewritten URLs: 0
✓ Broken frontmatter: 0
✓ Wrong sign-off: 0
✓ Native characters present: 493/493

Para los idiomas CJK, agregué:

✓ Cantonese particles (嘅/咗/喺/啲/冇): 493/493
✓ No mixed-script contamination: PASS
✓ Chinese punctuation: PASS

Sin esta lista, habría subido los resúmenes coreanos a producción. Habría subido la UI en cantonés con 70% en inglés. Habría subido posts con enlaces internos rotos apuntando a slugs traducidos que no existen.

La lista de verificación no es burocracia. Es el único QA confiable cuando tu pipeline de producción genera miles de archivos que no puedes leer personalmente.


Los Números Finales

Idiomas11 (inglés + 10 traducciones)
Posts traducidos493 por idioma × 10 = ~4.900 archivos
Palabras~3,9 millones
Días calendario4 (24–27 de febrero)
Archivos de cadenas de UI10 archivos JSON de locale (~475 claves cada uno)
Plantillas de email10 locales
Datos de trayectoriaHitos + rutas de aprendizaje traducidos vía JSONB
Veces que se alcanzó el límitePerdí la cuenta
Locales rehechos por completo1 (coreano)

Lo Que Realmente Aprendí

1. Las guías de estilo lo son todo. La voz en cantonés, el nivel de formalidad en coreano, la despedida "Abraço" en portugués — no son decoración. Son la diferencia entre "traducido" y "localizado." Sin una guía de estilo, obtienes contenido gramaticalmente correcto que suena a formulario gubernamental.

2. Los agentes en paralelo son un multiplicador de fuerza — y un multiplicador de riesgo. Cuando 30 agentes ejecutan correctamente, terminas un idioma en una hora. Cuando 30 agentes cometen el mismo error, terminas con 350 posts truncados y un rehacerlo todo.

3. El QA no es opcional a escala. No puedes revisar manualmente 4.437 posts traducidos. Pero puedes automatizar verificaciones estructurales que detectan los fallos más comunes: archivos faltantes, frontmatter roto, URLs reescritas, despedidas incorrectas, contenido truncado.

4. La parte más difícil no es la traducción — es la voz. Cualquier LLM puede traducir texto. Lograr que suene como la persona que escribió el original — manteniendo la calidez, la informalidad, la curiosidad intelectual — en 9 idiomas y 17 años de estilo de escritura en evolución, eso requiere instrucciones explícitas y refinamiento iterativo.

5. Los límites de uso son una restricción real. Incluso en el nivel más alto, las sesiones extendidas con agentes en paralelo alcanzarán límites. Planifica para las interrupciones. Estructura tu trabajo para poder retomarlo donde lo dejaste.

6. Prueba con lectores reales. Yo podía hacer QA de las traducciones al vietnamita por mi cuenta. Para el coreano o el japonés, me apoyé en verificaciones estructurales y confié en el modelo. Eso es una brecha conocida. Si te tomas en serio la calidad en idiomas que no hablas, consigue lectores nativos que revisen una muestra.


¿Valió la Pena?

Mi blog ahora llega a lectores en su idioma nativo en 11 locales. Un profesional de marketing vietnamita en Ciudad Ho Chi Minh puede leer mi análisis de 2011 sobre el mercado de búsqueda de Singapur en vietnamita. Un investigador de IA japonés puede leer mis posts de 2024 sobre la construcción de Sydney en japonés. Un hablante de cantonés en Hong Kong recibe contenido que suena como si hubiera sido escrito para él, no traducido para él.

¿Cada traducción es perfecta? No. La traducción automática a esta escala tiene bordes ásperos. Algunas metáforas no aterrizan igual. Algunas referencias culturales necesitan una localización que va más allá de la sustitución palabra por palabra.

Pero la alternativa era tener 493 posts solo en inglés, accesibles para quizás el 20% de los usuarios de internet del mundo. Ahora es accesible para más del 60%.

Cuatro días. 3,9 millones de palabras. La infraestructura está en su lugar. Cada nuevo post que escribo en inglés se traduce a 10 idiomas como parte del proceso de despliegue.

La pregunta real no es si la traducción de IA es perfecta. Es si la perfección es el enemigo de la accesibilidad.

Un abrazo, Chandler

Seguir leyendo

Mi Trayectoria
Conectar
Idioma
Preferencias