原理:
不通过浏览器设置完成语言/地区设置,在jsp页面中通过超链接完成中英文切换。
i18n.jsp页面:
<body>
<a href = "testI18n.action?request_locale=en_US">English</a> (必须是action,保证i18n拦截器起作用)
<a href = "testI18n.action?request_locale=zh_CN">中文</a>
<a href = "ok.jsp">OK</a>
<s:form action = "testI18n" method = "post">
<s:textfield name = "username" key = "loginUser"/>
<s:password name = "password" key = "loginPassword"/>
<s:submit key = "loginSubmit"/>
</s:form>
</body>
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class testI18n extends ActionSupport{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute(){
return SUCCESS;
}
}
资源文件(包资源)
package_en_US.properties:
loginUser = LoginUser
loginPassword = LoginPassword
loginSubmit = Submit
package_zh_CN.properties
loginUser = \u7528\u6237\u540D
loginPassword = \u7528\u6237\u5BC6\u7801
loginSubmit = \u63D0\u4EA4
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="globalMessage"/>
<package name="default" namespace = "/" extends="struts-default">
<action name = "testI18n" class = "com.action.testI18n">
<result>/i18n.jsp</result>
</action>
</package>
</struts>
<body>
<a href = "testI18n.action">i18n</a>
</body>
整个请求的过程都是围绕着request_locale参数的,每个经过i18n拦截器处理的请求,首先对request_locale参数判断,不为空,将参数信息保存到session范围里,否则从session范围里取出locale对象等一系列操作。当然这些操作都由struts2框架封装了,我们只需在请求的url中传递request_locale参数信息,即可完成语言/地区设置。