zoukankan      html  css  js  c++  java
  • QT国际化(中英转换)

    转载:https://blog.csdn.net/u012528526/article/details/54707233

    QT国际化(中英转换)

    我们都知道在安卓中,想做国际化很简单,只需要建立对应的资源文件,在对应的strings里面修改字符即可。但在QT中相对会比较麻烦,没安卓那么简单,不过也不是很复杂,最近在弄国际化时,因为刚接触QT,对QT的了解还不是很深,所以有点无从下手,在经过各种百度谷歌之后,以及向法国人请教之后,总算搞定了,然后发现之前网上那些教程都很复杂,而且都是抄来抄去,完成之后我都没能理解他们的做法,也许是因为我刚接触QT还没法理解他们的写法。
    首先我现在所做的QT项目,绝大部分都是通过qml直接实现的,QT的C++部分用的很少,只是用来获取数据封装成Model提供给qml使用,所以我所有需要转换的字符都是在qml当中,不过C++成字符的转换应该也是类似的,因为没做,不确定在c++层也同样有效,在qml是可以提取和实现的。

    一. 将所有需要翻译的字符用qsTr()包起来,列如:

            Text{
                     parent.width
                    height: 89
                    anchors.left: parent.left
                    anchors.leftMargin: 70
                    text:qsTr("蓝牙")
                    color:"#a97a54"
                    font.pixelSize: textSize
                    fontSizeMode:Text.HorizontalFit
                    verticalAlignment: Text.AlignVCenter
                }

    二. 在项目的.pro文件中添加两句话

    //设置生成的语言库存放的路径,我这边是放在resources文件夹下面,生成中文和英文两种,不要认为是直接翻译好的,这两个文件刚生成的时内容是一样的,需要自己去翻译,这个后面会说。
    TRANSLATIONS +=resources/tr_zh.ts 
                   resources/tr_en.ts    
    //这个设置所需要提取字符的文件路径,也就是你项目中包含字符的文件路径,可以使用通配符,如果后面提取失败,大都是这边路径写错,我一开始一直提取不出来就是路径写错,再啰嗦几句,在QT中,有实际路径跟虚拟路径,实际路径就是在你电脑盘符里面可以直接看到的,而虚拟路径是指通过QT编译器来创建的路径,在实际盘符中是不存在的。而此处写的应该是实际路径,相对于项目.pro文件的位置
    lupdate_only{   
        SOURCES+ =文件路径
    }

    三. 然后通过工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 可以生成ts文件;

    更新翻译后的日志

    如果在控制台看到如上图的信息,那么所需翻译字符的提取就成功了,并且在resources文件夹下生成了.ts文件,如果为0,则需要再好好检查下路径是否有写错。

    四.启动QT文件夹下的Linguist工具,打开刚刚所生成的.ts文件,进行翻译。

    翻译.ts文件

    五.ts文件翻译保存之后,然后通过工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(lrelease) 可以生成对应的.qm文件,会跟.ts文件在同一目录,.qm文件就是我们所需要的语言库。

    六.在main.cpp主函数中读取tr_en.qm文件

    读取.qm文件

    七.前面说了,在QT中有虚拟路径跟实际路径,qm文件虽然是在项目工程文件夹下,但是如果不通过IDE手动添加进去,IDE是识别不到的,也就无法读取,所以我的做法是,在资源下创建一个translator.qrc用来存放.qm文件,右键–>添加新文件–>QT–>Qt Resource File

    这里写图片描述

    这里写图片描述

    将.qm文件添加到translator.qrc中
    
    • 1

    这里写图片描述

    右键.qm文件Copy path,也就是第六步load该.qm文件的路径
    
    • 1

    这里写图片描述

    至此,QT国际化中文与英文之间的切换就实现了,我这边的需求是项目设置中由用户去手动切换选择语言,对我们开发来说也就是换个.qm文件而已,当然也可以通过QLocale去判断本地语言环境来根据系统语言加载不同的语言库。在查资料的过程中发现有些人说,通过IDE工具更新和发布会出现提取不全的问题,而通过命令行更新和发布不会,如果有人遇到提取不全可以用命令行试试,我是没遇到这种问题。
    刚开始学写博客,对QT也是刚刚接触,如果有理解错误的地方还望多多指点,谢谢。
  • 相关阅读:
    Python 网络爬虫
    Linux 下安装 java 运行环境 jdk1.8
    SSH: Transferred 0 file(s) 解决
    java idea 好用的插件
    java idea 安装 环境配置等 注意事项(只是备注给自己看的事项,不是安装教程)
    git 上传已有项目 到git仓库 初始化git并上传
    git 清除远程仓库已经删除的本地分支 清除已经合并到master的本地分支
    oracle trunc 日期 数字 的使用例子
    股票小白2
    股票小白知识点1
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/10444924.html
Copyright © 2011-2022 走看看