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文件里再翻译为中文

 

posted @ 2021-08-06 11:07  出门必戴双肩包  阅读(183)  评论(0编辑  收藏  举报