Xiepro BesChannels PPT Translation(PPT 中译英)
这个技能把客户或同事发来的中文 PPT 翻成英文,给海外客户和 global 会议用。要求很严:名字和术语不能错,意思不能走样,排版不能乱。
做法:用本技能自带的 Python 脚本把文字抽出来;你(AI)按术语表写译文;脚本把译文写回原 PPT(格式、图片、动画都不动),再用 WPS 实测排版、自动调字号,最后检查。
下文的 <技能目录> 指本技能所在的文件夹(就是放这份 SKILL.md 的文件夹)。
必须遵守
- 不改原稿。所有操作都在工作目录里做,成品另存为新文件。
- 技能文件夹里不能放客户的任何东西(PPT、译文、截图、客户名的写法)。客户名的写法记在工作目录里的 glossary_job.md。
- 名字不能猜。客户名、产品名、项目名没有确认过的英文写法时,不要自己编,也不要用拼音,写【待确认】并列给用户。中国人名按拼音写,姓在前(张伟 → Zhang Wei)。
- 术语表里有的词必须照用(第 3 步生成的 deck_terms.md)。
- 命令一条一条运行,不要用
&&串起来,也不要接管道(| tail、| head都不行)。fit.py 要跑几分钟,接了管道就看不到进度,像卡住一样。 - 运行 Python 时都加
-X utf8。Windows 上用python,不要用python3(可能是微软商店的空壳)。 - 图片里的字默认不翻。用户要求时,见 references/toolkit-guide.md 第 6 节。
第 0 步:开工前一次问清
先做第 1 到第 3 步(几分钟,不写译文),然后把下面的问题一次问完,每一项都给出默认做法。用户回"按默认"就照默认做。
- 翻译范围。默认:幻灯片文字、表格、演讲者备注、隐藏页都翻;图片里的字不翻。
- 读者和场合。默认:海外客户的高管。
- 客户名、产品名、项目名的英文写法:把 deck_terms.md 最后一节"可能需要确认的名字"列给用户。
- 原稿里疑似错字、前后矛盾、句子不完整的地方:列出来请用户确认。
- 中英混排的稿子:已经是英文的部分默认不动,只改明显错误(拼写、大小写、禁用写法),每一处都列清单。
- 有没有不能动的页(比如别的同事负责的页)。默认:没有。
- 演讲者备注里的内部批注(改稿要求等)。默认:删掉。
- 什么时候要。赶时间就先交一版预览,排版微调可以交给用户。
用户确认的名字,写进工作目录里的 glossary_job.md(格式见那个文件开头)。
第 1 步:准备工作目录
python -X utf8 "<技能目录>/scripts/prepare.py" "<原稿.pptx>"
- 会在原稿旁边建
<原稿名>_work文件夹,复制脚本、术语表和原稿副本 source.pptx。后面的命令都在这个文件夹里运行(先 cd 进去)。 - 看输出最后的"环境检查":
- 缺必需的包:按提示安装。
- 缺 pywin32:运行
python -m pip install pywin32。装不上就跳过第 6 步的 fit.py 和第 7 步的 audit.py。 - 没有 WPS:第 6 步改用
--no-render,交付时提醒用户检查排版。
第 2 步:看原稿
python -X utf8 dump.py source.pptx > dump_out.txt
读 dump_out.txt:每页有哪些文字、表格、备注,哪些页已经是英文。有 WPS 时可以再出每页的缩略图(能看图的模型用):
powershell -NoProfile -ExecutionPolicy Bypass -File render.ps1 -Pptx source.pptx -OutDir render_src
python -X utf8 sheet.py render_src sheets_src/src 6 2 800
找出核心内容在图片里的页、疑似错字、需要确认的名字,放进第 0 步的问题里。
第 3 步:抽取文字,挑出本稿术语
python -X utf8 extract.py x
python -X utf8 term_check.py terms
- units_view.txt:要翻的每一段和它的段落 ID。标着
(no CJK)的段已经是英文,不用写。 - deck_terms.md:术语表里这份 PPT 用到的词、还没定的写法、全稿禁用写法、可能需要确认的名字。
写译文之前,先读 deck_terms.md 和 <技能目录>/references/translation-rules.md。
第 4 步:写译文
- 在工作目录里新建 translations_01.py、translations_02.py ……,按页的顺序写,每个文件不超过 60 段。
- 格式照工作目录里的 examples/translations_example.py:
"段落ID": "英文";- units_view.txt 显示
SEGS[n, tr=k]时,写成 k 个字符串的列表,按顺序对应带中文的格式段,这样加粗、颜色才能保住; None表示删掉整段;- 已有英文的错误用 FIXTXT 或 REWRITE 改;不动的页写进 SKIP。
- 一页上有很多小方块、每块只有几个汉字(流程图、架构图常见):英文用最短的说法,1 到 3 个词,可以用通用缩写。这类页最容易放不下。
- 每写完一个文件,运行一次:
python -X utf8 term_check.py check
- "错误"必须改到 0 条,再写下一个文件。
- "提醒"逐条看:该照术语表改的就改,语境确实不同的可以不改。
- 全部写完后,"还没有译文"应该是 0 段。有意不翻的页放进 SKIP。
第 5 步:回写
python -X utf8 apply.py v1.pptx
报 need N segment strings 时,把那一段改成 N 个字符串的列表,再运行一次。
第 6 步:自动排版,生成成品
有 WPS 和 pywin32 时:
python -X utf8 fit.py v1.pptx overrides_auto.json
python -X utf8 build.py final.pptx
- 运行前提醒用户:脚本会连到用户已经打开的 WPS。WPS 里不要停在对话框上(保存、打印之类),最好先保存并关掉 WPS。
- fit.py 用 WPS 实测每个文本框,自动缩字号、加宽、加高,每页大约 5 到 10 秒,每排完一页打印一行。直接运行,不要接管道。
- 输出最后的 FAIL 行是没找到合适方案的框。FAIL 集中在某一页时:先把那一页的英文改短,重新运行 apply.py v1.pptx,再用
--only 页号只重排这一页;还放不下,就写手工规则,或者在交付说明里请用户手工调这一页。 - 后来只改了几页的译文:重新运行 apply.py v1.pptx,再运行 fit.py 时加
--only 3,5,9,只重排这几页。 - 少数特殊页可以写手工规则 manual.json(见 references/toolkit-guide.md 第 3 节),运行 fit.py 时加
--manual manual.json。 - build.py 生成 final.pptx,并把每页的图放在 render_final/ 和 sheets_final/。能看图就逐页看一遍。
有 WPS 但装不上 pywin32:跳过 fit.py,直接运行 python -X utf8 build.py final.pptx(会出图,但不调排版)。
没有 WPS:运行 python -X utf8 build.py final.pptx --no-render。
后两种情况都不会自动调排版,交付时要提醒用户检查排版。
第 7 步:检查
python -X utf8 lint_text.py final.pptx
python -X utf8 verify_pkg.py final.pptx
python -X utf8 audit.py final.pptx
python -X utf8 term_check.py check
python -X utf8 make_review.py final.pptx
- lint_text.py:残留中文、全角标点、多余空格。应该只剩有意保留的中文名和【待确认】。最后一段列出版式、图表、SmartArt 里的中文,脚本处理不了,交付时告诉用户。
- verify_pkg.py:文件结构完好,图片没被改动。
- audit.py(需要 WPS 和 pywin32):文字出框、新增遮挡、字号太小的地方,列进"需要看一眼的页"。
- make_review.py:生成 review_pairs.md,逐句中英对照,最后一节是对已有英文的修改。
第 8 步:交付
- 把 final.pptx 复制到原稿所在的文件夹,命名为
<原稿名>_EN.pptx。不要覆盖原稿,用户可能正开着它。如果<原稿名>_EN.pptx已经存在(比如以前翻过一版),也不要覆盖,改用<原稿名>_EN_<年月日>.pptx。 - 给用户的说明写清楚:
- 成品和对照表(review_pairs.md)的位置;
- 翻了多少段,哪些页没动、为什么;
- 【待确认】清单,并提醒:PPT 里还留着【待确认】的地方,发给客户前必须改掉;
- 有意保留的中文、图片里没翻的字、版式和图表里剩下的中文;
- 已有英文改了哪些地方;
- 需要看一眼的页:字号缩得多的、fit.py 报 FAIL 的、audit.py 报出来的;
- 排版只在 WPS 里验证过,客户用 PowerPoint 时,发之前用 PowerPoint 打开看一遍。 - 提醒用户按
<技能目录>/references/checklist.md过一遍。重要的会议,再请另一个 AI 按对照表复核,提示词在 checklist.md 里。
用户确认了名字或要改译文之后
- 改 translations_XX.py;名字同时写进 glossary_job.md。
- 运行
python -X utf8 term_check.py check,错误改到 0。 - 从第 5 步重新做:apply.py v1.pptx → fit.py(只改了几页时加
--only 页号)→ build.py final.pptx → 第 7 步的检查 → 第 8 步交付。 - 用户自己已经在成品上调过排版时,先问清楚:是在用户的新版本上手工改这几处,还是重新生成(重新生成会覆盖用户的排版调整)。
出错时
| 现象 | 处理 |
|---|---|
| term_check 报"语法错误" | 多半是英文里的双引号没写成 \",或者少了逗号、括号 |
apply.py 报 need N segment strings |
那一段要写成 N 个字符串的列表 |
apply.py 报 duplicate T keys |
同一个段落 ID 写在了两个文件里,删掉一处 |
fit.py 或 audit.py 报 AttributeError: Open.Slides,或者一直不动 |
WPS 还在关上一个文件。等几秒重试;还不行,只结束命令行里带 /Automation 的 WPS 进程,不要关用户自己开着的 WPS |
| 找不到 win32com | python -m pip install pywin32 |
| pip 安装失败或取不到包 | 换一个源重试:加 --index-url https://pypi.org/simple,或者 --index-url https://mirrors.aliyun.com/pypi/simple/ |
| 渲染出来的图里少了标题、表格是空的 | 先看原稿的渲染图(render_src)是不是也这样。也这样就是 WPS 导出图片的问题,PPT 文件本身没丢内容,在交付说明里提一句 |
| 原稿是 .ppt | 请用户在 WPS 或 PowerPoint 里另存为 .pptx |
| 用户说某个名字以后都这样写 | 是客户的名字:写进 glossary_job.md;是公司通用的:告诉用户可以加进 references/glossary.md,由用户决定 |