# I18N Check

> 检查并补充前端和后端的i18n翻译文件。以中文（zh-CN）为基准，检查其他语言翻译文件是否缺少key，并补充缺失的key和对应的翻译值。对于日语(ja-JP)、韩语(ko-KR)、繁体中文(zh-TW)，使用与非CJK语言对比的方式检测未翻译内容。

- Skill: `zhimaai/i18n-check` (Agent Skill, multi-file: 22 files)
- Install (CLI): `npx skillmds add zhimaai/i18n-check`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhimaai/i18n-check/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zhimaAi (https://skillmd.com/u/zhimaai)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/zhimaai/i18n-check

---


# i18n 翻译检查与补充

## 快速开始（推荐安全用法）

> **强制前提**：先用 Git 保证当前工作区是干净的（或至少 locales 相关改动可回滚），再运行下面任何脚本。

1. **只在必要范围格式化翻译文件**（建议从后端/英文开始）

   - 后端 JSON 一般是纯英文，占位少，**优先安全**：

   ```bash
   python .cursor/skills/i18n-check/scripts/format_frontend.py
   python .cursor/skills/i18n-check/scripts/format_backend.py
   ```

   - `format_frontend.py` 会**重写所有 `frontend/src/locales/*.ts`**：
     - 仅做语法级重排与缩进，不再对字符做任何再编码；
     - 仍然建议：**先只在当前分支本地运行，确认 diff 可接受后再提交**。

2. **对比翻译差异（只读，不改文件）**:
   ```bash
   python .cursor/skills/i18n-check/scripts/compare_frontend.py
   python .cursor/skills/i18n-check/scripts/compare_backend.py
   ```

3. **补全缺失的 key（使用中文作为占位符）**

   - **推荐做法：先只对英文和后端补全，再视情况扩展到其他语言。**

   ```bash
   # 仅补前端英文（安全范围小）
   python .cursor/skills/i18n-check/scripts/fill_frontend.py --target en-US

   # 补全所有前端语言（会改动所有 locales，务必在 Git 干净时使用）
   python .cursor/skills/i18n-check/scripts/fill_frontend.py

   # 补全所有后端语言（JSON，风险相对可控）
   python .cursor/skills/i18n-check/scripts/fill_backend.py
   ```

4. **AI 翻译**（自动检测需要翻译的内容，**不会直接改 TS/JSON 文件**）
   ```bash
   # 翻译特定语言
   python .cursor/skills/i18n-check/scripts/translate_with_ai.py --target en-US

   # 翻译所有语言（包括 CJK 语言）
   python .cursor/skills/i18n-check/scripts/translate_with_ai.py --all --cjk
   ```

5. **CJK 语言翻译后检测**（翻译完成后检查是否还有未翻译）
   ```bash
   # 导出 CJK 语言未翻译内容到文本文件
   python .cursor/skills/i18n-check/scripts/export_translations.py --target ja-JP --cjk
   
   # 填充后检测 CJK 语言未翻译 key
   python .cursor/skills/i18n-check/scripts/fill_frontend.py --check-cjk
   ```

## 完整工作流程（推荐顺序）

```bash
# Step 0: 确认 Git 状态
# - 确保 frontend/src/locales 和 internal/services/i18n/locales 内的改动都可回滚
# - 不要在未提交的重要改动上直接批量格式化/补全

# Step 1: 格式化（可选，但推荐先只在后端/英文上尝试）
python .cursor/skills/i18n-check/scripts/format_frontend.py
python .cursor/skills/i18n-check/scripts/format_backend.py

# Step 2: 对比（只读）
python .cursor/skills/i18n-check/scripts/compare_frontend.py
python .cursor/skills/i18n-check/scripts/compare_backend.py

# Step 3: 补全缺失 key（中文占位）
# 先补英文，再按需扩展其他语言
python .cursor/skills/i18n-check/scripts/fill_frontend.py --target en-US
python .cursor/skills/i18n-check/scripts/fill_backend.py

# Step 4: AI 翻译（前端 + 后端）
# 脚本会自动检测需要翻译的内容并生成翻译提示（只读，不改 TS/JSON）
python .cursor/skills/i18n-check/scripts/translate_with_ai.py --all
# 仅处理后端 JSON 时，可显式指定：
# python .cursor/skills/i18n-check/scripts/translate_with_ai.py --type backend --all

# Step 5: 翻译完成后检测 CJK 语言
# 对于 ja-JP, ko-KR, zh-TW，检测是否还有未翻译内容
python .cursor/skills/i18n-check/scripts/fill_frontend.py --check-cjk
python .cursor/skills/i18n-check/scripts/translate_with_ai.py --cjk

# Step 6: 导出未翻译内容到文本，统一翻译后再导入
python .cursor/skills/i18n-check/scripts/export_translations.py --target ja-JP --cjk
# 手动翻译文本文件中的内容
python .cursor/skills/i18n-check/scripts/import_translations.py --file translation_export_ja-JP.txt
```

## 脚本说明

### 脚本位置
所有脚本位于 `.cursor/skills/i18n-check/scripts/` 目录：

| 脚本 | 用途 |
|------|------|
| `format_frontend.py` | 格式化前端 TS 翻译文件 |
| `compare_frontend.py` | 对比前端翻译差异，支持 `--cjk` 检测 CJK 语言 |
| `fill_frontend.py` | 补全前端缺失的 key，支持 `--check-cjk` 检测 CJK 未翻译 |
| `translate_with_ai.py` | AI 翻译：自动检测需要翻译的内容并生成翻译提示，支持 `--cjk` |
| `export_translations.py` | 导出未翻译内容到文本文件，支持 `--cjk` |
| `import_translations.py` | 导入翻译结果 |
| `format_backend.py` | 格式化后端 JSON 翻译文件 |
| `compare_backend.py` | 对比后端翻译差异 |
| `fill_backend.py` | 补全后端缺失的 key |

### 使用示例

**对比 CJK 语言**
```bash
# 对比特定 CJK 语言与英文
python compare_frontend.py --target ja-JP --cjk

# 对比所有 CJK 语言
python compare_frontend.py --cjk-only
```

**填充 CJK 语言**
```bash
# 填充时使用 CJK 模式
python fill_frontend.py --cjk

# 检测 CJK 语言未翻译 key
python fill_frontend.py --check-cjk
```

**AI 翻译脚本**
```bash
# 翻译特定语言
python translate_with_ai.py --type frontend --target en-US

# 翻译 CJK 语言
python translate_with_ai.py --target ja-JP --cjk

# 翻译所有语言（包括 CJK）
python translate_with_ai.py --all --cjk
```

**导出翻译**
```bash
# 导出 CJK 语言未翻译内容
python export_translations.py --target ja-JP --cjk
```

### 翻译检测逻辑

- **非 CJK 语言** (en-US, de-DE, fr-FR 等): 检测含有中文的 key，需要翻译
- **CJK 语言** (zh-TW, ja-JP, ko-KR): 检测与非 CJK 语言（如 en-US）相同的 key，需要翻译成对应语言

### CJK 语言特殊处理

对于日语 (ja-JP)、韩语 (ko-KR)、繁体中文 (zh-TW)，采用以下检测逻辑：

1. **对比方式**: 不以 zh-CN 为基准，而是与英语等非 CJK 语言对比
2. **检测原理**: 如果某个 key 在目标语言中的值与英语相同，说明该 key 未翻译
3. **导出格式**: 显示 baseline(中文) | reference(英语) | current(当前值)，便于翻译

### AI 翻译流程

1. 运行 `translate_with_ai.py` 脚本
2. 脚本会自动：
   - 读取目标语言文件
   - 检测需要翻译的中文内容（或 CJK 未翻译内容）
   - 生成 AI 翻译提示 (prompt)
3. 将生成的提示复制给 AI 进行翻译
4. AI 返回 JSON 格式的翻译结果
5. 使用 `import_translations.py` 导入翻译结果

## 文件位置

| 类型 | 目录 | 格式 | 基准文件 | CJK 基准文件 |
|------|------|------|---------|-------------|
| 前端 | `frontend/src/locales/` | TypeScript `.ts` | `zh-CN.ts` | `en-US.ts` |
| 后端 | `internal/services/i18n/locales/` | JSON `.json` | `zh-CN.json` | `en-US.json` |

## 注意事项

- **保持 key 结构**: 必须与基准文件完全一致，使用相同的嵌套层级
- **不要删除任何内容**: 只能添加缺失的 key，不能删除现有的 key
- **变量占位符**: 后端 JSON 使用 `{{.xxx}}` 格式，前端使用 `{xxx}` 格式，必须保留
- **格式化后再对比**: 每次对比前先运行格式化脚本，确保格式统一
- **CJK 语言处理**: 繁体中文(zh-TW)、日语(ja-JP)、韩语(ko-KR)使用英语(en-US)作为基准文件进行对比和填充

