我在 48 小时内给 DIALØGUE 增加了 5 种语言
我先让 Claude Code 写出“本地化不是翻译”的规划文档,再看它用并行 agents 在 5 种语言上执行,把直译短语变成真正母语用户会说的话。
几天前,有个用户问我 DIALØGUE 支不支持西班牙语。
当时不支持。
48 小时后,它支持了 5 种语言:西班牙语、越南语、日语、韩语和简体中文。不是只翻译几个 UI 按钮,而是完整原生本地化。生成出来的播客听起来像为当地市场写的,不是机械翻译。
Five languages in 48 hours 听起来像我临时招了团队或熬了几天通宵。其实都没有。
我给 Claude Code 高层方向,它负责写规划文档,再按文档执行,而且经常在不同文件上并行开多个 agent。
---
秘诀:先把计划写对,执行自然很快
有意思的点是:规划文档不是我写的,是 Claude Code 在我指导下写出来的。
我只描述目标:“请写一份 localization style guide,重点是自然本地化而不是逐词翻译。要有西语、越语、日语、韩语、中文的示例。覆盖语气正式程度和文化语境。”
Claude Code 给出了 1,000+ 行风格指南、一份完整 checklist、和一份 backend pipeline playbook。然后它按自己写的计划把工作执行完。
1. Style Guide
这不是术语表,而是一份“方法论文档”。重点解释 *怎么* 做本地化,且每种语言都有 before/after 示例。
西班牙语的示例:
| English | Literal (Wrong) | Natural (Right) |
|---------|-----------------|-----------------|
| "Ideas, Produced" | "Ideas, Producidas" | "De la Idea, al Podcast" |
| "Researched, Not Recycled" | "Investigado, No Reciclado" | "Contenido Original, Sin Copiar" |
| "You Direct" | "Tú Diriges" | "Tú Decides" |
直译在语法上没错,但听感就是翻译腔。自然版本则保留了 *意图*,是西语营销人真实会写出来的话。
这份指南还覆盖正式度(如日语用 です/ます,韩语用 합쇼체)、文化语境、常见误区。Claude Code 做翻译时会自动按这些原则执行。
2. Localization Checklist
这份清单列出“新增一种语言”所有必须改的文件:
Required(必须改):
- Frontend:messages/{locale}.json(约 2,200 个 key)
- Backend:locales/{locale}.json(约 82 个 key)
- Language Utils:language_utils.py 里的 3 个函数
- Speech Generation:gemini_voice_instructions.py 里的 1 个函数
- Voice Preview:7 条本地化示例句
- Content Moderation:关键词 + 提示词
- Smoke Tests:加入测试矩阵
Optional(增强质量):
- 按语言定制 host/audience profiles
- 本地化 prompt templates
- 按风格定制 voice instructions
这份 checklist 的价值是“防遗漏”。Claude Code 会按它逐项推进。
3. Backend Playbook
它把播客生成中的语言处理写得很清楚:
- outline generation 如何用 Gemini 3 Flash + 语言指令
- dialogue generation 如何用 Claude Sonnet 4.5 + 文化语境
- speech generation 如何用 Gemini TTS + 语言特定指导
这三份文档一齐后,新增语言就变成工程化流程。Claude Code 读 checklist、按 style guide 执行、按 playbook 更新文件。
---
“直接翻译就好”的问题
我先坦白:我最初也想过直接把内容扔给翻译 API,一把梭。“Create Podcast” 变成 “Crear Podcast”,不就行了吗?
这种做法会产出垃圾。我自己在越南语和英语之间长大,这件事感受很深:直译会把表达的灵魂直接磨没。
翻译保留的是词,本地化保留的是意思。style guide 编码的就是这件事。
| Language | Literal Translation | Native Localization |
|----------|--------------------|--------------------|
| Vietnamese | "Ý tưởng, Được Sản Xuất" | "Từ Ý Tưởng → Đến Podcast" |
| Japanese | "アイデア、制作された" | "アイデアを、カタチに" (Ideas into form) |
| Korean | "아이디어, 제작됨" | "아이디어를, 현실로" (Ideas into reality) |
| Spanish | "Ideas, Producidas" | "De la Idea, al Podcast" |
| Chinese | "想法,已制作" | "从想法,到播客" |
每种语言都要这种细度,而且这还只是 UI。真正难的是播客内容本身。
---
播客必须有“母语感”的主持人
有个我之前没预料到的点:主持人名字影响很大。
英文版默认主持人是 Alex 和 Maya。中性、通用,没问题。
但如果你生成的是越南语播客,主持人还叫 Alex 和 Maya?听感会很奇怪。作为越南人,我可以很直接地说:它会像一部低质量美剧配音版。 :D
所以我给每种语言都配了本地主持人名:
| Language | Host 1 | Host 2 |
|----------|--------|--------|
| English | Alex | Maya |
| Vietnamese | Minh | Lan |
| Japanese | 太郎 (Tarō) | 花子 (Hanako) |
| Korean | 민준 (Minjun) | 수진 (Sujin) |
| Spanish | Carlos | María |
| Chinese | 明辉 | 雅琴 |
但只有名字还不够。AI 还必须理解文化语境。
日本 tech 播客的对话规范,和美国不一样。正式度、表达分歧的方式、来回节奏都不同。
所以我又做了语言特定 prompt 指令。越语里指定用 “bạn”(非生硬、但保留尊重);日语指定 です/ます(礼貌且不僵硬);韩语指定 합쇼체(正式礼貌)。
这种东西不能靠“自动化默认”搞定。是我过去在亚太市场工作多年形成的直觉,关键是把这种文化经验写进 prompt,让 AI 能稳定执行。编码完成后,Claude Code 就能在几千条字符串上持续一致地应用它。
---
这套 AI 模型组合为什么有效
从技术角度看,这一块很有意思。
DIALØGUE 用的是 3 个模型做 3 类任务。不是为了炫复杂,而是每个模型在对应任务上确实更强。
任务 1:Research & Outline → Gemini 3 Flash
用户输入主题后,第一步是 research。AI 需要:
-
实时检索网络信息
-
汇总成结构化 outline
-
正确附上来源
这要求同时满足 grounding(实时搜索) 和 structured output(严格 JSON schema)。
问题在于:很多模型这两件事没法同时做好。Gemini 2.5 Flash 各自都支持,但不能并行开启。
Gemini 3 Flash Preview 是我目前见到能同时做这两件事的模型,所以 outline generation 交给它。
```python
GEMINI_MODEL = "gemini-3-flash-preview"
# Key capability:
GEMINI_MODEL_CONFIGS = {
"gemini-3-flash-preview": {
"supports_grounding": True,
"supports_structured_output": True,
"supports_grounding_with_structured_output": True, # This is the key
}
}
```
大约 60 秒,带真实来源且结构规范的 outline 就回来了。
任务 2:Dialogue Generation → Claude Sonnet 4.5
用户确认 outline 后,AI 要写完整脚本:两位主持人逐句台词。
这是创作任务。它需要人格感、节奏感、像真人对话。
我对比过多个模型。Claude 生成的对话持续更像真人:来回接话自然,打断时机自然,承接也更顺。
这有主观性,但我测了几百个播客样本后,差异很明显。所以脚本生成交给 Claude Sonnet 4.5。
```python
ANTHROPIC_MODEL = "claude-sonnet-4-5-20250929"
```
任务 3:Audio Generation → Gemini 2.5 Flash TTS
最后要把脚本变成音频:双人声音、节奏和情感都要对。
Gemini 2.5 Flash TTS 提供 30 个声音并支持多说话人同轨输出。比如 Charon(信息型男声)和 Kore(坚定型女声)可以在同一音频里自然切换。
成品质量已经高到用户常问我是不是找了真人配音演员。
```python
# Multi-speaker synthesis with Gemini TTS
response = client.models.generate_content(
model="gemini-2.5-flash-preview-tts",
contents=transcript,
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
speaker_voice_configs=speaker_configs
)
)
)
)
```
整体流水线
```
User Input
↓
[Gemini 3 Flash] Research + Structured Outline (~60 sec)
↓
User Review & Feedback
↓
[Claude Sonnet 4.5] Full Dialogue Script (~2-3 min)
↓
User Review & Edit
↓
[Gemini 2.5 Flash TTS] Multi-speaker Audio (~3-5 min)
↓
Finished Podcast
```
每个模型只做它最擅长的环节。总生成时长大约 8-10 分钟,可产出 15-30 分钟播客。
---
一个让我意外的功能需求
用户提了一个我之前没想到的需求:UI 语言和播客生成语言分离。
例如越南用户可能习惯用越语 UI,但想生成英文播客给国际受众;西语营销人也可能想测试日语内容。
所以我加了 podcast language selector。你可以在英文 UI 下生成中文播客。主持人自动切到中文名(明辉、雅琴),对话按中文语感生成,TTS 也用对应声音。
这个功能看起来小,但把可用场景扩大了很多。
---
并行 Agents:真正的加速器
速度提升的核心来自并行 agent,checklist 里也明确写了:
> "Run parallel agents for backend files - Backend files are smaller and can be processed in parallel (language_utils.py, content_moderation.py, gemini_voice_instructions.py, locales/.json)."
当我说“加韩语支持”,Claude Code 会同时拉多个 agent:
- 一个改 frontend translation file
- 一个改 language_utils.py 的韩语分支
- 一个改 gemini_voice_instructions.py
- 一个改 content_moderation.py
并行跑完后再合并改动并跑测试。
这也是 checklist 要区分 “Required” 和 “Optional” 的原因:让 Claude 知道哪些必须并行推进,哪些可以后置。
前端翻译文件(约 2,200 keys)里,checklist 还给了分块策略:
- Chunk 1:common、nav、bottomNav(约 110 keys)
- Chunk 2:homepage、auth(约 180 keys)
- Chunk 3:dashboard、create(约 330 keys)
- 以此类推……
这样可以避免 token limit 问题,并支持 Claude 按 namespace 分段翻译并对照 style guide 逐段审查。
这次的规模:
- 新增 5 种语言
- 每种语言约 2,500 条翻译字符串
- 每种语言 10+ AI prompt templates
- 每种语言 1 个 demo podcast
- 每种语言背后多个并行 agents
关键洞察是:我没有写代码,也没有写计划。我只给方向、审结果,剩下让 Claude Code(大部分时候并行)完成。到现在都还是有点不真实。 :P
---
下一步
现在这 6 种语言已覆盖大约 20 亿潜在用户,体量上是有意义的。
但我脑子里已经在想下一批(营销人思维停不下来):
-
Arabic - 右到左布局支持会更复杂
-
Hindi - 大市场,不同文字体系
-
Portuguese - 巴西播客市场非常大
-
French - 欧洲扩张
-
Tagalog - 菲律宾创作者社区很强
每一种都需要同样细度。要做本地化,不是翻译;要做文化 prompt,不是模板复制。(这次能做这么快,也因为我刚在 14 天内重建了整个应用,架构足够干净。)
好消息是:这套规划文档可以复用,下一种语言会更快。而且这套本地化能力也会直接复用到我正在做的原生 iOS app上——同样 7 种语言,同一套 Supabase backend。
---
你可以直接试
这次我真的挺满意,尤其是越南语版本。听到一个播客像是“为越南用户而写”,而不是“翻译给越南用户听”,那个瞬间比我预期更有触动。
DIALØGUE 现在支持:
- English - The original
- Vietnamese - Từ Ý Tưởng → Đến Podcast
- Japanese - アイデアを、カタチに
- Korean - 아이디어를, 현실로
- Spanish - De la Idea, al Podcast
- Chinese - 从想法,到播客
Create a podcast in your language →
UI 会按你偏好语言显示。并且记住:无论 UI 是什么语言,你都可以生成上述任意语言的播客。
新用户有 2 次免费播客额度可测试。
---
我总结出的几点
回看整个过程,最让我意外的是:我广告行业背景竟然变得更有价值。过去多年在亚太市场做跨语言传播让我很清楚,本地化从来不只是词语转换,而是文化直觉。我没想到这会成为我做 AI coding 项目时最关键的能力之一。
给正在用 AI coding assistant 的 builder:
-
做指挥,不做执行。 规划文档不是我写的,是我描述目标后 Claude 写出来的,然后它再按自己写的计划执行。刚开始会觉得奇怪,像把任务委托给“会自己写 brief 的同事”。但真的有效。
-
结构化是规模化前提。 style guides、checklists、playbooks 不只是给人看的了。最大的解锁点在于:把需求写到 AI agent 可系统执行的结构层。(我多年写 marketing brief 的经验,终于在意想不到的地方兑现了。)
-
模型要按任务配。 我可能有错,但我目前判断是:还没有一个模型在所有环节都最优。DIALØGUE 里:
- Gemini 3 Flash:grounded + structured research
- Claude Sonnet 4.5:自然对话脚本
- Gemini 2.5 Flash TTS:多说话人音频
- 本地化,不是翻译。 用户听得出来差别。作为在三国生活、跨十多个市场工作的人,我真的太清楚“懒翻译”会把产品做坏。把文化知识编码进 prompt,再让 AI 大规模一致执行。
这篇就先到这里。如果你也在做多语言产品(或正在考虑做),欢迎告诉我你怎么做 localization。你在用 AI 吗?还是走传统翻译 agency 路线?你是否也认同:最难的不是翻译本身,而是文化语境?
致敬,
Chandler





