在Struts1.X 中通过页面设置国际化语言:http://wing123.iteye.com/admin/blogs/384112
<body> <s:a href="/Struts2/changeLang.action?lang=en">English</s:a> <s:a href="/Struts2/changeLang.action?lang=zh">中文</s:a> <center> <s:text name="addUser"/> </center> </body>
struts.xml
<struts> <!-- 设置全局配置文件 --> <constant name="struts.custom.i18n.resources" value="message"/> <!-- 解决中文乱码 --> <constant name="struts.i18n.encoding" value="gbk"/> <package name="Struts2" extends="struts-default"> <action name="changeLang" class="com.bjsxt.action.ChangeLangAction"> <result name="success">/register2/register.jsp</result> </action> </package> </struts>
message_en_US.properties
addUser=Add User
message_ zh _CN.properties
addUser=\u6DFB\u52A0\u7528\u6237
ChangeLangAction
public class ChangeLangAction extends ActionSupport{ private String lang; public String getLang() { return lang; } public void setLang(String lang) { this.lang = lang; } @Override public String execute() throws Exception { changeLang(); return SUCCESS; } /** * 手动改变Locale */ private void changeLang() { Locale currentLocale = Locale.getDefault(); //1、根据页面请求,创建下同的Locale对象 if("en".equals(getLang().trim())) { currentLocale = new Locale("en","US"); }else if("zh".equals(getLang().trim())) { currentLocale = new Locale("zh","CN"); } /* * 2、设置Action中的Locale * 前台页面的Locale和后台session中的Locale范围是不一样的 * a)只改页面Locale当前页面信息会改变但提交后Locale又会改回到默认的 * b)改变了后台Locale,当前线程中的页面Locale并不会改变,但会随下一次提交 * Action一同改变,所以可能要刷新页面两次,第一次只变后台Locale,第二次 * 前台和后台同时改变 * * 为避免上述情况,需要前台和后台的Locale一起改变 */ ActionContext.getContext().setLocale(currentLocale); ServletActionContext.getRequest().getSession().setAttribute( "WW_TRANS_I18N_LOCALE", currentLocale); } }
看提供的例子很重要:
运行例子struts2-blank-2.0.9
http://localhost:8080/struts2-blank-2.0.9/example/HelloWorld.action?request_locale=en有效。
原来在Struts 2.0中,通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。
Struts 2.0为您提供了一个名i18n的拦截器(Interceptor),并在默认情况下将其注册到拦截器链(Interceptor chain)中。
它的原理为在执行Action方法前,i18n拦截器查找请求中的一个名为"request_locale"的参数。
如果其存在,拦截器就将其作为参数实例化Locale对象,并将其设为用户默认的区域(Locale),最后,将此Locale对象保存在session的名为“WW_TRANS_I18N_LOCALE”的属性中。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为
WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
Struts1.X 与 Struts2.X 的区别 :
1、Struts1.X 通过在HttpSession中设置固定的变量实现
2、Struts2.X 比较方便,只需设置Action中的Locale