localization-pipeline · git:20260809.013f726 · 2026-08-09 · sha256 2e31e94ffd984c66

localization-pipeline git:20260809.013f726A

Immutable. This exact content is served forever at /api/v1/blob/2e31e94ffd984c66.

---
name: localization-pipeline
description: 游戏汉化最小修补工作流:8阶段审校管线(提取→术语→AI校对→人工审核→反方二审→生成→打包→验证)。适用于对现有汉化做系统性审校,不改风格只修硬错。
---

# 游戏汉化最小修补工作流

基于 Dishonored 天邈汉化 1.4p 项目的实战经验沉淀。适用于**基于现有汉化做最小修补**的场景——不改风格、只修硬错。

## 使用场景

- 已有汉化质量不错但存在零星错译/漏译/术语不一致,需要系统性审校
- 源文本格式复杂(UE3 .int + UPK 字幕、带标签/变量/换行签名)
- 需要保留原汉化组的翻译底色,只做"修补"而非"重译"
- 需要可追溯、可审计的修改清单

## 不适用场景

- 从零开始的新翻译项目(没有基线译文可对照)
- 需要大范围改写的项目(这不是修补,是重译)
- 纯人工审校(AI 不可用的环境)

## 工作流概览(8 阶段)

```
Phase 0 环境准备 → Phase 1 双源提取对齐 → Phase 2 术语表建设
→ Phase 3 AI 校对流水线 → Phase 4 人工审核 → Phase 4.5 反方二审
→ Phase 5 合并生成 → Phase 6 打包 → Phase 7 验证
```

---

## Phase 0:环境与仓库

**做什么**:初始化目录骨架、确认双源(英文原文目录 + 汉化中文目录)、确认模型后端。

**关键决策**:
- 模型后端选择(本地 CLI / API,是否支持 structured output)
- 目录结构:`tools/` `data/` `glossary/` `prompt/` `patch/` `docs/`

**产出物**:git 仓库 + 目录骨架 + 模型调用链路验证

---

## Phase 1:双源提取与对齐

**做什么**:从英文源和中文源分别提取文本,按稳定身份对齐。

**关键步骤(按源类型)**:

### .int 文件(UE3 本地化文件)
- 解析三类赋值语法(引号、无引号、结构体字段)
- 稳定身份含:相对文件 + section + key + 出现序号 + 结构字段
- 保持 UTF-16 LE + BOM + CRLF

### UPK 字幕(UE3 内嵌字幕)
- 英文:读取 UPK 对象属性,按 `dis.db` 坐标提取
- 中文:解析 `texts.db`(哈希→UTF-16 中文映射)
- 哈希验证:`MD5(英文 UTF-16LE)` 与 `dis.db` 索引必须全量匹配

**对齐策略**:
- .int:按 文件+section+key+出现序号 对齐
- UPK:按 MD5 哈希对齐
- 每条记录附带 context(文件/关卡/说话人/dialog_path)和 domain(DLC版本)

**产出物**:`data/aligned/corpus.jsonl`(双语对齐语料,每条含 id/en/cn/context/domain)

---

## Phase 2:术语表建设

**做什么**:从语料中提取专有名词候选,经 AI + 人工确认为术语锁。

**流程**:
1. 从语料中提取高频/高信息量的名词短语候选
2. AI 首审(medium)→ 冲突裁决(high)→ 人工确认
3. 每个术语含:英文、批准中文、证据来源(Wiki + 本地语料)、频次、版本分布

**⚠️ 教训——术语作用域是关键**:
- **不要**把所有术语都做成全局硬锁(子串污染是灾难性的)
- 术语分为两类:
  - **硬锁**(全局):人名、地名、核心世界观术语(如 `Dunwall→顿沃`)
  - **作用域候选**(限定语境):物品名只在 UI 标签语境生效(如 `Regent's Safe` 只限保险箱标签,不能污染 `Safe Room`)
- 短术语需要复合词边界检查,避免匹配子串
- 跨 DLC 同名实体可能是不同对象(如不同关卡的钥匙)

**产出物**:`glossary/terms.json` + `glossary/advisory_terms.json`

---

## Phase 3:AI 校对流水线(核心)

**做什么**:逐批让 AI 对照英文审核中文译文,标记需要修补的条目。

**流水线设计(`review_pipeline.py` 模式)**:

### 输入构造
每条提供给 AI 的信息:
- `id`、`en`(英文)、`cn`(旧译)
- `context`:文件/关卡/说话人/相邻台词
- `required_format`:标签、变量、换行签名(必须原样保留的不变量)
- `required_terms`:该条命中的硬锁术语及批准中文

### 分批策略
- 每批 30–40 条
- .int 按文件聚合,UPK 按关卡/对话路径聚合(保留语境)
- 每批独立落盘,支持断点续跑

### 模型配置
- Medium 做全量首审(覆盖面)
- High 做疑难复审(uncertain + 低置信度 + 术语冲突)
- 必须使用 structured output(JSON Schema)强制输出格式
- 单并发,指数退避重试

### System Prompt 铁律

1. **天邈译文是基线,不是重译对象**——没有十足把握就不改(action=keep 是默认值)
2. 只修硬问题:错译、漏译、语义偏离、机翻痕迹、错别字、格式破坏
3. 专有名词一律以术语表为准(硬锁必须遵守,作用域候选可结合语境否决)
4. 格式签名必须保留(标签数量/顺序、变量名称/出现次数、换行签名)
5. 不确定就标记 `uncertain=true`,涉及事实则写 `[WIKI_LOOKUP: xxx]`
6. **等义就不改**——旧译已能正确传达语义时不得因"更顺口"而修改

### 质量控制
- 修改率红线:>35% 暂停排查
- 不确定率红线:>10% 暂停排查
- 占位符/标签/变量的硬违规必须为 0
- 每 500 条输出滚动统计
- 每批 id 全集校验:无遗漏、无重复、无多余

### ⚠️ 教训——不确定处理流程

```
AI 标 uncertain=true + [WIKI_LOOKUP: xxx]
  → 编排层查询 Dishonored Wiki(Fandom API)
  → Wiki 能裁决 → 直接 fix/keep
  → Wiki 不能裁决 → 保留给 Phase 4 人工审核
```

关键原则:Wiki 搜索命中 ≠ 结论,需要页面直接支持当前事实。无结果不能当反证。不同来源冲突时降级为人工。

**产出物**:`data/review/phase3/*.json`(每批结果)+ 汇总 accepted_fixes + uncertain 清单

---

## Phase 4:人工审核(占比极低)

**做什么**:对 AI 无法确定的条目(<1%)进行上下文补齐后的人工裁决。

**上下文增强(`phase4_prepare.py` 模式)**:
- 补齐 DLC/任务/地点/触发类型
- 注入同场景完整对白(±2 句邻居)
- 注入 Wiki 核查结论
- 注入技术定位(文件/对话树路径)

**⚠️ 教训——不要信任模型的自信度**:
- Phase 4 中从 145 条模型的"裁决"中拦截了 8 条模型过度/欠修
- 需要独立二次验收,逐项检查任务定位、同场对白、格式、术语

**产出物**:全部人工项裁决完毕(fix 或 keep),uncertain 归零

---

## Phase 4.5:反方二审(防过修稳定化)

**⚠️ 这是从错误中学到的最重要机制——独立反方二审**。

**为什么需要它**:术语回溯提供了铁证——1,207 条中发现 416 条被第二轮改变,187 条恢复天邈原译。同一个 Agent 既能发现问题也能为自己的修改背书,错误修改可能带着高置信度出现。

**核心设计(`release_gate.py` 模式)**:

### 单写入规则
反方 Agent 只能做三种裁决:
1. 接受候选(确认原译有硬错且候选确实修复了)
2. **完整回退**到天邈原译(原译可接受,或候选只是润色)
3. 请求研究/重新提案(原译和候选都不可靠)

**绝对禁止**写第三版译文。代码层硬拒绝。

### 关键设计决策
- **隐藏首轮理由**——反方看不到 Phase 3/4 的理由和置信度,独立判断
- **风险分层**(只决定处理顺序,不代替全覆盖二审):
  - critical:否定/情态/数量/方向发生变化 | high:大幅改写
  - medium:对白敏感改写 | low:小改
- **错误疫苗**(`localization_regression_cases.json`):
  - 保存已知典型错误作为测试用例
  - 每轮反方二审必须 100% 通过疫苗检测
  - 发现新错误类型必须加入疫苗库

### 证据优先级
1. 本条英文 + 本地同场景对白
2. 游戏脚本/实机证据
3. Dishonored Wiki
4. 官方资料
5. 词典和语言直觉

### 发布硬门
- 所有语义修补具备独立裁决
- 错误疫苗 critical 检出率 100%
- 占位符/标签/变量/换行/编码错误 = 0
- 分层抽检错误修改率 <1%

**产出物**:最终 decisions(keep=保留候选,fix=回退原译),uncertain 归零

---

## Phase 5:合并生成

**做什么**:将最终 decisions 写回实际文件。

**关键原则**:
- .int:按 file+key 应用修改,**保持 UTF-16 LE+BOM+CRLF+键序不变**(最小 diff)
- UPK:生成新 `texts.db`,仅替换修改条目的值(最小 diff)
- 辅助文件原样复制(`dis.db`/`upklist.db`/字体 upk)

**⚠️ 教训——changelog 过滤**:
- `build_changelog` 必须过滤 `old == new` 的条目(Phase 4.5 回退会导致 new=原译=old)
- reason 与内容不一致的条目不应进入最终清单

**产出物**:`patch/` 目录 + `changelog.json`(仅含有效修改条目)

---

## Phase 6:打包

**双形态策略**:
- **Full**:全部文件解压覆盖即玩(大体积,体验好)
- **Lite**:安装脚本形态(小体积,需注入工具)

**⚠️ 教训**:
- Full 和 Lite 的文件路径/注入顺序可能不同
- 字体 upk 和 UI upk 必须随包分发
- bat 脚本换行必须是 CRLF

**产出物**:`release/` 目录 + SHA-256 清单 `release-manifest.json`

---

## Phase 7:验证

**静态验证**(自动化):
- 编码/结构/条目数校验
- 哈希校验(新包 vs 天邈原版 vs 预期差异清单)
- 差异必须与预期一致,0 异常、0 多余文件

**动态验证**(实机):
- 主菜单中文 → 进关卡 → 触发对话字幕 → UI/任务/物品/书页抽查
- ⚠️ 这是静态验证无法替代的——字体遗漏、bat 换行等问题只能实机发现

---

## 使用指南

1. **先确认基线**:英文源 + 中文源都存在且可只读访问
2. **运行 Phase 1**:提取对齐,确认语料覆盖率
3. **人工确认 Phase 2**:术语表必须人工过目(这是 3 次人工节点之一)
4. **Phase 3 先冒烟**:跑 2 批验证结构化输出和标签完整性,再全量
5. **Phase 4.5 不能跳过**:反方二审是防止过度修改的最后防线
6. **Phase 7 实机验证不能省**:静态验证检查不了游戏中真实显示效果
7. **每次发现新错误类型**:加入错误疫苗库 `localization_regression_cases.json`

## 文件结构参考

```
project/
├── tools/           # 提取、对齐、校对、打包脚本
├── data/
│   ├── aligned/     # corpus.jsonl(双语对齐语料)
│   └── review/      # AI 校对结果、人工裁决、反方二审
├── glossary/        # terms.json + advisory_terms.json
├── prompt/          # System prompt 模板
├── research/        # Wiki 查证记录、人工规则
├── docs/            # 各阶段报告
├── patch/           # 最终修补产物
└── release/         # 发布包
```