Qt 5.10 多语言动态翻译

Qt5.10 多语言动态翻译

Qt 多语言动态翻译功能,在5.10之前切换语言,要么重启应用程序,要么所有的文本重新set一遍。
5.10终于可以不重启、不手动set 了。
效果如下:

demo

翻译步骤整理

  1. qml 中使用qsTr 标记要翻译的文本

  2. 在pro中添加翻译文件ts,例如:

    TRANSLATIONS += I18n_zh.ts \
    I18n_en.ts

  3. 使用lupdate (通过命令行,或者qtcreator->Tools->External->Linguist->lupdate),会在源码路径下生成ts文件

  4. 使用linguist (Qt5.10.0/5.10.0/gcc_64/bin/linguist)导入ts文件,进行翻译

  5. 使用lrelease,(通过命令行,qtcreator 或者 linguist),生成qm文件。

    ts文件是xml格式的文本,qm文件是对其压缩过的二进制格式。两者都可以使用linguist导入

  6. qm文件放入运行路径,或者加入qrc资源

  7. 使用QTranslator加载qm文件并安装到QCoreApplication

  8. 在需要切换语言的地方,切换Translator,并触发QQmlEngine::retranslate

QCoreApplication::removeTranslator

QCoreApplication::installTranslator
参考代码链接:
https://github.com/wentaojia2014/I18n

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
http://blog.csdn.net/yulinxx/article/details/43260203 ------------------------------------------ C++ 国际化!!!!! 创建一个空白的Qt工程 添加一个main.cpp #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv) QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show(); return a.exec(); } 即可运行起来。。。。 此工程,只有按钮上有文字。。。运行如下图示: 在工程加入: TRANSLATIONS += testTrans_en.ts (ts文字名可随意取) 然后执行: Tools -> External -> Linguist -> Update Translations(lupdate) 提示完成: /usr/local/Qt5.4.0/5.4/gcc_64/bin/lupdate" finished 在工程,可以发现多了一个 testTrans_en.ts 文件,此文件可用文本编辑器打开进行查看,如: QPushButton Test Translate 此步骤是将工程的文字(加tr等包含的文字)进行提取到ts文件 接下来,在终端运行 x@x:~$ linguist 打开 Qt Linguist 翻译工具,对文字进行逐个翻译并保存 在工程再执行: Tools -> External -> Linguist -> Release Translations(lrelease) 结果提示:/usr/local/Qt5.4.0/5.4/gcc_64/bin/lrelease" finished 在工程,可以发现多了一个 testTrans_en.qm文件,此文件为二进制格式文件,即我们最终使用的翻译文件 然后添加Qt资源,将testTrans_en.qm添加进来 修改main.cpp文件,将翻译文件添加进来,最终执行 #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QTranslator qtTranslator; qtTranslator.load(":/translate/testTrans_en.qm") a.installTranslator(&qtTranslator); QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show() return a.exec() } 最终执行结果:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jared2020

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值