一.目的
在做项目时,有时希望我们的程序可以在不同的国家使用,这样最好的方式是一套程序能适应于多国语言。
Qt提供了这样的功能,使得一套程序可以呈现出不同的语言界面。本文将介绍QT如何实现多语言,以中文和英文为例。
QT开发环境:QT5.12
二.步骤
1.第一步
新建一个项目工程,在pro文件中添加下面的语句:
TRANSLATIONS += \
language_en_AS.ts \
language_zh_AS.ts
这样最终可以生成适用于汉语和英语的ts文件。
2.第二步
然后点击工具-》外部-》语言家-》更新翻译(lupdate)。即使用lupdate工具,生成pro文件中添加的ts文件。
生成这两个ts文件:
3.点击电脑开始菜单,在出现的应用程序列表栏找到Qt安装文件夹,找到Linguist,选择适合自己的Linguist工具,双击打开:
选择需要翻译的ts文件:
确保都是绿色√:
均完成后“文件菜单”内选择保存,发布,会生成qm文件如下路径内:
注意:
如果本身就是中文,目标也是中文,翻译内的部分不用填写,如下:
4.在exe文件所在目录下新建文件夹translator,并将生成的两个qm文件移入
二.代码实现
1.mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTranslator>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
QTranslator m_tran;
};
#endif // MAINWINDOW_H
2.mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTranslator>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->textEdit->setText(tr("多语言切换功能"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked() //中文
{
QString strPath = QCoreApplication::applicationDirPath(); //exe文件路径
bool bSuccess =m_tran.load(strPath + "/translator/language_zh_AS.qm");
if(bSuccess)
{
qApp->installTranslator(&m_tran);
ui->retranslateUi(this);
}
else
{
qDebug()<<tr("读取qm文件失败");
}
}
void MainWindow::on_pushButton_2_clicked() //英文
{
QString strPath = QCoreApplication::applicationDirPath(); //exe文件路径
bool bSuccess =m_tran.load(strPath + "/translator/language_en_AS.qm");
if(bSuccess)
{
qApp->installTranslator(&m_tran);
ui->retranslateUi(this);
}
else
{
qDebug()<<tr("读取qm文件失败");
}
}
void MainWindow::on_pushButton_3_clicked()
{
ui->textEdit->setText(tr("多语言切换功能")); //这个需要翻译部分必须用tr()函数
}
说明:
当你使用tr()函数时,Qt会在运行时检查当前的语言环境设置,并查找相应的翻译。如果没有找到翻译,或者当前语言环境与翻译文件不匹配,tr()函数将返回原始字符串。
3.实验结果
(1)初始页面
(2)点击“英文”按钮
(3)点击“测试”按钮
注意:
ui->textEdit->setText(tr("多语言切换功能")); //需要修改语言环境后执行,这样就会和语言环境一样了 //但不会像button的名字那样按中英文按钮时自动变化
参考文章:
https://blog.csdn.net/weixin_42426713/article/details/132107762
https://blog.csdn.net/sdft06/article/details/130204659
https://blog.csdn.net/blqzj214817/article/details/127396411