Skip to content

国际化 (i18n)

龙山灵码的 TUI 已接入国际化上下文。v0.3 完整扩展了英文 en 和简体中文 zh 字典,并把命令面板、权限弹窗、提示输入、侧边栏和常用对话框接入翻译函数;其余 locale 仍保留类型和标签,后续需要补充字典文件。

支持的语言

代码语言代码语言
enEnglishzh简体中文
zht繁體中文ja日本語
ko한국어deDeutsch
esEspañolfrFrançais
ruРусскийptPortuguês
arالعربيةdaDansk
plPolskinoNorsk
thไทยtrTürkçe

语言选择

方式 1:环境变量

bash
export SWUST_CODE_LOCALE=zh
swust-code

方式 2:自动检测

默认设置为 auto,系统会根据以下顺序自动检测:

  1. 时区 — 根据系统时区推断语言
  2. 环境变量 — 检查 LC_ALLLC_MESSAGESLANG
  3. Intl API — 使用浏览器/运行时的 locale 信息

当前本地实现会同步检测系统 locale,并在中文或繁中环境中合并 en + zh 字典。setLocale() 会写入 TUI KV 偏好,TUI 内可以通过命令面板或 /language 打开语言选择器。

方式 3:TUI 命令

text
/language

选择 auto 会回到自动检测;选择具体 locale 会持久化到 TUI KV。命令面板中的命令本身保持英文或 slash 形式,说明和分类会本地化。

添加新语言

  1. packages/tui/src/i18n/ 下创建新的翻译文件(如 ja.ts
  2. en.ts 导入 Keys 类型
  3. 使用 satisfies Partial<Record<Keys, string>> 确保类型安全
  4. locales.ts 中注册新的 Locale 类型和标签
  5. context/language.tsx 的字典选择逻辑中合并新字典
  6. 如果后续改为动态加载,需要确保首屏命令面板不会先回退到英文

翻译字典结构

typescript
// en.ts - 英文字典(canonical keys)
const en = {
  "tui.prompt.placeholder.normal": "Ask anything... \"{{example}}\"",
  "tui.command.language.switch.title": "Switch language",
  "tui.dialog.select.placeholder": "Search",
} as const

// zh.ts - 中文字典
import type { Dictionary } from "./en"
const zh: Dictionary = {
  "tui.prompt.placeholder.normal": "询问任何问题...\"{{example}}\"",
  "tui.command.language.switch.title": "切换语言",
  "tui.dialog.select.placeholder": "搜索",
}

缺失的 key 会自动回退到英文。