关于 i18n
i18n 是 LobeHub 的国际化协作指南,面向维护本地化内容的开发者。它说明翻译键规范、编辑流程及生成语言的处理方式。
主要功能
- 01默认英文与 react-i18next
- 02点分隔的扁平键命名
- 03通过 lobe-i18n 生成翻译
- 04日常自动翻译工作流
- 05处理已有键的文本变更
适用场景
- 01为新功能添加本地化键
- 02预览简体中文和英文翻译
- 03更新已变更文本的翻译
- 04排查生成语言未更新的问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lobehub/ lobehub --skill i18n安装后在 Claude Code 中输入/i18n确认已加载。
详细介绍
LobeHub 国际化指南
- 默认语言:英语(en-US)
- 框架:react-i18next
- 仅编辑
packages/locales/src/default/中的文件 - 切勿手动编写locales/JSON 中的翻译(en-US/zh-CN 预览除外);生成的语言版本只能通过lobe-i18n更改,此外还包括 更改现有键的英文文本 中所述的删除键操作 - 默认情况下,将生成的语言版本交由每日运行的
auto-i18n.yml工作流处理;只有在需要立即生成时才手动运行bun run i18n
键命名约定
使用点号表示法的扁平键(而非嵌套对象):
// ✅ Correct
export default {
'alert.cloud.action': '立即体验',
'sync.actions.sync': '立即同步',
'sync.status.ready': '已连接',
};
// ❌ Avoid nested objects
export default {
alert: { cloud: { action: '...' } },
};
模式: {feature}.{context}.{action|status}
参数: 使用 {{variableName}} 语法
'alert.cloud.desc': '我们提供 {{credit}} 额度积分',
避免键冲突:
// ❌ Conflict
'clientDB.solve': '自助解决',
'clientDB.solve.backup.title': '数据备份',
// ✅ Solution
'clientDB.solve.action': '自助解决',
'clientDB.solve.backup.title': '数据备份',
工作流
- 将键添加到
packages/locales/src/default/{namespace}.ts - 在
packages/locales/src/default/index.ts中导出新的命名空间 - 对于开发预览:手动翻译
locales/zh-CN/{namespace}.json和locales/en-US/{namespace}.json - 其他所有语言版本交由
.github/workflows/auto-i18n.yml处理;该工作流每天运行,并自动创建翻译 PR - 只有在分支需要立即获取这些翻译时才手动运行
bun run i18n;该命令运行较慢,且需要OPENAI_API_KEY
更改现有键的英文文本
lobe-i18n(包括每日工作流和 bun run i18n)只会翻译某个语言版本中缺失的键。它不会重新翻译英文值已更改的键,因此编辑现有值会导致所有生成的语言版本一直保留旧文本(例如,扩展后的 settingsSearch.tabKeywords.* 在 16 个语言版本中陈旧了数周)。
当更改会影响现有键的含义或内容(而不只是修正错别字)时,请采取以下任一做法:
- 重命名该键,使其在所有语言版本中都变为缺失状态,从而重新翻译。
- 在同一个 PR 中重新翻译:从所有生成的
locales/*/{namespace}.json中删除该键(en-US/zh-CN 除外),运行bun run i18n,并且只提交这些键——该命令也会填充其他缺失的键,这些键应交由每日工作流 PR 处理。 - 如果旧翻译在每日运行前无碍使用,请从生成的语言版本中删除该键,使其回退到英文,并由工作流重新翻译。当本地化文本会影响实际使用时(例如,用户会用自己语言输入的搜索关键词),不要采用此做法。
用法
import { useTranslation } from 'react-i18next';
const { t } = useTranslation('common');
t('newFeature.title');
t('alert.cloud.desc', { credit: '1000' });
// Multiple namespaces
const { t } = useTranslation(['common', 'chat']);
t('common:save');
常用命名空间
最常用: common(共享 UI)、chat(聊天功能)、setting(设置)
其他:auth、changelog、components、discover、editor、electron、error、file、hotkey、knowledgeBase、memory、models、plugin、portal、providers、tool、topic
评论
支持 Markdown