Qt 中英文切换
一、前言
软件面向不同国籍用户时,需要显示不同语言的操作界面,Qt提供语言家可翻译为不同语言类型,方便软件走向国际化。
二、功能实现
1、翻译文件制作
1)在pro文件中添加生成中英文翻译过渡文件(.ts文件)所需代码

注:res为存放生成ts文件的存放目录,需手动创建res目录,否则执行下面第3步时会报错
2)修改源代码继承changeEvent事件,在该事件内刷新字符串设置

1 void ZhEn_Test::changeEvent(QEvent *event)
2 {
3 if (event->type() == QEvent::LanguageChange)
4 {
5 //带参数情况
6 m_InfoQlb->setText(QObject::tr("The %1 language switch.").arg(m_Count));
7
8 //不带参数情况
9 setWindowTitle(QObject::tr("Qt Linguist"));
10 m_EnRadioButton->setText(QObject::tr("English"));
11 m_VieRadioButton->setText(QObject::tr("Vietnamese"));
12 m_ZhRadioButton->setText(QObject::tr("Simplified Chinese"));
13
14 //同一字符串需翻译为不同含义情况
15 m_Back1Qpb->setText(tr("Back"));
16 m_Back2Qpb->setText(QObject::tr("Back"));
17 m_Back3Qpb->setText(QObject::tr("Back", "Test"));
18 }
19 QWidget::changeEvent(event);
20 }
刷新字符串
3)打开Qt自带的命令行窗体

3)切换到源代码存放目录,并执行"lupdate 工程pro文件"生成ts文件

4)如在工程本地未创建res目录,则会报如下错误

5)如正确创建res目录后,再次执行lupdate指令生成ts文件

6)在res目录下,查看生成的ts文件

7)打开Qt语言家

8)打开需要翻译的ts文件,先选择lang_zh_CN.ts
注:程序默认设置英文字符串,可不用操作lang_en_US.ts文件

9)对需要翻译的内容增加汉语翻译,并保存

注:选择上下文中的“ZHEN_Test”,还可查看到一个“Back”,此时是因为代码中使用的是tr包含字符串,默认分类到类名列表中
如果不需要将三个“Back”翻译为不同意思,可使用QObject::tr包含字符串,节约翻译工作量与减小翻译文件大小
10)同样打开lang_vie_HE.ts,翻译英文为越南语,并保存

11)在刚才Qt命令窗体中,执行”lrelease 工程pro文件“,生成各qm文件

12)到此翻译文件制作完成,如下*.qm文件

2、翻译文件包含进工程
1)新建一个文本文件,名称修改为language.qrc,添加内容如下
1 <RCC>
2 <qresource prefix="" >
3 <file>res/lang_en_US.qm</file>
4 <file>res/lang_zh_CN.qm</file>
5 <file>res/lang_vie_HE.qm</file>
6 </qresource>
7 </RCC>
2)工程pro文件中添加翻译资源文件

3、加载资源文件
1)软件启动时,加载资源中的所有qm文件到内存

1 #include "ZhEn_Test.h"
2 #include "application.h"
3
4 int main(int argc, char *argv[])
5 {
6 Application app(argc, argv);
7 //加载所有qm资源文件到内存
8 app.loadTranslations(":/res");
9
10 ZhEn_Test w;
11 w.show();
12
13 return app.exec();
14 }
加载资源文件到内存
2)编写继承QApplication的应用类,加载当前选择语言对应的资源文件

1 void Application::setLanguage(const QString& locale)
2 {
3 QTranslator * item = NULL;
4
5 //移除上次语言
6 while (m_Current.count())
7 removeTranslator(m_Current.takeFirst());
8
9 //安装新语言
10 m_Current = m_Translators.values(locale);
11 foreach(item, m_Current)
12 installTranslator(item);
13 }
设置当前语言
4、运行效果

5、代码与二进制运行文件如下链接,可进行下载
链接:https://pan.baidu.com/s/12LnPQY80xw-axoa_QvaHyA,提取码:zhEn
Qt 中英文切换的更多相关文章
- 无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换
无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换 前言: Maya 集成了 PySide,同时集成了qt designer,在 Maya 的安装目录下的 bin ...
- QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp->removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)
最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记 ...
- SpringMVC 国际化-中英文切换
项目结构 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...
- ThinkPHP3.2中英文切换!
小伙伴们好久不见!!! 最近公司项目版本升级,小梦已经忙成了狗,无暇顾及文章,今天抽时间写一篇助助兴! 用Thinkphp这个国产框架已经2年多了,现在有一个小功能:网站中英文切换功能,当然这 ...
- xadmin在Django 1.11中的使用及中英文切换
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com xadmin是一个强大的替代django admin的管理后台,github地址为:https://g ...
- 关闭shift中英文切换 英文代码/中文注释随意切换着写。
x 背景 写代码的时候总是意外的就切成中文了,特别是代码中大小写切换的这种情况... 例如:"public static TimeZone CurrentTime..."publi ...
- C#学习笔记-中英文切换(XML)
这几天因为软件需要加英文版本,所以查了好久的资料找到了相关的信息,原资料参考:http://blog.csdn.net/softimite_zifeng 上网查的中英文切换大约有两种方式:1.动态加载 ...
- iOS键盘中英文切换键盘高度获取通知方法
iOS键盘中英文切换键盘高度获取通知方法, 有需要的朋友可以参考下. 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppea ...
- JS国际化网站中英文切换(理论支持所有语言)应用于h5版APP
网页框架类APP实现国际化参考文案一 参考:https://blog.csdn.net/CSDN_LQR/article/details/78026254 另外付有自己实现的方法 本人用于H5版的AP ...
随机推荐
- (十五)VMware Harbor 标签管理
1. Harbor提供两种标签用来隔离各种资源(目前只有镜像): 全局级别标签: 由系统管理员管理,用于管理整个系统的镜像.它们可以添加到任何项目下的镜像中. 项目级别标签: 由项目管理员或者系统管理 ...
- JAVAEE_01_什么是javaEE
javaEE Java平台包含三个版本: - JavaME :适用于小型设备和智能卡的JavaME (Java Platform Micro Edition,Java微型版) - JavaSE : 适 ...
- k8s endpoints k8s未配置选择器的service
service 其实是一个TCP/UDP 代理 不仅可以代理Pod也可以代理其他的非Pod资源,例如外网的数据库,或者其他的资源 创建未配置选择器的service, service 的对外端口是500 ...
- 1087 All Roads Lead to Rome
Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...
- 1- java语言特性
Java概述 Java是面向对象程序设计语言和Java平台的总称 Java体系 JavaSE(j2se)(标准版) JavaEE(J2ee)(企业版) JavaME(J2me) 面向对象 面向对象是J ...
- 【SpringBoot】SpringBoot集成jasypt数据库密码加密
一.为什么要使用jasypt库? 目前springboot单体应用项目中,甚至没有使用外部配置中心的多服务的微服务架构的项目,开发/测试/生产环境中的密码往往是明文配置在yml或properties文 ...
- 绕过CDN查找网站真实ip
在渗透测试过程中,经常会碰到网站有CDN的情况.CDN即内容分发网络,主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题.说的简单点,就是一组在不同运营商之间的对接点上的高速缓存服务器,把 ...
- Win64 驱动内核编程-31.枚举与删除映像回调
枚举与删除映像回调 映像回调可以拦截 RING3 和 RING0 的映像加载.某些游戏保护会用此来拦截黑名单中的驱动加载,比如 XUETR.WIN64AST 的驱动.同理,在反游戏保护的过程中,也可以 ...
- [CTF]栅栏密码学习
[CTF]栅栏密码学习 即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码.栅栏密码是一种置换密码. 例如密文:TEOGSDYUTAENNHLNETAMS ...
- base标签的作用
base标签可以自定义当前页面的相对路径,不受浏览器当前地址栏的影响,以base标签定义的地址为准 (只对相对路径起作用) <head> <meta charset="UT ...