Traduzi 3,9 Milhões de Palavras em 4 Dias com Agentes de IA em Paralelo
493 posts de blog ao longo de 17 anos, traduzidos para 10 idiomas, ~4.900 arquivos, ~3,9 milhões de palavras. Os agentes paralelos do Claude Code tornaram isso possível — mas o desastre com o coreano, o problema de voz no cantonês e o limite de uso de 5 horas me ensinaram mais do que os sucessos.
Um mês atrás, eu adicionei 5 idiomas ao DIALØGUE em 48 horas e escrevi sobre como documentos de planejamento são o segredo para uma execução rápida com IA.
Foram 5 idiomas para um único app com talvez 400 strings de interface.
Essa semana, tentei algo muito maior: localizar todo o meu blog — 493 posts ao longo de 17 anos — para 10 idiomas. Vietnamita, indonésio, espanhol, francês, português, alemão, japonês, coreano, chinês simplificado e cantonês.
~4.900 arquivos traduzidos. ~3,9 milhões de palavras. 4 dias.
Isso não é uma história sobre IA sendo mágica. É uma história sobre o que acontece de verdade quando você joga milhares de tarefas de tradução em agentes de IA rodando em paralelo — a orquestração que funciona, as falhas que só aparecem quando você lê o resultado, e a verdade incômoda sobre controle de qualidade quando máquinas escrevem em escala.
O Problema de Escala
Meu blog existe desde 2007. Alguns posts são atualizações de 300 palavras sobre search marketing em Cingapura. Outros são análises de 5.000 palavras sobre relações EUA-China ou guias de relocação para expatriados. O arquivo inclui de tudo: análises de SEM no Yahoo a resenhas de livros e lançamentos de produtos de IA.
Traduzir 493 posts manualmente para 9 idiomas levaria semanas para uma equipe profissional de tradução. Talvez meses. E custaria algo entre "desconfortável" e "refinanciar a casa."
Mas eu já tinha construído a infraestrutura de i18n — roteamento com next-intl, componentes com suporte a locale, ISR para páginas em idiomas diferentes do inglês — como parte de um esforço maior de internacionalização. O stack técnico estava pronto. Eu só precisava do conteúdo.
Dia 1: Vietnamita e as Primeiras Lições
Comecei com o vietnamita porque é pessoal — é minha primeira língua. Eu conseguia ler cada post traduzido e saber imediatamente se algo soava estranho.
O Claude Code traduziu todos os 493 posts em uma sessão. O processo parecia limpo:
- Ler o arquivo MDX em inglês
- Traduzir o conteúdo, preservando toda a estrutura do frontmatter
- Manter URLs, blocos de código e termos técnicos intactos
- Escrever o arquivo traduzido em
content/blog/vi/YYYY/MM/DD/slug.mdx - Encerrar com o equivalente vietnamita de "Abraços, Chandler"
A primeira passagem de QA revelou o padrão que perseguiu todos os idiomas: URLs e assinaturas. O agente "traduzia" URLs internas do blog (transformando /blog/2024/... em slugs vietnamitas que não existem), substituía "Chandler" por uma variação vietnamita do nome e, às vezes, perdia o campo slug do frontmatter por completo.
Montei um checklist de QA:
- Contagem de arquivos bate com a fonte (493)
- Sem arquivos vazios ou incompletos
- Todo frontmatter tem
slug,title,date,categories - Nenhuma URL interna reescrita
- Assinatura segue a convenção do locale de destino
- Para idiomas CJK: caracteres nativos realmente presentes
Esse checklist virou a espinha dorsal de todos os locales seguintes.
Dia 2: O Avanço com Agentes em Paralelo
Com o vietnamita concluído e o checklist de QA validado, eu precisava ir mais rápido. O recurso matador do Claude Code para esse tipo de trabalho é o dispatch de subagentes em paralelo — você pode iniciar múltiplos agentes independentes que trabalham em arquivos separados ao mesmo tempo.
Veja como ficou a orquestração para o espanhol:
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 recebeu um lote de posts, o guia de estilo, o checklist de QA e a convenção de assinatura. Eles rodaram em paralelo, escrevendo arquivos de forma independente. Sem necessidade de coordenação — cada agente mexe em arquivos diferentes.
Espanhol: 493 posts traduzidos em uma sessão. Depois francês. Depois português. Depois alemão. Depois japonês.
Cinco idiomas em aproximadamente 12 horas. É essa parte que parece o futuro — ver o terminal se encher de 30 indicadores de progresso simultâneos, cada agente processando uma década de posts enquanto você faz o jantar.
Aqui está uma simulação de como a sessão de tradução para cantonês (zh-HK) se pareceu de verdade — do planejamento ao dispatch até o QA:
O Padrão de Orquestração
O padrão que emergiu:
- Pré-criar todos os diretórios — agentes falham silenciosamente se o diretório de destino não existe
- Dividir por faixa de anos — 10 a 15 posts por agente para posts normais, 2 a 3 por agente para posts com mais de 3.000 palavras
- Incluir o guia de estilo em cada dispatch — agentes não compartilham memória, então cada um precisa do contexto completo
- Rodar QA após cada locale concluído — contagem de arquivos, arquivos vazios, frontmatter quebrado, URLs reescritas, consistência de assinatura
- Corrigir arquivos problemáticos com agentes de limpeza pontuais — sempre há 5 a 15 posts que ficam faltando ou saem com defeito
O Desastre com o Coreano
O coreano deveria ser rotineiro. O mesmo padrão dos outros 7 idiomas. Dispatch dos agentes, esperar, QA, corrigir os problemáticos.
Em vez disso, foi a pior qualidade de tradução de qualquer locale.
72% dos posts em coreano não eram traduções — eram resumos. Os agentes tinham truncado mais de 350 posts em abstratos de 2 a 3 parágrafos, perdendo todos os detalhes, toda a personalidade, toda a nuance. Uma análise de 4.000 palavras sobre "Principles" de Ray Dalio virou um resumo de 200 palavras. Um tutorial detalhado de SEM virou "Este post discute estratégias de search engine marketing."
O arquivo de strings da interface (messages/ko.json) estava ainda pior. Mistura de coreano e inglês por todo lado, com caracteres corrompidos como "Ch및ler" em vez de "Chandler." O caractere 및 é a palavra coreana para "e" — de alguma forma, o modelo o inseriu no meio de uma palavra.
Tive que refazer o locale inteiro do zero. Cada post. Na segunda tentativa, com instruções mais rígidas sobre preservar o conteúdo completo e respeitar o tamanho do post original, o resultado saiu limpo.
Lição: execução em paralelo amplifica erros. Se o seu prompt tem uma falha sutil, 30 agentes vão cometer o mesmo erro 30 vezes mais rápido. QA não é opcional — é a única coisa que separa "concluído" de "desastre."
O Problema com o Chinês: 43 Commits para Acertar
O chinês simplificado (zh) foi o locale mais trabalhoso. Não por problemas de qualidade — as traduções eram boas — mas 493 posts em 43 commits separados indicam que a sessão ficou batendo em limites repetidamente.
O Claude Code roda na API da Anthropic, e existe um limite de uso. Mesmo no plano Max com Sonnet 4.6, sessões longas que disparam dezenas de agentes em paralelo eventualmente batem em um período de espera de 5 horas. Para o chinês, isso significou traduzir em ondas: ~50 posts, bater no limite, esperar, continuar, bater de novo.
As traduções para chinês também precisaram do QA mais minucioso porque conteúdo CJK tem falhas específicas:
- Caracteres do script errado (kanji japonês misturado no chinês simplificado)
- Registro excessivamente formal que parece documento governamental em vez de blog
- Pontuação ocidental no lugar da chinesa (,vs. , e 。vs. .)
- Nomes traduzidos que não deveriam ser traduzidos ("Claude" é "Claude" em chinês, não 克劳德)
O Problema de Voz no Cantonês
Quando adicionei o chinês tradicional com voz cantonesa (zh-HK), me deparei com um desafio completamente diferente. As traduções precisavam usar partículas específicas do cantonês — 嘅 (possessivo), 咗 (passado), 喺 (em/no), 啲 (alguns), 冇 (não ter) — e manter o tom casual e conversacional que define a escrita em cantonês.
Traduções padrão em mandarim soam burocráticas em Hong Kong. "本网站提供中文版本" está correto em mandarim, mas um leitor cantonês espera "呢個網站有中文版本." Mesmo significado, voz completamente diferente.
O desafio não é a precisão da tradução — é a autenticidade de voz. O modelo consegue produzir cantonês gramaticalmente correto, mas padroniza para um registro mandarim, a não ser que você instrua explicitamente a usar partículas coloquiais e padrões de code-mixing.
Meu checklist de QA para o cantonês incluía usar grep em cada arquivo para verificar a presença de partículas específicas do cantonês. 493 de 493 passaram. Mas ainda tive que reescrever manualmente o arquivo de strings messages/zh-HK.json porque a primeira versão estava ~70% em inglês — o agente tinha pulado a maioria das traduções.
O Que Experimentei com o OpenAI Codex
Em algum ponto durante as traduções do alemão, bati no limite de uso do Claude Code e decidi testar o Codex da OpenAI enquanto esperava. Eu tinha um mês grátis do ChatGPT Plus, que inclui acesso ao Codex.
O bom: O Codex produz documentos de planejamento sólidos. Sua análise inicial do codebase e a abordagem de tradução proposta eram bem estruturadas e razoáveis. Os tempos de resposta eram rápidos. E ele segue instruções à risca — quase rigoroso demais, o que pode ser uma funcionalidade.
O ruim: A versão que usei (gpt-5.2-codex) não conseguia rodar subagentes em paralelo. Processava posts sequencialmente — um de cada vez. Para 493 posts, isso não é viável. Também funcionava em rajadas curtas, completando 5 a 10 posts antes de parar para pedir feedback. Toda vez, eu tinha que digitar "continue" para obter o próximo lote.
Quando o gpt-5.3-codex ficou disponível no meio da sessão, migrei. Melhor, mas ainda sem execução em paralelo. A diferença arquitetural fundamental — o Claude Code pode disparar 30+ agentes independentes rodando simultaneamente, enquanto o Codex opera como um único processo sequencial — torna o Claude Code dramaticamente mais rápido para tarefas de conteúdo em massa.
A comparação honesta: O Codex é bom para trabalho focado em um único arquivo. É responsivo e segue diretrizes bem. Mas para o tipo de execução paralela em massa que eu precisava — 4.437 arquivos em 9 locales — a arquitetura de agentes do Claude Code está em uma categoria completamente diferente.
O Checklist Que Salvou Tudo
Cada locale passou pelo mesmo 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 idiomas CJK, adicionei:
✓ Cantonese particles (嘅/咗/喺/啲/冇): 493/493
✓ No mixed-script contamination: PASS
✓ Chinese punctuation: PASS
Sem esse checklist, eu teria colocado os resumos coreanos em produção. Teria colocado a interface cantonesa com 70% em inglês. Teria colocado posts com links internos quebrados apontando para slugs traduzidos que não existem.
O checklist não é burocracia. É o único QA confiável quando seu pipeline de produção gera milhares de arquivos que você não consegue ler pessoalmente.
Os Números Finais
| Idiomas | 11 (inglês + 10 traduções) |
| Posts traduzidos | 493 por idioma × 10 = ~4.900 arquivos |
| Palavras | ~3,9 milhões |
| Dias de calendário | 4 (24 a 27 de fev) |
| Arquivos de strings da interface | 10 arquivos JSON de locale (~475 chaves cada) |
| Templates de e-mail | 10 locales |
| Dados de jornada | Marcos e trilhas de aprendizado traduzidos via JSONB |
| Vezes que bati no limite de uso | Perdi a conta |
| Locales completamente refeitos | 1 (coreano) |
O Que Aprendi de Verdade
1. Guias de estilo são tudo. A voz cantonesa, o nível de formalidade no coreano, o "Abraços" no português — não são detalhes decorativos. São a diferença entre "traduzido" e "localizado." Sem um guia de estilo, você obtém conteúdo gramaticalmente correto que parece formulário governamental.
2. Agentes em paralelo são um multiplicador de força — e um multiplicador de risco. Quando 30 agentes executam corretamente, você termina um idioma em uma hora. Quando 30 agentes cometem o mesmo erro, você obtém 350 posts truncados e um retrabalho completo.
3. QA não é opcional em escala. Você não consegue revisar manualmente 4.437 posts traduzidos. Mas você pode automatizar verificações estruturais que capturam as falhas mais comuns: arquivos faltando, frontmatter quebrado, URLs reescritas, assinaturas erradas, conteúdo truncado.
4. O mais difícil não é a tradução — é a voz. Qualquer LLM consegue traduzir texto. Fazer soar como a pessoa que escreveu o original — mantendo o calor humano, a informalidade, a curiosidade intelectual — em 9 idiomas e 17 anos de estilo de escrita em evolução, isso exige instrução explícita e refinamento iterativo.
5. Limites de uso são uma restrição real. Mesmo no plano mais alto, sessões longas com agentes em paralelo vão bater em limites. Planeje para interrupções. Estruture seu trabalho de forma que você consiga retomar de onde parou.
6. Teste com leitores reais. Eu conseguia fazer QA nas traduções vietnamitas por conta própria. Para coreano ou japonês, dependi de verificações estruturais e confiei no modelo. Esse é um gap conhecido. Se você leva a qualidade a sério em idiomas que não fala, consiga leitores nativos para fazer uma verificação amostral.
Valeu a Pena?
Meu blog agora alcança leitores no idioma deles em 11 locales. Um profissional de marketing vietnamita em Ho Chi Minh City consegue ler minha análise de 2011 sobre o mercado de search em Cingapura em vietnamita. Um pesquisador de IA japonês consegue ler meus posts de 2024 sobre construir o Sydney em japonês. Um falante de cantonês em Hong Kong recebe conteúdo que parece ter sido escrito para ele, não traduzido para ele.
Toda tradução é perfeita? Não. A tradução por máquina nessa escala tem imperfeições. Algumas metáforas não funcionam. Algumas referências culturais precisam de localização que vai além da substituição palavra por palavra.
Mas a alternativa era ter 493 posts em inglês apenas, acessíveis para talvez 20% dos usuários de internet do mundo. Agora é acessível para mais de 60%.
Quatro dias. 3,9 milhões de palavras. A infraestrutura está no lugar. Cada novo post que escrevo em inglês é traduzido para 10 idiomas como parte do processo de deploy.
A verdadeira questão não é se a tradução por IA é perfeita. É se perfeito é inimigo do acessível.
Abraços, Chandler





