通过页面设置国际化语言

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

 

 

你可能感兴趣的:(jsp,xml,struts,浏览器)