$npx -y skills add zhimaAi/ChatClaw --skill i18n-check检查并补充前端和后端的i18n翻译文件。以中文(zh-CN)为基准,检查其他语言翻译文件是否缺少key,并补充缺失的key和对应的翻译值。对于日语(ja-JP)、韩语(ko-KR)、繁体中文(zh-TW),使用与非CJK语言对比的方式检测未翻译内容。
| 1 | # i18n 翻译检查与补充 |
| 2 | |
| 3 | ## 快速开始(推荐安全用法) |
| 4 | |
| 5 | > **强制前提**:先用 Git 保证当前工作区是干净的(或至少 locales 相关改动可回滚),再运行下面任何脚本。 |
| 6 | |
| 7 | 1. **只在必要范围格式化翻译文件**(建议从后端/英文开始) |
| 8 | |
| 9 | - 后端 JSON 一般是纯英文,占位少,**优先安全**: |
| 10 | |
| 11 | ```bash |
| 12 | python .cursor/skills/i18n-check/scripts/format_frontend.py |
| 13 | python .cursor/skills/i18n-check/scripts/format_backend.py |
| 14 | ``` |
| 15 | |
| 16 | - `format_frontend.py` 会**重写所有 `frontend/src/locales/*.ts`**: |
| 17 | - 仅做语法级重排与缩进,不再对字符做任何再编码; |
| 18 | - 仍然建议:**先只在当前分支本地运行,确认 diff 可接受后再提交**。 |
| 19 | |
| 20 | 2. **对比翻译差异(只读,不改文件)**: |
| 21 | ```bash |
| 22 | python .cursor/skills/i18n-check/scripts/compare_frontend.py |
| 23 | python .cursor/skills/i18n-check/scripts/compare_backend.py |
| 24 | ``` |
| 25 | |
| 26 | 3. **补全缺失的 key(使用中文作为占位符)** |
| 27 | |
| 28 | - **推荐做法:先只对英文和后端补全,再视情况扩展到其他语言。** |
| 29 | |
| 30 | ```bash |
| 31 | # 仅补前端英文(安全范围小) |
| 32 | python .cursor/skills/i18n-check/scripts/fill_frontend.py --target en-US |
| 33 | |
| 34 | # 补全所有前端语言(会改动所有 locales,务必在 Git 干净时使用) |
| 35 | python .cursor/skills/i18n-check/scripts/fill_frontend.py |
| 36 | |
| 37 | # 补全所有后端语言(JSON,风险相对可控) |
| 38 | python .cursor/skills/i18n-check/scripts/fill_backend.py |
| 39 | ``` |
| 40 | |
| 41 | 4. **AI 翻译**(自动检测需要翻译的内容,**不会直接改 TS/JSON 文件**) |
| 42 | ```bash |
| 43 | # 翻译特定语言 |
| 44 | python .cursor/skills/i18n-check/scripts/translate_with_ai.py --target en-US |
| 45 | |
| 46 | # 翻译所有语言(包括 CJK 语言) |
| 47 | python .cursor/skills/i18n-check/scripts/translate_with_ai.py --all --cjk |
| 48 | ``` |
| 49 | |
| 50 | 5. **CJK 语言翻译后检测**(翻译完成后检查是否还有未翻译) |
| 51 | ```bash |
| 52 | # 导出 CJK 语言未翻译内容到文本文件 |
| 53 | python .cursor/skills/i18n-check/scripts/export_translations.py --target ja-JP --cjk |
| 54 | |
| 55 | # 填充后检测 CJK 语言未翻译 key |
| 56 | python .cursor/skills/i18n-check/scripts/fill_frontend.py --check-cjk |
| 57 | ``` |
| 58 | |
| 59 | ## 完整工作流程(推荐顺序) |
| 60 | |
| 61 | ```bash |
| 62 | # Step 0: 确认 Git 状态 |
| 63 | # - 确保 frontend/src/locales 和 internal/services/i18n/locales 内的改动都可回滚 |
| 64 | # - 不要在未提交的重要改动上直接批量格式化/补全 |
| 65 | |
| 66 | # Step 1: 格式化(可选,但推荐先只在后端/英文上尝试) |
| 67 | python .cursor/skills/i18n-check/scripts/format_frontend.py |
| 68 | python .cursor/skills/i18n-check/scripts/format_backend.py |
| 69 | |
| 70 | # Step 2: 对比(只读) |
| 71 | python .cursor/skills/i18n-check/scripts/compare_frontend.py |
| 72 | python .cursor/skills/i18n-check/scripts/compare_backend.py |
| 73 | |
| 74 | # Step 3: 补全缺失 key(中文占位) |
| 75 | # 先补英文,再按需扩展其他语言 |
| 76 | python .cursor/skills/i18n-check/scripts/fill_frontend.py --target en-US |
| 77 | python .cursor/skills/i18n-check/scripts/fill_backend.py |
| 78 | |
| 79 | # Step 4: AI 翻译(前端 + 后端) |
| 80 | # 脚本会自动检测需要翻译的内容并生成翻译提示(只读,不改 TS/JSON) |
| 81 | python .cursor/skills/i18n-check/scripts/translate_with_ai.py --all |
| 82 | # 仅处理后端 JSON 时,可显式指定: |
| 83 | # python .cursor/skills/i18n-check/scripts/translate_with_ai.py --type backend --all |
| 84 | |
| 85 | # Step 5: 翻译完成后检测 CJK 语言 |
| 86 | # 对于 ja-JP, ko-KR, zh-TW,检测是否还有未翻译内容 |
| 87 | python .cursor/skills/i18n-check/scripts/fill_frontend.py --check-cjk |
| 88 | python .cursor/skills/i18n-check/scripts/translate_with_ai.py --cjk |
| 89 | |
| 90 | # Step 6: 导出未翻译内容到文本,统一翻译后再导入 |
| 91 | python .cursor/skills/i18n-check/scripts/export_translations.py --target ja-JP --cjk |
| 92 | # 手动翻译文本文件中的内容 |
| 93 | python .cursor/skills/i18n-check/scripts/import_translations.py --file translation_export_ja-JP.txt |
| 94 | ``` |
| 95 | |
| 96 | ## 脚本说明 |
| 97 | |
| 98 | ### 脚本位置 |
| 99 | 所有脚本位于 `.cursor/skills/i18n-check/scripts/` 目录: |
| 100 | |
| 101 | | 脚本 | 用途 | |
| 102 | |------|------| |
| 103 | | `format_frontend.py` | 格式化前端 TS 翻译文件 | |
| 104 | | `compare_frontend.py` | 对比前端翻译差异,支持 `--cjk` 检测 CJK 语言 | |
| 105 | | `fill_frontend.py` | 补全前端缺失的 key,支持 `--check-cjk` 检测 CJK 未翻译 | |
| 106 | | `translate_with_ai.py` | AI 翻译:自动检测需要翻译的内容并生成翻译提示,支持 `--cjk` | |
| 107 | | `export_translations.py` | 导出未翻译内容到文本文件,支持 `--cjk` | |
| 108 | | `import_translations.py` | 导入翻译结果 | |
| 109 | | `format_backend.py` | 格式化后端 JSON 翻译文件 | |
| 110 | | `compare_backend.py` | 对比后端翻译差异 | |
| 111 | | `fill_backend.py` | 补全后端缺失的 key | |
| 112 | |
| 113 | ### 使用示例 |
| 114 | |
| 115 | **对比 CJK 语言** |
| 116 | ```bash |
| 117 | # 对比特定 CJK 语言与英文 |
| 118 | python compare_frontend.py --target ja-JP --cjk |
| 119 | |
| 120 | # 对比所有 CJK 语言 |
| 121 | python compare_frontend.py --cjk-only |
| 122 | ``` |
| 123 | |
| 124 | **填充 CJK 语言** |
| 125 | ```bash |
| 126 | # 填充时使用 CJK 模式 |
| 127 | python fill_frontend.py --cjk |
| 128 | |
| 129 | # 检测 CJK 语言未翻译 key |
| 130 | python fill_frontend.py --check-cjk |
| 131 | ``` |
| 132 | |
| 133 | **AI 翻译脚本** |
| 134 | ```bash |
| 135 | # 翻译特定语言 |
| 136 | python translate_with_ai.py --type frontend --target en-US |
| 137 | |
| 138 | # 翻译 CJK 语言 |
| 139 | python translate_with_ai.py --target ja-JP --cjk |
| 140 | |
| 141 | # 翻译所有语言(包括 CJK) |
| 142 | python translate_with_ai.py --all --cjk |
| 143 | ``` |
| 144 | |
| 145 | **导出翻译** |
| 146 | ```bash |
| 147 | # 导出 CJK 语言未翻译内容 |
| 148 | python export_translations.py --target ja-JP --cjk |
| 149 | ``` |
| 150 | |
| 151 | ### 翻译检测逻辑 |
| 152 | |
| 153 | - **非 CJK 语言** (en-US, de-DE, fr-FR 等): 检测含有中文的 key,需要翻译 |
| 154 | - **CJK 语言** (zh-TW, ja-JP, ko-KR): 检测与非 CJK 语言(如 en-US)相同的 key,需要翻译成对应语言 |
| 155 | |
| 156 | ### CJK 语言特殊处理 |
| 157 | |
| 158 | 对于日语 (ja-JP)、韩语 (ko-KR)、繁体中文 (zh-TW),采用以下检测逻辑: |
| 159 | |
| 160 | 1. **对比方式**: 不以 zh-CN 为基准,而是与英语等非 CJK 语言对比 |
| 161 | 2. **检测原理**: 如果某个 key 在目标语言中的值与英语相同,说明该 key 未翻译 |
| 162 | 3. **导出格式**: 显示 baseline(中文) | reference(英语) | current(当前值),便于翻译 |
| 163 | |
| 164 | ### AI 翻译流程 |
| 165 | |
| 166 | 1. 运行 `translate_with_ai.py` 脚本 |
| 167 | 2. 脚本会自动: |
| 168 | - 读取目标语言文件 |
| 169 | - 检测需要翻译的中文内容(或 CJK 未翻译内容) |
| 170 | - 生成 AI 翻译提示 (prompt) |
| 171 | 3. 将生成的提示复制给 AI 进行翻译 |
| 172 | 4. AI 返回 JSON 格式的翻译结果 |
| 173 | 5. 使用 `import_translations.py` 导入翻译结果 |
| 174 | |
| 175 | ## 文件位置 |
| 176 | |
| 177 | | 类型 | 目录 | 格式 | 基准文件 | CJK 基准文件 | |
| 178 | |------|------|------|---------|-------------| |
| 179 | | 前端 | `frontend/src/locales/` | TypeScript `.ts` | `zh-CN.ts` | `en-US.ts` | |
| 180 | | 后端 | `internal/services/i18n/locales/` | JSON `.json` | `zh-CN.json` | `en-US.json` | |
| 181 | |
| 182 | ## 注意事项 |
| 183 | |
| 184 | - **保持 key 结构**: 必须与基准文件完全一致,使用相同的嵌套层级 |
| 185 | - **不要删除任何内容**: 只能添加缺失的 key,不能删除 |