当前位置: 首页 > news >正文

国际化语言项目

基本概念

1、使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现,所以它可以用 于表示所有需要向用户呈现的文本。当然,对于仅程序员可见的文本并不需要都变为QString对象,可利 用Qt提供的QCString或原始的“char *”。

2、使用tr()函数获取所有需要翻译的文本。在Qt的翻译机制下,QObject::tr()函数可以帮助程序员取得 翻译之后的文本。对于从QObject继承而来的类,QObject::tr()函数最终由QMetaObject::tr()实现。在某 些时候,如果无法使用QObject::tr()函数,则可以直接调用QCoreApplication::translate()取得翻译之后 的字符串。

3、使用QString::arg()方法组织动态文本。有些时候,一段文本需要由一些静态文本和动态变量组合起 来,如常见的情况“printf(“The value of i is: %d”, i)”。对于这种动态文本的翻译,由于语言习惯的问题, 如果简单地采用这种连接字符串的方法,则可能会带来一些问题,如下面的字符串用于表示任务的完成 情况:

QString m = tr("Mission status: " )+ x + tr("of ") + y +tr("are completed");

其中,x和y是动态的变量,三个字符串被x和y分隔开,它们能够被很好地编译,因为“x of y”是英语中分 数的表示方法,如4 of 5是分数4/5,在不同的语言中,分子和分母的位置可能是颠倒的,在这种情况 下,数字4和5的位置在翻译时无法被正确地放置。由此可见,孤立地翻译被分隔开的字符串是不行的, 改进的办法是使用QString:: arg()方法:

QString m = tr("Mission status: %1 of %2 are completed").arg(x).arg(y);

4、利用QTranslator::load()和QCoreApplication::installTranslator()函数读取对应的翻译之后的资源文 件。翻译工作者将提供包含翻译之后的字符串的资源文件“*.qm”,程序员还需要做的是定义 QTranslator对象,并使用load()函数读取相应的“.qm”文件,利用QCoreApplication:: installTranslator()函数安装QTranslator对象。

多国语言国际化的实现

多国语言国际化的实现,主要是利用Qt提供的工具lupdate、linguist和lrelease(它们都可以在Qt安 装目录的“bin”文件夹下找到)协助翻译工作并生成最后需要的“.qm”文件,它包括以下内容。

1、利用lupdate工具从源代码中扫描并提取需要翻译的字符串,生成“.ts”文件。类似编译时用到的 qmake,运行lupdate时也需要指定一个“.pro”的文件,可以单独创建这个“.pro”文件,也可以利用编译 时用到的“.pro”文件,只需定义好变量TRANSLATIONS即可。

2、利用linguist工具来协助完成翻译工作,即打开前面用lupdate生成的“.ts”文件,对其中的字符串逐条 进行翻译并保存。由于“.ts”文件采用了XML格式,所以也可以使用其他编辑器来打开“.ts”文件并翻译。

3、利用lrelease工具处理翻译好的“.ts”文件,生成格式更为紧凑的“.qm”文件。这便是翻译工作者最终需 要提供的资源文件,它所占的空间比“.ts”文件小,但基本不具有可读性,只有QTranslator能够正确地识 别它。

修改工程文件.pro,添加一下内容:

TRANSLATIONS = lang_en.ts\

leng_zh.ts\

lang_la.ts

其中,.ts文件是将要生成的翻译文件,有多少种语言就写多少个文件,文件不需要手动创建。

本例中包含三种语言,那么lang_en.ts就是英文的翻译文件,lang_zh.ts是中文的翻译文件,lang_la.ts是 意大利语的翻译文件。

c.编译工程。记住,一定要先编译,如果没有编译就进行下面的步骤,则生成的“.ts”文件只是一个仅有标 题栏的框架。

d.编译完成后,打开Qt 5.8 64-bit for Desktop (MSVC 2013),打开命令行窗口,执行命令:lupdate 工程文件,如下图:
在这里插入图片描述

执行完后在工程目录下会生成.ts文件,如下图:
在这里插入图片描述

e.执行命令:lrelease 工程文件,如下图:
在这里插入图片描述

f.最终生成的.qm文件即我们代码中需要加载的翻译文件。

加载翻译文件的代码如下:

/* 修改翻译文件函数 code参数为语言类型*/
void MainWindow::changeTr(const QString &code)
{
//定义QTranslator 指针
static QTranslator *translator;
if(translator != NULL)
{
//删除旧的QTranslator 对象
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
//创建新的QTranslator 对象
translator = new QTranslator;
//设置翻译文件路径
QString qmFileName = QString(":/lang_%1.qm").arg(code);
//加载翻译文件
if(translator->load(qmFileName))
{
//应用翻译对象
qApp->installTranslator(translator);
}
//更新UI
ui->retranslateUi(this);
retranslateUi();
}

相关文章:

国际化语言项目

基本概念 1、使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现,所以它可以用 于表示所有需要向用户呈现的文本。当然,对于仅程序员可见的文本并不需要都变为QString对象,可利 用Qt提供的QCString或原始的“char …...

交直流系统潮流计算及相互关联特性分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

如何快速掌握Facebook运营+独立站运营基础?

在当今数字化时代,Facebook运营和独立站运营成为许多企业和个人创业者的关键战略。通过巧妙地结合这两个渠道,你可以有效地推广品牌、吸引目标受众并实现商业目标。本文将为你介绍如何快速掌握Facebook运营和独立站运营的基础知识,为你的业务…...

Java之旅(十三)

Java 类 Java类是Java编程语言中的基本构建块,是一种用户定义的数据类型,它可以被看作是一个模板或蓝图。它是对象的模板,,描述了一组具有相同特征(属性)和行为(方法)的对象。Java …...

Calibre 6.18.1 正式发布,功能强大的开源电子书工具

导读Calibre 开源项目是 Calibre 官方出的电子书管理工具。它可以查看,转换,编辑和分类所有主流格式的电子书。Calibre 是个跨平台软件,可以在 Linux、Windows 和 macOS 上运行。 Calibre 6.18.1 正式发布,此次更新内容如下&#…...

如何在C语言中定义和使用函数?

如何在C语言中定义和使用函数? 引言: 函数是C语言中的一个重要概念,它使程序能够模块化、重用和组织代码。通过将一段逻辑相关的代码封装到函数中,我们可以提高代码的可读性、可维护性和重用性。本文将详细介绍在C语言中定义和使…...

【C++】4.多媒体库:SFML库入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍SFML库使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#…...

【算法题】1717. 删除子字符串的最大得分

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面…...

Codeforces Round 877 (Div. 2) ABCD

A. Blackboard List solve: 1、生成的数一定不是负数&#xff0c;所以有负数的情况下&#xff0c;负数一定是原来的数。 2、没有负数的情况下&#xff0c;最大的数一定是原来的数&#xff0c;因为操作只能使数变小。 void solve() {cin>>n;for(int i0;i<n;i)cin>&…...

easyExcel导入失败提示用户第几行有误并回滚数据

思路&#xff1a; 在controller定义一个map&#xff0c;将map传入excel监听器&#xff0c;在监听器中处理excel的数据&#xff0c;读取到某一行出现错误就将错误提示信息存入map并抛出一个异常给service。在service方法上开启事务&#xff0c;并将异常出实现数据回滚&#xff0…...

问道价值互联网,区块链的下一个十年 | 2023 开放原子全球开源峰会区块链分论坛即将启幕

随着全球 Web3 浪潮经由数字藏品、元宇宙的日渐普及而实现落地&#xff0c;区块链在“信息互联网”转向“价值互联网”中的重要作用正得到进一步认可。在数字经济蓬勃发展、数据成为重要生产要素的时代&#xff0c;区块链已不仅仅是一项技术、一种工具&#xff0c;更是一种思维…...

解读 Nginx 配置

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; 文章目录 1、Nginx 配…...

知识变现海哥:课程定价容易出现的三大误区

哈喽&#xff0c;大家好&#xff0c;我是海哥&#xff0c;知识付费变现创业教练&#xff0c;教育公司培训总监&#xff0c;从事知识付费变现咨询10年&#xff0c;已助力3000人实现知识付费变现。 很多做知识付费的老师都有定价方面的困惑。怕定太高&#xff0c;卖不出去&#…...

Android开发 LogDog (日志狗)V2.0.0

目录 一、简介 二、使用推荐 1、初始化LogDog 2、运行中如何更改初始化时的配置&#xff1f; 三、更改 四、新功能 1、Log过滤 2、自定义打印 3、提供占位符式打印 一、简介 LogDog V1.0 版本https://blog.csdn.net/Ym_quiet/article/details/130453232?spm1001.2014…...

JavaScript break

在JavaScript中&#xff0c;break语句用于提前退出或终止循环或switch语句。它允许您立即停止循环或switch的执行&#xff0c;并继续执行后面的代码。 以下是在循环中使用break的示例&#xff1a; javascript for (var i 0; i < 10; i) { if (i 5) { break; // 当…...

linux服务器使用curl命令处理常用es查询

目录 场景&#xff1a; 结果格式化显示&#xff1a; 验证服务启动&#xff1a; 单个参数变量查询&#xff1a; 分页查询&#xff1a; 日期范围查询: must中单个参数条件查询 must中多个参数条件查询 使用filter过滤查询 使用sort过滤查询 总结&#xff1a; 场景&#xf…...

Office Visio 2013安装

哈喽&#xff0c;大家好。今天一起学习的是Visio 2013的安装&#xff0c;这是一个绘制流程图的软件&#xff0c;用有效的绘图表达信息&#xff0c;比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂…...

C++ 私有析构函数的作用

如果一个类的析构函数声明为私有&#xff08;private&#xff09;&#xff0c;其他对象或函数将无法直接调用析构函数。这意味着如果你尝试使用delete操作符删除该类的对象&#xff0c;将会导致编译错误&#xff0c;因为析构函数是不可访问的。 将析构函数声明为私有是一种防止…...

【C++】deque的用法

目录 一、容器适配器二、deque的介绍三、deque的使用及缺陷1、deque的构造函数2、deque的元素访问接口3、deque的 iterator的使用4、deque的增删查改4、deque的缺陷5、为什么选择deque作为stack和queue的底层默认容器 一、容器适配器 在了解deque前&#xff0c;我们先讲一讲什…...

Live800:智能客服有哪些未来发展趋势?

智能客服&#xff0c;也称智能问答系统&#xff0c;是一种利用机器学习、自然语言处理等技术实现自主询问、自主应答、自主维护的自动化系统。它们可以通过文字形式&#xff0c;为用户提供个性化、一对一的服务&#xff0c;避免了人工客服的人力成本和等待时间。 未来&#xff…...

【一】Java SE 基础

文章目录 一、初始Java1.1 什么是Java1.2 Java的特点1.3 第一个Java程序 二、数据类型与变量2.1 基本数据类型2.2 基本数据类型对应的包装类2.3 变量2.4 类型转换2.5 字符串类型及其与数字之间的转换 三、运算符3.1 算术运算符3.2 赋值运算符3.3 关系运算符3.4 逻辑运算符3.5 位…...

Linux防火墙学习笔记2

iptables是什么&#xff1f; 1&#xff09;iptables 不是防火墙&#xff0c;是防火墙用户代理。 2&#xff09;用于把用户的安全设置添加到“安全框架”中。 3&#xff09;“安全框架”是防火墙。 4&#xff09;安全框架的名称是netfilter。 5&#xff09;netfilter位于内…...

Linux下MongDB定时备份方案

1. 安装crontabs 首先安装crontabs yum install crontabs 2. 创建备份目录 [rootlocalhost data]# mkdir -p /data/backup/mongo/mongodb_bak_tmp [rootlocalhost data]# mkdir -p /data/backup/mongo/mongodb_bak_path 3. 创建MongoDB备份shell脚本 有密码&#xff1a; …...

长尾词挖掘,长尾词的优化方法有哪些

我们都知道&#xff0c;长尾词能给我们带来较高的流量和转化率&#xff0c;且优化难度低&#xff0c;成本低。今天就来分享长尾词的优化方法。 首先需要挖掘长尾词&#xff0c;挖掘长尾词的方法以下3种比较实用&#xff1a; 1、使用长尾词挖掘工具 可以通过第三方工…...

JUC基础-0601

6 多线程锁 6.1 锁的八个问题演示 class Phone {public static synchronized void sendSMS() throws Exception {//停留4秒TimeUnit.SECONDS.sleep(4);System.out.println("------sendSMS");}public synchronized void sendEmail() throws Exception {System.out.p…...

bash特性

bash bash是一个命令处理器&#xff0c;运行在文本窗口zh哦那个&#xff0c;执行用户输入的命令。 1、bash特性–历史命令 保留用户的历史执行的命令&#xff0c;可以使用history查看之前执行过的命令 #通过$HISTORY查看保存的命令条数 echo $HISTORY #存放用户执行的历史…...

[Flink] Flink On Yarn(yarn-session.sh)启动错误

在Flink上启动 yarn-session.sh时出现 The number of requested virtual cores for application master 1 exceeds the maximum number of virtual cores 0 available in the Yarn Cluster.错误。 版本说明&#xff1a; Hadoop&#xff1a; 3.3.4 Flink&#xff1a;1.17.1 问题…...

玩转css逐帧动画,努力成为更优质的Ikun~

&#x1f389; 一、前言 css3的animation想必大家都知道吧&#xff0c;那 steps 逐帧动画你知道吗&#xff1f;对于我来说&#xff0c;实际工作及练习中也很少用到这种跳跃式变化的动画&#xff0c;而它start和end的解释又比较“不说人话”&#xff0c;以前用到steps动画的时候…...

Linux Capabilities

Linux Capabilities是一种细粒度的权限管理机制,用于将root用户的特权划分为具体的功能集。它允许将部分root特权授予非root进程。 可以在shell中运行: man capabilities将显示capability man page,其中包含有关Linux功能的详细信息。 文章目录 什么是CapabilitiesLinux Cap …...

【自制C++深度学习框架】前言

KuiperCourse 介绍 此GitHub项目是一个初学者的深度学习框架&#xff0c;使用C编写&#xff0c;旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能&#xff1a; 计算图&#xff1a;使用计算图来描述深度学习模型的计算过程&#xff0c;利用计…...

网站开发常用工具/百度怎么创建自己的网站

SQLServer 中的存储过程中判断临时表是否存在&#xff0c;存在则删除临时表 1 2 3 4 5 6 7 8 9 10 IF OBJECT_ID(TEMPDB..#BCROSSREFERENCE ) IS NOT NULL DROP TABLE #BCROSSREFERENCE IF OBJECT_ID(TEMPDB..#SCVTMP_BCUSTOMER) IS NOT NULL DROP TABLE #SCVTMP_BCUSTOMER IF…...

网站在建设中模板下载/搜索引擎推广实训

人脸识别学生考勤系统的登录界面设计如上图所示&#xff0c;关键部分为圈红色的位置。 用户名&#xff0c;密码—登录 登录成功目前没有写跳转页面&#xff0c;只是在终端输出“success”&#xff0c;登录失败会在忘记密码按钮的下方显示“用户名密码输入错误”&#xff0c;然后…...

企业网站建站 广州 视频/爱站网挖掘关键词

PDF签名仓库介绍介绍使用签名其他仓库介绍 仓库地址 该工具从签名照片中提取文字&#xff0c;并签名到PDF文档的指定位置。除此之外&#xff0c;该仓库还支持其他PDF操作&#xff0c;如合并、OCR、水印功能等。 介绍 该工具接受PDF文件和签名图片作为输入&#xff0c;并输出…...

哪些网站是vue做的/aso关键词覆盖优化

封面图 Redis 现在成了缓存“专业户”&#xff0c;很多系统的缓存都在使用 Redis&#xff0c;Redis 中缓存雪崩、击穿、穿透也成了老生常谈的问题&#xff0c;今天带大家梳理一下&#xff0c;出现这些问题的原因和解决方案。 缓存雪崩 出现的原因 缓存雪崩出现的原因是当某一…...

怎么样做短视频/日喀则网站seo

精确是指重复测量的结果非常聚合&#xff0c;离散度很小。 准确则是指测量值非常接近实际值。精确的测量未必准确&#xff0c;准确的测量 也未必精确。项目管理团队必须确定适当的准确与精确度。 转载于:https://www.cnblogs.com/peter9/archive/2010/06/10/2362185.html...

衡水做网站服务商/关键词app下载

Fiddler是位于客户端和服务器端HTTP代理&#xff0c;可以监控所有的http和https。浏览器访问网站都是基于B/S架构的&#xff0c;这个时候我们连接上fiddler&#xff0c;所有服务器发送到浏览器的资源都会被我们截获。fiddler的方法如下。 如何将请求报文保存到本地&#xff1f;…...