dialog
基于linguist.exe的翻译功能
1、linguist.exe在C:\Qt\5.15.2\mingw81_64\bin目录中
因为我的Qt环境是Qt5.15.2 MinGw编辑器 、所以在这个目录中
2、使用linguist.exe需要打开ts文件、其中ts是怎么来的
3、linguist.exe 把ts文件转成qm文件
注意:LangTest_en03_US.ts 文件指的是 英文的ts、需要翻译成英语qm文件
LangTest_en03_CN.ts 文件指的是 中文的ts、需要翻译成中文qm文件
4、当做完这些以后 就可以进行发布qm了、注意:
qm文件需要放到 exe的 构建目录 中、这样才可以在运行代码的时候、进行翻译
把
例如:把LangTest_en03_CN.ts文件转成LangTest_en03_CN.qm
把LangTest_en03_US.ts文件转成LangTest_en03_US.qm
放到exe所在的构建目录
效果点击English以后翻译成英文
点击中文以后按钮以后 翻译成了中文
pro文件代码
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#要翻译 1、需要添加下面两句、 2、需要在工具-》外部-》linguist-》update Translations (update) 点击了以后就会生成ts文件、
#使用linguist.exe(C:\Qt\5.15.2\mingw81_64\bin 注意我的编辑器)打开ts文件进行自主翻译 qm
TRANSLATIONS = LangTest_en03_US.ts \
LangTest_en03_CN.ts
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
dialog.cpp
HEADERS += \
dialog.h
FORMS += \
dialog.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
dialog.h代码
#ifndef DIALOG_H
#define DIALOG_H
#include <QTranslator>
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui {
class Dialog;
}
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void on_btnChinese_clicked();
void on_btnEnglish_clicked();
private:
Ui::Dialog *ui;
QTranslator *qTranslator = nullptr;
};
#endif // DIALOG_H
dialog.cpp代码
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
on_btnChinese_clicked();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_btnChinese_clicked()
{
if(nullptr ==qTranslator)
{
qTranslator = new QTranslator(this);
}
qTranslator->load("LangTest_en03_CN.qm");
qApp->installTranslator(qTranslator);
ui->retranslateUi(this);
ui->labeltt->setText(tr("这是一个中文的")); //如果在cpp中的代码 需要使用tr进行包裹、注意这里有两个括号
}
void Dialog::on_btnEnglish_clicked()
{
if(nullptr ==qTranslator)
{
qTranslator = new QTranslator(this);
}
qTranslator->load("LangTest_en03_US.qm");
qApp->installTranslator(qTranslator);
ui->retranslateUi(this);
ui->labeltt->setText(tr("这是一个英文的")); //如果在cpp中的代码 需要使用tr进行包裹、注意这里有两个括号
}