国际化(i18n)
概述
MysticX 使用 next-intl 支持 12 种语言,采用内联字典而非静态 JSON 翻译文件。
支持的语言
| 代码 | 语言 | 文字方向 |
|---|---|---|
en | 英语 | LTR |
zh_CN | 简体中文 | LTR |
zh_TW | 繁体中文 | LTR |
ja | 日语 | LTR |
ko | 韩语 | LTR |
pt | 葡萄牙语 | LTR |
es | 西班牙语 | LTR |
fr | 法语 | LTR |
de | 德语 | LTR |
ar | 阿拉伯语 | RTL |
id | 印尼语 | LTR |
nl | 荷兰语 | LTR |
URL 结构
路由遵循 /{locale}/path 模式:
/en/pricing
/zh-CN/pricing
/ja/pricingURL 中的语言代码使用连字符格式(next-intl 惯例):zh-CN、zh-TW。
注意:在 TypeScript 代码和数据库 JSON 键中,使用下划线形式(
zh_CN、zh_TW)。URL 段始终使用连字符。
翻译方式
面向用户的页面
使用 useTrans(客户端)和 getTrans(服务端)钩子配合内联字典:
tsx
const trans = useTrans();
return (
<h1>{trans({
en: 'Welcome to MysticX',
zh_CN: '欢迎来到 MysticX',
ja: 'MysticX へようこそ',
ko: 'MysticX에 오신 것을 환영합니다',
pt: 'Bem-vindo ao MysticX',
es: 'Bienvenido a MysticX',
fr: 'Bienvenue sur MysticX',
de: 'Willkommen bei MysticX',
ar: 'مرحبا بكم في MysticX',
zh_TW: '歡迎來到 MysticX',
id: 'Selamat datang di MysticX',
nl: 'Welkom bij MysticX',
})}</h1>
);管理面板
仅英文。请勿在管理页面中使用 useTrans。
数据库内容
本地化数据库内容使用 TLocalizedString JSON 字段:
json
{
"en": "The Fool",
"zh_CN": "愚者",
"ja": "愚者",
"ko": "바보"
}类型:TLocalizedString 用于字符串,TLocalized<T> 用于泛型类型内容。
添加新语言
添加新语言时请遵循以下阶段:
- 数据库迁移 — 将新语言键添加到 13 个模型的所有 JSON 字段中
- 基础设施 — 在路由配置、类型定义和标准化桥接中注册
- 本地化 — 认证错误消息、SEO 元数据
- App Router 页面 — 更新所有
trans({})调用(3 个批次,127+ 个文件) - 组件和 lib — 更新共享组件翻译
阶段 1(数据库)必须在部署代码更改之前完成。TypeScript 会在编译时标记缺少的语言键。
塔罗牌阵名称
标准牌阵名称翻译在 docs/tarot-spreads.md 中。请勿自行创造牌阵名称的新翻译。
关键规则
- 本地化内容切勿使用
Record<string, string>。使用TLocalized<T>或TLocalizedString。 - 切勿使用
\uXXXXunicode 转义。直接书写实际字符(如'正在解读…')。 - 包含撇号的字符串使用转义单引号:
'L\'IA'。 - 管理面板仅英文 — 无需翻译。