引言
在做项目时,有时希望我们的程序可以在不同的国家使用,这样最好的方式是一套程序能适应于多国语言。
Qt提供了这样的功能,使得一套程序可以呈现出不同的语言界面。本文将介绍QT如何实现多语言。
示例
环境
windows10 + QtCreator4.8.2(Qt 5.12.2)+MSVC2017_32bit
demo
创建基于应用程序的qt项目。
dialog.h
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
void testMultiLangguage();//多语言测试
protected:
private slots:
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QLabel>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
testMultiLangguage();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::testMultiLangguage()
{
QLabel *label = new QLabel(tr("hello Qt!"),this);
label->move(QPoint(100,30));
QLabel *label2 = new QLabel(tr("password"),this);
label2->move(100,80);
QLabel *label3 = new QLabel(tr("yafei"),this);
label3->move(280,30);
}
main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
使项目可以多语言
其本质就是生成ts文件,然后手工翻译,再生成qm文件,最后在主程序的开始加载不同的qm文件,实现多语言。
步骤一
编写完代码之后,在pro文件中添加下面的语句:
TRANSLATIONS += hahh_zh_CN.ts \
english_eg.ts
这样最终可以生成适用于汉语和英语的ts文件。
== 注意:这里不需要自己手动创建ts文件,只在pro文件中添加要生成的ts文件名就可以。==
这里生成的中文ts文件名为hahh_zh_CN.ts ,其中文件名中的zh_CN常作为生成的中文ts文件名的后半部分,前面的文件名可以随便起。生成的英文ts文件名为english_eg.ts。
编写好pro文件后,点击保存。然后点击工具-》外部-》语言家-》更新翻译(lupdate)。即使用lupdate工具,生成pro文件中添加的ts文件。
会在qt的概要信息中看到下图所示:
此时已经使用lupdate工具生成ts文件。
步骤二
生成ts文件之后,点击电脑开始菜单,在出现的应用程序列表栏找到Qt安装文件夹,找到Linguist,选择适合自己的Linguist工具,双击打开。这里选择Linguist需要根据自己的项目的编译器进行选择。由于我采用的是MSVC2017_32bit,所以MSVC2017_32bit的Linguist。
打开Linguist后,点击文件-》打开,在文件选择框中选择项目生成的ts文件,点击打开。
会在Linguist中展示需要翻译的字符串,与类名。字符串下的列表前都有一个问好图标,通过点击菜单栏中的箭头来上移和下移到不同的项。通过点击前、后箭头移动到自己需要翻译的项上,在下方的翻译区进行手动翻译,第二栏是翻译的注释内容,可以不写注释,翻译完一项之后,用Ctrl+Enter会自动跳到下一个待翻译的字符串上,翻译完一个字符串之后,上图字符串列表前面的问号图标会变为一个绿色的对号。上图为已经翻译完成后的界面。
** 备注:这里可以设置你想翻译成的语言。点击编辑-》翻译文本设置,会弹出一个对话框。在目标语言中选择需要的语言和国家/地区。**
步骤三
翻译完成之后,需要保存,可以ctrl+s快捷键来保存,也可以点击菜单栏中文件-》保存,保存之后便是发布,生成qm文件。
有两张操作方式可以生成qm文件。
方式一
在Linguist中点击文件-》发布。
方式二
在QtCreator中点击工具-》外部-》语言家-》发布翻译(lrealse)。
步骤四
生成qm文件之后,在main.cpp文件中添加下面的代码,加载qm文件。一般将代码添加到QApplication a(argc, argv);下一行。
main.cpp
#include "dialog.h"
#include <QApplication>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
// translator.load("../QTabWidgetDemo/hahh_zh_CN.qm");
translator.load("../QTabWidgetDemo/english_eg.qm");
a.installTranslator(&translator);
Dialog w;
w.show();
return a.exec();
}
加载不同的qm文件就会在界面显示不同的语言。
附加
[1]当中英文翻译出现双引号时,可以采用将英文的双引号翻译为中文的双引号,再向双引号中插入要被双引号强调的文本。
类似于下面这样:
QString strDoubleMark = QObject::tr("\"\"");
QString strTechnology = QObject::tr("Technology");
QString strStenosisMsg +=
// 在双引号中插入字符串
strDoubleMark.insert(1, strTechnology);
其中 m_translate.strDoubleMark对应翻译时的英文双引号。这里只需向双引号的第一个位置插入文本就行,就可以实现显示效果:“技术的”。
[2]被翻译的文本可以加tr,也可以加QObject::tr。这两者的区别如下:
QString strTechnology = QObject::tr("Technology");
QString strTechnology = tr("Technology");
上述代码中添加tr会在所在的当前类中生成翻译文本,如下图。
而在QObject::tr中的带翻译文本会生成在QObject文件中。如下图: