UNPKG

@alauda-fe/i18n-tools

Version:

基于 Azure OpenAI 的 JSON i18n 文件翻译和英文语法检查工具集

238 lines (155 loc) 6.86 kB
## 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`