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


转义,如下:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="new_line_test">第一行
第二行</string> </resources>
如上所示,我们将 “你好,世界!” 这个字符串取别名为
hello_world
、将 你好, FlywizOS 这个字符串取别名为hello_flywizOS
,如果我们要添加更多的翻译,我们只需要按照示例添加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;
}
如何切换语言
- 系统默认的语言为 zh_CN (中文简体)。
你可以打开系统内置切换语言的界面选择语言。
添加如下代码打开该界面。EASYUICONTEXT->openActivity("LanguageSettingActivity");
或者使用如下API自由切换语言。
EASYUICONTEXT->updateLocalesCode("zh_CN"); //设置为中文 EASYUICONTEXT->updateLocalesCode("en_US"); //设置为英文 EASYUICONTEXT->updateLocalesCode("ja_JP"); //设置为日语
字体要求
多语言翻译需要字体的支持。如果字体中不存在该文字,则会显示不正常,所以,字体中一定要包含多国语言的文字。
系统默认字体是精简版本,建议添加自定义字体,参见字体裁剪。
样例
完整源码见样例代码包中的TranslationDemo工程