struts2中的国际化分为三个级别:
(1)action类级别、package包级别、webapp级别
注意:
1,在搜索国际化资源文件时,依次从action、package、webapp搜索,优先级依次降低
2,在访问带有国际化的网页时,必须先请求action类来加载国际化文件,然后由此action类定位到要访问的页面;
具体做法:
在action类中声明一个方法 public String doDefault(){rreturn SUCCESS} (action类中带do的方法,在访问的时候无需加do)
假设:项目名称i18n action类名 login 那么:
访问时候:www.localhost:8888/i18n/login!default.action
一:action类级别(资源文件绑定action类)
取名方法:ActionName_zh_CN.properties
二:包级别
取名:package_zh_CN.properties (一定要以package开头)
三:webapp级别
位置:放在src下面
取名:基名_zh_CN.properties
基名随便起,但是需要在struts.xml中配置一个常量,方法如下:
<constant name="struts.custom.i18n.resources" value="基名">
(2)带有占位符的文件访问
在页面上,通过<s:param/>给占位符赋值
例如:
login_succ=\u6B22\u8FCE{0}\u767B\u9646\uFF01{1} 欢迎{0}登陆,{1}
login1=\u597D\u597D\u5B66\u4E60\uFF0C\u5929\u5929\u5411\u4E0A 好好学习,天天向上
页面上:
<s:text name="login_succ">
<s:param value="user.username"></s:param>
或者(注意:value的值必须从值栈或者使用ognl表达式去取)
<s:param >值</s:param>
<s:param value="%{getText('login1')}"></s:param>
</s:text>
(3)页面手动选择中文版或者英文版
为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。
i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale
public class ChangeAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = -6866328775007509864L;
private String lang;
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
Locale l=null;
public String execute() throws Exception{
if(lang.equals("1")){//中文
l=Locale.CHINA;
}else{
l=Locale.US;
}
ActionContext.getContext().setLocale(l);
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
session.setAttribute("WW_TRANS_I18N_LOCALE", l);
return LOGIN;
}
}
<a href="login/changelang.action?lang=2"><s:text name="english"/></a>