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

developerWorks 中国  >  Web development | XML  >

国际化的 XSLT 样式表和 XML 字典方法

当站点上的内容更改时,使需要编辑的文件数最小化

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Laura Menke (menkell@us.ibm.com), 技术协调员, IBM WebSphere 开发者园地

2001 年 4 月 01 日

在本文中,Laura 将向您演示如何使用 XML 和 XSLT 技术,通过字典驱动的方法启用 Web 页面的动态国际化。它提供了可以在应用程序中扩展或包括的常规 XSLT 样式表样本, 还包括将与样式表一起使用的样本字典布局。这种方法将允许您在站点上的内容发生更改时使需要编辑的文件数最小化。

概述

本文假设读者已具备 JSP、servlet、HTML、XML 和 XSLT 的常识。 在本文中,我将介绍使用 XSLT 样式表和 XML 字典所进行的 Web 内容的国际化解决方案。

为显示提供信息的动态国际化是一个难题。 例如,HTML 页面可能包含需要翻译成目标语言的按钮和标签。 通过编码、使用 servlet、JSP 或对每种语言使用不同的页面,可以实现 HTML 的翻译。然而, 源可能是动态的,因而使这些种类的解决方案变得非常昂贵和复杂。

大多数 Web 应用程序处理格式为 XML(包括 HTML 页面)的数据。 结果,基于 XML 的标准转换机制(例如,XSLT)可用于根据目标语言替换部分文本。 然而,如果仅仅使用 XSLT,那么每对语言都需要一个 XSLT 样式表。 该问题的解决方案是创建一个字典驱动的常规 XSLT 样式表来控制文本可翻译部分的动态替换。 因为用户只通过提供新字典将常规 XSLT 样式表应用于新情况, 所以这会减少用于显示的国际化信息的费用和复杂程度。 它还允许重用字典,为要存储的文本翻译创建一个中央位置。


图 1:使用常规 XSLT 样式表
图 1

Web 内容的转换有多种方法。可以在 servlet、JSP 或浏览器中使用常规 XSLT 样式表。 例如,Internet Explorer 5.0 可以处理 XSLT 转换,让您将一些处理推送到客户机以获得更好的性能。 然而,WAP 电话和 Palm Pilot 没有这种能力,所以在这些情况下,转换必须在 servlet 或 JSP 中发生。





回页首


常规 XSLT 样式表

定义 XSLT 样式表的关键是创建一个常规样式表,这个样式表可应用于许多种情况并且不直接依赖于某种 Web 语言( HTML、WML 或任何其它标记语言)。常规 XSLT 样式表将基本功能添加到国际化信息,用于显示。 然后,可以在其它 XSLT 样式表中扩展或包括,以添加功能。 常规样式表定义下列规则:需要国际化的 HTML/XML 文档中的每个元素――如按钮、标签或文本――必须定义属性 nlsidnlsid 的值用作 XML 字典的密钥。 XSLT 样式表为字典编制索引、查找与 nlsid 属性值匹配的密钥、与字典中的当前语言匹配并检索已翻译的文本。然后,它将替换元素主体中已翻译的文本,或将已翻译的文本插入元素主体。 如果样式表在字典中找不到 nlsid 指定的密钥, 那么它只将元素的内容(如果该元素包含缺省内容)复制到新文档。 清单 1显示了实现这一规则的常规 XSLT 样式表。 传递到 XSLT 样式表的两个参数用于定义将使用的 XML 字典以及翻译的首选目标语言。





回页首


常规字典

XML 字典的格式如下所示。根元素是 locale。locale 的子代是可以根据 nlsid 属性值索引的字典中的密钥。 密钥的子代是带有文本部分译文的支持的语言。 可以为 Web 应用程序的每个页面和 Web 应用程序的每个部分定义字典, 也可以为整个 Web 应用使用一个字典。 可以在多个应用程序之间使用 XML 字典。 清单 2是登录屏幕的字典示例;它包含两种语言:英语和德语。


清单 2:登录屏幕的字典
<?xml version='1.0'?>
 <locale>
    <userid>
        <en-us>User Name</en-us>
        <de>Benutzername</de>
    </userid>
    <password>
        <en-us>Password</en-us>
        <de>Passwort</de>
    </password>
    <logonbutton>
        <en-us>Logon</en-us>
        <de>Anmelden</de>
    </logonbutton>
</locale>





回页首


Web 内容的外观

上面提到过,要翻译的任何元素都需要定义 nlsid 属性。元素可能包含也可能不包含缺省语言。 清单 3a定义的是 带有缺省语言的标签元素的外观, 清单 3b显示了 没有缺省语言是什么样子。 清单 3c显示了当应用常规样式表时下列元素的结果。 对于这个示例,从浏览器接收到的首选语言是德语,它使用上面定义的“XML 字典”(请参阅 清单 2)。


清单 3a:在带有缺省语言的 HTML 文档中定义的元素
 <label id="useridLabel" nlsid="userid">User Name</label>
 


清单 3b:在不带有缺省语言的 HTML 文档中定义的元素
   <label id="useridLabel" nlsid="userid"/>



清单 3c:转换结果
   <label id="useridLabel" nlsid="userid">Benutzername</label>





回页首


servlet 转换示例

Internet Explorer 和 Netscape Navigator 这样的浏览器允许设置首选语言。 servlet 或 JSP 可以通过 HTTP 请求的 "Accept-Language" 头检索用户的首选语言。 可以从 Internet Explorer 内部使用 VBScript 来检索首选语言。 要使 Web 应用程序国际化,只要将首选语言作为参数传递给 XSLT 样式表、 将字典源作为参数设置成 XSLT 样式表、对 HTML/XML 文档执行转换并显示国际化信息即可。

例如,servlet 可能包含下列要处理 HTML 页面翻译的代码(请参阅 清单 4)。


清单 4:HTML 页面的翻译
public void doGet (HttpServletRequest req, HttpServletResponse res) throws      
  ServletException, IOException {   
    .......
    XSLTProcessor processor =                       
    org.apache.xalan.xslt.XSLTProcessorFactory.getProcessor();
    Processor.setStylesheetParam("currentLocale",               
            req.getHeader("Accept-Language"));
    processor.setStylesheetParam("dictionary-file","'nls.xml'");
            
    Processor.process(new                       
    org.apache.xalan.xslt.XSLTInputSource("HTMLToBeTranslated.xml"),   
             new                        
    org.apache.xalan.xslt.XSLTInputSource("NLSStyleSheet.xsl"),
             New                            
    org.apache.xalan.xslt.XSLTResultTarget(OutputStreamForView));
    .......
}





回页首


总结

在本文中,我已经向您演示了如何使用 XSLT 和 XML 字典创建可扩展的解决方案,使 Web 内容国际化。 通过利用这种方法,将减少开发人员必须维护的代码量并且防止硬编码资源在您各个应用程序中分散。 这种方法还允许您拥有单一页面源,而不是用 24 种不同语言编写的同一页面源。 您还可以在许多各种各样的应用程序中重用字典。



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • XML.org提供许多与 XML 相关的新闻、教育和工具。

  • Mulberry Technologies, Inc.是专门从事基于 SGML 和 XML 的系统的电子出版顾问工作。

  • 获得最新版本的 Xalan-Java, 它是一种将 XML 文档转换成 HTML、文本或其它 XML 文档类型的 XSLT 处理器。

  • Xerces Java Parser 1.3.1支持 XML 1.0 建议书,并包含高级语法分析器功能,如 XML Schema 和 DOM Level 2 版本 1.0。


关于作者

Laura Menke 是美国明尼苏达州罗切斯特 IBM WebSphere 开发者园地的技术协调员。 她拥有威斯康星大学(拉克罗斯)计算机科学学位。 正在明尼苏达大学继续攻读计算机科学硕士学位。 近三年来,她一直从事各种面向对象的技术。她主要研究客户机技术。 可以通过 menkell@us.ibm.com与她联系。




对本文的评价










回页首


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