在struts.properties里面添加配置
struts.custom.i18n.resources=Resources
Resources 可以自己定义新建资源文件
在sirmapp/src/下新建文件
Resources_en_US.properties
Resources_zh_CN.properties
文件开头Resources 对应第一步struts.custom.i18n.resources的属性增加中英文切换功能
3.1 增加实现中英文切换的action
package com.xxx.framework.web.action;
import com.opensymphony.xwork2.ActionContext;
import com.xxx.common.web.RequestContext;
import com.xxx.common.web.XxxAction;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import java.util.Locale;
public class LanguageAction extends XxxAction {
private String language;
public void setLanguage(String language) {
this.language = language;
}
public String changeToChinese() {
Locale locale=new Locale("zh","CN");//(这个能根据你传来的值动态改变)
ActionContext.getContext().setLocale(locale);
this.request.getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);
return "success";
}
public String changeToEnglish() {
Locale locale=new Locale("en","US");//(这个能根据你传来的值动态改变)
ActionContext.getContext().setLocale(locale);
this.request.getSession().setAttribute("WW_TRANS_I18N_LOCALE", locale);
return "success";
}
}
3.2 在struts-XXX.xml
/first.jsp
/first.jsp
在first.jsp 中添加中英文切换链接
<b class="split">|</b>
<a href="${contextPath}/chinese.action?request_locale=zh_CN"><s:text name="chinese" /></a>
<a href="${contextPath}/english.action?request_locale=en_US"><s:text name="english" /></a>
- 添加过滤器。
由于程序始终是只会读取浏览器发送过来的区域信息,其他页面没有获取session的WW_TRANS_I18N_LOCALE值。因此要通过过滤器从session里获得区域对象,并修改请求报头,从而实现了自定义国际化切换。
增加I18nFilter.java, I18nRequestWrapper.java,代码来自于网络
package com.xxx.common.web;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class I18nFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest r = (HttpServletRequest) req;
I18nRequestWrapper request = new I18nRequestWrapper(r);
filterChain.doFilter(request, resp);
}
}
package com.xxx.common.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;
import java.util.Locale;
public class I18nRequestWrapper extends HttpServletRequestWrapper {
private Locale locale = null;
public I18nRequestWrapper(HttpServletRequest request) {
super(request);
HttpSession session = request.getSession();
locale = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE");
}
/**
* struts2的BUG,如果重定向的话,国际化默认取HTTP请求头中的参数 替换HTTP请求参数
**/
@Override
public String getHeader(String name) {
String value = super.getHeader(name);
if ("Accept-Language".equals(name) && locale != null) {
value = locale.getLanguage() + "_" + locale.getCountry()
+ value.substring(6, value.length());
}
return value;
}
@Override
public Locale getLocale() {
if (locale != null) {
return locale;
}
return super.getLocale();
}
}
- 过滤器配置
在web.xml中
<!-- 国际化-->
<filter>
<filter-name>i18nFilter</filter-name>
<filter-class>com.xxx.common.web.I18nFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>i18nFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
- 在head.jsp 中添加
<%@ taglib prefix=”s” uri=”/struts-tags” %>
这样就可以通过访问国际化资源啦。
过滤器实现代码来源于
http://showtime520.iteye.com/blog/1042585