级别: 初级 Hernan Silberman (hernan.silberman@gmail.com), 自由作家, Consultant
2007 年 2 月 13 日 XML 的一个重要优点在于它是为国际化应用设计的。但是您真正理解国际化和本地化的概念吗?本文介绍了这两个概念、它们的原理以及为何要使用它们。
为何要国际化?
经济学家很早就指出当今的世界实际上是平的。这句话强调的是世界各地政治、文化、当然还有经济之间的联系在不断加深。过去庞大的世界现在成了一个地球村。
在这一变化中,为了向个人和组织提供便捷的、低成本的近距或远距通信与协作,技术在其中发挥着重要的作用。但不同的语言、文化准则和法律体系增加了这种协作的复杂性。
万维网(World Wide Web)应该是全球范围的,但人们很容易忽视这一点。世界上大多数人看的说的并不是英语,世界上使用人数最多的语言是普通话,这种语言甚至没有采用讲英语或者其他欧洲语言的人所熟悉的罗马字符集。随着世界变得越来越平,越来越小,忽视世界范围内潜在的软件用户的风险也越来越大。必须了解如何创建很容易适应不同地域、不同语言和文化的应用程序。
XML 已经成为一种可信赖的表示和传递各种信息的技术。XML 的设计者有远见地将其设计得足够灵活,能够支持多种语言和字符编码,并非常适合于在不同地区使用的应用程序。现在,在这个日益趋平的世界中,XML 成了推动应用程序国际化的基本技术。
国际化和本地化
汽车制造商在产品的国际化和本地化方面具有丰富的经验。在不同的地区,驾驶员可能坐在汽车的左侧或右侧,时速表显示的可能是公里数或英里数,用户手册也有不同语言的版本。此外,每个地方的安全和环境保护法律也不同,汽车制造商必须改造自己的产品以便合法销售并吸引更多的用户。
以这种方式改造产品的过程通常被称为国际化和本地化,了解这两个概念有助于在 XML 应用程序中采用基本相同的技术。
国际化
国际化是在产品需要适应不同地区的前提指导下而进行的一种设计和工程化方法。国际化(Internationalization)有时候简写为 i18n(即开头是“i”,最后是“n”,中间有其他 18 个字母),是设计阶段的活动,这个过程中要全盘考虑修改产品适应不同目标语言和文化,确定产品的哪些方面需要修改或本地化。为了减少适应销售地区的需要而进行本地化改造的工作量,i18n 必然影响到产品的设计及其生产过程。
通常 i18n 工作成果是一组指导说明和验证工具,可用于改造产品以适应特定地区的目标受众。一般来说,翻译人员使用这些指导说明(称为本地化工具箱)帮助确定产品中需要翻译的语言部分。本地化工程师也需要使用这些指导说明配置产品,使其按目标地区的要求工作。当然,产品本身必须能根据各种目标地区的要求进行配置,这也是国际化过程的一个重要目标。再回到现实世界的例子,汽车的 i18n 过程必然要提供工具让工程师选择驾驶员坐在哪一侧、时速表采用什么计量单位、用户手册用什么语言编写。
经验表明,若能预测软件需要进行哪些本地化处理并在项目设计阶段适应这些要求,国际化就可以节约很多时间和费用。等到产品完成后再考虑如何在其他地区使用是造成产品延迟推出的常见原因。您将看到,让产品适应新地区通常是一个复杂的过程,需要很多人参与,应该在软件产品的整个开发过程中都要考虑到。
本地化
本地化是为特定受众实现产品专门化的活动。本地化常常简写为 l10n(“l” 加 10 个其他字母再加 “n”)。本地化包括产品所用自然语言及其文档的翻译、针对特定文化准则配置产品,以及根据法律和环境规范定制产品的其他配置。
为一个新地区本地化产品的原因通常很简单:“为了打开瑞典市场”或者“我们需要开拓墨西哥市场”。如果相应的 i18n 过程已非常充分,那么本地化本身可能会很简单,但是如果需要本地化的软件不支持本地化,那么事情就会非常棘手。
比方说,假设需要为西班牙观众对一部美国电影配音。如果是单音轨,所有的英语对白与电影中的其他音效混在一起,那么就很难将两者分离出来,因而也就很难制作出电影的西班牙语版本。如果电影制作者预料到需要配音,可能会把对白放在一条音轨上,把其他的音效放在另一条音轨上,这样就简单得多。这样的预见性是 i18n 的一个例子,说明多一点计划可以在真正需要本地化产品时节约大量的时间,从而避免诸多不必要的挫折。
多数软件开发人员都对本地化有一些经验。比方说,至少要让软件在不同的时区工作,或者需要用 Java 属性文件(或类似的东西)针对性实现具体的文本消息。这些都是本地化产品的重要技术,作为整个国际化和本地化过程的一部分认真地使用这些技术,可以增加让应用程序适应不同地区这一困难工作的可预测性。
XML
XML 是为了支持国际化和本地化而设计的。通过使用 ISO-10646/Unicode,XML 支持多种语言文本,这些文本可以从右向左读或从左向右读,可以有特殊的空白、换行和组合字符规则,也可以要求进行其他和本地化有关的调整。此外,XML 还支持不同类型的文本编码,让内容作者在文档中声明使用的编码。虽然推荐使用 UTF-8 编码,但也允许其他编码格式,这样 XML 就不会与特定编码捆绑在一起,这为将来提供了明确的扩展点。使用 XML,用户可以选择最适合其应用程序的编码。
XML 提供了一种重要的工具来支持国际化:允许创建一个标记词汇表来说明用意并且不限于特定的呈现方法或语言环境。清单 1 中的 XML 片段给出了一个例子。
清单 1. 说明用意的标记
<description>The Battle of New Orleans was fought in January 1815, two weeks
<emphasize>after</emphasize> the peace treaty had been signed.</description>
|
清单 1 中的 emphasize 元素说明其包含的文本应该被强调,强调的方式由读取和显示它的程序决定。它很好地表述了您的意图。在一些语言环境,其中的文本可能以斜体显示,而在另一些语言环境下则可用下划线或者引号来强调。因为 XML 允许创建这种表达意图的文档类型,所以您就能够为各种语言环境生成易于正确、全面地进行本地化的文档。
常见的本地化问题
对应用程序进行本地化可能会涉及到翻译用户可能看到的所有自然语言成分。保证日期、时间、货币值能够以适合目标语言环境的方式呈现同样也很重要。有时候修改图像和布局元素也是标准化过程的一部分。
语言标识
XML 被设计成可以支持用多种不同语言编写的文档。对于给定的文档,必须能够确定作者使用的语言,这可以通过 XML 名称空间中定义的 lang 属性来完成。xml:lang 的合法值是两三个字符的语言代码,后面可能还有两个字符的国家代码。比如,en、en-us 和 en-uk 都是合法的语言代码(详情参见 RFC 3066)。
一般来说,应该在 XML 文档中使用 xml:lang 指定编写文档的语言。XML 还允许文档中包含多种语言,可使用 xml:lang 为每个元素及其子元素指定不同的语言,如清单 2 所示。
清单 2. 同时包含英语和西班牙语元素的文档
<document xml:lang="en">
<paragraph>
<quote xml:lang="se">Tack s? mycket</quote> means thanks
in Swedish.
</paragraph>
</document>
|
请注意,可以在 清单 2 的根元素中声明英语为首选语言,然后对少量西班牙语成分覆盖该声明。建议以这种方式使用 xml:lang 属性,而不要为每个元素指定所包含的语言。
知道需要翻译什么
本地化 XML 文档最直观的任务包括将自然语言内容从源语言翻译成各种目标语言。这方面没有什么诀窍,通常要依靠专业翻译人员。但是必须要有一种办法明确标识出 XML 文档中哪些部分需要翻译,哪些不需要翻译。
即将成为 W3C 推荐标准的国际化标记集(Internationalization Tag Set,ITS)为这些国际化问题提供了解决方案。ITS 定义了一些标记,可以包括在模式和文档中来说明和国际化有关的用意。比如,ITS 提供了 translate 标记用来告诉翻译人员或自动翻译工具是否需要翻译该元素的文本。
清单 3. 使用 its:translate 的例子
<document xml:lang="en">
<paragraph>Some text to translate.</paragraph>
<paragraph its:translate="no">Some text not to translate</paragraph>
</document>
|
清单 3 说明了 ITS translate 标记的用法。ITS 的实现包括三种常见的模式语言:XML DTD、XML Schema 和 Relax NG。模式设计人员可以在模式中使用 ITS 标记,而内容设计人员可以在 XML 文档中使用它们。
在 XML 文件中使用 ITS translate 标记解决了国际化中的一个大问题,支持 ITS 的工具已经能够从 XML 文档中抽取需要翻译的文本并使用 Localization Interchange File Format (XLIFF) 输出,这是供其他翻译工具使用的一种中间格式。
利用本地化标注改进翻译
翻译人员通常不会十分了解您的项目和领域,你们可能从未谋面。为了获得最佳翻译效果,必须为翻译人员提供更多的信息帮助他们更好地理解其翻译结果将出现的环境。ITS 支持这类本地化标注。
清单 4. 使用 ITS 本地化标注的例子
<document xml:lang="en">
<paragraph its:locNote="This is a description note to the
translator.">Some
text to translate.</paragraph>
<paragraph its:locNote="This is an alert note to the translator."
its:locNoteType="alert">Some text to translate.</paragraph>
</document>
|
清单 4 说明了 ITS 名称空间中 localNote 属性的用法。该属性仅仅为翻译人员提供一些提示,可以直接在 XML 文档中看到,也可以由翻译工具在其工作的时候显示出来。ITS 支持两种标注类型:description 和 alert。默认类型为 description,alert 用于强调所给标注的重要性,比如翻译工具可以突出显示这些内容或者警告翻译人员一定要仔细阅读。
处理日期
针对不同的语言环境一定要小心处理日期和数字。最佳方法是为数据选择一种中立的表示,显示给特定语言环境的用户时再进行适当的格式化。所幸的是,适合于 XML 文件的日期和时间的字符串表示已经通过一种标准的方式处理好了,您无需再费心创建新的。ISO 8601 规定了清单 5 中所示的标准格式。
清单 5. ISO 8601 日期格式标准
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
Complete date plus hours, minutes and seconds:
YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
Complete date plus hours, minutes, seconds and a decimal fraction of a
second
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
where:
YYYY = four-digit year
MM = two-digit month (01=January, etc.)
DD = two-digit day of month (01 through 31)
hh = two digits of hour (00 through 23) (am/pm NOT allowed)
mm = two digits of minute (00 through 59)
ss = two digits of second (00 through 59)
s = one or more digits representing a decimal fraction of a second
TZD = time zone designator (Z or +hh:mm or -hh:mm)
|
文档中可采用的一种办法是用 ISO 格式表示日期,这样不仅能表示任意精度的时间,而且是标准化的,容易处理。
数字和货币也采用类似的方法处理:选择一种应用程序本身使用的货币和计量单位,当把信息呈现给用户时再本地化。根据应用程序的需要,本地化 XML 文件中的这些值可能是不可避免的,尽管可以生成使用应用程序原生表示的 XML 文件并在文件显示到用户界面时才进行本地化。
Unicode 和国际化
Unicode 是国际化过程的重要组成部分,因为它允许把不同字符集和语言的处理细节视作应用程序实际工作的外部问题加以解决。Unicode FAQ 中指出,“使用 Unicode,一次国际化过程可以同时生成满足世界上所有市场需求的代码”。
当然,Unicode 要在这方面成功,必须解决各种语言问题,如双向性:一些语言从左向右读,另一些则从右向左读。Unicode 确实支持双向性,利用 ITS dir 标记可以声明文本片段的方向要求。清单 6 中的例子来自 W3C,ITS dir 属性改变了嵌套元素的方向性。需要指出的是,如果指定的语言是阿拉伯语或者希伯来语,尽管您知道是从右向左读,也必须使用 dir 标记。
清单 6. 使用 ITS dir 属性指定一部分内容的阅读方向
<text xmlns:its="http://www.w3.org/2005/11/its" xml:lang="en"
its:version="1.0">
<body>
<par>In Arabic, the title
<quote xml:lang="ar"
its:dir="rtl">نشاط التدويل،W3C</quote>
means <quote>Internationalization Activity, W3C</quote>.
</par>
</body>
</text>
|
结束语
本文提出了国际化和本地化的主要问题。国际化是一种设计方法,要求必须提前预料到产品需要适应不同的地理区域和文化。本地化是针对特定语言环境改造产品的活动,采用国际化设计可以大大简化这项工作。XML 可支持国际化应用和推广,因为它支持多种字符编码和 Unicode,而且可以使用 xml:lang 标记标识给定文档所用的语言。XML 国际化最近的进展包括国际化标记集(ITS)的开发,它提供了可用来确定文档中哪些部分需要翻译的一组标记及支持 XML 文档国际化的各种工具。
随着全球化的不断推进,更加难以忽略那些潜在的、讲着不同语言、生活在不同文化中的软件用户。让软件适应不同的语言环境并不会异常困难,只需要在整个软件开发过程中遵循一定的规律。
参考资料 学习
讨论
关于作者  | |  | Hernan Silberman 是一位企业软件顾问,他的专长是使用 Java 技术进行分布式编程。他从加州 Pomona 的 California Polytechnic State University 获得了计算机科学学士学位和通信学学士学位。他作为企业系统工程师在旧金山湾地区的一家大型娱乐公司工作。 |
对本文的评价
|