Struts2的全局/包/Action范围国际化应用

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!



准备资源文件,资源文件的命名格式如下:

baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:
中国大陆: baseName_zh_CN.properties
美国: baseName_en_US.properties


国际化--全局(整个应用都能访问)

 (1)现在为应用添加两个资源文件:
  第一个存放中文:itcast_zh_CN.properties  内容为:welcome=欢迎来到传智播客
  第二个存放英语(美国): itcast_en_US.properties  内容为: welcome=welcome to itcast
对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii  源文件.properties  目标文件.properties

 (2)在struts.xml中配置常量


    

国际化—包范围资源文件(package及其子package下)

     在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。

    方法如下:
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。

国际化—Action范围资源文件
(只有此Action才能访问)

   我们也可以为某个action单独指定资源文件,方法如下:
在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。

  当查找指定key的消息时,系统会先从ActionClassName_language_country.properties资源文件查找,如果没有找到对应的key,然后沿着当前包往上查找基本名为package 的资源文件,一直找到最顶层包。如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的资源文件中寻找。

如下:

国际化—输出带占位符的国际化信息

资源文件中的内容如下:
welcome= sunjob:{0},欢迎来到湖南{1}

在Action和jsp中取得器资源方法:
(1)在jsp页面中输出带占位符的国际化信息(默认是从全局资源文件寻找,不会从包级/Action级中资源文件寻找)

    
    学习


(2)在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。

  如:

System.out.println(this.getText("welcome",new String[]{"肖华","学习"}));


国际化—JSP中直接访问某个资源文件

struts2为我们提供了标签,使用标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:


   ------------------name=sunjob-----------------------
                肖华        学习     
    
                     
     ----------------name=edu/sunjob/action/package----------------------
                     肖华          学习       
    

                
     --------------name=edu/sunjob/action/WordAction----------------------
                     肖华          学习              

国际化--如何修改用户默认语言环境

 Action中:

 

package edu.sunjob.action;

import java.util.Locale;
import java.util.ResourceBundle;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class WordAction extends ActionSupport{
   //取得默认语言的资源
	public String getText(){
		System.out.println(this.getText("welcome",new String[]{"肖华","学习"}));
		return "success";
	}
	//Action中设置用户的默认语言。
	public String locale(){
		Locale locale = Locale.CHINESE;
		//得到默认的本地语言
		//Locale locale = Locale.getDefault();
		ActionContext.getContext().setLocale(locale);
		return "success";
	}
	//Action中取得指定语言的资源文件值
	public String i18n(){
		
		Locale locale = Locale.CHINESE;
		ResourceBundle rb = ResourceBundle.getBundle("sunjob",locale);
		String welcome = rb.getString("welcome");
		System.out.println(welcome);
		return "success";
	}
}

JSP中:

为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。  i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,并将其设为用户默认的Locale(代表国家/语言环境)。所以可以这样访问:http://localhost:8080/Struts2_06/i18n/word_getText.action?request_locale=zh_CN.注意只对同一个SESSION有效。

 除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为WWW.TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。      

<%@ page language="java" contentType="text/html; charset=GBK"%>

<%@taglib prefix="s" uri="/struts-tags"%>



function langSelecter_onChanged()

{

 document.getElementById("langForm").submit();

}



<%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%>



<%-- 使用lee.Locales创建locales实例 --%>



 <%-- 为locales实例传入current参数值,如果SESSION_LOCALE为空,则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%>

 



<%-- 让用户选择语言的表单 --%>



    

 



在其他页面中包含该页面:




你可能感兴趣的:(Struts2)