写代码
Qt提供了一个非常方便的多语言国际化方案,开发者使用它可以用非常简单的方式让程序支持多种语言。
这里记录一个qt多语言的最简单的示例,开发工具使用的使qtcreator。
要实现多语言得支持,首先得在代码中完成这几个步骤:
#include<QTranslator> //实例化一个翻译模块的对象,并载入翻译文件 QTranslator translator; translator.load("translator.qm"); //使用QApplictioin的对象,为程序安装翻译模块 app.installTranslator(&translator); //最后使用一个label显示文本,来展示翻译的效果 QLabel *label = new QLabel(); label->setText(QObject::tr("hello word")); label->show();
这里要注意,需要翻译的文本,一定要使用Qobject::tr()函数包裹,这样才能被正确的适配到。
生成翻译文件
要实现多语言,光是这样肯定是不够的,接下来的步骤才是重点。
在项目的pro文件夹中加入
这条代码的之作用是为了指定生成翻译文件时的路径。
如果使用较高版本的Qt Creator,可以直接在界面上使用快捷方式生成翻译文件。
当然,如果使用的是低版本的Qt Creator那么只需要在power shell中使用命令也可以实现相同的功能。
正常情况下将AppName替换为项目名称就可以生成了。
- 如果提示命令不存在,那么可能是没有设置环境变量,只需要在命令前面加上Linguist的exe路径即可。或者设置一下QtCreator的环境变量也可以。
- 如果提示pro文件不存在,那么在pro文件名称前跟上文件的绝对路径,或者移动到项目路径操作。
按照上述方法生成翻译文件之后,会得到translator.ts,其实这就是一个xml文件,里面统计了代码里所有需要翻译的文本。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1"> <context> <name>MainWindow</name> <message> <location filename="mainwindow.ui" line="13"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> </context> <context> <name>QObject</name> <message> <location filename="main.cpp" line="15"/> <source>hello word</source> <translation type="unfinished"></translation> </message> </context> </TS>
比如我这个,因为新建工程的时候新建了mainwindow,所以这里统计的时候把ui文件中的文本也统计到了。
接下来使用Linguist(在安装QtCreator的时候一起安装的)打开这个文件。
打开之后,会弹出这界面让选择翻译目标,从什么语言翻译到什么语言。
选择对应的语言之后就可以开始做翻译工作拉。
翻译完成之后,点击发布,会得到translator.qm文件,将这个文件拷贝到构建目录,就可以运行程序了。
运行结果
~嗯,这样就完成了一个最简单的示例。
完整代码如下:
#include <qtranslator.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTranslator translator; if(translator.load("./translator.qm")) { a.installTranslator(&translator); QLabel *label = new QLabel(); label->setText(QObject::tr("hello word")); label->show(); } return a.exec(); }
如果未弹出窗口程序就结束了,那么说明翻译文件载入失败了,需要检查一下翻译文件的名称和所在目录是否正确。
文章评论