一、设置需要的语言
在pro文件中加入需要的语言(名字自定义)后缀是.ts
二、生成翻译的.ts文件
点击工具->外部->linguist->Update Translations生成或者更新工程相应的语言文件
生成后工程目录会出现相应的.ts文件
三、通过linguist翻译文件
通过Linguist打开上面生成的所有语言文件(.ts), Linguist版本与编译工具必须一致
打开所有.ts文件
编写对应语言的翻译。
需要注意的:控件需要是可翻译属性,当然默认就是可翻译不管也OK,
代码里设置的字符需要使用tr()
四、发布生成.qm文件
点击工具->外部->linguist->Release Translations生成.qm文件。
生成后再工程目录会有对应的.qm文件。
五、控件及代码文字的翻译注意事项
1,控件字符需要是可翻译属性
2,软件里设置控件字符需要使用tr()函数
3,需要引入头文件 #include <QTranslator>
4,路径问题,打包后.qm文件路径需要和代码对应,当然,有能力可以遍历文件夹找这个文件。
六、加载语言文件切换语言
示例代码:
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QStringListModel>
#include <QFile>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
QSettings *configIni = new QSettings("Config.ini", QSettings::IniFormat); //有就打开,没有就创建一个
QString Language = configIni->value("/Config/Language").toString(); //查询配置的语言类型
if(Language == ""){ //如果未设置则根据系统语言来设置一个
qDebug()<<QLocale().language();
if(QLocale().language() == QLocale::English){
configIni->setValue("/Config/Language", "EN");
}
else if(QLocale().language() == QLocale::Chinese){
configIni->setValue("/Config/Language", "CN");
}
else{
configIni->setValue("/Config/Language", "EN"); //其他语言一律默认为英语
}
}
translator_ = new QTranslator();
Language = configIni->value("/Config/Language").toString(); //再次获取语言配置
QString strPath = QCoreApplication::applicationDirPath();
qDebug()<<Language;
if(Language == "EN")
{
qDebug()<<translator_->load(strPath + "/english.qm");//导入.qm文件
}
else if(Language == "CN")
{
qDebug()<<translator_->load(strPath + "/chinese.qm");
}
qApp->installTranslator(translator_); //装载翻译文件
delete configIni; //释放掉
/**************************************************/
ui->setupUi(this);
if(Language == "CN"){
ui->calendarWidget->setLocale(QLocale::Chinese); //控件自带翻译的用自带翻译
ui->calendarWidget_2->setLocale(QLocale::Chinese);
}
else if(Language == "EN"){
ui->calendarWidget->setLocale(QLocale::English);
ui->calendarWidget_2->setLocale(QLocale::English);
}
QStringList list;
list.append(tr("苹果")); //代码设置的文字需要用tr()函数
list.append(tr("香蕉"));
list.append(tr("橘子"));
list.append(tr("草莓"));
QStringListModel *listmodel = new QStringListModel(list);
ui->listView->setModel(listmodel);
ui->pushButton_4->setToolTip(tr("Set Chinese")); //英文翻译过长可以使用这个,可以鼠标放上去就显示这些注释
ui->pushButton_3->setToolTip(tr("Set English"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_3_clicked() //设置为中文的案件回调,触发重启来加载语言
{
QSettings *configIni = new QSettings("Config.ini", QSettings::IniFormat);
configIni->setValue("/Config/Language", "EN");
qDebug()<<configIni->value("/Config/Language").toString();
delete configIni;
qApp->exit(777); //重启,传入777在main.cpp中处理
}
void MainWindow::on_pushButton_4_clicked() //设置为中文的案件回调,触发重启来加载语言
{
QSettings *configIni = new QSettings("Config.ini", QSettings::IniFormat);
configIni->setValue("/Config/Language", "CN");
qDebug()<<configIni->value("/Config/Language").toString();
delete configIni;
qApp->exit(777); //重启,传入777在main.cpp中处理
}
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTranslator>
#include <QLocale>
#include <QSettings>
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_3_clicked();
void on_pushButton_4_clicked();
private:
Ui::MainWindow *ui;
QTranslator *translator_;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QProcess>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
int e = a.exec();
if(e == 777) //传入777则认为是重启,否则就不启动
{
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
return 0;
}
return e;
}