关于 translate
用于维护 React i18next 项目中前端翻译文件的技能,指导跨语言添加和删除键、排序及一致性检查,并规范固定词汇的使用。
主要功能
- 01跨语言添加和删除翻译键
- 02统一排序 JSON 键
- 03对照英文检查各语言键
- 04应用固定译法
- 05同步 VeChain Kit 语言
适用场景
- 01为界面文案添加多语言翻译
- 02移除过时的翻译键
- 03检查语言文件中缺失或多余的键
- 04同步应用与 VeChain Kit 的语言
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ vechain/ vechain-ai-skills --skill translate安装后在 Claude Code 中输入/translate确认已加载。
详细介绍
翻译技能
管理 apps/frontend/src/i18n/languages/ 中的翻译文件。
翻译文件
- 15 种语言:en(源语言)、de、es、fr、hi、it、ja、ko、nl、pt、sv、tr、tw、vi、zh
- 格式:扁平 JSON 键值对(键 = 英文短语)
- 插值:
{{variableName}} - 库:在
apps/frontend/src/i18n/index.tsx中配置的react-i18next - 语言列表定义在
apps/frontend/src/i18n/index.tsx的languages数组中
添加新的翻译键时
- 在
en.json中添加新键,并填写英文值 - 在所有其他语言文件中添加相同的键,并填写对应文件语言的正确译文
- 添加到所有文件后,按键名不区分大小写的字母顺序对所有翻译文件排序
删除翻译键时
- 从全部 15 个语言文件中删除该键
- 删除后,文件仍应保持排序
排序规则
- 所有翻译 JSON 文件的键都必须按不区分大小写的字母顺序排序
- 所有语言文件都必须排序,不只是
en.json - 进行任何修改后,都要确认键已排序
排序步骤
对 apps/frontend/src/i18n/languages/ 中的每个 .json 文件:
- 解析 JSON
- 获取所有键,并按不区分大小写的顺序排序
- 使用排序后的键重建对象
- 写回文件,使用 2 个空格缩进,并在末尾添加换行符
使用 Node.js 脚本或 jq 进行排序。Node.js 示例:
node -e "
const fs = require('fs');
const glob = require('glob');
const files = glob.sync('apps/frontend/src/i18n/languages/*.json');
files.forEach(f => {
const obj = JSON.parse(fs.readFileSync(f, 'utf8'));
const sorted = Object.keys(obj)
.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }))
.reduce((acc, key) => { acc[key] = obj[key]; return acc; }, {});
fs.writeFileSync(f, JSON.stringify(sorted, null, 2) + '\n');
});
"
同步检查
每次修改翻译后,请确认:
en.json包含代码中存在的所有键(搜索t("...") 用法)- 所有非英语文件与
en.json的键完全相同 - 非英语文件中缺少的键应补上对应文件语言的正确译文
- 非英语文件中多余的键(
en.json中不存在)应删除 - 所有文件均按键名的字母顺序排序
固定词汇
请参阅 apps/frontend/src/i18n/fixedWords.json。词汇按语言代码分组("all" 适用于所有语言)。
两种使用场景:
- 不翻译的词语 — 值与英文单词相同(例如,
"round": "round"表示在意大利语中保留英文单词 “round”) - 固定译法 — 值是该概念必须使用的译文(例如,
"endorsement": "supporto"表示在意大利语中,“endorsement” 始终使用 “supporto”)
翻译时,务必先检查此文件。如果某个词在目标语言中有固定译法,请在每个句子中始终使用该译法。
VeChain Kit:双向语言同步
如果应用使用 @vechain/vechain-kit,请确保 Kit UI 语言与宿主应用保持同步:
- 应用 → Kit: 在
VeChainKitProvider内订阅i18n.on("languageChanged", ...),并调用useCurrentLanguage()中的setLanguage(lng),以便用户在应用中更改语言时(例如使用页脚选择器),Kit 也会更新。 - Kit → 应用: 将
language={i18n.language}和onLanguageChange={(lng) => i18n.changeLanguage(lng)}传入VeChainKitProvider,以便用户在 Kit 中更改语言时(例如在钱包模态框中),应用也会更新。
完整实现模式请参阅 vechain-kit 技能参考文档 translations-vechain-kit.md。
提交前检查与 ESLint(缺失 / 未使用的键)
en.json中未使用的键: 运行脚本,找出en.json中从未在代码里使用的键(t("...")、i18nKey="..."),并以非零状态码退出,使提交前检查失败。在暂存en.json或代码时运行。- 其他语言缺少的键: 运行脚本,将每种语言的键与
en.json比较;如果任何语言缺少键或包含多余的键,则报错。在暂存任何翻译文件时或在 CI 中运行。 - ESLint: 可选地添加
eslint-plugin-i18next(或类似插件),以便在编辑器 / lint 中标记缺失的键。
简要汇总表请参阅 vechain-kit 技能参考文档 translations-vechain-kit.md。
评论
支持 Markdown