国际化 (i18n)
龙山灵码的 TUI 已接入国际化上下文。v0.3 完整扩展了英文 en 和简体中文 zh 字典,并把命令面板、权限弹窗、提示输入、侧边栏和常用对话框接入翻译函数;其余 locale 仍保留类型和标签,后续需要补充字典文件。
支持的语言
| 代码 | 语言 | 代码 | 语言 |
|---|---|---|---|
| en | English | zh | 简体中文 |
| zht | 繁體中文 | ja | 日本語 |
| ko | 한국어 | de | Deutsch |
| es | Español | fr | Français |
| ru | Русский | pt | Português |
| ar | العربية | da | Dansk |
| pl | Polski | no | Norsk |
| th | ไทย | tr | Türkçe |
语言选择
方式 1:环境变量
bash
export SWUST_CODE_LOCALE=zh
swust-code方式 2:自动检测
默认设置为 auto,系统会根据以下顺序自动检测:
- 时区 — 根据系统时区推断语言
- 环境变量 — 检查
LC_ALL、LC_MESSAGES、LANG - Intl API — 使用浏览器/运行时的 locale 信息
当前本地实现会同步检测系统 locale,并在中文或繁中环境中合并 en + zh 字典。setLocale() 会写入 TUI KV 偏好,TUI 内可以通过命令面板或 /language 打开语言选择器。
方式 3:TUI 命令
text
/language选择 auto 会回到自动检测;选择具体 locale 会持久化到 TUI KV。命令面板中的命令本身保持英文或 slash 形式,说明和分类会本地化。
添加新语言
- 在
packages/tui/src/i18n/下创建新的翻译文件(如ja.ts) - 从
en.ts导入Keys类型 - 使用
satisfies Partial<Record<Keys, string>>确保类型安全 - 在
locales.ts中注册新的 Locale 类型和标签 - 在
context/language.tsx的字典选择逻辑中合并新字典 - 如果后续改为动态加载,需要确保首屏命令面板不会先回退到英文
翻译字典结构
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 会自动回退到英文。