-
Notifications
You must be signed in to change notification settings - Fork 3
i18n.zh CN
phinn edited this page Jul 12, 2026
·
1 revision
🌐 Language: English | 中文
支持四种 UI 语言,实时切换(切语言不用重启)。
| Code | 名称 |
|---|---|
en |
English |
zh-CN |
简体中文(默认) |
zh-TW |
繁體中文 |
ja |
日本語 |
主窗口 ⚙ → 界面 → 语言下拉。改了 → saveSettings({ lang }) → 全 app 重渲染。
src/shared/i18n.ts —— 四语言的扁平 key → string map:
const STRINGS = {
'sidebar.newSession': { en: 'New', 'zh-CN': '新建', 'zh-TW': '新建', ja: '新規' },
'head.cwdPh': { en: 'Working directory', 'zh-CN': '工作目录', ... },
// ...
};每个 key 一个对象,四个语言字段。
export function t(lang: Lang, key: string, params?: Record<string, string | number>): string;- 查 STRINGS[key][lang],没找到回退到 en,再没找到回退到 key 本身
- params 替换占位符:
t('zh-CN', 'al.httpErr', { code: 500, detail: 'timeout' })→HTTP 500 错误 — timeout - 占位符语法:
{code}{detail}
UI 字符串两种绑定方式:
-
JS 显式调:
el.textContent = t(lang, 'sidebar.newSession') -
HTML 声明式(更常用):
<button data-i18n="sidebar.newSession">新建</button>,然后applyI18nDOM扫[data-i18n]/[data-i18n-placeholder]/[data-i18n-title]批量填
applyI18nDOM(src/renderer/files-pane.ts:53 是一个例子)在切语言时统一重扫。
给模型看的字符串不译:
- baseSystemPrompt(永远是中文,即便 UI 是英文)
- engine error messages(中文,因为是模型 prompt 的一部分)
- AGENTS.md / CLAUDE.md / KINET.md / KINET-CONTEXT.md(用户写的)
- 长期记忆内容(模型抽的)
- 工具结果(
shell输出、文件内容等)
理由:这些是给 LLM 的 prompt 内容,翻成英文会让 GLM/Claude 等模型的中文任务表现变差(用户用中文下任务,system prompt 也得是中文才贴合)。
GLM 智谱(默认 provider)是中文模型,主要用户群中文。baseSystemPrompt 也是中文。
-
src/shared/i18n.ts加'xx'到Langunion - 每个 STRINGS 项加
'xx'翻译 -
src/renderer/index.html(或对应 view)的语言下拉加<option value="xx"> - typecheck → ship
不加新 key 不需要改其他地方。
-
STRINGS加新 key + 四语言翻译 - UI 用
data-i18n="new.key"或 JS 调t(lang, 'new.key') - ship
-
src/shared/i18n.ts—— STRINGS +t() -
src/shared/types.ts:46——AppSettings.lang: Lang -
src/renderer/app.ts—— 顶部applyI18nDOM()+ 切语言时重扫 -
src/renderer/files-pane.ts:53—— files 窗口的applyI18nDOM(独立窗口要自己调)