The problem
His blog goes back to 2007. It holds 300-word updates and 5,000-word deep dives on many topics. He says translating 493 posts manually “would take a professional translation team weeks. Maybe months.” He also says it would cost somewhere between “uncomfortable” and “refinance the house.” He had already built the i18n infrastructure as part of a broader internationalization push. In his words, “I just needed the content.”
The blueprint (as he describes it)
-
Build the infrastructure first. Before translating, he already had next-intl routing, locale-aware components and ISR for non-English pages in place.
-
Start with a language you can read. He began with Vietnamese, his first language, so he “could read every translated post and immediately tell if something sounded wrong.” Claude Code translated all 493 posts in one session. For each post it did the following:
- Read the English MDX file.
- Translated the content and preserved the frontmatter structure.
- Kept URLs, code blocks and technical terms intact.
- Wrote the file to a locale folder (content/blog/vi/YYYY/MM/DD/slug.mdx).
- Signed off with the Vietnamese equivalent of “Cheers, Chandler”.
-
Turn the first failures into a checklist. The first QA pass showed the agent rewriting internal blog URLs into slugs that don’t exist. It also replaced “Chandler” with a Vietnamese name variant and sometimes dropped the frontmatter slug field. His checklist covers these points:
- File count matches the source (493).
- No empty or stub files.
- Frontmatter has slug, title, date and categories.
- No rewritten internal URLs.
- The sign-off matches the locale.
- For CJK languages, native characters are present.
He says it “became the backbone of every subsequent locale.”
-
Fan out with parallel subagents. For Spanish he dispatched 30 translation agents, each assigned a year range of posts. Each agent got its batch, the style guide, the QA checklist and the sign-off convention. “No coordination needed because each agent touches different files.” Spanish, French, Portuguese, German and Japanese took “roughly 12 hours.”
-
Follow the orchestration rules that emerged.
- Pre-create all directories, because “agents fail silently if the target directory doesn’t exist.”
- Batch by year range, with 10-15 posts per agent for normal posts and 2-3 per agent for 3,000+ word posts.
- Include the style guide in every dispatch, because “agents have no shared memory.”
- Run QA after each locale.
- Fix stragglers with targeted cleanup agents. He says “there are always 5-15 posts that get missed or malformed.”
-
Work around usage caps in waves. On Max tier with Sonnet 4.6, long parallel sessions hit “a 5-hour cooling period.” For Simplified Chinese he translated ~50 posts, hit the cap, waited and continued. The locale took 43 separate commits.
-
Add language-specific checks. For CJK languages he checked for several problems:
- Characters from the wrong script.
- An overly formal register.
- Western punctuation instead of Chinese punctuation.
- Names that should not be translated.
For Cantonese (zh-HK), the model “defaults to a Mandarin register” unless told to use colloquial particles and code-mixing. He grepped every file for Cantonese-specific particles.
-
Redo a locale when the checks fail. For Korean, 72% of the posts were summaries, not translations. He redid the whole locale. The second attempt used “stricter instructions about preserving full content and matching the source post’s length” and came out clean. His lesson: “parallel execution amplifies mistakes.”
-
Check the UI string files separately. messages/ko.json mixed Korean and English and had corrupted characters. He manually rewrote messages/zh-HK.json because the first version was “~70% English.”
-
Make it part of deployment. “Every new post I write in English gets translated into 10 languages as part of the deployment process.”
He also tried OpenAI Codex while he was capped on Claude Code, using a free month of ChatGPT Plus. He says gpt-5.2-codex “couldn’t run parallel subagents” and stopped after 5-10 posts to ask for feedback. gpt-5.3-codex was “Better, but still no parallel execution.” His view is that Codex suits “focused, single-file work.”
Stated results
- ~4,900 translated files and ~3.9 million words in 4 calendar days (Feb 24–27).
- 10 locale JSON UI string files (~475 keys each) and email templates in 10 locales. Journey data was translated via JSONB.
- Five languages in “roughly 12 hours.”
- QA counts reported for every locale: 493/493 files, and 0 empty files, missing slugs, rewritten URLs, broken frontmatter and wrong sign-offs.
- Cantonese particle check: 493 out of 493 passed.
- 1 complete locale redo (Korean). Times he hit the usage cap: “Lost count.”
- His claim that the blog was accessible to “maybe 20%” of the world’s internet users and is now accessible to “over 60%” is his own estimate of reach, not a measured result.
- Traffic, readership or search results: None stated.
- Per the October 2026 update, the archive now spans 13 locales (English plus 12 translations).
Caveats
- This is his own blog. In the source text he does not sell a product, course or kit. He links to an earlier post about localizing his app DIALØGUE and mentions his posts about building Ask Sydney.
- The February 2026 figures are, in his words, “a snapshot.” His setup is now “a single model, DeepSeek V4 Pro via OpenCode.” The update does not say how the current workflow differs from the one described.
- The counts are inconsistent. The post says 10 languages in most places, but elsewhere it says “9 languages” and “4,437 files across 9 locales.” It also calls Korean the same pattern as “the other 7 languages.” He says 30 agents can finish a language “in an hour,” but reports five languages in roughly 12 hours.
- For languages he does not speak, he “relied on structural checks and trusted the model.” He calls this “a known gap” and recommends native readers spot-check a sample. He also says “Is every translation perfect? No.”
- The post mentions a simulation of the Cantonese session that is not part of the source text.
- Cost is not stated. He does not give the Max tier price or the API spend.
- Handles: X @ChandlerNguyen, Bluesky @chandlernguyen.com, LinkedIn linkedin.com/in/chandlernguyen (verified 2026-10-19 from the page’s author schema sameAs links and his site; his X bio links chandlernguyen.com). Threads and Instagram: not checked.
Sources
- https://chandlernguyen.com/blog/2026/02/27/i-translated-3-point-9-million-words-in-4-days-with-parallel-ai-agents/ (primary: first-person build write-up on his own blog, datePublished 2026-02-27 per page schema, with an October 2026 update)
Want agents like these working your distribution? See the Agent Stack Teardown. Get new teardowns weekly: subscribe (double opt-in).
Get one teardown a week.
Same format, a new operator every issue. Double opt-in.