QT做多语言功能
pro文件加上以下字符,指定翻译文件:
TRANSLATIONS = resource/zh_CN.ts \ resource/en_US.ts
重载changeEvent事件:
protected: void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
然后我们可以编写切换语言的代码:
QString strLanguageFile; if (strLanguage==0) { strLanguageFile = qApp->applicationDirPath() + QString("/resource/en_US"); } else { strLanguageFile = qApp->applicationDirPath() + QString("/resource/zh_CN"); } QTranslator *translator=new QTranslator(this); translator->load(strLanguageFile); qApp->installTranslator(translator); result=true;
代码会触发LanguageChange事件,所以我们在changeEvent里更新ui,判断触发LanguageChange事件后就更新:
void MainWindow::changeEvent(QEvent *event) { // In the case of events changing the application language if (event->type() == QEvent::LanguageChange) { ui->retranslateUi(this); // translate the window again } }
注意:后台字符需要更新需要重新指定。
翻译字符后,我们发布翻译,拷贝生成的qm翻译文件到目标文件夹就可以了。
存在的问题:
1、新增字符,点击更新翻译后,新字符仍未在ts文件中出现
解决办法:编译成功后再更新翻译,ts文件就会增加这些字符
2、中文乱码
解决办法:tr里的字符用英文,在ts文件里再翻译为中文