mcpField
T
translate

translate

github.com/vechain开发1599 次安装6 天前更新
代码仓库

关于 translate

用于维护 React i18next 项目中前端翻译文件的技能,指导跨语言添加和删除键、排序及一致性检查,并规范固定词汇的使用。

主要功能

  1. 01跨语言添加和删除翻译键
  2. 02统一排序 JSON 键
  3. 03对照英文检查各语言键
  4. 04应用固定译法
  5. 05同步 VeChain Kit 语言

适用场景

  1. 01为界面文案添加多语言翻译
  2. 02移除过时的翻译键
  3. 03检查语言文件中缺失或多余的键
  4. 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 数组中

添加新的翻译键时

  1. 在 en.json 中添加新键,并填写英文值
  2. 在所有其他语言文件中添加相同的键,并填写对应文件语言的正确译文
  3. 添加到所有文件后,按键名不区分大小写的字母顺序对所有翻译文件排序

删除翻译键时

  1. 从全部 15 个语言文件中删除该键
  2. 删除后,文件仍应保持排序

排序规则

  • 所有翻译 JSON 文件的键都必须按不区分大小写的字母顺序排序
  • 所有语言文件都必须排序,不只是 en.json
  • 进行任何修改后,都要确认键已排序

排序步骤

对 apps/frontend/src/i18n/languages/ 中的每个 .json 文件:

  1. 解析 JSON
  2. 获取所有键,并按不区分大小写的顺序排序
  3. 使用排序后的键重建对象
  4. 写回文件,使用 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" 适用于所有语言)。

两种使用场景:

  1. 不翻译的词语 — 值与英文单词相同(例如,"round": "round" 表示在意大利语中保留英文单词 “round”)
  2. 固定译法 — 值是该概念必须使用的译文(例如,"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