通过使用Qt Linguist工具时,可以有两种方式进行下一步操作(Windows操作系统)。首先说明第一种,在一个软件系统中存在*.pro的工程文件,因而我们可以借此通过采用命令行的形式生成最终所需要的或更新过的*.qm文件,但前提是,如果是更新*.ts和*.qm文件,则须将最后生成的*.qm文件放到系统能够调用得到的文件中去,否则,打开软件查看,结果还和上一次一样,并没有更新自己刚刚翻译过的内容。
举例说明,如果在E盘一个名为example的文件夹下放置了自己所要用到的(*.pro)项目文件(假设为myproject.pro),先将命令行替换到example的路径下,因为通过命令行形式生成系统所需要的*.ts源文件,需要调用该工程文件,如果没有设置好路径,肯定是不能进行下一步操作的。设置好路径后,如:E:\...\...\example>,使用lupdate工具,可用如下命令行形式:E:\...\...\example> lrelease myproject.pro,按回车件,会在原设置的路径下,即example文件中生成一个后缀为ts的翻译源文件,这里假设为文件名为tt1.ts,应该说,这样第一步工作就暂时做好了。接下来,要使用Qt Linguist打开刚开生成的tt1.ts文件,把内部需要翻译的内容翻译成文字后点保存。然后再回到运行的环境中,用命令行E:\...\...\example> lrelease tt1.ts生成最终系统能够调用的*.qm文件,这样就得到了我们整个操作过程最终需要的。但必须强调指出,这还不是最后一步操作,这里生成的*.qm文件仍保存在原设置的目录下,并不能为系统所调用,因而还需把该文件移动到系统所能调用的目录下。
这样,第一种方式就算完成了。但在实际操作中,还是会遇到不小的挫折。因为按上述方式下来,最后调试程序时也许会发现需要翻译的内容并没有完全显示或出现在*.ts文件中。即使是更新翻译的内容,用Qt Linguist打开*.ts文件后,其中某一部分内荣并不显示为黑色实体,而是成为不能改动的灰体了,或者没有把所有的内容给完全显示出来。这个时候,即使想进行翻译,也无可奈何,不能把所有的内容都完成翻译会最终系统的显示。其实,这是因为前面路径设置的(*.pro)项目文件中并没有完全包含所有的系统内容,尤其是系统插件。这时的翻译源文件*.ts是依赖于项目文件而生成的,所以也导致了翻译的内容不完全。这时,我们可以采用下面的第二种方式。
不得不说,接下来我要说的是一种非主流方式,也许或者说肯定还存在其他更好的方式,但这种方法也还是比较实用的,应用人员可选择性的采用,有更好的方法,还烦请与我介绍一下,在这里表示感谢了。
如果系统已经生成了*.ts文件,则可不必再采用lupdate myproject.pro命令行工具,直接使用Qt Linguist打开该*.ts文件即可。然后在右上栏中翻译文字,确认完成之后点击保存,再选择文件中的release选项生成*.qm文件,值得说明的是,这时用户可以直接设置好*.qm文件的保存路径,而不需要像之前所述,另行移动*.qm文件到指定路径,可谓节省不少时间和力气。
用到这就好了吗?答案是否定的,要不然就想之前第一种方式中所说的遇到了瓶颈,却无可奈何了。在说下面之前,我要向各位推荐一个软件——UltraEdit,这是一个可以同时编辑或查看多种不同类型文件的一软件,有兴趣的用户可以试用一下,还是比较实用的一个软件。还是进入我们的正题,还需要说明的是,这种方式更多的是适用于更新或添加的翻译的内容,尤其适用于含有插件的大的程序。通过这个软件可以直接打开*.ts文件,同时也可直接在里面编辑。初次查看里边的内容,可能一下子会有点蒙,不过仔细看好了就会使用了,找到窍门也不会花太多时间的。找到自己需要添加或修改的文件,直接在里面添加新的需要的翻译的原文和翻译的文字即可,或修改旧有的内容(这种情况下,用Qt Linguist会更加方便)。如下示:
Load BMP Files 加载BMP文件
以和及其中间部分为一个单位,可添加新的内容或修改,应该说还是比较方便和实用的,不失为一种可解决的实用方式。完成修改后点击保存,在通过Qt Linguist的release生成*.qm文件即可,接下来的步骤同上,不再赘述。
以上为两种用于Qt翻译工具的使用方法,如有其他更好的或可行的方式,还请不吝引荐。
简单样例
QT-Linguist国际化的简单实现
QT-Linguist工具主要用在项目的多语言翻译处理过程中,所有先简单介绍一下整个多语言处理过程,最后介绍Linguist的用法。
QT项目实现多语言,必须做两件事:
1)确保每一个用户可见的字符串都使用了tr()函数
2)在应用程序启动的时候,使用QTranslator载入一个翻译文件(.qm)
(一)编写源码
类SpeedLinguist:
Cpp代码 #ifndef SPEEDLINGUIST_H_
#define SPEEDLINGUIST_H_
#include
#include
class SpeedLinguist: public QWidget
{
Q_OBJECT
public:
SpeedLinguist(QObject *parent = 0);
};
#endif
Cpp代码 #include "speedlinguist.h"
#include
#include
SpeedLinguist::SpeedLinguist(QObject *parent)
{
QPushButton *pushButton = new QPushButton(tr("lingust default")); //翻译工具linguist的依据tr()函数
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(pushButton);
this->resize(480,240);
this->setLayout(layout);
}
在主函数中,必须载入翻译文件,下面代码中的speedlingiust_zh_cn.qm文件,由linguist工具生成,后面会详细介绍生成过程:
Cpp代码 #include "speedlinguist.h"
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//载入翻译文件
QTranslator translator;
translator.load("speedlingiust_zh_cn.qm"); //语言包文件,由linguist工具生成
app.installTranslator(&translator);
SpeedLinguist speedLinguist;
speedLinguist.show();
return app.exec();
}
编写好代码之后,打开命令行终端,执行命令:
Terminal代码 qmake -projecct
生成工程文件tmp.pro,打开tmp.pro文件,添加一行翻译配置:
Pro代码 TRANSLATIONS = speedlinguist_zh_cn.ts speedlinguist_en.ts
如下图所示:
其作用是,指明在项目中生成翻译源文件speedlinguist_zh_cn.ts和speedlinguist_en.ts,两者空格隔开。说明一下,文件后缀ts是英文translation source的简写;名称后缀zh_cn表明speedlinguist_zh_cn.ts是中文翻译源文件,很显然,en对应英式英文。建议使用这种方式命名文件,目的是方便linguist工具自动识别目标语言。
(二)生成语言包:
(1)执行命令:
Terminal代码 lupdate tmp.pro
生成翻译源文件speedlinguist_zh_cn.ts和speedlinguist_en.ts,如下图所示
(2)使用命令:
Terminal代码 linguist
打开linguist工具后,使用linguist工具打开speedlinguist_zh_cn.ts文件。
在这里,我们看到linguist工具针对tr()函数的字符串参数进行翻译。在linguist工具中,对speedlinguist.cpp文件里的代码
QPushButton *pushButton = new QPushButton(tr("lingust default"));
的字符串“lingust default”翻译成中文“欢迎来到中国”,保存,当然,这样翻译在语言上讲,是不正确的。
同理,使用linguist工具打开speedlinguist_en.ts文件进行翻译,暂且翻译成“Welcome to England”。
(3)使用命令:
Terminal代码 lrelease tmp.pro
生成二进制文件.qm,在上面主函数main()被使用。如下图所示
以上3个步骤的结果是,生成了翻译语言包,以.qm作为后缀的文件。下来,执行命令:
Terminal代码 qmake
生成Makefile文件后,执行命令:
Terminal代码 mingw32-make
提一下,我在windows中测试,使用minGW编译器。执行完该命令后,生成可执行文件tmp.exe(前提没有修改.pro文件的目标文件名),通过命令运行程序,如下图所示:
也可以,通过修改main()函数,加载speedlinguist_en.qm文件,使用生成英式英文语言包。还有在上面生成.qm文件的步骤中,也可以使用linguist工具的直接生成,而无需输入命令,方法是在完成翻译后,打开菜单File,点击Release选项,生成.qm文件。