博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt多语言开发--Qt语言专家
阅读量:3622 次
发布时间:2019-05-21

本文共 1842 字,大约阅读时间需要 6 分钟。

Qt强的的功能之一就是支持多语言切换,本文主要介绍如何去支持多语言开发。

Qt多语言开发主要流程如下:

1、Qt tr()和qsTr()标记待翻译字符串2、Pro文件中,添加生成ts的代码3、Qt语言专家更新ts文件4、Qt语言专家打开ts文件,填写对应的翻译5、Qt语言专家将翻译后的ts文件生成qm文件6、QTranslator加载qm语言文件7、qApp->installTranslator() 安装语言文件

1、标记待翻译内容

Qt代码包括c++代码和qml代码,不同风格的代码标记字符串的函数不同。C++代码中,使用tr()函数标记字符串;QML代码中,使用qsTr()函数。具体使用方法如下:

C++代码:

int ShowConnectState(){
ui->label->setText(tr("Wired device is disconnected")); return 0;}或者int ShowConnectState(){
QString showInfo = tr("Wired device is disconnected"); ui->label->setText(showInfo); return 0;}

qml代码:

Text {
id: stringInfo text: isChinese ? qsTr("Chinese") : qsTr("English") color: "black" anchors.fill: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.bold: true font.pixelSize: 30}

2、在pro文件中添加命令

TRANSLATIONS = language_zh_EN.ts \               language_zh_CN.ts

在pro文件最后面添加上面两行命令,重新编译运行,会自动生成上面的两个ts文件。其中EN代表英文,CN代表中文。如果有其他国家,建议新增其他国家的ts文件。

3、Qt语言专家更新ts文件

在这里插入图片描述

点击更新翻译后,会自动将代码中的标识字符串更新到ts文件中。当代码中字符串有修改或者添加时,记得先运行更新翻译。

4、Qt语言专家打开ts文件并填写翻译

Qt语言专家是Qt自带的一种软件工具,在安装QtCreator时就默认已经安装了,下面从windows和linux两个平台教大家运行语言专家:

4.1 linux平台:

打开命令行,输入lin然后tab键自动补全,会出现linguist,然后回车会自动打开语言专家。

root@Xubuntu18:~$ linguist

然后File->open,选择要打开的ts文件

在这里插入图片描述

4.2 windows平台

在windows平台,推荐大家使用everything工具去搜索,下面给出常用软件的连接:

用everything搜索“linguist”,单机打开对应的exe,注意下你用的是64位编译还是32位编译。

在这里插入图片描述
在这里插入图片描述

4.3 打开ts文件填写对应的翻译

左侧栏是对应的文件,字符串栏对应识别出来的字符串

在这里插入图片描述

选择原文字符串,然后在下面填写对应的翻译

在这里插入图片描述

翻译成功后,单机原文的❓,让其变成√

在这里插入图片描述
将所有的文件中的字符串翻译完成后保存,并关闭ts文件。

5、Qt语言专家将翻译后的ts文件生成qm文件

在这里插入图片描述

在ts目录下会生成同名的qm文件
在这里插入图片描述

6、加载和安装qm语言文件

在main函数中,加载qm文件

QTranslator translator;if (translator.load(":/language/language_zh_CN.qm")) {
qApp->installTranslator(&translator);}

初始化完成后会显示当前加载的语言。

7、页面语言刷新

动态切换语言,例如页面有一个切换语言的按钮,触发按钮后,如何刷新所有的语言?下面分两部分来介绍。

7.1、 QWidget 刷新语言
每个Widget窗口或页面都需要通过UI 调用命令:

ui->retranslateUi(this);

7.2、 QML刷新语言

engine->retranslate();

关于qml刷新,详情可以看

转载地址:http://qxuun.baihongyu.com/

你可能感兴趣的文章
TypeScript从入门到精通(二)静态类型
查看>>
TypeScript从入门到精通(三)基础静态类型和对象静态类型
查看>>
TypeScript从入门到精通(四)类型注释和类型推断
查看>>
TypeScript从入门到精通(五)函数参数和返回类型定义
查看>>
用户态和内核态(转载)
查看>>
说线程和进程的区别
查看>>
springmvc常用的一些注解
查看>>
Spring注解Resource和Autowired区别对比
查看>>
TCP和UDP区别
查看>>
TCP协议如何保证可靠传输
查看>>
浅谈单链表与双链表的区别
查看>>
十大经典排序算法最强总结
查看>>
Map集合类——LinkedHashMap
查看>>
session的生命周期
查看>>
Redis 为什么是单线程?
查看>>
Linux常用命令(足以应付面试)
查看>>
Redis主从复制
查看>>
Redis 常见的性能问题和解决方法
查看>>
RabbitMQ基础概念详解
查看>>
RabbitMQ系列(二)--基础组件
查看>>