将开源《沙丘2》游戏是一个复杂的过程,涉及到游戏代码、资源、版权等多个方面。以下是一些步骤和注意事项:1. **确认版权状态**: - 首先,需要确认《沙丘2》的版权状态。如果游戏是受版权保护的,那么在没有版权所有者授权的情况下开源是非法的。2. **寻找
摘要:开源重置 沙丘2 游戏 · Dune Legacy 中文本地化与渲染技术说明 搜索开源游戏源码学习,无意间找到了这个项目 Dune Legacy[An open-source remake of Dune II &
开源重置 沙丘2 游戏 · Dune Legacy 中文本地化与渲染技术说明
搜索开源游戏源码学习,无意间找到了这个项目---- Dune Legacy[An open-source remake of Dune II · 沙丘2的开源重置版],但是没有中文本地化。本文档说明在本项目(及官方 Dune Legacy 同源架构)下,如何将界面与文本翻译为简体中文,以及中文能否正确显示所依赖的引擎机制、配置文件与常见排错步骤。适用于维护 locale/Chinese.zh.po、配置游戏与理解源码行为。注意,本文涉及到的内容借助了AI生成和汇总。
游戏介绍和下载地址:https://dunelegacy.com/
仓库地址:https://github.com/henricj/dunelegacy
游戏下载(已集成中文汉化):https://wwasp.lanzn.com/iDIeJ3mnks1i
成果展示:
一、总体架构
Dune Legacy 使用 GNU gettext 风格的 .po 文件 存储可翻译字符串,运行时通过类似 _() 的宏将 msgid(通常为英文) 映射为 msgstr(目标语言)。
渲染使用 SDL_ttf,对 UTF-8 字符串调用 TTF_RenderUTF8_Blended 等 API,因此编码层面支持中文;限制主要来自 字体文件是否包含汉字字形,而非“引擎不支持 Unicode”。
流程图(Mermaid):
graph LR
Config[用户配置 Language zh] -->|读取| TextManager[TextManager 加载 zh po]
TextManager -->|查表| Lookup[根据 msgid 获取 msgstr]
Lookup -->|索引字符串| Post[postProcessString 读取 PAK 文本]
Lookup -->|普通 UTF8 字符串| Direct[直接使用 msgstr]
Post --> Font[FontManager 与 TTFFont]
Direct --> Font
Font -->|UTF8 渲染| Screen[屏幕显示]
二、翻译文件:.po 格式与命名
2.1 文件位置与命名
语言文件放在游戏数据目录下的 locale/ 中(与 LEGACY.PAK 等资源同级或可搜索路径内)。
命名需与 语言代码 一致:配置里 General.Language = zh 时,引擎按 *.zh.po 匹配(例如 Chinese.zh.po)。
模板/汇总文件常见名:dunelegacy.pot(仅 msgid,供生成各语言 po)。
2.2 文件头(Header)
.po 头部 msgid "" 的 msgstr 中含元数据,对中文建议至少包含:
Language: zh_CN(或 zh)
Content-Type: text/plain; charset=UTF-8
Plural-Forms: nplurals=1; plural=0;(简体中文通常无复数形态区分)
2.3 与原版 Dune II 数据的关系:LanguageFileExtension 与 LanguagePakFiles
每个 .po 中通常包含两条特殊条目(与 English.en.po / German.de.po 等一致):
msgid
英语示例
含义
LanguageFileExtension
ENG / GER / FRE
决定从 PAK 里读 TEXTH.*、TEXTA.*、MESSAGE.* 等文件时使用的语言后缀
LanguagePakFiles
ENGLISH.PAK,... 或 GERMAN.PAK
需要加载的语言相关 PAK 列表
德语/法语:有官方 GERMAN.PAK / FRENCH.PAK,简报等可从 PAK 中取对应语言。
简体中文:不存在官方中文 PAK。实践中 LanguageFileExtension 仍设为 ENG,LanguagePakFiles 与英语一致,战役与 Mentat 等仍从英文资源索引;若要在界面显示中文,需在 .po 里把对应条目的 msgstr 写成完整中文,且不要以 @ 引用英文索引(见下文 @ 机制)。
三、翻译策略:两类字符串
3.1 普通 UI 字符串
形式:msgid "Upgrade" → msgstr "升级"
特点:无 @ 前缀,msgstr 即为最终显示文本。菜单、按钮、选项、部分提示等多属此类。
