Qt中多语言的实现

1. 将需要转换语言的部分加上标记;

(1)在这里如果用Widgets布局按照下面来操作
普通的情况下,直接使用Tr()方法包起来需要翻译的部分,
如果要翻译的内容存到变量里的话,要用Qt_TR_NOOP()宏做标记
拼接字符串时,用tr("第%1行").arg(1)
(2)如果用代码构建的界面,就是是qml布局用下面的标记方法
qsTr()包含起来

2. 生成ts文件;

进入项目配置文件(.pro)中,添加要生成的ts文件

执行下面的命令,生成ts文件;

3. 使用Linguist工具翻译

(1)可以通过“文件->打开”命令来打开多个ts文件
(2)在译文显示对话框中,填入要翻译的内容;
(3)将字符串前面的小对号点亮后,就完成一个字符的翻译了;
(4)最后注意保存;
选择 编辑->翻译文件设置,可以设置翻译目标语言;

4. 生成qm文件

在Qt Creator 中执行

下面的例子,这里我将生成的qm文件直接加载到资源文件中了,所以可以":/MultLanguage_cn.qm"这个位置来直接访问;
//下面是加载英语程序的一个例子

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTranslator>
#include <QSettings>
#include <QDebug>
#include <windows.h>
#include <action.h>
#include <QQmlContext.h>


QTranslator *trans = NULL;

QString readSetting()
{
    QString organization = "WWB-Qt";
    QString appName = "testMultLanguage";
    QSettings settings(organization,appName);
    QString Language=settings.value("Language","CH").toString();
    return Language;
}
void oper()
{
    QSettings settings("WWB-Qt","testMultLanguage");
    settings.setValue("Language","EN");
}


int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    trans = new QTranslator();
    QString curLanguage = readSetting();
    if(curLanguage == "EN")
    {
        trans->load(":/MultLanguage_en.qm");
    }
    else {
        trans->load(":/MultLanguage_cn.qm");
    }
    app.installTranslator(trans);


    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
    return app.exec();
}
// 第39行,将qm文件添加进资源文件,就可以使用相对路径加载qm文件;
posted @ 2022-04-18 09:06  郭好好GH  阅读(490)  评论(0)    收藏  举报