ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Godot 游戏本地化:吃透 PO 文件 3 个核心环节

Godot 游戏本地化:吃透 PO 文件 3 个核心环节 Godot 游戏本地化吃透 PO 文件 3 个核心环节【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot你的 Godot 游戏快上线了想支持日语。最直接的念头是把代码里的英文一句句改掉文本一多就乱套。标准做法是用 PO 文件纯文本的翻译对照表把所有文字集中到一份文件里管理。本文以「让游戏显示成日语」这条任务为线索边做边讲文件格式、模板导出、引擎里的解析规则。看懂 PO 文件原文和译文的两栏对照表PO 文件Portable Object 文件就是纯文本里每个条目记录一对「原文 译文」。msgid 是源语言文本msgstr 是目标语言译文以 # 开头的注释是给翻译者看的引擎解析时会跳过msgid Start msgstr 开始 msgid Score: %d msgstr 得分%d注意示例里的%d占位符。翻译时可以调换语序但占位符本身要保留运行时数字才填得进去。解析逻辑在core/io/translation_loader_po.cpp里解析器逐行读取。有个细节值得知道条目标了fuzzy注释的会被当作「未人工确认」直接跳过这是防止机器翻译的劣质文本直接显示给玩家。在编辑器里一键导出翻译模板模板不用手写。打开编辑器的「Translation」管理面板选中日语点「Generate」。编辑器会扫描工程把所有被tr()函数包住的字符串收集起来生成一份 .pot 模板文件。tr 是全局函数运行时按参数查表查到返回译文查不到返回原文。把这份模板复制一份、把扩展名改成 .po就是日语翻译的起点。导出逻辑在editor/translations/目录下template_generator 相关文件负责收集这些字符串。写完译文也不用每次打包运行去验证。编辑器场景树里可以临时切换预览语言直接在编辑窗口里看到日语效果。给 PO 文件补上两道保险上下文与复数第一个坑是同一个词意思不同。主菜单的 Start 是「开始游戏」暂停菜单里其实是「继续」。在条目上多加一行 msgctxt 就能区分开引擎会优先匹配带上下文的那条msgctxt Main Menu msgid Start msgstr 开始游戏第二个坑是复数。英语 1 apple 和 2 apples 形式不同中文则统一说「N 个苹果」。用 msgid_plural 写复数原文再用带下标的 msgstr[N] 写各形式的译文。中文只需一个形式msgid You have 1 apple msgid_plural You have %d apples msgstr[0] 你有%d个苹果文件头部要有 Plural-Forms 声明写明这门语言有几种形式引擎按数字选出该用哪一条。换英语翻译文件时就得写满 msgstr[0] 和 msgstr[1]。选形式的逻辑在core/string/translation.cpp里。翻译不生效先查这 3 处不少人遇到同类问题.po 加上了游戏里却还是英文。第一处看项目设置的 internationalization 列表文件必须登记进 translations 列表对应键名是 internationalization/locale/translations。第二处确认当前生效的是哪种语言查表依据当前 locale白话游戏此刻使用的语言目标 locale 没设置日语条目永远不会被用到。第三处打开 .po核对头部 Plural-Forms 声明的形式数和实际 msgstr[] 条数是否一致。对不上时解析器会整条拒收并打印带文件路径和行号的报错照着行号跳过去改就行。现在就打开编辑器点一次「Generate」拿到第一份 .pot 模板填 5 条日语并登记进项目设置。按 F5 看到画面出现日语这条本地化链路就走通了下一步可以把 .po 交给译者或翻译平台。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表