`

Struts国际化完整解决方案-支持多国语言

阅读更多

在网上有很多有关Struts的中文解决方案,但是很多都说得很零碎,不够完整。
下面是我的一个完整解决方案。
 

要使网页能够真正实现多语言,有三个地方都需要修改:
1. 在页面部分,一定要把页面的编码设成UTF-8,就是在开头加上这一句:
<%@ page contentType="text/html; charset=UTF-8" %>

并且把所有的中文信息都放到resource文件中。
 

以前我在写网页的时候,没有指定页面的编码,总是在获取表单的内容后,要人工的用new String(s.getBytes("ISO-8859-1"))转换一下,这样是很繁琐的,而且很容易出错。网页中如果没有指定编码,那么默认的就是用ISO-8859-1编码的。

 

2.相应的资源文件需要用native2ascii转换一下。
对于简体中文的资源文件:

native2ascii -encoding gbk ApplicationResources_zh.properties 
convert\ApplicationResources_zh.properties

 
 

对于繁体中文的资源文件:

native2ascii -encoding big5 ApplicationResources_zh_tw.properties 
convert\ApplicationResources_zh_tw.properties

 

3.需要用一个filter设置一下request的编码,我的代码如下:

 

filter代码:

import java.io.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
 
/**//** 
 * <p>Title: </p> 
 * <p>Description: </p> 
 * <p>Copyright: Copyright (c) 2003</p> 
 * <p>Company: </p> 
 * @author George Hill 
 * @version 1.0 
 */ 
 
public class CharsetFilter implements Filter { 
 
  private FilterConfig filterConfig; 
 
  /**//** 
   * Request设置的Charset encoding 
   */ 
  private String encoding; 
 
  /**//** 
   * 是否忽略设置Request的Charset encoding 
   */ 
  private boolean ignore; 
 
  //Handle the passed-in FilterConfig 
  public void init(FilterConfig filterConfig) { 
    this.filterConfig = filterConfig; 
 
    encoding = filterConfig.getInitParameter("encoding"); 
    String value = filterConfig.getInitParameter("ignore"); 
    if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) 
        || "on".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { 
      ignore = true; 
    } 
  } 
 
  //Process the request/response pair 
  public void doFilter(ServletRequest request, ServletResponse response, 
                       FilterChain chain) throws IOException, ServletException { 
    if (!ignore) { 
      request.setCharacterEncoding(encoding); 
    } 
 
    chain.doFilter(request, response); 
  } 
 
  //Clean up resources 
  public void destroy() { 
    this.filterConfig = null; 
  } 
}

 

 

web.xml的相关片断如下。注意:将以下代码放入web.xml文件中的</servlet-mapping>后面即可!

<filter> 
    <filter-name>charsetfilter</filter-name> 
    <filter-class>xxx.CharsetFilter</filter-class> 
    <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
      <param-name>ignore</param-name> 
      <param-value>false</param-value> 
    </init-param> 
  </filter> 
  <filter-mapping> 
    <filter-name>charsetfilter</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 

 

这样,在Action中处理表达的内容时,就不需要再做转换;而且在Action中处理数据给页面显示时,也不需要做转换。在页面中可以同时显示简体和繁体的内容,不需要去设置IE的编码。

 

另外需要说明的就是如果数据库也支持编码的话,最好也是设成UTF-8编码,这样才能够完整的解决多语言的问题。例如MySQL 4.1以上的版本可以设置编码成utf8,在JDBC的URL中可以指定编码为UTF-8。

 

 

分享到:
评论
1 楼 yehayeah 2012-08-21  
谢谢分享,学习下。

相关推荐

Global site tag (gtag.js) - Google Analytics