新的起点

新的起点
随笔 - 9, 文章 - 1, 评论 - 1, 引用 - 0
数据加载中……

Struts的国际化

 

(一)  软件的本地化与国际化的概念
本地化:对于已经开发好的软件,使其支持一种新的语言,称之为软件的本地化。我们比较熟悉的是游戏的本地化。

国际化:是指在软件设计阶段,就应该使其具有支持多种语言和地区的功能。当需要在应用中添加对一种新的语言和国家的支持时,不需要对已有的软件返工,无需更改程序代码。
I18N
简称的来历

(二)  Web应用的中文本地化
原因:当数据流的源与目的地使用不同的字符编码时,就需要对字符编码进行正确的转换。      

ü         处理HTTP请求数据编码:
默认情况下,IE浏览器发送请求时采用”ISO-8859-1”字符编码,如果Web应用要正确地读取用户发送的中文数据,则需要进行编码转换。
一种方法是在处理请求前,设置HttpServletRequest对象的字符编码:
request.setCharacterEncoding();
还有一种是对用户输入的请求数据进行编码转换:
date = new String(date.getBytes(“ISO-8859-1”),”GBK”);

ü         处理数据库数据编码:
如果数据库系统的字符编码为”GBK”,那么可以直接存取数据库中的中文数据,而无需进行编码转换。如果数据库字符编码为“ISO-8859-1”,那么必须先对来自数据库的数据进行编码转换,然后才能使用。
String field = rs.getString(“FF”);
String field_cn = newString(field. getBytes(“ISO-8859-1”),”GBK”);

ü         处理XML配置文件编码
如果XML文件中包含中文,可以将XML文件的字符编码设为”GBK”

ü         处理响应结果的编码
针对不同的文件类型,设置方式不同:
对于Servlet文件:
response.setContentType(“text/html;charset=GBK”);
对于JSP文件:
<% @ page contentType=” text/html;charset=GBK” %>
对于HTML文件
<META HTTP-EQUIV=”Content-Type” CONTENT=” text/html;charset=GBK”>

(三)  JavaI18N的支持
Java
在其核心库中提供了支持I18N的类和接口,下面简要介绍:

A. Locale(Java.util.Locale)

Locale类的实例代表一种特定的语言和地区,如果Java类库中的某个类在运行时需要根据Locale对象来调整其功能,那么就称这个类是本地敏感的。例如:java.text.DateFormat.
创建Locale对象时,需要明确地指定其语言和国家代码:
Locale cn = new Locale(“ch”,”CH”);
Locale us = new Locale(“en”,”US”);
Locale jsp = Locale.JAPAN ??????????????????????????????
取得运行环境默认的Locale
Locale defaultLocale = Locale.getDefault();

             

ResourceBundle

提供存放和管理与Locale相关的资源的功能
Struts中没有使用这个类,而是提供了自己的类:
org.apache.struts.util.MessageResources
org.apache.struts.util.PropertyMessageResources

             

MessgeFormat

 

(四)  Struts框架对国际化的支持
Struts配置文件的<controller>元素的locale属性为true时,Struts框架把用户的locale实例保存在session范围内,这样框架能自动根据实例选择合适的资源文件。

(五)  对例子程序Helloapp国际化

JSP文件的文本、图片和按钮进行国际化

1.         设置字符编码
为了保证同一个JSP页面能支持多种语言,可以将所有JSP页面的字符编码统一设置为”UTF-8”:
<% @ page contentType=” text/html;charset= UTF-8” language=”java” %>

2.         对文本国际化
JSP文件之中不应该直接包含本地化的消息文本,而应该通过<bean:message>
标签从资源文件中获得文本。
<bean:message key=”hello.jsp.title” />

3.         对按钮国际化
<html:submit property=hello.jsp.page.submit />
   <bean:message key=”hello.jsp. submit” />
</html:reset>

4.         对图片国际化

 

创建资源文件

创建默认的资源文件:application.properties

 

根据默认的资源文件,创建临时中文资源:application_temp.properties

 

JDK中提供了native2ascii命令,它能够实现字符编码转换。命令如下:
native2ascii –encoding gb2312 application_temp.properties application_zh_CN.properties

创建英文资源文件:application_en.properties

还需要注意一下资源文件的路径问题!

 

使用Servlet过滤器设置请求数据的字符编码

<filter>

<filter-name>Set Character Encoding</filter-name>

<filter-class>SetCharacterEncodingFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>Set Character Encoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain)throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");

    // 传递控制到下一个过滤器

    chain.doFilter(request, response);

    }

 

 

(六)  小结

Struts进行国际化应该遵循以下的原则

ü         尽量不在Servlet中使用含非英文字符的常量字符串。

ü         对于JSP文件,应该对page指令中的charset属性进行相应的设置。

ü         不应该在JSP文件中直接包含本地化的消息资源,而应该统一放置到资源文件

ü         不必再每个JSPServlet中设置HTTP请求的字符编码,可以在Servlet过滤器中设置编码

ü         尽量使用“UTF-8”作为HTTP请求和相应的字符编码,而不是“GBK”等。

ü         充分考虑底层数据库所使用的编码,他可能会给应用程序的移植带来麻烦。


以上整理自孙卫勤《精通Struts
By HAIING

posted on 2008-01-15 17:49 轧钢王子 阅读(109) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: