收藏夹“通过页面设置国际化语言”

Struts1.X 中通过页面设置国际化语言:http://wing123.iteye.com/admin/blogs/384112

 

Jsp代码 复制代码
  1. <body>   
  2. <s:a href="/Struts2/changeLang.action?lang=en">English</s:a>   
  3. <s:a href="/Struts2/changeLang.action?lang=zh">中文</s:a>   
  4.   <center>                   
  5.     <s:text name="addUser"/>   
  6.   </center>   
  7. </body>  
  <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

Xml代码 复制代码
  1. <struts>  
  2.     <!-- 设置全局配置文件 -->  
  3.     <constant name="struts.custom.i18n.resources" value="message"/>  
  4.     <!-- 解决中文乱码 -->  
  5.     <constant name="struts.i18n.encoding" value="gbk"/>  
  6.        
  7.     <package name="Struts2" extends="struts-default">  
  8.            
  9.         <action name="changeLang" class="com.bjsxt.action.ChangeLangAction">  
  10.             <result name="success">/register2/register.jsp</result>  
  11.         </action>    
  12.            
  13.     </package>  
  14. </struts>  
<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

Properties代码 复制代码
  1. addUser=Add User  
addUser=Add User

 

message_ zh _CN.properties

Properties代码 复制代码
  1. addUser=\u6DFB\u52A0\u7528\u6237  
addUser=\u6DFB\u52A0\u7528\u6237

 

 

ChangeLangAction

Java代码 复制代码
  1. public class ChangeLangAction extends ActionSupport{   
  2.     private String lang;   
  3.   
  4.     public String getLang() {   
  5.         return lang;   
  6.     }   
  7.   
  8.     public void setLang(String lang) {   
  9.         this.lang = lang;   
  10.     }   
  11.        
  12.     @Override  
  13.     public String execute() throws Exception {   
  14.         changeLang();   
  15.         return SUCCESS;   
  16.     }   
  17.        
  18.     /**  
  19.      * 手动改变Locale  
  20.      */  
  21.     private void changeLang() {   
  22.         Locale currentLocale = Locale.getDefault();   
  23.         //1、根据页面请求,创建下同的Locale对象   
  24.         if("en".equals(getLang().trim())) {   
  25.             currentLocale = new Locale("en","US");   
  26.         }else if("zh".equals(getLang().trim())) {   
  27.             currentLocale = new Locale("zh","CN");   
  28.         }   
  29.         /*  
  30.          * 2、设置Action中的Locale  
  31.          *    前台页面的Locale和后台session中的Locale范围是不一样的  
  32.          *    a)只改页面Locale当前页面信息会改变但提交后Locale又会改回到默认的  
  33.          *    b)改变了后台Locale,当前线程中的页面Locale并不会改变,但会随下一次提交  
  34.          *      Action一同改变,所以可能要刷新页面两次,第一次只变后台Locale,第二次  
  35.          *      前台和后台同时改变  
  36.          *        
  37.          *    为避免上述情况,需要前台和后台的Locale一起改变  
  38.          */  
  39.            
  40.         ActionContext.getContext().setLocale(currentLocale);   
  41.         ServletActionContext.getRequest().getSession().setAttribute(   
  42.                 "WW_TRANS_I18N_LOCALE", currentLocale);   
  43.     }   
  44. }  
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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值