我喺 48 小時內為 DIALØGUE 加咗 5 種語言
我寫咗 planning 文檔教 Claude Code 點樣做 localize——唔係淨係翻譯——然後睇住佢喺 5 種語言上 parallel 執行,將直譯嘅字句變成本地化嘅文案。
幾日前,有個用戶問 DIALØGUE 支唔支持西班牙文。
唔支持。
48 小時之後,佢支持五種語言——西班牙文、越南文、日文、韓文同中文。唔係淨係翻譯咗 UI 按鈕。完整嘅本地化。聽起來好似為每個市場度身訂造嘅 podcast。
五種語言 48 小時聽起來好似我請咗一個團隊或者通宵趕工。我冇。
我俾咗 Claude Code 高層指引。佢寫咗 planning 文檔,然後執行——經常同時喺唔同檔案上行 parallel agent。
---
秘訣:Plan 一次,執行快
有趣嘅部分:planning 文檔唔係我寫嘅。係 Claude Code 寫——喺我嘅指導下。
我描述咗我想要啲咩:「建立一個 localization 風格指南,解釋點樣自然咁翻譯,唔係直譯。包括西班牙文、越南文、日文、韓文同中文嘅例子。涵蓋禮貌程度同文化 context。」
Claude Code 產出咗一份 1,000+ 行嘅風格指南、一份全面嘅 checklist、同一份後端 pipeline playbook。然後佢跟住自己嘅計劃去執行。
1. 風格指南
唔係翻譯詞彙表——而係一份理念文檔。佢解釋點樣做 localize,每種語言都有 before/after 例子。
西班牙文嘅例子:
| 英文 | 直譯(錯) | 自然(啱) |
|---------|-----------------|-----------------|
| "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" |
直譯語法上冇問題但聽起來好似 Google Translate。自然版本捕捉到意圖——佢哋係一個講西班牙文嘅 marketer 真正會寫嘅嘢。
呢個指南涵蓋咗禮貌程度(日文用です/ます形式、韓文用합쇼체)、文化 context、要避免嘅常見錯誤。當 Claude Code 翻譯嗰陣,佢自動跟呢啲原則——佢自己寫嘅原則。
2. Localization Checklist
一份全面嘅 checklist,列出每個要為新語言改嘅檔案:
必須(一定要有):
- Frontend:messages/{locale}.json(大約 2,200 個 key)
- Backend:locales/{locale}.json(大約 82 個 key)
- Language Utils:language_utils.py 入面 3 個 function
- Speech Generation:gemini_voice_instructions.py 入面 1 個 function
- Voice Preview:7 句本地化句子
- Content Moderation:Keywords + prompt
- Smoke Tests:加入測試矩陣
可選(提升質量):
- 每種風格嘅 host/audience profile
- 本地化嘅 prompt template
- 每種風格嘅 voice 指引
呢份 checklist 確保冇遺漏。Claude Code 有系統咁逐項完成。
3. 後端 Playbook
詳細記錄 podcast 生成點樣處理語言:
- 大綱生成點用 Gemini 3 Flash 配語言指引
- Dialogue 生成點用 Claude Sonnet 4.5 配文化 context
- Speech 生成點用 Gemini TTS 配語言專屬指引
有咗呢三份文檔,加新語言就變成機械化嘅工作。Claude Code 讀 checklist、跟風格指南、按 playbook 更新檔案。
---
「翻譯就得」嘅問題
我要承認,我嘅第一直覺係將所有嘢丟入翻譯 API 就算完成。「Create Podcast」變成「Crear Podcast」然後收工,係咪?
呢個做法出嚟嘅係垃圾。我喺越南文同英文之間大嘅嗰陣學到呢個教訓——直譯會殺死你想表達嘅靈魂。
翻譯保留字詞,localization 保留意思。風格指南編碼咗呢個分別。
| 語言 | 直譯 | 本地化 |
|----------|--------------------|--------------------|
| 越南文 | "Ý tưởng, Được Sản Xuất" | "Từ Ý Tưởng → Đến Podcast" |
| 日文 | "アイデア、制作された" | "アイデアを、カタチに"(將想法化為現實)|
| 韓文 | "아이디어, 제작됨" | "아이디어를, 현실로"(將想法化為現實)|
| 西班牙文 | "Ideas, Producidas" | "De la Idea, al Podcast" |
| 中文 | "想法,已制作" | "从想法,到播客" |
每種語言都需要呢個程度嘅用心。每個按鈕、每個錯誤訊息、每段 marketing 文案。
而呢個只係 UI。實際嘅 podcast 生成更難。
---
Podcast 需要本地 Host
有樣嘢我冇預料到:host 名好重要。好重要。
英文版本嘅默認 host 係 Alex 同 Maya。通用、唔起眼、冇問題。
但如果你生成緊越南文 podcast 而 host 仲係叫 Alex 同 Maya?聽起來唔啱。作為越南人,我可以話你知——聽起來好似一套美國劇嘅差勁配音 :D
所以每種語言都有本地嘅 host 名:
| 語言 | Host 1 | Host 2 |
|----------|--------|--------|
| 英文 | Alex | Maya |
| 越南文 | Minh | Lan |
| 日文 | 太郎 (Tarō) | 花子 (Hanako) |
| 韓文 | 민준 (Minjun) | 수진 (Sujin) |
| 西班牙文 | Carlos | María |
| 中文 | 明辉 | 雅琴 |
但淨係名唔夠。AI 需要理解文化 context。
日本嘅科技 podcast 同美國嘅有唔同嘅對話規範。禮貌程度、表達分歧嘅方式、一來一往嘅節奏——全部都唔同。
所以我建立咗語言專屬嘅 AI prompt 指引。越南文指引指定「bạn」(非正式但尊重嘅「你」)。日文指引指定です/ます形式(禮貌但友善)。韓文指引指定합쇼체(正式禮貌)。
呢啲嘢係唔可以自動化嘅。憑住我多年喺亞太市場工作嘅經驗,我直覺地知道呢啲溝通模式——trick 係將呢啲文化知識編碼入 AI 可以跟嘅 prompt。但一旦編碼好,Claude Code 就可以一致咁應用喺幾千個字串上。
---
真正有效嘅 AI Model 選擇
呢度就係技術角度有趣嘅地方。
DIALØGUE 用三個唔同嘅 AI model 做三個唔同嘅任務。唔係因為我想複雜,而係因為每個 model 喺佢嘅特定任務上真係更好。
任務 1:研究同大綱 → Gemini 3 Flash
當用戶輸入一個題目,第一步係研究。AI 需要:
1. 喺網上搜尋最新資訊
2. 將發現綜合成結構化大綱
3. 正確引用來源
呢個需要 grounding(即時網絡搜尋)同 structured output(JSON schema 合規)。
問題係:大部分 model 唔可以同時做兩樣。Gemini 2.5 Flash 支持 grounding。佢支持 structured output。但唔可以同時。你要揀一個。
Gemini 3 Flash Preview 係我搵到唯一同時支持兩個功能嘅 model。所以佢處理大綱生成。
```python
GEMINI_MODEL = "gemini-3-flash-preview"
# 關鍵能力:
GEMINI_MODEL_CONFIGS = {
"gemini-3-flash-preview": {
"supports_grounding": True,
"supports_structured_output": True,
"supports_grounding_with_structured_output": True, # 呢個係關鍵
}
}
```
大綱大約 60 秒就出返嚟,有真實來源,結構正確。
任務 2:Dialogue 生成 → Claude Sonnet 4.5
用戶 approve 大綱之後,AI 寫完整腳本——兩個 host 講嘅每一個字。
呢個係創意寫作。需要個性、自然節奏、真正對話嘅感覺。
我用多個 model 測試過。Claude 嘅 dialogue 一致地聽起來更人性化。一來一往嘅感覺真實。Host 自然咁互相打斷。佢哋互相補充對方嘅觀點。
呢個係主觀嘅,但喺生成咗幾百個測試 podcast 之後,分別好明顯。Claude Sonnet 4.5 處理 dialogue 生成。
```python
ANTHROPIC_MODEL = "claude-sonnet-4-5-20250929"
```
任務 3:音頻生成 → Gemini 2.5 Flash TTS
最後,腳本需要變成音頻。兩把聲、適當嘅節奏、情感表達。
Gemini 2.5 Flash TTS 提供 30 把獨特嘅聲音,支持多人發聲。你可以喺同一個音頻檔案入面有 Charon(資訊性、男聲)同 Kore(堅定、女聲),自然咁切換發言者。
質量好到用戶成日問係咪真正嘅配音員。
```python
# 用 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
)
)
)
)
```
Pipeline
所以完整流程係:
```
用戶輸入
↓
[Gemini 3 Flash] 研究 + 結構化大綱(~60 秒)
↓
用戶 Review 同 Feedback
↓
[Claude Sonnet 4.5] 完整 Dialogue 腳本(~2-3 分鐘)
↓
用戶 Review 同編輯
↓
[Gemini 2.5 Flash TTS] 多人發聲音頻(~3-5 分鐘)
↓
完成嘅 Podcast
```
每個 model 做佢最擅長嘅嘢。15-30 分鐘嘅 podcast 嘅總生成時間大約係 8-10 分鐘。
---
一個令我驚訝嘅功能
用戶要求咗我冇考慮過嘅嘢:用同 UI 唔同嘅語言生成 podcast。
一個越南用戶可能習慣用越南文操作 app,但想為國際受眾製作英文 podcast。或者一個講西班牙文嘅 marketer 可能想測試日文嘅內容。
所以我加咗一個 podcast 語言選擇器。你嘅 UI 可以係英文,而你用普通話生成 podcast。Host 會有中文名(明辉同雅琴),dialogue 會跟中文對話模式,音頻會用適當嘅聲音。
呢個係細功能,但佢大幅擴展用戶可以做嘅嘢。
---
Parallel Agent:力量倍增器
真正嘅速度嚟自 parallel agent。Checklist 明確指出:
> 「為後端檔案行 parallel agent——後端檔案較細,可以 parallel 處理(language_utils.py、content_moderation.py、gemini_voice_instructions.py、locales/{locale}.json)。」
當我講「加韓文支持」,Claude Code 會 spawn 多個 agent:
- 一個 agent 更新 frontend 翻譯檔案
- 另一個 agent 為 language_utils.py 加韓文 case
- 另一個更新 gemini_voice_instructions.py
- 另一個為 content_moderation.py 加韓文
全部同時跑。完成後,Claude Code merge 改動同行測試。
呢個就係點解 checklist 區分「必須」同「可選」檔案——等 Claude Code 知道咩可以 parallel 化、咩可以遲啲做。
對於 frontend 翻譯檔案(大約 2,200 個 key),checklist 指定一個 chunking 策略:
- Chunk 1:common、nav、bottomNav(大約 110 個 key)
- Chunk 2:homepage、auth(大約 180 個 key)
- Chunk 3:dashboard、create(大約 330 個 key)
- 如此類推⋯⋯
呢個避免 token 限制問題,俾 Claude Code 逐 namespace 翻譯,每個都對照風格指南 review。
規模:
- 加咗 5 種語言
- 每種語言大約 2,500 個翻譯字串
- 每種語言 10+ 個 AI prompt template
- 每種語言生成 1 個 demo podcast
- 每種語言多個 parallel agent
關鍵 insight:我冇寫 code。我冇寫計劃。我俾方向、review 產出、然後俾 Claude Code 處理其餘——通常係 parallel。到而家都仲覺得好不可思議 :P
---
下一步
六種語言涵蓋大約 20 億潛在用戶。呢個係有意義嘅覆蓋範圍。
但我已經喺度諗緊咩仲未有(marketer 嘅我永遠停唔到):
1. 阿拉伯文 — Right-to-left layout 支持好複雜
2. 印地文 — 龐大市場,唔同嘅文字系統
3. 葡萄牙文 — 巴西係一個龐大嘅 podcast 市場
4. 法文 — 歐洲擴展
5. 他加祿文 — 強大嘅菲律賓創作者社群
每一個都需要同等程度嘅用心。本地化,唔係翻譯。文化 prompt,唔係複製 template。(呢個只係可能嘅,因為我啱啱喺 14 日內重建咗成個 app,有乾淨嘅架構。)
好消息:planning 文檔可以重用。加下一種語言應該仲更快。而呢個 localization 延伸到我而家build 緊嘅原生 iOS app——全部 7 種語言,同一個 Supabase 後端。
---
自己試下
我真心為呢個成果自豪——特別係越南文嘅 localization。聽到一個聽起來係為越南受眾製作,唔係翻譯俾佢哋嘅 podcast,用一種我冇預料到嘅方式打動咗我。
DIALØGUE 而家支持:
- 英文 — 原版
- 越南文 — Từ Ý Tưởng → Đến Podcast
- 日文 — アイデアを、カタチに
- 韓文 — 아이디어를, 현실로
- 西班牙文 — De la Idea, al Podcast
- 中文 — 从想法,到播客
UI 會跟你揀嘅偏好。記住——你可以用任何呢啲語言生成 podcast,唔論你嘅 UI 設定係咩。
新用戶有 2 個免費 podcast 嚟試下。
---
重點收穫
回顧呢件事,最令我驚訝嘅係我嘅廣告背景有幾重要。多年喺亞洲市場改編 campaign 嘅經驗教我 localization 永遠唔只係關於文字——係關於文化直覺。我冇預到呢個會係我帶嚟 AI coding project 最有價值嘅技能。
對用 AI coding 助手嘅 builder:
1. 指導,唔係親手寫。 我冇寫 planning 文檔——我描述我想要啲咩,Claude Code 產出佢哋。然後佢跟自己嘅計劃。一開始覺得好奇怪,好似 delegate 俾一個同時寫自己 brief 嘅人。但佢有效。
2. 結構令規模化成為可能。 風格指南、checklist、playbook——呢啲唔再只係俾人用嘅。我認為呢個係最大嘅突破:將你嘅需求結構化,令 AI agent 可以有系統咁執行。(我多年寫 marketing brief 嘅經驗終於以意想不到嘅方式得到回報。)
3. 將 model 同任務匹配。 我可能係錯嘅,但我相信而家冇一個 model 喺所有嘢都係最好嘅。對 DIALØGUE 嚟講:
- Gemini 3 Flash 做 grounded、structured 研究
- Claude Sonnet 4.5 做自然 dialogue
- Gemini 2.5 Flash TTS 做多人發聲音頻
4. Localize,唔好淨係翻譯。 你嘅用戶分得出分別。我點強調都唔夠——作為一個喺三個國家生活過、喺十幾個市場工作過嘅人,我見過懶翻譯對產品做嘅嘢。將文化知識編碼入你嘅 prompt,然後俾 AI 一致咁應用。
呢次就到呢度。如果你喺度 build 多語言嘅嘢——或者只係諗緊——我好想聽你點 approach localization。你有冇用 AI 做?定係傳統 agency 路線?你同唔同意文化 context 係難嘅部分,唔係翻譯本身?話我知。
祝好,
Chandler





