国际化的作用就是根据不同国家的用户在访问Web或其他类型的程序时将各种信息以本地的常用形式显示出来如界面信息在中国就会显示中文信息在以英文为主的国家里就会显示英文信息还有就是一些信息的格式如日期格式等
从属性文件中获得字符串信息是国际化的基本应用在Struts中使用的属性文件就是Java属性文件扩展名为properties在Struts中的属性文件可以有很多默认的位置Struts可按如下的顺序(或步骤)来定位属性文件
ActionClassproperties属性文件名和动作类同名Struts会首先查询与当前访问的动作类同名并且和ActionClassclass在同一个目录下的属性文件
BaseClasspropertiesBaseClass表示动作类的基类所有动作类都会查找Objectproperties文件(因为Object是所有Java类的基类)但要注意的是Objectproperties文件可不能放到当前动作类的目录中由于Object在javalang包中因此Objectproperties要放到jdk包的javalang目录中而对于ActionSupportproperties文件当然也不能放到动作类的当前目录中由于ActionSupport类中comopensymphonyxwork名中因此需要将ActionSupportproperties文件放到xworkjar包中的comopensymphonyxwork目录中由于放到jar文件中不太方便因此可以使一个和当前动作类在一个目录的类先继承ActionSupport然后所有的动作类都继承于这个类代码如下
publicclassMyActionSupportextendsActionSupport{ }publicclassActionClassextendsMyActionSupport{ }
这样的话只要存在一个MyActionSupportproperties在当前目录下的所有动作类都会读取这个文件
Interfaceproperties这类文件和BaseClassproperties类似Interface表示动作类实现的接口
如果动作类实现了ModelDriven 那么重复第步
packageproperties大家要注意这个文件就叫packageproperties不象Interface和BaseClass都是泛指这个文件可以放到当前动作类的包的任何一层目录下如当前动作类在actiontest包中那么packageproperties可以放到action目录中也可以放到actiontest目录中Struts会从离动作类最近的位置开始查找packageproperties文件
搜索iln资源信息
查找全局资源属性文件
如下面是一个动作类
packageactiontest;
importorgapachestruts*;
importcomopensymphonyxworkActionSupport;
publicclassInternationalizingextendsActionSupport
{
publicStringexecute()throwsException
{
returnforward;
}
}
在actiontest目录下有一个Internationalizingproperties文件内容如下
delete = 删除
save = 保存
我们可以在jsp文件中使用如下几种方法取出资源信息
<s:propertyvalue=getText(delete)/>
<s:text name=save />
使用<s:iln>标签这个标签可以直接定位属性文件如abcproperties在WEBINFclassestest目录下内容和Internationalizingproperties一样则可以使用如下的代码读取abcproperties的内容
<%@taglibprefix=suri=/strutstags%>
<s:inname=testabc>
<s:textname=save/>
<s:textname=delete/>
</s:in>
当然我们也可以使用全局的属性文件在WEBINFclasses目录下建立一个strutsproperties文件内容如下
strutscustominresources=my
在WEBINFclasses目录下建立一个myproperties文件当Struts按着上述的顺序没有找到相应的属性文件时最后就会考虑寻找全局的属性文件因此就会找到myproperties
还可以通过属性文件名来让Struts按着客户端浏览器的语言环境来找符合某种语言的属性文件如有三个属性文件languagepropertieslanguage_enpropertieslanguage_zhproperties如果客户端的语言是中文Struts就会读language_zhproperties如果是英文就会读language_enproperties如果这两个文件的某个不存在就会读languageproperties读者可通过IE的[工具]>[Internet]>[语言]来测试客户端浏览器的语言如图所示
图