前言
Qt程序中实现多语言有Qt自己的一套机制,然而在Qt5.9版本下该机制无法在程序运行期间动态切换语言。本文向大家介绍一种切实可行的walkaround方法,在Qt5.10+以上版本可以自由在程序运行期间动态切换语言。同时支持对普通文本以及在 ListModel/ListElement 中的文本的多语言处理。
回顾Qt多语言机制
Qt自身的多语言机制分下面几个步骤:
- 在源码中用QObject::tr()(C++)或者qsTr()(QML)将字符串包起来;
- 用Qt自带的lupdate生成.ts文件;
- 用linguist工具翻译并发布为.qm文件;
- 程序刚启动还未加载任何界面元素之前,根据某些规则加载对应的.qm文件即可实现显示对应的语言的效果。
之所以Qt5.9及以下 该机制不支持动态加载语言就在于第四步。该步骤核心代码是:
QTranslator translator;
translator.