分享
 
 
 

技巧:开发本地化的XML格式

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

国际化支持是 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 提供了能做到这一点的重要基本工具,就看您能否习惯于使用这些工具了。

参考资料

无论您的开发工作以何种方式涉及到了日期,都不妨查阅 Markus Kuhn 的 Summary of the International Standard Date and Time Notation 并给它加上书签。W3C 对 Date and Time Formats 的说明也值得一看。

请阅读 RFC 1766 — “Tags for the Identification of Languages”,它定义了 xml:lang 标记中语言项的允许值。

查看 EXSLT 以获得有用的和被广泛支持的 XSLT 扩展函数。尤其 dates and times 模块有用于操作日期的函数。

请访问国际标准 ISO 8601,它规定了日期和时间的数字表示法。

您可以在 developerWorks XML 技术专区找到更多 XML 参考资料。

顺便访问一下 IBM developerWorks Unicode 主题以获得关于国际化和本地化的更多信息。

请研究一下 IBM WebSphere Studio Application Developer,这是一种易于使用的集成开发环境,用于构建、测试和部署 J2EE 应用程序,包括从 DTD 和模式生成 XML 文档。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有