IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

技巧: 文档格式内的本地化

定制您的文档以适应多种语言及文化习惯

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Uche Ogbuji (uche.ogbuji@fourthought.com), 首席顾问, Fourthought, Inc.

2002 年 9 月 01 日

国际化支持是 XML 的主要优势之一。遗憾的是,极少有 XML 格式提供使内容本地化的机制。本技巧文章向您演示了如何开发本地化的 XML 格式。

XML 的主要优势之一是其对国际化的支持。它的核心字符集 Unicode 提供了机制来支持更具地区普及性的系统 ― 如欧洲的 ISO-8859 变体、日本的 Shift-JIS 或中国的 BIG-5。这很好。在最初以狭隘的地域观点开发了应用程序后,为了进行国际化部署,人们不得不投入大量财力来改写它们。然而,对于国际化来说,所需的工作远比对国际化字符集的支持要多。能够根据一组特定的语言和文化习惯来定制表示信息的方法,这也很重要。这就是所谓的 本地化

一般的本地化

从数据格式本身(这正是使用 XML 的便利之处)来讲,本地化的某些方面(如日期格式和姓名次序)可以用基本的 XML 功能加以解决。一种方法是使用国际标准形式;一个很不错的示例是日期,对日期最好是使用 ISO 8601 标准(请参阅 参考资料)。 清单 1有一个示例:


清单 1. 地区(美国)日期及其本地化后的日期
<?xml version="1.0" encoding="utf-8"?>
<products>
  <!-- US-specific date -->
  <product release-date="8/18/2002"/>
  <!-- ISO-8601 date -->
  <product release-date="2002-08-18"/>
</products>

ISO-8601 日期的一个优势在于:通常可以在大多数编程语言中将它们作为简单的字符串进行比较,这和大多数本地化的日期不同。例如,在大多数编程系统中,字符串“8/19/2001”比“8/18/2002”大,即使实际上前面的日期早于后面的。采用 ISO-8601 格式的同等比较 ― “2001-08-19”与“2002-08-18”比较 ― 则显示了字符串形式与实际日期比较之间更自然的对应。本地化的软件可以先使用 ISO-8601 日期,然后以适当的本地化形式实际显示适合人们使用的字段。大多数编程语言(包括流行的 XSLT 的 EXSLT 扩展库)都很容易支持这种转换。

另一个本地化方法是精心地构造数据,以便在本地以适当的方式重新构造它。姓名就是一个的好例子:在某些文化(如中文)中,姓通常在名的前面。 清单 2显示了为更好地支持这样的本地习惯所构造的一个数据示例。


清单 2. 用于本地化的结构化姓名格式的示例
<?xml version="1.0" encoding="utf-8"?>
<signatories>
  <!-- The direct approach. -->
  <name>Mr. Uche Ogbuji</name>
  <!-- Structure to support local conventions -->
  <name>
    <honorific>Mr.</honorific>
    <given>Uche</given>
    <family>Ogbuji</family>
  </name>
</signatories>

如果采用直接的方法,读者可能会试图按习惯推断姓名的各个部分,但这常常是有风险的。如果姓名的某些部分(如敬语)被省略,那该怎么办?那时您能猜出姓名用的是什么次序吗?采用第二种方法,您可以根据本地习惯,把显示给读者的姓名重新格式化。事实上,如果给出了每一项在可能的先后次序方面的某种提示(如国籍),那么可以为每个姓名定制姓名的次序。第二种方法显然增加了一些复杂性和开销,但是,在选择各种级别的标记结构以便支持多种习惯时,始终要在实用性与灵活性之间加以权衡。





回页首


行内翻译

另一个常见的本地化问题是如何表示标号、消息、描述以及类似事物的翻译。XML 1.0 提供了在元素内容和属性值中使用的语言规范。您可以为每个元素设置语言。 清单 3是同时具有英语和西班牙语元素的 XML 文档示例。


清单 3. 其元素具有本地化语言形式的 XML 文档。
<?xml version="1.0" encoding="utf-8"?>
<menu>
  <item id="A" xml:lang="en">Orange juice</item>
  <item id="A" xml:lang="es">Jugo de naranja</item>
  <item id="B" xml:lang="en">Toast</item>
  <item id="B" xml:lang="es">Pan tostada</item>
</menu>

xml:lang 属性可以具有 RFC 1766 允许的任何值。这意味着可以使用一些值来代表主要的语言指称(如 en 代表英语, es 代表西班牙语等等)。如果某种语言有多种变体,通过添加流行使用某种变体的区域代号(如 en-US 代表美式英语、 en-GB 代表英式英语,或者 es-MX 代表墨西哥西班牙语),您可以更明确地进行定义。请注意,不需要在这里声明名称空间: xml 名称空间已经隐式地定义在每一个文档中。还要注意,语言指称影响相关元素的所有子元素,以及所有其它的子内容。而且,虽然在 XML 规范中特别提到了 xml:lang 属性,您仍必须在模式中提供它。 清单 4中的 DTD 片段说明了这一点:


清单 4. 支持 xml:lang 的 DTD
<!ATTLIST item xml:lang NMTOKEN #IMPLIED "en">

该声明添加了对该属性的支持,并设置了缺省值 en ,以免该属性被忽略。请注意,我没有添加对 id 属性的声明,通常是需要它的。





回页首


结束语

本地化所需要做的工作远不止本文所介绍的。对开发人员而言,通常这更多的是一种通用思想而不是一套一成不变的规则。您必须不断地问自己:“对于那些我认为理所当然但实际却随地区而异的习惯,我的一些代码和数据会不会无法适应这些习惯的变化呢?”学习各种可能的信息习惯并将所学的构建到代码中,这是开发人员应具备的一项关键技能。XML 提供了能做到这一点的重要基本工具,就看您能否习惯于使用这些工具了。



参考资料



关于作者

Uche Ogbuji 的照片

Uche Ogbuji 是 Fourthought Inc.的顾问兼共同创始人,该公司是专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。Fourthought 开发了 4Suite,它是一个用于 XML、RDF 和知识管理应用程序的开放源码平台。Ogbuji 先生是一位出生于尼日利亚的计算机工程师和作家,他目前在美国科罗拉多州博耳德生活和工作。可以通过 uche.ogbuji@fourthought.com与 Ogbuji 先生联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款