一.目的
在做項目時,有時希望我們的程序可以在不同的國家使用,這樣最好的方式是一套程序能適應于多國語言。
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