多国语言翻译
1 修改工程文件
在工程文件"pro/pri"中加入翻译源文件hello_world.ts
TRANSLATIONS += \
Resource/translations/hello_world.ts
写代码时需要注意下面两点:
• 源码用 utf-8 字符集
• 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),且需要用 tr() 函数。
例如:
QMessageBox::information(this,tr("Information"),tr("Hello world."));
2 更新翻译源文件
使用QtCreaor集成开发环境来更新翻译源文件,具体步骤:工具 -> 外部 -> qt 语言家 -> 更新翻译(lupdtae)
工具lupdate
自动分析工程文件.pro/pri
,找到翻译源文件hello_world.ts;然后会分析源码中包含在 tr 中的字符串,写入到翻译源文件 hello_world.ts 中。翻译源文件是一个xml 文件。
<context>
<name>Hello</name>
<message>
<location filename="HelloWorld.ui" line="14"/>
<source>Frame</source>
<translation type="unfinished"></translation>
</message>
</context>
3 修改翻译源文件 hello_world.ts
• 可以直接编辑翻译源文件进行翻译
• 可以用工具 linguist 进行翻译
4 在代码中加载需要的翻译资源文件
4.1. 把翻译资源文件放到程序的资源文件中
把翻译资源文件放到程序的资源文件中后,就会被当做程序的资源编译进程序中。所以访问翻译资源文件的方式与其它资源的访问方式相同。即:“:/translat/hello_world.qm” 。
用“😕”来指定是从资源中加载。
例如:
//本地化程序资源
QTranslator myappTranslator;
//把翻译文件放在了程序资源中
myappTranslator.load(":/translations/hello_world.qm");
qApp->installTranslator(&myappTranslator);
4.2. 从翻译资源文件中直接加载
//本地化程序资源
QTranslator myappTranslator;
//把翻译文件放在了程序资源中
myappTranslator.load("C:/translations/hello_world.qm");
qApp->installTranslator(&myappTranslator);
5 编译
工具 -> 外部 -> qt 语言家 -> 更新翻译(lrelease)
翻译完源文件后,需要编译工具(lrelease)把源文件编译成资源文件 hello_world.qm 。
6 qt 资源
qt 翻译资源在安装目录下的 translate 目录下。
7 在程序中做翻译菜单
当语言进行切换时,需要调用 ui->retranslateUi(this); 更新主窗口。
如果非主窗口,则这个函数会触发 void changeEvent(QEvent *e) 事件。
例如:
void CHelloWorld::changeEvent(QEvent *e)
{
LOG_MODEL_DEBUG("MainWindow", "MainWindow::changeEvent.e->type:%d", e->type());
switch(e->type())
{
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
}
}
参考资料
• 《Qt多国语言QT_TR_NOOP和QT_TRANSLATE_NOOP》
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 add358@163.com
文章标题:多国语言翻译
文章字数:638
本文作者:Jake Yang
发布时间:2018-03-16, 00:00:00
最后更新:2019-12-16, 16:13:48
原始链接:https://add358.github.io/2018/03/16/Libs-Qt-2018-03-16-多国语言翻译/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。