首页 技术 正文
技术 2022年11月19日
0 收藏 585 点赞 4,369 浏览 2116 个字

一、前言

  软件面向不同国籍用户时,需要显示不同语言的操作界面,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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898