国际化
设置默认语言、替换产品文案,并发布成对的中英文内容。
MuseMVP 提供英文和中文。先选默认语言,再用你的产品文案覆盖模板默认内容,不需要改动默认文件。
开始前准备
准备已运行的应用。UI 文案共享在 packages/i18n;文档、博客、法律页和更新日志正文在各应用的 content/。
1. 选择默认语言
在所选应用 .env.local 设置:
NEXT_PUBLIC_DEFAULT_LOCALE="zh"英文使用 en。修改后重启开发服务,部署应用重新构建。默认语言的公开 URL 没有前缀:默认英文时 / 为英文、/zh 为中文;默认中文时 / 为中文、/en 为英文。
packages/config/src/i18n.ts 包含各语言产品元数据、文档标题和货币。按 品牌设置 改为自己的信息。
2. 替换一条 UI 文案
打开 packages/i18n/src/translations/en/mvp.json 和 zh/mvp.json。将下面片段合并进中文文件:
{
"home": {
"hero": {
"mainTitle1": "Acme",
"mainTitle2": "你的下一个产品,从这里开始"
}
}
}英文文件用相同键填写英文。现有 Hero.tsx 读取这些键,刷新首页即可看到替换文案。修改其他组件前,先看其 useTranslations() 或 getTranslations() 读取的键。
保留 default.json。mvp.json 覆盖相同字段,未填写字段沿用默认内容。数组整体替换,不追加。已有 mvp.json 内容要合并,不要整份覆盖。
3. 发布双语正文
在应用 content/docs、posts、legal 或 changelog 创建成对的 *.en.mdx / *.zh.mdx,分类信息也保持 meta.en.json / meta.zh.json 成对。编辑源文件,dev/build 会生成 .source/。
同时维护两应用时,用 pnpm apps:parity 检查页面/内容差异。--write 从 Node 向 Workers 复制符合条件的文件,使用前检查改动。共享翻译 JSON 不需要在两应用间复制。
确认结果
- 打开默认公开 URL,切换到另一语言。
- 检查首页、导航、元数据和修改的正文语言正确。
- 登录后检查账号页面的语言。
- 修改消息结构或正文后,运行
pnpm type-check和当前应用的构建命令。
常见问题
| 问题 | 处理方式 |
|---|---|
| 覆盖没生效 | 对照组件的准确 namespace/key,检查 JSON 嵌套 |
| 只改了一种语言 | 在两语言 mvp.json 添加相同键路径 |
| 列表覆盖后丢失默认项 | 数组整体替换,填写完整目标数组 |
| 缺失文案显示为另一语言 | 默认语言回退会补缺项;补齐两语言,不依赖回退作为翻译 |
增加其他语言
需同步扩展语言枚举与元数据、共享消息和类型、路由、内容 source 和导航 metadata。这是开发改动,不是只加一个 JSON。加载器在 packages/i18n/src/lib/messages.ts:深合并本语言默认和覆盖,用默认语言补非默认语言的缺项。新增消息树保持 packages/i18n/src/types.ts 兼容。