从 PO 到游戏内文本:Cataclysm-DDA 翻译流水线拆给你看 📅 发布时间:2026/9/12 15:06:51 👁 浏览次数: 从 PO 到游戏内文本Cataclysm-DDA 翻译流水线拆给你看【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA你捡到一块 9V 电池屏幕上跳出「电池」两个字——这个名字到底是从哪冒出来的Cataclysm-DDA 这款回合制末世生存游戏里从物品名、NPC 对话到界面提示几万条字符串全靠译者一行行填进翻译文件再经过一串 gettext 脚本处理才最终显示到你眼前。图Cataclysm-DDA 游戏内截图物品名、提示文本都是翻译流水线跑完后的最终呈现动手前必须搞懂的三个文件格式POT 文件一份空白的总清单POT 文件汇总了全部待翻译字符串msgstr一律留空只回答要翻什么。#: action.cpp:421 msgid Construct Terrain msgstr 片段结构取自 lang/notes/README_all_translators.md注意源文件注释标在msgid上方它在工作流里负责源头每种语言的 PO 都从它派生。PO 文件你真正动手填的那份PO 文件是按语言代码命名的纯文本文件zh_CN.po就是简体中文那份你在msgstr里逐条写译文。#: lang/json/AMMO_from_json.py msgid battery msgid_plural battery msgstr[0] батарейка msgstr[1] батарейки片段取自 data/mods/TEST_DATA/lang/po/ru.po复数槽位和上下文如msgctxt weapon把长矛和鱼区分开就藏在这份文件里它是实际翻译工作的载体。MO 文件游戏真正读的那个二进制MO 文件是 PO 编译后的二进制形态游戏运行时按语言环境去匹配它。lang/mo/zh_CN/LC_MESSAGES/cataclysm-dda.mo路径结构来自 lang/compile_mo.sh 的输出目录它在工作流里负责最后一环——游戏内显示。翻译流水线从入场到交付的三个环节入场前拿到环境提取最新字符串清单这个阶段解决的是让本地有一份最新清单明确要翻的东西到底有什么。先克隆仓库再装工具gettext 工具链xgettext、msgmerge、msgfmt是后续所有脚本的地基git clone https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA cd Cataclysm-DDA sudo apt-get install gettext poedit这条命令实际在做什么第一条把代码拉到你电脑上第三条装好提取、合并、编译三件套Poedit 留到填译文时用。然后跑 lang/update_pot.sh./lang/update_pot.sh这条命令实际在做什么xgettext 按关键词_、pgettext、n_gettext等扫 C 源码lang/extract_json_strings.py 再扫data目录把 JSON 里的文本抓出来两路结果合并成cataclysm-dda.pot末尾用 msgfmt 做编译校验、跑一遍 unicode 检查任何一步失败都会中止。官方翻译主力在 Transifex 平台仓库有每周自动拉取的工作流本地这条链主要用于新语言起步和验证改动。干活中把 msgstr 一条条填出来这个阶段解决的是让英文原文变成你的语言同时不弄坏格式占位符。路线有两条。网页路线在 Transifex 注册、加入语言团队编辑器里每条字符串旁边会带开发者注释翻译前看一眼能省很多返工。本地路线用 Poedit 打开 PO 文件直接填。两条硬规矩写在 lang/notes/README_all_translators.md一是%s、%d、\n不能丢需要调换占位符顺序时必须全部加数字编号%1$s、%2$s让游戏知道谁对应谁二是name这类尖括号标签是名字标记防止和Wood 材质 / Wood 姓氏撞车不能翻译。复数形式看文件头的Plural-Forms字段俄语要填四个槽位中文一个就够。交付前合并、编译、进游戏验证这个阶段解决的是你填的内容能否被编译、能否真显示出来。按官方文档的做法把填好的语言文件放进 lang/incoming 目录命名必须与lang/po下的语言文件一致再依次跑合并和编译./lang/merge_po.sh zh_CN ./lang/compile_mo.sh zh_CN这两条命令实际在做什么第一条用 msgcat 把 incoming 的翻译并进主 PO再用 msgmerge 对照最新模板对账、msgattrib 清掉模糊和过时条目第二条为指定语言生成对应的 MO 文件。跑起游戏在语言列表里选这个语言看效果如果系统语言环境对不上把lang/mo下的目录临时改名为你的语言标识即可强制加载。验证通过后把这份 PO 整理成 PR 提给对应语言负责人过目。提交前最容易踩的四个坑⚠️症状译了游戏里还是英文。原因MO 过期或语言标识与 mo 目录名对不上。处理重跑 compile 脚本并在游戏语言列表里确认条目名称一致。症状提示里的数字和名字对调了。原因翻译时调换了占位符顺序却忘了编号。处理按英文原序给每个占位符加数字编号。症状合并后冒出一堆 fuzzy 标记。原因上游改了原文旧译文自动判失效。处理合并脚本已自动清理模糊和过时条目剩下的 fuzzy 需要人工复核更新。症状编译直接报错。原因msgid 重复、引号缺失或 unicode 坏字节。处理模板文件直接重跑 update 脚本语言文件先跑 lang/unicode_check.py 定位坏行再修。你的下一步打开游戏内语言列表看目标语言的完成度在 Transifex 项目里挑一条没翻的字符串把第一个 PR 提给对应语言负责人语言还不存在的话先去官方翻译讨论区问一声再按lang/po的命名规则起步。【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考