站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题创建国际化的 JSP 应用程序

创建国际化的 JSP 应用程序

摘要: 创建国际化的 JSP 应用程序
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <head> Select a language </head> <body> <table> <tr> <td colspan=4 bgcolor="black">
developerWorks Email

</td> </tr> <tr><td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> </body> </td></tr></table>

注意,清单 1 中使用了来自 JSP 标准标签库(JSTL)的 标签来创建链接 URL。这可以确保会话管理得到恰当的处理。(请参阅参考资料,以了解关于 JSTL 和 标签的更多信息。)

每组 login.jsp 和 confirm.jsp 都用特定于地区的语言编写代码。清单 2 显示了 ja_JP 地区的 login.jsp(与 图 4 对应):

清单 2. ja_JP 地区的登录页面(login.jsp)
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tr><td>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



<head>



developerWorks 電子メール

</head>

<body>



<form action="${actionURL}" method="post">

<table>

<tr>

<td colspan=2 bgcolor="black">


developerWorks 電子メール

</td> </tr> <tr> <td>ユーザ ID</td> <td><input type="text" name="userid" size="40"/></td> </tr> <tr> <td>パスワード</td> <td><input type="password" name="pass" size="40"/></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="ログイン"/></td> </tr> </table> </form> </body>
</td></tr></table>

与此类似,对于 zh_CN 地区,confirm.jsp(与 图 6 对应)是用中文编码的,如清单 3 所示:

清单 3. zh_CN 地区的数据确认页面(confirm.jsp)
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tr><td>




<head>



developerWorks 电邮

</head>

<body>

<table border="1">

<tr>

<td colspan=2 bgcolor="black">


developerWorks 电邮

</td> </tr> <tr> <td>用户帐号</td> <td>${param.userid}</td> </tr> <tr> <td>密码</td> <td>${param.pass}</td> </tr> </table> </body>
</td></tr></table>

前面介绍的多冗余集(multiple-redundant-set)方法对于以下这类应用程序是一种可行的解决方案:

  • 主要用一种语言访问,偶尔从其他地区访问。
  • 底层表示层的 JSP 变化不是很频繁。

使用 J2SE 资源绑定
前面一节 Using multiple redundant sets of language-specific JSPs 中的解决方案的最大不足在于:当需要更新特定于语言的 JSP 集时,所有冗余编码的 JSP 集都必须同时更新。对于一个中等规模的项目而言,这会造成冗长的、容易出错的更新。

而现在要介绍的解决方案的外观和作用都与前一个类似,但是在这个案例中,只有一套 login.jsp 和 confirm.jsp。这个解决方案利用了 J2SE 在资源绑定中对地区的支持,只在需要的时候才采用特定于地区的文本字符串(请参阅参考资料,以了解更多关于 J2SE 资源绑定的信息)。这个解决方案的示例代码位于 webapps\dwi18n\javares 目录中。如果部署了示例代码,那么请使用 http:///dwi18n/javares/index.jsp 这个 URL。

图 7 显示了运行在同一台客户端机器上的 4 个浏览器会话,每个会话请求的都是不同的地区。

图 7. 同一台机器上的 4 个不同地区

在图 7 中,可以清楚地看到国际化的 JSP 应用程序可以同时处理多个地区。

编写 JSP 代码
在这个案例中,index.jsp 略有不同,因为它现在链接到单独的 login.jsp。清单 4 显示了这个版本的 index.jsp 的代码:

清单 4. 链接到单独 login.jsp 的地区选择页面
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tr><td>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>



<head>

Select Language

</head>

<body>

<table>

<tr>

<td colspan=4 bgcolor="black">


developerWorks Email

</td> </tr> <tr><td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> </body>
</td></tr></table>

注意,在清单 4 中,使用 JSTL 的 标签设置了一个叫做 locale 的 URL 请求参数。当用户单击语言选择时,这个参数被传递给 login.jsp。清单 5 显示了 login.jsp 的代码:

清单 5. 使用 J2SE 资源绑定的登录页面(login.jsp)
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tr><td>


<%@ page pageEncoding="UTF-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>







  







<head>

developerWorks <fmt:message key="email"/>

</head>

<body>



<form action="${formActionURL}" method="post">

<table>

<tr>

<td colspan=2 bgcolor="black">


developerWorks

</td> </tr> <tr> <td></td> <td> <input type="hidden" name="locale" value="${loc}"/> <input type="text" name="userid" size="40"/></td> </tr> <tr> <td></td> <td><input type="text" name="pass" size="40"/></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="</td> </tr> </table> </form> </body>
</td></tr></table>

清单 5 使用了 JSTL 国际化辅助标签库(请参阅 参考资料)。如果传入的 param.locale 为空,那么在默认情况下,地区设置为 en_US。在使用资源绑定的时候,可以用 标签设置地区。

完成地区设置之后, 就会从处于绑定状态的属性文件中提取文本,该文本对应于指定的关键字。用 JSTL 标签把绑定的基本名称设为 app。如果查看 dwi18n/WEB-INF/classes 目录,可以看到资源绑定中的所有文件都在那里。表 1 描述了这些文件。请参阅参考资料,以获得使用 J2SE 资源绑定的更多信息。

表 1. 资源绑定中的文件
<table cellspacing="1" cellpadding="3" width="60%" border="0"><tr valign="top"><td>文件名</td><td>说明</td></tr><tr valign="top"><td>app.properties</td><td>默认使用的属性文件。对应 en_US 地区。</td></tr><tr valign="top"><td>app_zh.properties</td><td>zh_CN 地区的属性文件。包含用中文编码的字符串。</td></tr><tr valign="top"><td>app_ko.properties</td><td>ko_KR 地区的属性文件。包含用韩语编码的字符串。</td></tr><tr valign="top"><td>app_ja.properties</td><td>ja_JP 地区的属性文件。包含用日语编码的字符串。</td></tr><tr valign="top"><td>*.ucd</td><td>创建属性文件的 Unicode 源文件。</td></tr><tr valign="top"><td>convacii.bat</td><td>将 ucd 文件转换成属性文件的批处理文件。</td></tr></table>

作为示例,清单 6 显示了app_ko.properties 文件的内容:

清单 6. 资源绑定中的 app_ko.properties 文件
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tr><td>


email=\uc774\uba54\uc77c

userid=\uc544\uc774\ub514

password=\ube44\ubc00\ubc88\ud638

login=\ub85c\uadf8\uc778

</td></tr></table>

注意,在清单 6 中,所有的 Unicode 字符均被转义。必须这么做,因为 Java 的资源绑定机制只接受用 ASCII 编码的属性文件。要创建这个文件,既可以使用 IDE 中的字符串资源编辑器,也可以使用 Unicode 编辑器创建一个 Unicode 文件,然后用 JDK 的 nativetoascii 工具转换它。在该例中,convascii.bat 文件负责进行转换。

结束语
在设置国际化 JSP 应用程序时,需要了解它的独特需求。应用程序必须做好准备,支持具有不同地区需求的用户的多个并发访问。本文介绍了用特定于地区的语言文本显示国际化应用程序这个问题的两个解决方案。但我也仅仅是触及到创建国际化服务器端应用程序的迷人艺术的表面。其他重要的问题包括处理不同的日期和货币格式、管理 GUI 布局和使用专门的输入法编辑器(IME,输入外国字符的实用软件)。请参阅参考资料,以获得有助于进一步了解国际化的信息。

参考资料

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

  • 单击本文顶部或底部的 Code(或请参阅 Downloads)下载本文讨论的代码 code.zip。

  • 地区中使用的两个字符的语言代码是 ISO-639 代码。Consult the list.

  • 地区中使用的两个字符的国家代码是 ISO-3166 代码。Consult the list.

  • 要了解所有的 JSTL 标签,请参阅 developerWorks 上的 A JSTL 入门 系列。其中 表示就是一切 与这些标签紧密相关,它介绍了一些国际化标签。

  • 通过阅读 java.util.ResourceBundle 类的 Javadoc,发现更多关于 J2SE 资源绑定、如何创建它们和在哪儿放置它们的消息。也可以阅读 javadoc 的在线文章 here。

  • 教程 Java internationalization basics(developerWorks,2002 年 4 月)是学习所有可用的 J2SE 国际化支持机制的一个好地方,允许您创造性地在服务器端应用程序中应用它们。

  • Unicode Input Method Editor 是一个可以协助尽早在开发周期中发现全球化问题的工具,它能提供了一个简单的机制,以便很容易地重现全球化问题。

  • International Components for Unicode 是 Unicode 支持、软件国际化、全球化的一个成熟的、广泛应用的库。ICU 是一个由 IBM 赞助、支持和使用的开源开发项目。

  • 参阅 Sing Li 撰写的书籍 Beginning JavaServer Pages(John Wiley & Sons,2005),以便进一步研究国际化和本地化。

  • 通过参与 developerWorks blogs 加入 developerWorks 社区。

  • 可以在 developerWorks 的 Java 技术专区 发现关于 Java 编程的各个方面的文章。

  • 请参阅 Developer Bookstore,以获得技术书籍的完整清单,其中包括数百本Java 相关主题的书籍。
下载
<table cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td width="1" height="8"></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td class="lgray" width="4" height="18"></td><td class="lgray" height="18">描述</td><td class="lgray" width="8" height="18"></td><td width="2" height="18"></td><td class="lgray" width="4" height="18"></td><td class="lgray" height="18">Name</td><td class="lgray" width="8" height="18"></td><td width="2" height="18"></td><td class="lgray" width="4" height="18"></td><td class="lgray" height="18">Size</td><td class="lgray" width="8" height="18"></td><td width="2" height="18"></td><td class="lgray" width="4" height="18"></td><td class="lgray" height="18">Download method</td><td class="lgray" width="8" height="18"></td><td width="2" height="18"></td></tr><tr valign="top"><td width="4" height="18"></td><td height="18">Sample code for article tested on Tomcat 5.5.7</td><td width="8" height="18"></td><td width="2" height="18"></td><td width="4" height="18"></td><td height="18">code.zip</td><td width="8" height="18"></td><td width="2" height="18"></td><td width="4" height="18"></td><td height="18">25 KB</td><td width="8" height="18"></td><td width="2" height="18"></td><td width="4" height="18"></td><td nowrap="65535" height="18">FTP</td><td width="8" height="18"></td><td width="2" height="18"></td></tr><tr valign="top"><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td width="2" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td width="2" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td width="2" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td class="lgray" height="1"></td><td width="2" height="1"></td></tr></table><table cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td></td></tr><tr><td>关于下载方法的信息
</td></tr></table><table cellspacing="0" cellpadding="0" width="100%" border="0"><tr><td>关于作者
Sing Li 是一位顾问和自由作者。他的著作包括 Beginning JavaServer PagesProfessional Apache Tomcat 5Pro JSP - Third EditionEarly Adopter JXTAProfessional Jini</td></tr></table>