一、前言

  软件面向不同国籍用户时,需要显示不同语言的操作界面,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 中英文切换的更多相关文章

  1. 无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换

    无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换 前言: Maya 集成了 PySide,同时集成了qt designer,在 Maya 的安装目录下的 bin ...

  2. QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp->removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)

    最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记 ...

  3. SpringMVC 国际化-中英文切换

    项目结构 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...

  4. ThinkPHP3.2中英文切换!

    小伙伴们好久不见!!!   最近公司项目版本升级,小梦已经忙成了狗,无暇顾及文章,今天抽时间写一篇助助兴!   用Thinkphp这个国产框架已经2年多了,现在有一个小功能:网站中英文切换功能,当然这 ...

  5. xadmin在Django 1.11中的使用及中英文切换

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com xadmin是一个强大的替代django admin的管理后台,github地址为:https://g ...

  6. 关闭shift中英文切换 英文代码/中文注释随意切换着写。

    x 背景 写代码的时候总是意外的就切成中文了,特别是代码中大小写切换的这种情况... 例如:"public static TimeZone CurrentTime..."publi ...

  7. C#学习笔记-中英文切换(XML)

    这几天因为软件需要加英文版本,所以查了好久的资料找到了相关的信息,原资料参考:http://blog.csdn.net/softimite_zifeng 上网查的中英文切换大约有两种方式:1.动态加载 ...

  8. iOS键盘中英文切换键盘高度获取通知方法

    iOS键盘中英文切换键盘高度获取通知方法, 有需要的朋友可以参考下. 注册通知 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppea ...

  9. JS国际化网站中英文切换(理论支持所有语言)应用于h5版APP

    网页框架类APP实现国际化参考文案一 参考:https://blog.csdn.net/CSDN_LQR/article/details/78026254 另外付有自己实现的方法 本人用于H5版的AP ...

随机推荐

  1. (九)VMware Harbor 项目管理-上传/下载镜像

    VMware Harbor项目管理 Harbor中的项目包含应用程序的所有存储库. Harbor有两类项目: 公共:所有用户都拥有公共项目的读取权限,您可以方便地以这种方式与其他人共享一些存储库. 私 ...

  2. openpyxl 库

    1. 简介与安装 2.具体示例 2.1 获取workbook与sheet对象 2.2 访问单元格及其值 2.3 写数据 2.4 设置样式 1. 简介与安装 openpyxl 简介 openpyxl 是 ...

  3. 概A第一章测试

    ·  问题 1√ 得 10 分,满分 10 分       A与B不能同时发生,表明A与B互不相容.               ·  问题 2× 得 10 分,满分 10 分       A与B互逆 ...

  4. PHP 导出 CSV 0开头数据丢失问题处理

    PHP导出csv格式时,0开头会被office软件省略,如何处理?比如:033736 导出csv时会被excel转换成 33736 展示,不符合业务需求.处理方案: 微信支付的导出是这么处理的,加个反 ...

  5. POJ3080方法很多(暴力,KMP,后缀数组,DP)

    题意:       给n个串(n>=2&&n<=10),每个串长度都是60,然后问所有串的最长公共子串,如果答案不唯一输出字典序最小的. 思路:直接暴力,枚举+KMP,后缀 ...

  6. Python脚本爬取网站美女照片

    上次无意之中看到一个网站,里面全是美女的照片,我就心想,哪天有时间了得把这网站的所有美女照片都得爬下来.今天有时间,写了点代码,爬去了网站的所有照片.附上战果!图片实在是太多了,爬半个多小时 先附上所 ...

  7. Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)

    第7章 线程的调度.优先级和亲缘性 抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间.本章将要介绍Microsoft Windows 98和Windows 2000使用的一些算 ...

  8. 【pytest系列】- mark标记功能详细介绍

    如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html mark标记 ​ 在实际工作中, ...

  9. C++ Log日志系统

    闲得无聊,瞎写的一个东西. 好多地方能够优化甚至可能重写,也没写,就记下了个思路在这里. 主要熟练一下C++17的内容. version = 0.1 lc_log .h 1 #pragma once ...

  10. php 实现图片下载,文件下载

    1.控制器public function downPic(){ $filename = input('file','','string'); //文件所在路径 // 检查文件是否存在 if (! fi ...