QT实现多语言动态切换

先上效果图:

在这里插入图片描述


然后说说注意项吧:

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

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值