• 【Qt QML】Qt Linguist使用方法


    1. 简介

    应用开发过程中,有时候需要翻译成多种语言,例如:将界面上所有中文翻译成英文,以适应国外市场。

    针对多语言切换需求,Qt有一个Qt Linguist解决方案。

    在所有需要翻译的字符串处使用qsTr()函数,Qt提取出所有qsTr()函数的参数,使用Qt Linguist对其进行翻译后发布,Qt程序可以在运行时加载发布的翻译文件以更新文本字符串。

    2. 使用方法

    下面以QML工程为例介绍:
    Qt版本:Qt 5.15.2
    Qt Creator: Qt Creator 10.0.2

    2.1 新建QML工程

    • 工程名:language_test

    • main.qml 代码

    import QtQuick 2.15
    import QtQuick.Window 2.15
    
    Window {
        width: 640
        height: 480
        visible: true
        title: qsTr("你好")
    
        Rectangle{
            width: 100
            height: 100
    
            Text{
                text: qsTr("你好")
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • main.cpp代码
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
    #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    #endif
        QGuiApplication app(argc, argv);
    
        QQmlApplicationEngine engine;
        const QUrl url(QStringLiteral("qrc:/main.qml"));
        QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
            &app, [url](QObject *obj, const QUrl &objUrl) {
                if (!obj && url == objUrl)
                    QCoreApplication::exit(-1);
            }, Qt::QueuedConnection);
        engine.load(url);
    
        return app.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • language_test.pro
    QT += quick
    
    # You can make your code fail to compile if it uses deprecated APIs.
    # In order to do so, uncomment the following line.
    #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
    
    SOURCES += \
            main.cpp
    
    RESOURCES += qml.qrc
    
    # Additional import path used to resolve QML modules in Qt Creator's code model
    QML_IMPORT_PATH =
    
    # Additional import path used to resolve QML modules just for Qt Quick Designer
    QML_DESIGNER_IMPORT_PATH =
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 运行效果
      在这里插入图片描述

    2.2 生成需要翻译的文件

    • .pro文件中添加下面一行
    TRANSLATIONS = ui.ts
    
    • 1

    在这里插入图片描述

    • 在Qt Creator菜单栏上选择【工具】-【外部】-【Qt语言专家】-【更新翻译】
    • 在工程目录下会生成ui.ts文件
      在这里插入图片描述

    2.3 翻译

    • 在开始菜单找到Linguiset,打开Qt语言专家工具
      在这里插入图片描述
      在这里插入图片描述
    • 打开生成的ui.ts文件,选择目标语言
      -在这里插入图片描述
    • 依次翻译需要翻译的词
      在这里插入图片描述
    • 翻译完成后,点击保存

    2.4 加载翻译好的语言

    • 在Qt Creator菜单栏上选择【工具】-【外部】-【Qt语言专家】-【发布翻译】
    • 此时工作目录会生成ui.qm文件
      在这里插入图片描述
    • 在main.cpp文件中,加载生成的ui.qm文件
    #include 
    #include 
    #include 	//添加头文件
    
    
    int main(int argc, char *argv[])
    {
    #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    #endif
        QGuiApplication app(argc, argv);
    
        //  ------  载入翻译 -------
        QTranslator translator; // 新建翻译类
    	// 导入生成的文件, 下面两种表示方法都可以
    	//注意:要用绝对路径
    	//注意:如果在嵌入式linux开发板中运行,需要将ui.qm文件拷贝到开发板中,这里缓存开发板中的路径
        //translator.load("D:/language_test/ui.qm", "."); //win
        translator.load("D:\\language_test\\ui.qm", ".");  //win
        //translator.load("/home/book/qt_code/language/language/ui.qm", "."); //ubuntu
        app.installTranslator(&translator); //装入
        //  ------  载入翻译 -------
    
        QQmlApplicationEngine engine;
        const QUrl url(QStringLiteral("qrc:/main.qml"));
        QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
            &app, [url](QObject *obj, const QUrl &objUrl) {
                if (!obj && url == objUrl)
                    QCoreApplication::exit(-1);
            }, Qt::QueuedConnection);
        engine.load(url);
    
        return app.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2.5 运行效果

    在这里插入图片描述

  • 相关阅读:
    华为鸿蒙应用--封装通用标题栏:CommonTitleBar(鸿蒙工具)-ArkTs
    SAP UI5 视图里的 OverflowToolbar 控件
    起重机笔记 - 进阶篇(编辑中...)
    STL的常用算法-查找 (20221130)
    3.1、Linux的vim编辑器
    常用vim命令
    vscode远程连接XHR(wget download failed)解决方法
    公共事业管理概论试卷6套含答案(大学期末复习资料)
    网页版的 Redis 可视化工具来了,已开源?
    Unreal 和 Unity 3D 各有什么特点?如何选择?
  • 原文地址:https://blog.csdn.net/yangshuoSB/article/details/133957745