把带代码的文档丢给翻译 AI,翻完参数路径全变中文——tri-translate 的隔离区占位把我捞了回来 📅 发布时间:2026/9/6 2:22:09 👁 浏览次数: 实测结论让模型翻一段带--dry-run、~/.skillhub/metadata.json这类参数和路径的英文文档“翻得最准的不是语义而是那些它根本不该动的代码——我第一版让它硬翻标题、正文都对唯独脚本参数被汉化成了干运行”“运行路径”整段不能直接复制了。tri-translate 真正扛事的地方不在翻译引擎而在它先把路径/代码/URL 用 19 类不译规则抽成__PATH_1__这种占位符、翻译过程完全不碰、译完再还原最后拿 MQM 的 Design 维兜底。先说要害技术文档的翻译多半在跟自己的代码打架技术文档和普通文章的区别在于满篇都是写给机器看的字眼配置路径、命令行参数、版本号、API 名。这些东西在读者眼里不是要翻译的词是要原样贴回去的东西。可模型不这么想它只看到一个英文串语义上觉得dry-run就是空跑于是顺手给你译了。等你要把译文里的命令粘回终端发现它已经变成中文这条命令就废了。我这次要翻的是一份 SDK 的英文 deployment 说明里面夹着不少这种该原样保留的片段。当时我图快没做任何预处理直接把整段丢给模型让它直译。三策略分层——不译才是技术场景的主闸tri-translate 处理这场乱局用的是三策略分层但它和我以为的翻得好不好不是一回事。它把原文按内容形态切成三档各走各的门策略触发的文本执行方式退守条件① 意译优先一般段落、解释、营销、对话按上下文和读者意译传达意思而非逐字术语密集 / 命令上下文 / 法律精确性 / 数字版本号② 直译次之术语密集、技术文档、法律、命令式语句按字面直译但仍要符合中文习惯路径 / 代码 / URL / 品牌名 / 首字母缩写③ 不译兜底路径、代码块、命令、API、URL、品牌、缩写占位符保留原文译完还原—我一开始只盯着 ①意译 和 ②直译觉得翻译水平高低就看这两档。真正让我栽跟头的恰恰是我没当回事的第三档——③不译。技术文档里大量内容本来就该跳过翻译直接原样保留。这档闸门没守住后面的翻译再准也是白搭。19 类不译规则 隔离区占位法是它防汉化的钩子那到底怎么判定这段该原样保留tri-translate 内置了一张不译规则清单把常见的不译要素预分类每类是一条正则扫描原文时先抽出来。占位符长这样__类型_序号__。给你看几个真实类型占位符原始内容示例类型__PATH_1__~/.skillhub/metadata.json路径__CODE_1__--dry-run --outdir ./inter命令行/代码__URL_1__https://api.skillhub.cn/...URL__VER_1__v1.1.1版本号__ENV_1__THEME_API_KEY环境变量/配置键整个流程是个抽——翻——放回的三明治整段原文含路径/代码/URL │ ① 隔离区提取19 类规则扫描抽成占位符 ▼ 带占位符的干净暗文The tool reads 配置 from __PATH_1__ run with __CODE_1__ to ... │ ② 翻译此时只有占位符模型碰不到代码 ▼ 译文工具从 __PATH_1__ 读取配置用 __CODE_1__ 运行…… │ ③ 占位符还原把 __PATH_1__、__CODE_1__ 贴回原文 ▼ 成稿工具从 ~/.skillhub/metadata.json 读取配置用 --dry-run 运行……关键就在①和③翻译的中间态里模型看到的只有占位符那些路径、参数已经被抽走了任它怎么发挥也够不着。等它翻完占位符再原样放回去。这一步能保证代码和 markup 一个字符都不被改。我的翻车记录跳过隔离区参数被汉化先看我贪快的那一版。当时我就是普通直译没有任何占位喂进去一小段Deploy starts when you run npm run ship -- --dry-run. The version reads from ~/.skillhub/metadata.json each time.模型给我交回来的译文是这样的原文我第一版直译翻车走隔离区后的正确译文npm run ship -- --dry-run运行运行 发布 命令 空跑npm run ship -- --dry-run原样保留~/.skillhub/metadata.json从运行 元数据 文件读取版本从~/.skillhub/metadata.json读取版本v1.1.1版本 1.1.1被当成普通数字顺手带过v1.1.1原样保留第一行npm run ship -- --dry-run被翻成一串运行 发布 空跑我粘进终端根本跑不动。这就是不译闸门没上锁的代价模型语义上是对的工程上是废的。后来我老老实实把原文过一遍 tri-translate 的 TRANSLATE_EXECUTE那些命令行和路径在①就被洗成__CODE_1__、__PATH_1__②翻译时模型压根见不到它们③还原后就原样贴回来一个字符没动。还原完还要兜底占位符残留扫描 MQM Design 维占位符不是抽出来就完事最怕的是翻译过程中丢了一个导致成稿里蹦出个孤零零的__CODE_3__。tri-translate 在还原后强制做一次残留扫描要求换成原文后残留必须是 0一个占位符都不能剩。这还不够它把质量自检也做成了一道硬门MQM 四个维度里Design 这一维专门查 markup 和代码结构有没有被破坏和 Accuracy语义、Hallucination有没有编原文没有的内容一样Critical 和 Major 级别错误要求必须为 0。我第一版那种把--dry-run翻成空跑的活法在 Design 维就是妥妥一个 Critical——系统会逼我重译最多重试两次再不行就退守直译。所以这套东西给我的体感是隔离区占位法负责把代码关进保险箱写不出错MQM Design 残留扫描负责检查保险箱是否真的关严了。两道都过才允许交付。例外新增不译规则要两处同步但占位法也不是万能的我给它加规则时就踩过一条坑。tri-translate 的不译规则存在两个地方运行时载体templates/never-translate.json和给人读的规则真源references/no-translate-rules.md文档明确要求新增规则两处同步追加。我第一下只改了never-translate.json想看效果结果下次查规则时行为跟文档对不上——因为两处不一致扫描用的和描述用的对不上号行为就漂移了。规则涉及的正则越细越要两处一起改。另外一个边界是19 类是预置清单不是全知。像~开头这种路径写法如果某个规则模板的正则没覆盖到扫描时就不会被抽出来照样可能被翻。这种属于能力边界不算 bug——真要兜住就自己往清单里补一条规则。至少它把哪些该保留这件事做成了可配置、可审计的清单而不是听天由命。收尾回头看我这次吃到的教训词还是开头那句技术文档的翻译最难的不是信达雅是把不该动的代码原样留出。tri-translate 用 19 类不译规则 隔离区占位 MQM Design 兜底把哪些该不译从模型的自由发挥变成了门口的固定检查项。你要是也常翻带代码的文档下次可以先试试不急着翻先看看它有没有把--dry-run这类参数保护起来——被汉化一次你就懂这道闸多值钱了。我是老三10 年软件开发经验软件设计师、人工智能应用工程师专注鸿蒙应用开发ArkTS北向开发与 Web 前端探索 AI 自动化不定期在 CSDN 分享鸿蒙 / AI 方向技术文章。本文遵循 MIT 协议转载请注明出处。这个系列的文章都来自开源的 tri 技能库。整套 tri-xxx 技能都能在 skillhub 找到并安装一条命令装完即用比如本文用到的 tri-translateskillhub install tri-translate。装完每个技能都有 README想摸清它到底能干嘛读那个就够了。