专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »XML教程 » xml格式:开发本地化的XML格式 »正文

xml格式:开发本地化的XML格式

来源: 发布时间:星期五, 2008年9月26日 浏览:129次 评论:0

国际化支持是 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

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: