在网上有很多有关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。
分享到:
相关推荐
在"Struts 之旅 - 多国语言"这个主题中,我们将深入探讨Struts框架如何支持多语言国际化(i18n)功能,这对于构建全球化应用程序至关重要。 1. **国际化(i18n)基础**: 国际化是指设计和实现软件,使其能够适应...
6. 支持国际化:可以返回不同语言的JSON数据,满足多语言应用的需求。 在实际开发中,为了使用这个插件,你需要将`struts2-json-plugin-2.3.8.jar`文件放入项目的类路径(classpath)下,然后在Struts2的配置文件...
`struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...
struts2-convention-plugin-2.3.15.1.jar
struts2-jfreechart-plugin-2.1.8.1.jar
struts2-ssl-plugin-1.2.1.jar
最新struts2-spring-plugin-2.3.24.1.jar
6. **国际化与主题支持**:Spring 提供了强大的国际化和主题支持,整合后,Struts 2 的Action 可以利用这些功能,为用户提供多语言和自定义界面风格的能力。 7. **测试支持**:由于Action 由Spring 管理,我们可以...
struts2-spring-plugin-2.2.1.jarstruts2-spring-plugin-2.2.1.jarstruts2-spring-plugin-2.2.1.jar
struts2-dojo 跨域时解决拒绝访问的问题
struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar
在国际化(i18n)和本地化(l10n)方面,Struts1提供了很好的支持,使得应用程序能够适应不同地区的用户需求。下面将详细介绍如何在Struts1中实现多国语言功能。 1. **理解基本概念** - **国际化(i18n)**:是...
本文将深入探讨解决Struts中文问题及国际化问题的终极方案,确保不同地区和语言环境下的用户都能正确、流畅地使用Web应用。 #### 核心策略:UTF-8编码与资源文件管理 - **统一采用UTF-8编码**:所有HTML和JSP页面...
本资料包聚焦于Struts2中的数据校验以及国际化(i18n)支持。 首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中...
struts2-dojo-plugin-2.3.1.2.jar
本文档资料适合java struts2 ajax dojo开发人员使用.
ajax结合Struts2要用到的jar包
struts2-spring-plugin-2.1.8.1.jar
struts2 2.3.16.3 版本配置json所需要的jar文件。有时候版本不一致也会配置失败。
struts2-dojo-plugin-2.1.6.jar 解决了datetimepicker显示月份乱码的问题,显示9、10、11、12月份时出现乱码,本包修改了该bug