Skip to content

国际化(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/pricing

URL 中的语言代码使用连字符格式(next-intl 惯例):zh-CNzh-TW

注意:在 TypeScript 代码和数据库 JSON 键中,使用下划线形式(zh_CNzh_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> 用于泛型类型内容。

添加新语言

添加新语言时请遵循以下阶段:

  1. 数据库迁移 — 将新语言键添加到 13 个模型的所有 JSON 字段中
  2. 基础设施 — 在路由配置、类型定义和标准化桥接中注册
  3. 本地化 — 认证错误消息、SEO 元数据
  4. App Router 页面 — 更新所有 trans({}) 调用(3 个批次,127+ 个文件)
  5. 组件和 lib — 更新共享组件翻译

阶段 1(数据库)必须在部署代码更改之前完成。TypeScript 会在编译时标记缺少的语言键。

塔罗牌阵名称

标准牌阵名称翻译在 docs/tarot-spreads.md 中。请勿自行创造牌阵名称的新翻译。

关键规则

  • 本地化内容切勿使用 Record<string, string>。使用 TLocalized<T>TLocalizedString
  • 切勿使用 \uXXXX unicode 转义。直接书写实际字符(如 '正在解读…')。
  • 包含撇号的字符串使用转义单引号:'L\'IA'
  • 管理面板仅英文 — 无需翻译。

Internal documentation for MysticX team