使用GTK+进行国际化

来源:互联网 发布:闪电手机抢购软件 编辑:程序博客网 时间:2024/05/17 06:55

使用GTK+进行国际化(1)

2008-12-2 13:41|查看数: 2967

世界正在不断地发展。如今,您不能够忽视全球市场的存在,并且计算机也不是那些花费大量时间和精力去研究其中复杂情况的少数人的昂贵的玩具。因此,创建适合于国际用户的即时可用的应用程序的需求也在日益地增长。

通常,图形用户界面 (GUI),特别是GTK+应用程序也不例外。实际上,经过巨大改进的国际化(以下称为 i18n,表示单词 internationalization i 和 n 之间的 18 个字母)支持是从 GTK+ V1.x 到 V2.x 的重大更新中的一个非常重要的部分。

本文说明了如何使用这些功能来创建可以理解和尊重不同文化和语言的用户的需求的 GUI。您将了解可以创建哪些应用程序,并预览如何实现它们,同时本文还提供了一些使得您能够踏上正确的开发之路的建议。

1.国际化需求

很明显,GTK+ 的创建者从一开始就意识到了国际化的需求,并且将其深深地嵌入到 GTK+ 库中的各个方面。为了达到这个目标,其中存在许多的功能,您可以使用它们来创建在面临多种语言用户需求时正常运行的应用程序。这些功能中包括:

在整个库内部使用了 Unicode:通过使用 Unicode,可以创建真正的多语言 应用程序,而不仅仅是用多种语言编写的应用程序。例如,以阿拉伯语运行一个应用程序,并向日本学者显示俄语注释,使用 Unicode 则完全可以实现。要实现这种情况,所有传递给 GTK+ 例程和来自 GTK+ 例程的字符串都应该使用 UTF-8 编码方式,除非显式地声明使用其他的编码方式。(有关 UTF-8 更多的内容,请参见侧栏。)

使用 Pango 库进行所有文本的表示:Pango 设计用于将 Unicode 文本块转换为适当的屏幕表示形式,并处理一些细节问题,如字体选择和替换、文本度量、可视化字形表示、组合和聚集、类似连字之类的可视形式的替换和其他高级排印特性,以及 Unicode Bidi(双向文本)算法的实现。(Bidi 允许您正确地表示从右到左 (RTL) 的文本和混合语言,如阿拉伯语。)Pango 有效地替换了旧的文本表示方式,并且应该在所有的表示需求中使用它。

通过 GNU gettext 库实现对用户可见消息的使用和本地化 (l10n) 的缺省支持:通过使用 gettext 库,GTK+ 可以适合用户运行所处的任何区域,并以该用户的语言显示 GUI(如何合适,可以使用相应的数据文件)。GTK+ 还包括了(通过 GLib)对在自定义应用程序中使用 gettext 的缺省支持,不过您可以随意使用其他的可选解决方案。

不固定的定位:尽管和国际化没有什么直接关系,但是仍然非常重要的是,GTK+ 没有使用固定的定位,这是以多种可能的语言正确地显示用户界面 (UI) 的先决条件。如果您曾经看到过一个应用程序的本地化版本,它所显示的消息在原始英语文本结束处进行了截断,那是因为程序员进行了这样的布局,而 GUI 库无法对其进行调整,但您可以放心,这在 GTK+ 中是决不会发生的。它总是根据需要分配空间,而不是事先在开发过程中进行指定。

2.UTF-8

UTF-8 是 Unicode 的一种可行的编码方式(即将字符映射为字节序列的方式)它本身仅仅只是为抽象字符实体分配相应的数值。可以使用 Unicode 的许多不同的编码方式,包括 UTF-8、UTF-16(及其相关的、过时的 UCS-2)和 UTF-32(也称为 UCS-4)。

与其他编码方式相比,UTF-8 具有一些优点:它兼容于 ASCII,所以旧式应用程序一般都可以处理 UTF-8 文本(尽管它们无法理解 127 以上的值)。另外,UTF-8 具有很高的效率(特别是对于使用西方语言的文本)、针对传输错误具有很高的健壮性(在出现损坏时,最多丢失一个额外的字符),并且它已得到了广泛的认可,越来越多的应用程序可以理解和处理它。

由于上述这些原因,UTF-8 通常是正确的选择。当然,您也有可能希望避免某些处理开销,或者甘愿牺牲内存,那么在这样的情况下,您可以在内部使用 UCS-4。但是对于所有的外部通信,您需要使用 UTF-8。

然而关于 UTF-8,有一点您必须时刻牢记:UTF-8 是一种多字节 编码系统,这意味着在完成对下一个字符的解码工作之前,您不可能知道它将占用多少个字节。所以,您永远无法 使用指针运算来遍历 UTF 字符。相反,始终 使用专用的、可以识别 UTF 的函数来完成这项工作。有关更详细的信息,请查看 GLib 应用程序编程接口 (API) 参考手册(请参见参考资料部分)。

3.为国际化准备您的应用程序

正确的国际化需要两个互补的资产。首先是正确的设计思想,摒除特定于任何语言的假定,并且能够意识到当您的应用程序迁移到另一种语言时可能或将会发生的变化。其次是正确的工具集,一种能够支持摒除假定 编程风格的工具集。

下面,您将看到关于可能遇到的问题和可以应用的解决方案的简要概述。这个概述并不是全面的或权威性的:正确的国际化是一个广泛而深入的主题。但是对于本文中没有进行深入介绍的所有细节内容,我都提供了相应的参考资料的链接,以便为您提供所需的资源。

4.请确保您需要进行本地化

根据过去的经验所知的一些对国际化的错误处理,如为不同的语言配送不同的、不兼容二进制代码或使用 16 进制的编辑器胡乱切割数据文件,这些都不是正确的解决方案,并且在这里我也不会对它们进行讨论。唯一真正的处理国际化的方法是正确地标记和提取那些需要进行本地化的内容,并从此处开始将这些部分作为单独的实体进行独立的处理。您将在“代码”部分中了解如何进行这样的处理。

原创粉丝点击