@alauda-fe/i18n-tools
Version:
基于 Azure OpenAI 的 JSON i18n 文件翻译和英文语法检查工具集
238 lines (155 loc) • 6.86 kB
Markdown
## i18n-tools 使用手册(场景版)
面向 JSON i18n 的翻译与英文语法检查 CLI,支持增量翻译、失败重试、远端仓库同步、快照管理和自定义提示词。
### 功能一览
- 翻译 JSON(支持占位符、技术术语保护,跳过注释与 \_en 结尾的翻译 key)
- 增量翻译(基于 new/en 与 snapshot/en 目录下翻译文件的差异,输出新文案到 src/<目标语言>)
- 英文语法/拼写检查(单文件/目录批量)
- 同步远端仓库 i18n 源文件到本地 new/en
- 自定义系统提示词与额外规则注入
---
## 安装与准备
- Node.js 版本:>= 18
- 包名:@alauda-fe/i18n-tools
可选使用方式:
```bash
# 直接使用(推荐)
npx @alauda-fe/i18n-tools
# 或全局安装
npm i -g @alauda-fe/i18n-tools
```
环境变量(也可通过命令行参数传入):
- OPENAI_API_KEY:Azure OpenAI 密钥(或用 -k/--token 指定)
- GITLAB_TOKEN / GITHUB_TOKEN:sync 同步远端仓库时的访问令牌(或用 --token 指定)
---
## 目录约定
- 翻译源/目标(全量翻译):直接以语言代码作为目录名,如 `en/`、`zh/`、`ru/`。
- 增量翻译:
- 英文源:`new/en/`(由 sync 命令下载文件生成)
- 快照:`snapshot/en/`(上一次翻译时的参考基线)
- 输出:`src/<目标语言>/`(如 `src/zh/`)
翻译规则关键点:
- 保留 JSON 键名,跳过空 key/value
- 跳过注释条目(值以 `// ` 开头)
- 跳过以 `_en` 结尾的键(视为英文原文,不翻译)
- 严格保护占位符:`{{var}}` 和 `${var}`
- 失败时条目置为 null,后续可用重试命令补齐
---
## 常用场景与流程
### 1) 增量翻译语言包(推荐流程)
以中文翻译包为例:
1. 到 i18n-zh 仓库根目录,同步英文源到 `new/en/`:
```bash
npx @alauda-fe/i18n-tools sync \
--level core \
--branch master\
--token $GITLAB_TOKEN # 私有仓库需令牌,或设置 GITHUB_TOKEN
```
2. 执行增量翻译(输出新文案到 `src/zh/`,并更新 `snapshot/en/`,随后清理 `new/`):
```bash
npx @alauda-fe/i18n-tools incremental-translate -s en -t zh -k $OPENAI_API_KEY
```
3. 人工检查变更(主要看 `src/zh/` 与 `snapshot/en/` 的 diff),确认后提交代码。
4. 若存在失败条目(值为 null),可重试:
```bash
npx @alauda-fe/i18n-tools retry-failed -s en -t zh -k $OPENAI_API_KEY
```
提示:`incremental-translate` 会在完成后自动写回 `snapshot/en/` 并删除 `new/`。
### 2) 全量翻译一个语言包
当没有快照/增量需求时,直接从 `en/` 翻译到目标目录:
```bash
npx @alauda-fe/i18n-tools translate -s en -t zh -k $OPENAI_API_KEY
```
注意:目标目录不存在会自动创建;已有同名键仅补齐缺失或为 null 的条目。
### 3) 英文文案语法检查(单文件/批量)
- 单文件(预览模式,不改文件):
```bash
npx @alauda-fe/i18n-tools grammar-check -f src/en/common.json --dry-run -k $OPENAI_API_KEY
```
- 单文件(直接修改,自动备份并生成变更记录):
```bash
npx @alauda-fe/i18n-tools grammar-check -f src/en/common.json -k $OPENAI_API_KEY
```
- 目录批量(并行 4 个文件,预览):
```bash
npx @alauda-fe/i18n-tools batch-grammar-check -d src/en --parallel 4 --dry-run -k $OPENAI_API_KEY
```
### 4) 仅管理/更新快照
若你已将新英文放入 `new/en/`,仅想刷新快照而不翻译:
```bash
npx @alauda-fe/i18n-tools update-snapshot -s en
```
### 5) 自定义提示词与额外规则
所有翻译/语法检查类命令均支持:
```bash
# 自定义系统提示词
--custom-prompt ./prompts/translation.md
# 额外规则(会附加到默认规则后)
--extra-rules "按钮文案绝不加句号。保持 PVC/PVCs 不展开为全称。"
```
示例:
```bash
npx @alauda-fe/i18n-tools translate -s en -t ja \
--custom-prompt ./prompts/ja.md \
--extra-rules "UI 文案不加句号" \
-k $OPENAI_API_KEY
```
---
## 命令参考(速查)
### translate
翻译 JSON 文件(全量补齐缺失/null 的目标键)。
- 选项:
- -s, --source <lang> 源语言目录,默认 en
- -t, --target <lang> 目标语言目录(必填)
- -k, --token <key> Azure OpenAI Key(或用 OPENAI_API_KEY)
- --custom-prompt <path> 自定义系统提示词
- --extra-rules <text> 附加规则
### incremental-translate
基于 `new/<source>` 与 `snapshot/<source>` 的差异增量翻译,输出至 `src/<target>`,并更新 `snapshot/<source>`,随后删除 `new/`。
- 选项同 translate,另:
- -s 默认为 en,-t 需指定如 zh
### retry-failed
重试目标目录中值为 null 的条目(之前因校验失败或限流导致)。
- 选项同 translate
### grammar-check
检查并修正英文 JSON 的语法/拼写。
- 选项:
- -f, --file <path> 需要检查的 .json 文件
- -k, --token <key> Azure OpenAI Key
- --dry-run 预览,不落盘
- --custom-prompt / --extra-rules 同上
### batch-grammar-check
批量检查目录下所有 JSON 文件。
- 选项:
- -d, --dir <path> 目录路径
- --parallel <num> 并行数量(1-10),默认 1
- 其余同 grammar-check
### sync
从配置的 GitLab/GitHub 仓库下载英文源 JSON 到 `new/en/`。
- 选项:
- -r, --repo <name> 指定仓库名(可多次)
- -l, --level <level> 过滤 level(默认 core)
- -b, --branch <branch> 指定分支
- -t, --token <token> 访问令牌(或设置 GITLAB_TOKEN/GITHUB_TOKEN)
说明:自动根据仓库类型优先使用对应环境变量;公开仓库可不提供令牌。
### update-snapshot
将 `new/<source>` 的文件复制到 `snapshot/<source>`。
---
## 重要校验与保护
- 占位符保护:`{{var}}`、`${var}` 原样保留;若翻译后占位符集合不一致,则该条目置为 null 以待重试/人工处理
- 技术术语/标点保护:Kubernetes、Docker、PVC/PVCs、Load Balancer 等严格按原文格式;UI 文案不强加句号
- 注释和值跳过:值以 `// ` 开头的注释项、以 `_en` 结尾的键、空字符串值会被跳过
---
## 日志与排错
- 错误日志:
- 翻译:`translate_errors.log`
- 语法检查:`grammar_check_errors.log`
- 常见问题:
- 401/403:检查 OPENAI_API_KEY 或 GitLab/GitHub 令牌权限
- 429 限流:工具会等待后重试;多次失败可稍后再试
- 条目为 null:多因占位符校验失败或 API 出错,可用 `retry-failed` 补齐
---
## 提示
- Node 进程需能够访问 Azure OpenAI 与 GitLab/GitHub 网络
- 推荐在提交前对 `src/<目标语言>` 做一次抽查,并关注日志中“修改/失败”统计
---
如需优化提示词或术语策略,可参考仓库内 `PROMPTS_OPTIMIZATION.md`、`TECH_TERMS_GUIDE.md` 与 `CUSTOM_PROMPTS_GUIDE.md`。