qt中实现多语言功能

引言

在做项目时,有时希望我们的程序可以在不同的国家使用,这样最好的方式是一套程序能适应于多国语言。
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文件中。如下图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/blqzj214817/article/details/127396411