QT国际化的静态与动态实现

    科技2022-07-11  97

    QT国际化

    国际化静态实现 第一步: 将要翻译地文字用tr()括起来;

    void TransUI(){ ui->label->setText(tr("翻译")); }

    第二步:在工程文件中新建一个文件夹(language)用于保存语言包

    第三步:为工程添加资源文件,设置语言包存放路径,在.pro文件中添加如下语句 TRANSLATIONS +=language/tr_zh.ts \ language/tr_en.ts 在工程中,新建一个资源文件,命名为translator

    资源文件在工程目录中的结构如下:

    路径名字一定要与文件夹名字相同,否则会出现找不到路径地错误。此处应该写实际路径,而且是相对于.pro文件所在的文件位置。

    第四步:点击【工具】-【外部】-【Qt语言家】-【lupdate】

    看到如下信息则说明成功了,此时打开language文件夹便可以看到tr_zh.ts和tr_en.ts两个文件

    第五步:用Qt Linguist打开tr_en.ts文件进行翻译工作。 或者手动翻译 如下: 1、打开tr_zh.ts (翻译成中文)- 无需修改

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="zh_CN"> <context> <name>MainWindow</name> <message> <location filename="../mainwindow.ui" line="14"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainwindow.cpp" line="18"/> <source>翻译</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainwindow.cpp" line="19"/> <source>按钮</source> <translation type="unfinished"></translation> </message> </context> </TS>

    2、打开tr_en.ts(翻译成英文)

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="en_US"> <context> <name>MainWindow</name> <message> <location filename="../mainwindow.ui" line="14"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainwindow.cpp" line="18"/> <source>翻译</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainwindow.cpp" line="19"/> <source>按钮</source> <translation type="unfinished"></translation> </message> </context> </TS>

    修改

    <source>翻译</source> <translation type="unfinished"></translation><source>翻译</source> <translation type="unfinished">Translator</translation>

    编辑完成之后在Linguist中点击发布,然后就能在language文件夹中看到tr_en.qm文件。或者在Qt中手动点击【工具】-【外部】-【Qt语言家】-【release】。成功之后能看到当前的翻译情况

    第六步:将qm文件添加到资源文件中,添加成功之后如下图所示

    *第七步:*进入main.cpp文件,添加头文件#include ,然后在“QApplication a(argc, argv);”下面添加如下代码:

    QTranslator translator; translator.load(":/new/prefix1/language/tr_en.qm"); a.installTranslator(&translator);

    括号中绿色部分为路径,可以直接右键点击文件,复制路径到括号中即可成功更换语言包。

    至此静态更换(在代码中事先选择好而不是到软件中选择语言)语言就已经完成了。

    QT国际化动态实现

    #include "mainwindow.h" #include "ui_mainwindow.h" static QTranslator *Translator; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); LanguageList <<QStringLiteral("English") <<QStringLiteral("中文"); TrUi(); ui->comboBox->addItems(LanguageList); } MainWindow::~MainWindow() { delete ui; } void MainWindow::TrUi() { ui->pushButton->setText(tr("button")); } void MainWindow::on_comboBox_currentIndexChanged(int index) { if(Translator!=NULL) { qApp->removeTranslator(Translator); delete Translator; Translator=NULL; } Translator =new QTranslator(); if(index==0) { Translator->load(":/new/prefix1/language/tr_en.qm"); } else Translator->load(":/new/prefix1/language/tr_zh.qm"); qApp->installTranslator(Translator); TrUi(); } #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_comboBox_currentIndexChanged(int index); private: void TrUi(); private: Ui::MainWindow *ui; QStringList LanguageList ; }; #endif // MAINWINDOW_H
    Processed: 0.028, SQL: 8