多国语言翻译
FlyThings 提供了多国语言翻译的功能,方便国际化。
如何添加翻译
首先通过新建向导,创建翻译文件。
创建完毕后,项目下会生成一个名为 i18n 的子文件夹,并且添加了默认的tr翻译文件。每个tr文件的文件名代表相应的语言 (请勿随意修改文件名)。
双击打开tr文件,可以看出该内容为xml格式。每一个string标签表示一条翻译。name 属性用于给这条翻译取别名(建议统一为英文、数字、下划线组合命名),之后在代码中用别名代表该字符串。
注意:同一配置文件内,别名不能重复。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_world">你好,世界!</string> <string name="hello_flythings">你好, FlyThings</string> </resources>
如果希望在字符串中换行,则用


转义,如下:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="new_line_test">第一行
第二行</string> </resources>
如上所示,我们将 “你好,世界!” 这个字符串取别名为
hello_world
、将 你好, FlyThings 这个字符串取别名为hello_flythings
,如果我们要添加更多的翻译,我们只需要按照示例添加string
标签即可。- 既然是多国语言的翻译,我们就要为每个语言都添加相同
name
的标签。这样,当我们切换语言时,系统就会根据name
属性,将内容替换。 - 配置文件添加完毕后,我们就可以在ui文件以及代码中使用。
打开ui文件,我们可以在文本属性里输入 @hello_world (我们用@符号后面跟上配置文件中的别名,来表示这个字符串需要翻译)。然后,我们下载运行,可以看到文本的内容已经自动翻译为 你好,世界!
我们还可以在代码中对字符串进行翻译。以前我们设置字符串是用
setText()
这个成员方法,如果我们需要自动翻译,则需要使用setTextTr()
成员方法。 例如:/** * 当界面构造时触发 */ static void onUI_init() { // setTextTr 参数为翻译配置文件中的name值,注意:这里传入的字符串前面不需要带@符号 mTextview1Ptr->setTextTr("hello_world"); }
下载运行,我们可以看到内容已经替换为对应的字符串。
我们还可以获取当前语言name对应的value值,然后做一些类似拼接的操作等等:
#include "manager/LanguageManager.h"
static bool onButtonClick_Button1(ZKButton *pButton) {
//LOGD(" ButtonClick Button1 !!!\n");
std::string hello = LANGUAGEMANAGER->getValue("hello");
std::string world = LANGUAGEMANAGER->getValue("world");
std::string ret = hello + " " + world;
LOGD("ret: %s\n", ret.c_str());
return false;
}
支持更多的语言
默认只提供了四种语言(简体中文、英文、日文、韩文)。如果你需要支持更多的语言,可按照如下要求添加。
拷贝现有的.tr文件,将文件名修改为 xx_XX-XXX.tr 格式,该格式分为三部分,第一个部分是语言代号,由两个小写字母组成;
第二个部分是地区代号,由两个大写字母组成;第三部分是语言的名字,这个名字将直接显示语言切换列表中。
如果不了解语言代号及地区代号,可以取任意字母组合,保证多个tr文件名的第一部分和第二部分不冲突即可。 例子:es_ES-西班牙语.tr
fr_FR-法语.tr
ru_RU-俄语.tr
aa_BB-语言名称.tr
添加tr文件后,按照之前的规则编辑tr文件即可;
- 需将内置界面翻译文本添加到自定义语言里边,并进行相应的翻译,当切换到对应的语言后内置界面才能正常显示文本;
如何切换语言
- 系统默认的语言为 zh_CN (中文简体)。
你可以打开系统内置切换语言的界面选择语言。
添加如下代码打开该界面。EASYUICONTEXT->openActivity("LanguageSettingActivity");
或者使用如下API自由切换语言。
EASYUICONTEXT->updateLocalesCode("zh_CN"); //设置为中文 EASYUICONTEXT->updateLocalesCode("en_US"); //设置为英文 EASYUICONTEXT->updateLocalesCode("ja_JP"); //设置为日语
字体要求
多语言翻译需要字体的支持。如果字体中不存在该文字,则会显示不正常,所以,字体中一定要包含多国语言的文字。
系统默认字体是精简版本,建议添加自定义字体,参见字体裁剪。
样例
完整源码见样例代码包中的TranslationDemo工程