微软公司宣布不再支持你正在使用的 IE浏览器,这会严重影响浏览网页,请使用微软最新的
  
您好, 登录| |

Qml实现多语言切换

  • 04-21 14:35
  • 米修儿

    LV.0
  • 1104

    浏览

  • 0

    回复

  • 1

    获赞

  • 运行环境:Ubuntu20.04

    运行Qt版本:Qt5.14.2(网友说需要Qt5.10以上版本才可以)

    实现前提:所有的qml中需要翻译的文字前都要加“qsTr”例如:qsTr("文本")

    操作步骤:

    一.编辑工程文件

    1.首先在工程文件.pro中加入TRANSLATIONS = zh_CN.ts en_US.ts两个翻译文件, 支持中英文两种语言切换,后面可以跟上路径例如:Lang/zh_CN.ts,这样生成ts文件后就会再Lang文件夹下

    2.在工程文件上添加需要翻译的文件

    lupdate_only{   
       SOURCES += \
         *.qml\
         setting/*.qml\
    }   //需要翻译的文件相对路径,可以通配符,不用一个个的输入名字

    二、生成ts文件:

    工程文件配置后,运行lupdate,点击(工具->外部->Qt语言家->更新翻译(lupdate));这时候就从运用程序中,工程文件上(lupdate_only)添加的翻译文件,提取所有经过qsTr()标识过的字符串(qsTr("hello")),生成后缀为.ts文件,文件的命名和路径根据工程文件配置。

    三、编辑ts文件

    使用Qt Linguist打开翻译需要翻译的.ts文件,然后在Linguist 发布生成相应的qm文件(文件->发布);

    或者使用QT(工具->外部->Qt语言家->更新翻译(lrelease))发布生成相应的qm文件。

    注意的在电脑上调试运行,不需要添加入qrc资源文件也是可以的,如果不是,我们需要将qm文件添加到qrc资源文件上。

    四、代码实现切换

    void QmlLanguage::setLanguage(int nLanguage)
    {
        QTranslator translator;
        if (nLanguage == 0)
        {
            translator.load(":/en_US.qm");
        }else{
            translator.load(":/zh_CN.qm");
        }
        m_app->installTranslator(&translator);
        m_engine->retranslate();
    }
    

    重点的是这句 m_engine->retranslate(); Qt5.10的新方法, 使Qml界面全部动态重新翻译

    缺点:1.动态翻译切换的时候还会显示原来的语言,重启后才完全生效,暂时还没完全解决,看taoquick的里面用的json解决,还没尝试

    2.主要适用于单页面,如果多个页面切换动态切换时需要每个页面都设置一次

    注意事项:ts里面要设置好语言:中文要包含:

    <TS version="2.1" language="zh_CN" sourcelanguage="zh_CN">

    英文:

    <TS version="2.1" language="en_US" sourcelanguage="zh_CN">

    要不会失败

    同是电子工程师,请一定不要吝啬你的赞!

    1人已赞

    编辑 举报

    LV.1

    4274907

    2677824

    23

    821817

    说说你的看法

  • LV.

    @

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    取消
    发送
  • 现在还没有回复呢,说说你的想法

    现在还没有回复呢,说说你的想法

    全部回复(0)

    现在还没有回复呢,说说你的想法

  • 回复

  • 收藏

  • 点赞

  • 举报有害信息

  • 已超出发布时间24小时,无法编辑与删除
    联网备案号:12010402000747 增值电信业务经营许可证:津B2-20120058