SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6000|回复: 3
打印 上一主题 下一主题

[MOD] 实现多国语言翻译

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-11-29 11:02:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
要察看、更改多国语言翻译需下载源码包。发行包不提供*.pot和*.po。

实现多国语言翻译指的是用指定语言来显示游戏中界面上信息,像伤害,让英文时显示“Damage”,简体中文时显示“伤害”,繁体中文则是“傷害”。

游戏中显示文字使用GNU中的gettext项目。

二楼:让用简单例子来说明gettext是如何工作的
三楼:如何制作*.mo
四楼:游戏中用到的*.mo
回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
 楼主| 发表于 2020-11-29 11:04:00 | 只看该作者

让用简单例子来说明gettext是如何工作的

gettext要工作,它需要的相关文件
wesnoth.pot文件
*.pot叫模板文件,文本格式。内有类似以下文字:
  1. msgid "Damage"
  2. msgstr ""
复制代码
en_GB.po、zh_CN.po和zh_TW.po
*.po叫源文件,文本格式,依据wesnoth.pot文件生成。这三个文件内分别有以下文字:
  1. en_GB.po
  2. msgid "Damage"
  3. msgstr "Damage"

  4. zh_CN.po
  5. msgid "Damage"
  6. msgstr "伤害"

  7. zh_TW.po
  8. msgid "Damage"
  9. msgstr "傷害"
复制代码
“依据wesnoth.pot文件生成”指的就是在不同语言时,用该语言补上相应文字。

wesnoth.mo
以en_GB.po、zh_CN.po和zh_TW.po分别生成三个同名的二进制文件wesnoth.mo,这三个文件同名但被放在三个不一样目录下:


gettext工作逻辑
对要显示字符串“Damage”,根据当前选定的语言到“transations”目录下找,英文(英国)就定位到translations/en_GB/LC_MESSAGES/wesnoth.mo,于是显示内里的“Damage”,简体中文定位到translations/zh_CN/LC_MESSAGES/wesnoth.mo,于是显示内里的“伤害”。——这样就实现了根据当前选定语言使界面上显示不一样字符串。

当特定语言下找不到相应*.mo时,像当前语言是简体中文,但没有translations/zh_CN/LC_MESSAGES/wesnoth.mo,这时程序就只会显示那个原生字符串:Damage。由于这个字符串一般都是英文表示,这就使得当前语言是英文时,虽然没有相应*.mo,但它显示依旧是对的。
回复 支持 反对

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
板凳
 楼主| 发表于 2020-11-29 11:04:24 | 只看该作者

如何制作*.mo


游戏最终去读取的是*.mo。*.mo是由*.po生成的,而*.po是由*.pot生成的。

*.pot:建议找个文本编辑器,像UltraEdit-32。*.pot要写什么内容由游戏主程序决定,像会出现“Damage”,是游戏中要显示“Damage”,这时程序员会说出“Damage”大概是表示什么,mod制作者就根据这个作用进行相应翻译。

*.po:建议用Poedit。Poedit让编写*.po变得十分容易。具体操作,打开一个*.po,像wesnoth/zh_CN.po(文件可以没内容),菜单:“类目”,“从pot文件更新...”,选择wesnoth.pot,接下就可以逐条翻译。好了之后“文件”,“保存”,就可生成你希望的zh_CN.po。

*.mo:建议用Poedit实现*.po转为*.mo。这个转换过程和保存*.po是一样的操作,“文件”,“保存”,也就是这个菜单操作不仅生成像zh_CN.po,同时生成zh_CN.mo。然后把zh_CN.mo改名wesnoth.mo,放到相应的translations/zh_CN/LC_MESSAGES目录下。
回复 支持 反对

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
地板
 楼主| 发表于 2020-11-29 11:04:49 | 只看该作者

游戏中用到的*.mo

游戏用到近5000条需翻译字符串,为方便管理,这些字符串被归到数个*.mo中。

  • wesnoth.mo:主要是游戏操作环境中的字符串。
  • wesnoth-editor.mo:地图编辑器用到的字符串。
  • wesnoth-hero.mo:武将信息。像武将姓名、列传、特技、特技解释等。
  • wesnoth-lib.mo:游戏中对话框显示字符串。
  • wesnoth-manpages.mo/wesnoth-manual.mo:帮助信息中字符串。
  • wesnoth-multiplayer.mo:多人对战时要用到的字符串。
  • wesnoth-tk-units.mo:三国兵种中字符串。
  • wesnoth-units.mo:韦诺自带兵种的字符串。


以下是和特定战役相关的*.mo
  • wesnoth-race.mo:群雄争霸
  • wesnoth-lobl.mo:刘备传
  • wesnoth-td.mo:塔防休闲
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 22:47 , Processed in 0.063619 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表