Skip to content

Lotlab/MukioI18n

Repository files navigation

MukioI18n

一个基于GetText的翻译插件(?)

简介

这是一个基于GetText的翻译插件。

工作流程

需要手写一些代码用于搜索游戏内的字符串,调用MukioPotGenerator,生成翻译模板文件pot。

翻译人员使用翻译模板文件翻译,翻译完毕后放置在StreamingAssets/i18n/LANG.mo下。

游戏开始的时候调用MukioI18n.Load(LANG)加载对应的语言资源,游戏代码中则使用MukioI18n._("string")进行翻译。

工具类

TranslateMsg

一个用于标记代码中需要翻译文本的Attribute。用法如下:

[TranslateMsg]
const string MessageA = "待翻译的文本"; // 标记翻译文本

obj.SetMsg(MukioI18n._(MessageA)); // 调用翻译

这么标记后,调用 TranslateMsgAttributeFinder.FindAll() 即可查找代码中所有标记了的翻译文本。

TranslateComponent

用于翻译UI界面静态字段的组件。

内部有两个需要实现的方法,分别是:

  • getKeyInner: 获取此组件需要翻译的文本
  • Translate: 翻译这个组件文本

UITextTranslator

这个是UGUI.Text的翻译组件,实现了上面所述的功能。

最佳实践

使用整句翻译

如果要翻译以下的文本:

var protect = rw ? "读" : "写";
WriteLine($"文件 {file} 正在被 { protect } 保护");

建议在翻译的时候将其分为两句:

WriteLine(_(rw ? "文件{0}正在被读保护" : "文件{0}正在被写保护", file));

对于一些长句,如果它们是有关联性的,则不建议将其拆分为多个短句。拆分为多个短句会在翻译时丢失上下文,较难翻译。

正确的分段

翻译应当局限于一个段落中。对于一些较长的页面,建议将它们按段落分散到多个翻译字符串中。

一个通常的建议是一段翻译字符串不要超过10行。

不要使用字符串连接,而是使用占位符

对于字符串连接,请使用占位符

WriteLine("将" + from + "替换为" + to); 
WriteLine(_("将 {0} 替换为 {1}", from, to)); 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages