`
PerfectPlan
  • 浏览: 121086 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts2-I18n国际化

阅读更多

 

关于Struts2-I18n国际化
一、什么是I18N?

:人们常把I18N作为“国际化”的简称,其来源是英文单词 internationalization的首末字符i和n。18为中间的字符数。 

二、为什么要是用国际化?

:互联网是一个多元文化的集结地,它让信息变的全球化。但是每一个国家的语言却是不同的,那么如何使得在某个国家使用某种语言的版面了?那就是使用I18N.

三、Java中对I18N的支持。

:我们知道Java在底层就提供了国家化的操作,在JDK帮助文档中我们可以找到有关于使用I18N的几个重要的类

 1.Locale 获取使用场地等信息

 2.ResourceBundle 获取资源文件包

3.MessageFormat  进行参数的设定

 

public class TestI18n {
	/*
	 * JDK 自带的I18N功能的实现
	 * */
	public static void main(String[] args) {
		Locale.setDefault(Locale.US);
	/*
         Locale []   locales= Locale.getAvailableLocales(); 
          //获取已经安装的语言文件信息				
	for (Locale locale : locales) {System.out.println(locale.getDisplayCountry()+" : 
        "+locale.getCountry());
	 //获取国家 和 国家名的缩写 如:   中国:CN  美国:US
		}
	System.out.println("--------------------------------------------------------");
					
	for (Locale locale : locales) {
	System.out.println(locale.getDisplayLanguage()+" : "+locale.getLanguage());
	//获取语言 和 语言缩写   如:中文:zn  英文:en
	}
         */
					
     ResourceBundle bundle = ResourceBundle.getBundle("message", Locale.CHINA);
//资源文件对象 getBundle方法的参数为 资源文件basename 和  指定的语言表示(也就是使用什么语言)
//message 为配置文件的前缀 这里有两种语言文件:message_zh_CN.properties, message_en_US.properties
	String value=bundle.getString("hello");
//hello为配置文件中的key
		  /*
		hello=hello={0}\u4E2D\u56FD\u4F60\u597D\u5440!
		*/
					
	String format = MessageFormat.format(value, new String[]{"北京"});
	//使用MessageFormat的format方法进行参数的设定value为需要设定的
        //数据new String[]{"北京"} 则是设定的参数

	String values="我是{0},来自{1},很高兴认识你{2}";				
	String strs=MessageFormat.format(values, new String []{"天蓝","地球","外星人"});
		System.out.println(strs);
		System.out.println(format);
	}
}
 

 

     四、Struts2中的国际化。

:首先我们要知道的是,Struts2的国际化功能是基于Java中的上述操作.我们主要需要了解的是如何在不同的阶层设

置I18N的使用。

1.关于I18N的资源文件的创建

a):I18N的资源文件的名称规范为:BaseName + (_language) +(_country)+(.properties)

BaseName:可以随便起

language:对应设定的语言

country: 对应语言的国家  如:

message_zh_CN.properties (中文资源包) 

message_en_US.properties(英文资源包)

 

b):资源文件的创建有四种方式。

1.全局的资源文件

:创建在Src的根目录下 资源文件的basename 由struts.xml文件中的<Constant

name="struts.custom.i18n.resources" value="message"> value值指定

如:

message_zh_CN.properties (中文资源包) 

message_en_US.properties(英文资源包)

2.包级别的资源文件

:创建该包目录下资源文件的basename 为固定写法

如:

package_zh_CN.properties (中文资源包) 

package_en_US.properties(英文资源包)

3.类级别的资源文件

:创建在包目录下资源文件的basename为类的名称

如:

RigesterAction_zh_CN.properties(中文资源包)

RigesterAction_en_US.properties(英文资源包)

4.临时的资源文件

:创建在Src的根目录下basename 主要是给<s:i18n>标签提供数据信息的

如:

temp_zh_CN.properties(中文资源包)

temp_en_US.properties(英文资源包)

c):关于资源文件的优先级

文件的优先级是有小及大的:程序为先访问 类级别的资源包 -> 包级别的资源包 -> 全局的资源文件包

d):关于取出资源文件中的信息

1.界面上的取值和设定参数的方法

:使用struts2的标签库

第一种:<S:text name="指定资源文件中的key"/>

第二中:<s:i18n name="指定资源文件的basename名称">

<s:text name="指定资源文件中的key">

<s:param>对应资源文件的{0}</s:param>

<s:param>对应资源文件的{1}</s:param>//依次类推

</s:text>

</s:i18n>

2.Action-validation.xml中的取值的方法:

<message key="指定资源文件中的key"></message>

3.Action中的取值和传入参数的方法

调用ActionSupport的getTest()方法获取信息

this.getTest("指定资源文件中的key","对应参数的集合或数组");

如:

资源文件的信息为:hello=wellcome to ,{1}

this.getTest("hello",new String []{"天蓝"});

结果为:wellcome to 天蓝

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics