国际化语言项目

news2024/12/23 13:57:40

基本概念

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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VisualGLM训练缺失latest文件问题解决

清华已经公布了VisualGLM 模型,图像预测也取得了比较好的效果,但是我在调试微调的过程遇到不少问题,这里记录一下缺失latest问题解决(ValueError: could not find the metadata file ../latest, please) 修正后的代码可…

PyEMD算法解析

算法背景 经验模态分解(Empirical Mode Decomposition,缩写EMD)是由黄锷(N. E. Huang)在美国国家宇航局与其他人于1998年创造性地提出的一种新型自适应信号时频处理方法,特别适用于非线性非平稳信号的分析处…

易基因|一种全新的检测DNA羟甲基化的技术:ACE-Seq

大家好,这里是专注表观组学十余年,领跑做组学科研服务的易基因。今天给大家介绍一种全新的检测DNA羟甲基化的技术:APOBEC-coupled epigenetic sequencing,简称【ACE-seq】。 前言 DNA序列中胞嘧啶(C)5’ 碳…

sed命令对文件内的指定字符串进行替换

目录 一、创建一个txt文件 二、替换每行第一个huawei为apple,第三个“/”后,不加参数就是只替换第一个 三、替换每行所有的xiaomi为iphone,第三个“/”后,加参数g就是替换所有 四、替换每行第二个redmi为potato,第…

ubutun22.04使用deb包安装mysql8.0.33

下载:https://dev.mysql.com/downloads/mysql/ 下载完毕,在ubuntu服务器解包。 安装使用dpkg命令,依次执行如下: sudo dpkg -i mysql-common_8.0.33-1ubuntu22.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.33-1ubuntu22.04_amd64.deb sudo dpk…

云原生|秒懂云原生容灾备份实践

作者:刘健 后端开发工程师 目录 一、需备份的数据 二、在云航项目中使用 三、备份任务说明 一、需备份的数据 kubernetes在运行中,通常会产生两类数据: kubernetes集群资源对象数据。 容器运行时产生的数据。 针对cloudUp项目而言&am…

淘宝商品信息存入数据库

python 爬虫程序: #京东.pyimport json import pprint import re import requests # name_turnover {} url "https://s.taobao.com/search?data-keys&data-value88&ajaxtrue&_ksTS1686118766568_2290&callbackjsonp2291&ieutf8&in…

用AI写出的高考作文!

今天是6月7日,又到了每一年高考的日子。小灰自己参加高考是在2004年,距离现在已经将近20年,现在回想起来,真的是恍如隔世。 今天高考语文的作文题是什么呢? 全国甲卷的题目是:人技术时间 人们因技术发展得以…

centos7 部署 Redis

从源安装Redis 一、安装Redis1.1 下载源文件1.2 编译源文件1.2.1 解压文件1.2.2 编译Redis 1.2.3 安装Redis1.2.4 启动 Redis 二、Redis设置2.1 缓存设置2.2 redis 环境优化2.3 安全设置 一、安装Redis 1.1 下载源文件 使用下列命令获取最新版的稳定Redis wget https://down…

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

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

【Protobuf速成指南】enum类型的使用

文章目录 2.1枚举类型一、如何定义枚举类型?二、语法规范三、重定义问题四、enum类型相关函数五、Contact 2.1 改写六、总结 2.1枚举类型 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的2.1版本&#xff0…

【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w …

操作系统1-操作系统的基本特征和主要功能

目录 1、操作系统的目标和作用 (1)操作系统的目标 (2)操作系统的作用 2、操作系统的发展过程 (1)未配置操作系统的计算机系统 (2)单道批处理系统(Simple Batch Processing Sys…

企企通受邀出席多场高质量数智化活动,推进行业数字化升级转型

当前,数字经济已成为引领全球经济社会变革、推动我国经济高质量发展的重要引擎。Chat GPT的横空出世,宣告虚实无缝结合的跨场景体验时代即将到来。在云计算、大数据、人工智能、物联网等技术助推下,经过大量实践证明,数字化、智能…

工业RFID读写器选择指南

工业RFID读写器在工业领域上可提升自动化、现代化工业生产的效率,那么企业在选择工业读写器的时候,需要注重哪些方面,如何选择呢?以下是ANDEWELL给大家准备的工业RFID读写器选择指南! 1、根据应用场景选择 根据不同的应用场景,要…

【Docker安装部署Neo4j保姆级教程】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

大数据架构师岗位的主要职责概述(合集)

大数据架构师岗位的主要职责概述1 职责: 1.参与公司数据平台系统规划和架构工作,主导系统的架构设计和项目实施,确保项目质量和关键性能指标达成; 2.统筹和推进制造工厂内部数据系统的构建,搭建不同来源数据之间的逻辑关系&#x…

10.无监督学习

10.1 无监督学习的定义 监督学习:我们有一些列标签,然后用假设函数去拟合它 无监督学习:给出的数据不带任何标签。对于无监督学习来说,需要做的就是将数据输入到算法中,让算法找到一些隐含在数据中的结构,通…

IDEA代码提示设置

1. 打开File -> setting -> Editor -> Live Templates 2. 点击中间框框中的右侧""号,选择 Template Group, 命名为MyGroup(随便起名字) 3. 选中 MyGroup 点击右侧""号,选择Live Template Abbreviation 快捷提示 Description 描述 Template tex…

探究核心技术最佳实践,云原生OLAP论坛火热开启!

2023/06/11,09:00-12:30,在DataFunSummit 2023:OLAP引擎架构峰会上,由阿里云资深技术专家,实时数仓 Hologres 研发负责人姜伟华老师出品的云原生OLAP论坛讲邀请来自阿里云、亚马逊云科技、三七互娱、聚水潭、诺亚财富的…