读书人

国际化讯息和日志

发布时间: 2012-11-17 11:14:15 作者: rapoo

国际化消息和日志
I18N Messages and Logging (国际化消息和日志)

作者 John Mazzitelli
2006 年 12 月 6 日
翻译:suli
原文地址:http://www.onjava.com/pub/a/onjava/2006/12/06/i18n-messages-and-logging.html


对于许多软件开发者来说,一提到国际化(亦称为 i18n)支持就要发出一声呻吟。 要使编写的代码能够面向外国使用者,确实需要费一翻思量,因为在现有软件的代码中添加国际化支持可不是一件轻而易举的事。 如果您感觉到软件需要支持不同语言和语言环境,哪怕这种可能性很小,从一开始就做国际化项目的准备,比起项目开始后再试图添加国际化支持也要明智得多。

有人问“国际化”是什么意思? 国际化远不止于将用户界面消息翻译成不同的语言。 它还涉及到处理不同的字符编码、日期/时间/货币的显示形式、以及跨多区域时存在的一些其他差异。

介绍 i18nlog

本文的目的并不在于讨论那些关于国际化的琐碎的方面,而是通过研究一个称为 "I18N Messages and Logging" (简称 i18nlog) 的开源项目,来介绍引入国际化功能时需要执行的一些必要的任务

i18nlog 允许您在 Java 应用程序内集成国际化的消息,这是通过向以下内容提供 API 来完成的:

标注 Java 类以识别国际化消息 从所有支持的语言环境资源包中获取国际化消息 创建特定于语言环境的异常,并在其中使用国际化的消息 使用任何日志框架创建国际化消息日志 自动生成特定于语言环境的资源包 自动生成帮助及参考文档 定义国际化消息

国际化软件时一项最为乏味的工作莫过于维护资源绑定包了。 资源绑定包是包含 "name=value" 这种信息对的属性文件 (.properties),其中 "name" 是资源绑定包的关键字字符串 (key string),而 "value" 是翻译过的消息字符串本身。 习惯上为每种语言创建一个资源绑定包,在每个绑定包中关键字的设置是唯一的,而各个关键字相关的值就要翻译成各种语言了。 资源绑定文件的名称应该指明它是为哪种语言创建的,例如,mybundle_en.properties 文件中的消息是用英语写的,而 mybundle_de.properties 包含德语消息。

i18nlog 提供了一些用于定义资源绑定消息及其关键字字符串的标注--用于将资源注入到 i18nlog 的自定义 Ant 任务中,您可以自动生成资源绑定包,而不必为确保属性文件与访问属性文件的 Java 代码之间的一致性作过多的工作。

@I18NMessage 标注被放在常量上,这些常量就是资源绑定包的关键字字符串使用的常量。 使用这些常量可以迫使执行编译时检查;例如代码中引入的拼写错误(如常量名称的拼写错误)和使用过时消息或已删除消息,这些错误在编译时就可以被探测到。 以下是使用此标注的示例:

        检索国际化消息

        定义了国际化常量后,就可以使用 i18nlog 的核心类提供的 API:mazz.i18n.Msg。 该 API 用于装载存放于资源绑定属性文件中的消息。 它还用于将值作为变量参数进行传递,从而替换消息中的占位符(例如, {0}, {1,date})。 另外,此 API 将您从直接使用 JDK 类进行编码的工作中解放出来,也许您需要阅读一下 Javadoc 的 java.text.MessageFormat 部分,以获得对 i18nlog 工作原理的初步认识,尤其是它如何使用本地化的数据替换占位符。

        下面是 Msg 类的使用实例:

            ?

                    本地化

                    我们已经讨论了许多关于如何通过获取翻译的消息和本地化的消息国际化软件的内容。 嵌入国际化功能之后,剩下的工作就是手动处理那些需要被本地化的资源绑定属性文件(由 <i18n> Ant 任务生成或者自行手动编写)了。 必须确保将所有资源绑定包的消息翻译成需要支持的语言,而且这些消息包含的数据也进行相应的本地化。 通过定义占位符属性(例如,{0,date} 将使用目标语言环境的格式和语言输出日期字符串)可以完成许多本地化方面的工作。 不言而喻的是,必须找一家优秀的翻译和本地化公司。

                    小结

                    这篇文章介绍了如何通过一个新的开源项目 i18nlog 在应用程序中溶入国际化功能。 使用该开源项目提供的工具和 API 可以自动管理资源绑定包属性文件(.properties),检索和管理这些绑定包中的本地化消息,甚至还可以生成供最终用户使用的帮助文档。

                    资源 i18nlog 用户指南: i18nlog.sourceforge.net/doc/users-guide.html i18nlog API: i18nlog.sourceforge.net/api 本地化消息时使用的占位符语法:java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html

                    John Mazzitelli 是一位 JBoss 开发者,Red Hat 的带头人,目前正致力于 “Boss Operations Network 管理平台”的实现。