欢迎来到军工软件开发人才培养基地——学到牛牛

Qt国际化语言

时间:2024-05-06 07:01:10 来源:学到牛牛

一. Linguist工作原理

Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。

Qt Linguist为发布者提供了两款工具-lupdate和lrelease。它们可以处理qmake项目文件,或直接在文件系统上运行。翻译者可以使用Qt Linguist工具翻译应用程序的文本。开发者创建Qt应用程序能够使用的翻译文本。

为了支持国际化最关键的地方是制作多国语言包,然后再实现动态切换。Qt可以通过命令行和QtCreator来生成多国语言包。首先生成ts文件,然后生成qm文件,最后通过QTranslator类来加载qm文件,实现多语言包的切换。

二.生成ts文件

在QT的项目文件(.pro)中添加:TRANSLATIONS = xxx.ts yyy.ts(如果是多行,则用 \ 分割):

然后执行【工具】-》【外部】-》【QT语言家】-》【更新翻译(lupdate)】,如下图所示,执行完之后项目下就会生成对应的XXX.ts、YYY.ts文件。【需要将g++编译器路径添加到系统path】

三.生成qm文件

利用QT Linguist打开生成的ts文件,将里面需要翻译的地方写上对应的语言,如下图所示:

   ts文件翻译完成后,执行Qt Creator中的【工具】-》【外部】-》【QT语言家】-》【部署翻译(lrelease)】就会生成最终要用到的qm文件,如下图所示:

四.加载qm语言包

到这里qm语言包制作完成,工作就完成了一大半了。接下来的任务就是在代码中实现语言包的加载,即:根据不同的选择加载不同的语言包。    

void MainWindow::changeTr()

{

    QAction *act = qobject_cast<QAction *>(QObject::sender());

    qDebug() << act;

    if( act->text().contains(tr("英语")) ){

        translate("/untitled_en_CN.qm");

    }else if( act->text().contains("Chinese") ){

        translate("/untitled_zh_CN.qm");

    }

}

void MainWindow::translate( QString path )

{

    static QTranslator* translator;

    if( translator != NULL ){

        qApp->removeTranslator(translator);

        delete translator;

        translator = NULL;

    }

    translator = new QTranslator;

 

    QString runPath = QCoreApplication::applicationDirPath();   // 获取当前运行路径

 

    if( translator->load( runPath + path )){

        qApp->installTranslator(translator);

    }

    ui->retranslateUi( this );

}