struts2的国际化标签

来源:互联网 发布:淘宝体天涯 编辑:程序博客网 时间:2024/05/16 19:42

1.      java的国际化

Java国际化主要靠三个类实现:

java.util.ResourceBundle加载资源包,

java.util.Local语言环境

java.text.MessageFormat格式化消息

资源文件的三种形式:

baseName_language_contry.properties,

baseName_language.properties,

baseName.properties其中baseName表示资源文件的基本名

Locale local=Locale.getDefault();//获得Locale对象,默认当前国际和语言

ResourceBundle bundle=ResourceBundle.getBundle("test/message",locale);//根据当前环境加载资源文件

System.out.println(bundle.getString("hello"));//在message_zh_CN.properties中找,找不到在message_zh.properties中找,找不到在message.properties中找,再找不到就报错误

如果在资源文件中带了占位符,例如:msg={0},你好,今天是{1}

那么就要使用MessageFormat了,这个类里有个format(String pattern,Object … values)方法

还有一种方式是以实现了ListResourceBundle的类为资源文件,例如baseName_zh_CN.class,这种方式这里不介绍

2.      jsp的国际化实现

参考:http://blog.csdn.net/sqs201/article/details/7204244

 

3.      struts2的国际化

a)        全局范围

配置常量struts.custom.i18n.resources=baseName国际化资源文件的位置,那么在任何地方都可以使用资源文件中的内容,在页面上可使用<s:text name=”msg” ><s:param ...></s:text> 在action中使用getText(msg,newString[]{…})

在struts2中资源文件中可以使用ognl表达式作为占位符,例如welcome_msg=${username},welcome you!,但是这种占位符功能有限,也只能直接取action中的属性的值

b)        包范围

在action所在包的路径下定义资源文件,package_language_country.properties 那么该包下所有的action可使用,这里记住一定是”package”字符串,而不是com.other.xxx.propertis,package_xx_xx.properties和action并行存放

c)        Actioin范围

在action的java文件所在的路径下存放ActionClassName_language_country.properties,则只有类名为ActionClassName的action和转发到的页面可以使用.

d)        临时

把<s:i18n ..> 作为<s:text..>的父标签, 在s:i18n中指定资源文件,那么也只有在这个标签里可以使用

 

如果在UserAction中使用国际化,查找key的顺序如下:

UserAction.properties->UserAction的父接口.properties->package.properties->全局

如果在UserAction转发到的页面上使用国际化,那么顺序就是:临时->类范围->包范围->全局


原创粉丝点击