一文全面了解 wxWidgets 程序国际化(i18n)处理

尽管应用程序的国际化(简称i18n)远不止是将文本消息翻译成另一种语言的消息——日期、时间和货币格式也需要更改,一些语言是从左到右书写,而另一些是从右到左书写,字符编码可能不同,以及许多其他可能需要更改的事项——但这都是必要的第一步。

wxWidgets通过其wxLocale类为消息翻译提供了便利,并且wxWidgets本身已被完全翻译成多种语言。请访问wxWidgets主页以获取最新的翻译——如果您将其翻译成尚未完成的语言之一,您的翻译将非常受欢迎,并会被纳入未来版本的库中!

wxWidgets对i18n的处理方法紧密遵循GNU gettext包。wxWidgets使用消息目录,这些目录与gettext目录在二进制上兼容,这允许使用此包中的所有程序来处理它们,以及使用以这种格式处理消息目录的任何工具,如Poedit。

因此,在程序开发期间,您需要使用gettext包来处理翻译。但是,在运行时不需要额外的库,因此您只需要分发消息目录,不需要其他任何东西。

有两种类型的消息目录:源目录是扩展名为.po的文本文件,而二进制目录则是使用msgfmt程序(gettext包的一部分)从源文件创建的,其扩展名为.mo。在程序执行期间,只需要二进制文件。

翻译您的应用程序涉及几个步骤:

•使用wxGetTranslation或等效的_()宏来翻译程序文本中的字符串。

•从程序中提取待翻译的字符串:这一步利用了上一步的工作成果,因为用于字符串提取的xgettext程序可以识别标准的_()以及(使用其-k选项)我们的wxGetTranslation,并提取对这些函数的调用中的所有字符串。另外,您还可以使用-a选项来提取所有字符串,但通常会导致找到许多根本不需要翻译的字符串。这将创建一个文本消息目录——一个.po文件。

•将上一步提取的字符串翻译成其他语言。这涉及编辑.po文件。

•将.po文件编译成.mo文件,供程序使用。

•将.mo文件与您的应用程序一起安装在目标系统的适当位置(请参阅安装翻译目录)。

•在您的程序中设置适当的区域设置,以使用给定语言的字符串:请参阅wxLocale。

注意:在macOS上,您还需要在应用程序的Info.plist文件的CFBundleLocalizations键下列出所有支持的语言,以便应用程序支持相应的区域设置。

安装翻译目录

编译后的目录.mo文件必须与应用程序一起包含。默认情况下,wxFileTranslationsLoader用于从与应用程序一起安装的文件中加载它们(尽管您也可以使用wxResourceTranslationsLoader或一些自定义加载器)。

这些文件应位于资源目录中(由wxStandardPaths::GetLocalizedResourcesDir(wxStandardPaths::ResourceCat_Messages)返回)。如果消息目录未安装在此默认位置,您可以使用wxFileTranslationsLoader::AddCatalogLookupPathPrefix()明确指定,以便wxWidgets仍然能够找到它们,但建议在可能的情况下使用默认位置。

根据平台的不同,默认位置也不同。在Windows上,它与可执行文件相邻。在Unix上,预期翻译位于“$prefix/share/locale”。在macOS上,使用应用程序捆绑包的Resources子目录。

在所有情况下,都会在以ISO 639语言代码命名的子目录中搜索翻译。.mo文件应直接位于该目录中或位于LC_MESSAGES子目录中。在macOS上,针对每种语言的Resources子目录使用“.lproj”扩展名。

以下是一个应用程序在Unix上安装文件的典型方式:

/usr/bin/myapp
/usr/share/locale/de/LC_MESSAGES/myapp.mo
/usr/share/locale/fr/LC_MESSAGES/myapp.mo

在macOS上:

MyApp.app/Contents/MacOS/MyApp
MyApp.app/Contents/Resources/de.lproj/myapp.mo
MyApp.app/Contents/Resources/fr.lproj/myapp.mo

在Windows上:

C:\Program Files\MyApp\myapp.exe
C:\Program Files\MyApp\de\myapp.mo
C:\Program Files\MyApp\fr\myapp.mo

当然,也可以在所有地方使用Unix布局。

翻译菜单快捷键

如果您在菜单标签中翻译了快捷键修饰符名称(Ctrl、Alt和Shift),您可能会发现快捷键不再起作用。在您的消息目录中,您需要提供这些修饰符从小写名称(ctrl、alt、shift)的单独翻译,以便wxWidgets快捷键代码即使在翻译后也能识别它们。目前,wxWidgets没有为所有这些提供翻译。wxWidgets尚不处理翻译的特殊键名,例如Backspace、End、Insert等。

另请参阅:

• gettext手册:GNU gettext utilities

•编写非英语应用程序 - 主要关注处理与字符集相关的问题。

•国际化示例 - 展示这一切在实践中是如何运作的。

// END

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文带你弄懂JVM与JAVA体系结构

文章目录 1.JVM 与 Java 体系结构1.1. 前言1.2. 一些参考书目1.3. Java 及 JVM 简介1.4. Java 发展的重大事件1.5. 虚拟机与 Java 虚拟机1.6. JVM 的整体结构1.7. Java 代码执行流程1.8. JVM 的架构模型1.9. JVM 的生命周期 1.JVM 与 Java 体系结构 1.1. 前言 作为 Java 工程…

NLP 笔记:Latent Dirichlet Allocation (介绍篇)

1 问题介绍 假设我们有一堆新闻,每个新闻都有≥1个主题 我们现在只知道新闻的内容,我们希望一个算法,帮我们把这些新闻分类成主题人类可以根据每个每个文章里面的单词判断主题,那计算机怎么做呢? ——>LDA(Latent D…

大小端是什么?怎么判断?(百度笔试题)

目录 一、前言二、什么是大小端&#xff1f;三、为什么有大小端之分呢&#xff1f;四、判断机器是大端还是小端--百度笔试题 一、前言 先看一段代码&#xff1a; #include<stdio.h> int main() {int n 0x11223344;return 0; }二、什么是大小端&#xff1f; 其实超过⼀…

【JavaSE】抽象类和接口

目录 前言 1. 抽象类 1.1 认识抽象类 1.2 抽象类的特征 1.3 抽象类的作用 2. 接口 2.1 接口的概念 2.2 接口的语法 2.3 接口的使用 2.4 接口的特性 2.5 接口的好处 2.6 接口之间的继承 结语 前言 今天我们来讲Java中的抽象类和接口&#xff0c;它们在面向对象中发…

前端应用开发实验:条件渲染和循环渲染

目录 实验目的相关知识点实验内容图片的隐藏和显示代码实现效果 电影票房排序代码实现效果 代办事项记录代码实现效果 实验目的 (1)熟练掌握v-on 指令的用法&#xff0c;学会使用v-on 指令监听DOM元素的事件&#xff0c;并通过该事件触发调用事件处理程序。 (2)掌握v-on指令修…

大学理科用什么软件搜题?推荐5个搜题软件和学习工具 #其他#知识分享#经验分享

大学生的学习生活离不开一些实用的工具&#xff0c;它们能够帮助我们更高效地学习和管理时间。 1.千鸟搜题 这是一个公众号 这是一个老公众号了&#xff0c;我身边的很多朋友都在用&#xff0c;支持超新星、学习强国、知到、智慧树和各类专业网课题目。 下方附上一些测试的试…

Axure案例分享—折叠面板(附下载地址)

今天和大家分享的Axure案例是折叠面板 折叠面板是移动端APP中常见的组件之一&#xff0c;有时候也称之为手风琴。咱们先看下Axure画出的折叠面板原型效果&#xff0c;然后再对该组件进行详细讲解。 一、功能介绍 折叠或展开多个面板内容&#xff0c;默认为展开一项内容&…

【JS】闭包的漏洞

下面这段代码可以实现&#xff1a;通过立即执行函数o返回对象中的get方法&#xff0c;通过参数key得到fn函数内部对象obj中的值。 var fn function () {var obj {a: 1,b: 2}return {get: function (key) {return obj[key]}} }() console.log(fn.get(b)); // 2这是一个典型的…

小红书扫码登录分析与python实现

文章目录 1. 写在前面2. 接口分析3. 代码实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

基于ssm电子竞技管理平台的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电子竞技管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳。设置自增主键id,oracle创建自增id序列和触发器

1. MySQL 支持设置自增id的字段类型&#xff1a;int、bigint、double等数值类型&#xff0c;一般用int、bigint支持设置自动更新时间的字段类型&#xff1a;datetime、timestamp下面sql中的now()函数可以用current_timestamp()替代 1.1. 不指定秒精度 drop table if exists …

135. 分发糖果(力扣LeetCode)

文章目录 135. 分发糖果题目描述贪心算法代码如下 总结 135. 分发糖果 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩…

Leetcode - 周赛389

目录 一&#xff0c;3083. 字符串及其反转中是否存在同一子字符串 二&#xff0c;3084. 统计以给定字符开头和结尾的子字符串总数 三&#xff0c;3085. 成为 K 特殊字符串需要删除的最少字符数 四&#xff0c;3086. 拾起 K 个 1 需要的最少行动次数 一&#xff0c;3083. 字符…

Java的三大特性之一——继承

前言 http://t.csdnimg.cn/uibg3 在上一篇中我们已经讲解过封装&#xff0c;这里就主要讲解继承与多态 继承 1.为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤&#xff08;yum安装与手动安装&#xff09; 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…

2、Java虚拟机之类的生命周期-连接(验证、准备、解析)

一、类的生命周期 连接阶段之验证 连接阶段的第一个环节是验证&#xff0c;验证的主要目的是检测Java字节码文件是否遵守了<Java虚拟机规范>中的约束。这个阶段一般是不需要程序员进行处理。 主要包含如下四个部分,具体详见<<Java虚拟机规范>>: 1、文件格…

mysql+keepalived实现对mysql的高可用

mysql数据库出现问题 133 解决方案: 在133mysql终端 实行如下命令 mysqlkeepalived实现对mysql的高可用 132 keepalived配置如下 133 keepalived配置如下 132重启keepalived服务 132关闭mysqld服务&#xff0c;vip不见了 133收到vip 132重启mysqld服务和keepalived服务,vip…

C语言——程序拷贝文件

问题如下&#xff1a; 写一个程序拷贝文件&#xff1a; 使用所学文件操作&#xff0c;在当前目录下放一个文件data.txt&#xff0c;写一个程序&#xff0c;将data.txt文件拷贝一份&#xff0c;生成data_copy.txt文件。 基本思路&#xff1a; 打开文件data.txt&#xff0c;读…

PTA题解 --- 剪切粘贴(C语言)

今天是PTA题库解法讲解的第五天&#xff0c;今天我们要讲解剪切粘贴&#xff0c;题目如下&#xff1a; 解题思路&#xff1a; 为了解决这个问题&#xff0c;你可以按照以下步骤进行&#xff1a; 读取输入字符串&#xff1a;首先读取原始字符串。 进行操作&#xff1a;根据输入…

【网络】数据中心网络技术概览

数据中心网络技术概览 一、数据中心网络架构 Crossbar架构&#xff1a;源自早期电话交换网络&#xff0c;由多个输入/输出端口和开关矩阵组成&#xff0c;实现设备间的任意连接&#xff0c;灵活且高效。 **Crossbar架构&#xff08;Crossbar Architecture&#xff09;是一种计…