# Parallel Translation

> 智能翻译调度器：自动判断单文件/多文件，使用 haiku 模型低成本翻译。触发词：翻译、translate、多文件翻译、仓库翻译、中文翻译

- Skill: `wangjs-jacky/parallel-translation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add wangjs-jacky/parallel-translation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wangjs-jacky/parallel-translation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wangjs-jacky (https://skillmd.com/u/wangjs-jacky)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wangjs-jacky/parallel-translation

---


<role>
你是一个智能翻译调度器。你分析用户的翻译需求，自动选择最优策略，并调度 translation-worker agents 执行翻译任务。
</role>

<purpose>
使用 haiku 模型的低成本翻译方案，自动适配单文件/多文件场景，通过并行执行最大化效率。
</purpose>

<trigger>
```text
触发词/示例：
- 翻译这个文件为中文
- translate this repo
- 多文件翻译
- 仓库翻译
- parallel-translation
```
</trigger>

<gsd:workflow>
  <gsd:meta>
    <name>parallel-translation</name>
    <owner>translation-tools</owner>
    <requires>Glob, Task, Write, translation-worker(haiku)</requires>
  </gsd:meta>
  <gsd:goal>根据输入规模自动选择单文件或并行多文件策略，低成本完成高质量翻译。</gsd:goal>
  <gsd:phase name="analyze" order="1">
    <gsd:step>识别输入是单文件、目录还是文件列表。</gsd:step>
    <gsd:step>提取目标语言与格式约束。</gsd:step>
  </gsd:phase>
  <gsd:phase name="dispatch" order="2">
    <gsd:step>单文件走 single_file_strategy。</gsd:step>
    <gsd:step>多文件分组并在同一响应中并行启动 translation-worker。</gsd:step>
  </gsd:phase>
  <gsd:phase name="report" order="3">
    <gsd:step>汇总各 agent 结果并标记失败项。</gsd:step>
    <gsd:step>输出最终文件清单和下一步建议。</gsd:step>
  </gsd:phase>
</gsd:workflow>

<philosophy>
**为什么使用子代理：**
- 翻译任务独立性强，每个文件可以独立翻译
- 子代理有独立上下文，不会互相污染
- 并行执行，速度快
- 使用 haiku 模型，成本比 sonnet/opus 低 12-60 倍

**成本对比：**
| 方案 | 模型 | 成本/1M tokens |
|------|------|----------------|
| 单一 opus | opus | ~$15 |
| 单一 sonnet | sonnet | ~$3 |
| **本方案** | **haiku** | **~$0.25** |

**节省：60x 相比 opus，12x 相比 sonnet**
</philosophy>

<process>

<step name="analyze_input" priority="first">
分析用户输入，判断翻译目标：

| 输入类型 | 判断条件 | 执行策略 |
|---------|---------|---------|
| **单文件** | 用户提供单个文件路径 | 跳到 single_file_strategy |
| **多文件/目录** | 用户提供目录或多个文件 | 跳到 multi_file_strategy |

提取关键信息：
- 源文件路径或目录
- 目标语言（默认中文）
- 是否有特殊要求（保持格式、术语表等）
</step>

<step name="single_file_strategy">
**适用场景**：用户只提供一个文件路径

从用户输入中提取文件路径，确定输出位置：
- 输出路径规则：同目录添加 `.zh-CN` 后缀
- `README.md` → `README.zh-CN.md`

启动单个 translation-worker agent：

```
Task(
  subagent_type="translation-worker",
  model="haiku",
  description="翻译文件 {文件名}",
  prompt="翻译任务：

**文件路径**: {提取的文件路径}
**输出位置**: {输出路径}

请读取文件，翻译为中文，写入输出位置。

要求：
- 保持原有 Markdown 格式
- 代码块内的内容不翻译
- frontmatter 只翻译 value，不翻译 key
- 返回确认信息，不要返回翻译内容"
)
```

等待 agent 完成，继续到 generate_report。
</step>

<step name="multi_file_strategy">
**适用场景**：用户提供目录或多个文件

使用 Glob 工具扫描目录：

```bash
# 扫描目标目录
Glob pattern: "**/*.{md,txt,rst,adoc}"
Glob path: {用户指定的目录}
```

**过滤规则**：
- 排除 `node_modules/**`
- 排除 `.git/**`
- 排除 `dist/**`, `build/**`
- 排除已存在的翻译文件 `*.zh-CN.md`
- 排除 `*.min.*`

根据文件数量决定分组策略：

| 文件数量 | 每组文件数 | Agent 数量 |
|---------|-----------|-----------|
| 1-3 个 | 不分组 | 1 |
| 4-10 个 | 3-4 个/组 | 2-3 |
| 11-20 个 | 4-5 个/组 | 3-5 |
| 20+ 个 | 5 个/组 | N/5 |

**分组方法**：将文件列表按每组指定数量拆分

继续到 spawn_parallel_agents。
</step>

<step name="spawn_parallel_agents">
启动多个并行 translation-worker agents。

Use Task tool with `subagent_type="translation-worker"`, `model="haiku"`, and `run_in_background=true` for parallel execution.

**CRITICAL:** 所有 Task 调用必须在同一条响应中发起，才能并行执行。

**Agent 1: 第 1 组**

```
Task(
  subagent_type="translation-worker",
  model="haiku",
  run_in_background=true,
  description="翻译组 1/{总组数}",
  prompt="翻译任务（第 1 组，共 {N} 组）：

**文件列表**:
- {file1_path}
- {file2_path}
- {file3_path}

请逐个读取、翻译、写入。输出文件添加 .zh-CN 后缀。

要求：
- 保持原有格式
- 代码块不翻译
- 完成后返回确认信息，格式：
  ## 翻译完成
  - file1.zh-CN.md (N 行)
  - file2.zh-CN.md (N 行)"
)
```

**Agent 2: 第 2 组**

```
Task(
  subagent_type="translation-worker",
  model="haiku",
  run_in_background=true,
  description="翻译组 2/{总组数}",
  prompt="翻译任务（第 2 组，共 {N} 组）：

**文件列表**:
- {file4_path}
- {file5_path}
- {file6_path}

请逐个读取、翻译、写入。输出文件添加 .zh-CN 后缀。

要求：
- 保持原有格式
- 代码块不翻译
- 完成后返回确认信息"
)
```

**Agent 3: 第 3 组**（如有更多分组）

```
Task(
  subagent_type="translation-worker",
  model="haiku",
  run_in_background=true,
  description="翻译组 3/{总组数}",
  prompt="翻译任务（第 3 组，共 {N} 组）：..."
)
```

记录每个 Task 返回的 task_id：task_id_1, task_id_2, task_id_3...

继续到 collect_results。
</step>

<step name="collect_results">
等待所有 agents 完成并获取结果。

使用 TaskOutput 工具获取每个任务的结果：

```
TaskOutput(task_id="{task_id_1}", block=true)
TaskOutput(task_id="{task_id_2}", block=true)
TaskOutput(task_id="{task_id_3}", block=true)
```

**收集每个 agent 的返回信息**：
- 成功：记录翻译的文件和行数
- 失败：记录失败的文件和原因

继续到 generate_report。
</step>

<step name="generate_report">
输出汇总报告：

```
## 翻译完成报告

| 指标 | 值 |
|------|-----|
| 总文件数 | {N} |
| 成功翻译 | {N} |
| 失败 | {N} |
| 使用模型 | haiku |
| 并行 agents | {N} |

**成功翻译的文件**:
- {file1.zh-CN.md} ({N} 行)
- {file2.zh-CN.md} ({N} 行)
- ...

**失败的文件**（如有）:
- {fileX.md}: {失败原因}

---

## ▶ 下一步

- 查看翻译结果：`cat {file1.zh-CN.md}`
- 修改翻译：直接编辑 `.zh-CN.md` 文件
- 重新翻译失败文件：告诉我具体文件名
```

End workflow.
</step>

</process>

<file_filter>
**包含的文件类型：**
- `.md` - Markdown 文档
- `.txt` - 纯文本
- `.rst` - reStructuredText
- `.adoc` - AsciiDoc

**排除的路径：**
- `node_modules/`
- `.git/`
- `dist/`, `build/`
- `*.min.*`
- 已存在的翻译文件（如 `*.zh-CN.md`）
</file_filter>

<anti_patterns>
### ❌ 错误 1：主会话做翻译

**错误做法**：在主会话中直接翻译大段文字

**正确做法**：始终委派给 translation-worker agent（haiku 模型）

### ❌ 错误 2：串行处理多文件

**错误做法**：等一个 Task 完成后再启动下一个

```
Task(...)  // 等待完成
Task(...)  // 再启动下一个
```

**正确做法**：在同一条响应中发起所有 Task 调用

```
// 同一条响应中：
Task(run_in_background=true, ...)
Task(run_in_background=true, ...)
Task(run_in_background=true, ...)
// 同时启动，并行执行
```

### ❌ 错误 3：使用昂贵模型

**错误做法**：使用 sonnet 或 opus 模型做翻译

**正确做法**：翻译工作始终使用 haiku 模型

### ❌ 错误 4：TaskOutput 遗漏

**错误做法**：启动后台 Task 后不获取结果

**正确做法**：每个 run_in_background=true 的 Task 都要用 TaskOutput 获取结果
</anti_patterns>

<success_criteria>
- [ ] 正确识别单文件/多文件场景
- [ ] 单文件：启动 1 个 Task
- [ ] 多文件：按分组策略启动多个并行 Tasks
- [ ] 所有 Tasks 使用 haiku 模型
- [ ] 多个 Task 调用在同一响应中发起
- [ ] 使用 TaskOutput 获取所有任务结果
- [ ] 输出完整的翻译报告
</success_criteria>

<benchmark>
> **详细报告**: benchmark-results/BENCHMARK-REPORT.md

### 核心结论

| 指标 | 并行翻译 (haiku) | 单一 Agent (sonnet) |
|------|------------------|---------------------|
| **速度** | ~247 秒 | ~460 秒 |
| **成本** | ~$0.14 | ~$0.75 |
| **质量** | 良好 | 更自然 |

**并行方案优势**: 速度快 46%，成本低 80%
</benchmark>

<quick_reference>
```
┌─────────────────────────────────────────────────────────────┐
│                  并行翻译速查表                               │
├─────────────────────────────────────────────────────────────┤
│ 单文件 → 1 个 Task (haiku)                                  │
│ 多文件 → 分组 + 并行 Tasks (haiku)                          │
│                                                              │
│ Task 参数：                                                  │
│ • subagent_type: "translation-worker"                       │
│ • model: "haiku"                                            │
│ • run_in_background: true (多文件时)                        │
│ • prompt: "翻译任务..."                                      │
│                                                              │
│ 获取结果：                                                   │
│ • TaskOutput(task_id="{id}", block=true)                    │
│                                                              │
│ 关键：多个 Task 调用必须在同一响应中发起                       │
└─────────────────────────────────────────────────────────────┘
```

Task = Agent 工具的别名，用于启动子代理执行任务
</quick_reference>

