Skip to content
··閱讀時間4分鐘

我喺 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:commonnavbottomNav(大約 110 個 key)

- Chunk 2:homepageauth(大約 180 個 key)

- Chunk 3:dashboardcreate(大約 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

- 中文 — 从想法,到播客

用你嘅語言建立 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

繼續閱讀

我嘅旅程
聯繫
語言
偏好設定