一个基于GetText的翻译插件(?)
这是一个基于GetText的翻译插件。
需要手写一些代码用于搜索游戏内的字符串,调用MukioPotGenerator,生成翻译模板文件pot。
翻译人员使用翻译模板文件翻译,翻译完毕后放置在StreamingAssets/i18n/LANG.mo下。
游戏开始的时候调用MukioI18n.Load(LANG)加载对应的语言资源,游戏代码中则使用MukioI18n._("string")进行翻译。
一个用于标记代码中需要翻译文本的Attribute。用法如下:
[TranslateMsg]
const string MessageA = "待翻译的文本"; // 标记翻译文本
obj.SetMsg(MukioI18n._(MessageA)); // 调用翻译这么标记后,调用 TranslateMsgAttributeFinder.FindAll() 即可查找代码中所有标记了的翻译文本。
用于翻译UI界面静态字段的组件。
内部有两个需要实现的方法,分别是:
- getKeyInner: 获取此组件需要翻译的文本
- Translate: 翻译这个组件文本
这个是UGUI.Text的翻译组件,实现了上面所述的功能。
如果要翻译以下的文本:
var protect = rw ? "读" : "写";
WriteLine($"文件 {file} 正在被 { protect } 保护");建议在翻译的时候将其分为两句:
WriteLine(_(rw ? "文件{0}正在被读保护" : "文件{0}正在被写保护", file));对于一些长句,如果它们是有关联性的,则不建议将其拆分为多个短句。拆分为多个短句会在翻译时丢失上下文,较难翻译。
翻译应当局限于一个段落中。对于一些较长的页面,建议将它们按段落分散到多个翻译字符串中。
一个通常的建议是一段翻译字符串不要超过10行。
对于字符串连接,请使用占位符
WriteLine("将" + from + "替换为" + to);
WriteLine(_("将 {0} 替换为 {1}", from, to));