struts里面的资源文件一共有三个范围,全局范围,package范围,Action范围,下面我们来大致了解下它们的配置和用法
1.全局范围
首先,得在struts.xml里面配置一个常量
<constant name="struts.custom.i18n.resources" value="yuchao" />
value指明全局资源文件的基名,比如若是上面这种配置的话,在src目录下建两个资源文件
yuchao_en_US.properties(英文环境),yuchao_zh_CN.properties(中文环境),以key=value的形式写好资源文件就可以在action或jsp中访问了。例如在yuchao_en_US.properties中配置name=zhangsan
yuchao_zh_CN.properties中配置name=/u5F20/u4E09(“张三”的utf-8编码格式)
那么我们在jsp中就可以通过<s:text name="name"/>输出国际化信息了,在jsp页面就可以通过
<s:textfield key="name"/>来输出,在继承了ActionSupport的Action中可以通过this.getText("name")来输出
我们还可以为国际化信息指定占位符,更加灵活地使用资源文件,比如 我们在资源文件里配置
welcome={0},welcome to {1} java(中文我就不写了,类似的)
在jsp页面可通过<s:text name="welcome">
<param>zhangsan</param>
<param>study</study>
</s:text>
来输出“zhangsan,welcome to study java”信息,在action下可以通过this.getText("welcome",new String[]{"zhangsan","study"})来输出 “zhangsan,welcome to study java”
2.package范围
用法和全局范围除了基名是package外,其他都是完全相同的,yuchao_en_US.properties改成package_en_US.properties即可,不需要指定struts.custom.i18n.resources常量
3.Action范围
基名改为ActionClassName_en_US.properties其它与上面两种情况完全相同
不需要指定struts.custom.i18n.resources常量
资源文件的搜索范围
首先struts会在与类名一致的ActionClassName_language.properries下搜索,如果搜索不到才会在Action所在的包下搜索,再找不到的话就会在上层包范围下搜索,只有找不到最后才会在“struts.custom.i18n.resources”指定的常量下去搜索(这里都是通过key来搜索的)
使用指定的资源文件来输出国际化信息
<s:i18n name="yuchao">
<s:text name="name">
</s:i18n>
可以输出基名为yuchao的资源文件里面的信息
如果要访问某个包下的资源文件,可以通过
<s:i18n name="com/yuchao/action/package">
<s:text name="welcome">
<s:param>zhangsan</s:param>
<s:param>study</s:param>
</s:text>
</s:i18n>
来访问
结束。。。
(若有不完整的地方,欢迎各位补充,不胜感激,^_^ )