QT实现多语言动态切换

    技术2022-07-17  70

    先上效果图:


    然后说说注意项吧:

    1、想实现Qt多语言动态切换,如果通过Qt语言家(Qt Linguist)实现的话(我这里也只说这种方式),最好用Qt Creator5.10版本及以上。不然,qml里面的字体是不支持动态翻译的,必须在加载qml之前就加载好翻译文件(*.qm)。或者说,你每次切换语言后,需要再重新加载一下qml界面。可以通过Loader加载方式实现。我这里用Qt Creator5.9.0和5.12.5版本测试过的。widget界面不影响。

    2、如果用VS+QT方式。在VS里编译出来的也不支持qml界面的动态翻译,无关版本问题。这个时候也可以向上面说的,在每次切换语言后,再重新加载一下qml界面就可以了。我这里用VS2015和2017都测过的。widget界面不影响。

    3、翻译文件(.ts)和发布文件(.qm)最好放别放在qrc里,放在可执行文件目录下即可。这样方便修改和维护。

    4、需要翻译的文本需要用tr或qsTr标记。


    再来说说步骤:

    1、新建工程,拉个简单点的控件先试试水; 2、如果是用的Qt Creator,则需要在pro文件中添加,例如:

    TRANSLATIONS += resources/tr_zh.ts \ resources/tr_en.ts

    3、生成翻译文件 (.ts) (1)如果是用的QC,就点击工具-》外部-》Qt语言家-》更新翻译 然后就会在你的工程文件路径下 resources文件夹中生成 tr_zh.ts 和 tr_en.ts 两个文件。 (2)如果用的VS,点击 Qt VS Tools-》Create New Translation File, 然后选择语言,修改文件名就可以了。翻译文件就自动生成到工程文件路径下了。 4、生成发布文件(.qm) (1)这里可以用notepad++打开翻译文件。然后做翻译修改。如: 由

    <message> <location filename="../MainWindow.cpp" line="15"/> <source>QT动态翻译</source> <translatorcomment></translatorcomment> <translation type="unfinished"></translation> </message>

    改为

    <message> <location filename="../MainWindow.cpp" line="15"/> <source>QT动态翻译</source> <translatorcomment>QT dynamic translation</translatorcomment> <translation type="unfinished">QT dynamic translation</translation> </message>

    修改完后,保存。然后在QC中点击工具-》外部-》Qt语言家-》发布翻译。就可以在相应文件夹下看到生成好的发布文件了。 (2)或者用Qt Linguist打开翻译文件。然后做翻译修改。修改完后,保存。点击文件-》发布,即可。 5、编写接口函数,便于语言包的动态切换。如:

    void MainWindow::on_pushButton_clicked() { m_bChangeToEn = !m_bChangeToEn; if(!qApp->removeTranslator(&m_Translator)) { qDebug()<<"remove error...."; } if(m_bChangeToEn) { if(m_Translator.load(":/resources/tr_en.qm")) { qApp->installTranslator(&m_Translator); ui->retranslateUi(this); qDebug()<<"load English file succed"; } else { qDebug()<<"load English file error"; } } else { if(m_Translator.load(":/resources/tr_zh.qm")) { qApp->installTranslator(&m_Translator); ui->retranslateUi(this); qDebug()<<"load Chinese file succed"; } else { qDebug()<<"load Chinese file error"; } } }

    ||

    ||

    Demo详见-》猛戳


    参考: https://blog.csdn.net/D759378563/article/details/79297971

    https://blog.csdn.net/lwwl12/article/details/80485123?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

    Processed: 0.013, SQL: 9