一、国际化资源文件分为三种级别
(1);全局资源文件,可以被整个应该程序引用,也就是struts.custom.i18n.resources=messageResource指定的文件
(2);包级资源文件,每个包的根目录下可以新建资源文件,仅被当前包中的类访问.文件名格式为:package_语言代码_国家代码.
(3);Action级资源文件,仅被当前Action引用,名称为action名_语言代码_国家代码<br>查找顺序为从小范围到大范围, Action级优先级最大
二、国际化配置
1、全局
src目录下新建 struts.propertie, 里边写入类似配置:
struts.custom.i18n.resources=messages
注:xml文件为 <constant name="struts.custom.i18n.resources" value="messages" />
然后在src目录下建messages_en_US.properties (英文):
name=name
sex=sex
在src目录下建messages_zh_CN.properties (中文) :
name=姓名
sex=性别
页面获取国际化信息:
<s:property value="%{getText('name')}" />
<s:property value="%{getText('sex')}" />
或者
<s:text name="name" />
<s:text name="sex" />
2、包级
<s:i18n name="Chinese">
i18n标签内部:<s:text name="name" />
<br>
</s:i18n>
如果加入i18n标签,就会在Chinese.properties文件查找
3、带参数的国际化
在资源文件的国际化字符串中使用OGNL,格式为${表达式},例如:
validation.require=${getText(fileName)} is required
例如:
test.hello=Hello,{0} {1}!
test.hello=你好,{0} {1}!
在显示这些国际化字符时,同样有两种方法设置参数的值:
使用标志的value0、value1...valueN的属性,如:
<s:text name="test.hello" value0="222" value1="zhangsan" />
使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,如:
<s:text name="test.hello">
<s:param value="222" />
<s:param>zhangsan</s:param>
</s:text>
输出:你好,222 zhangsan!
<% String sss = "zhangsan"; %>
<!-- param value="---" 这种形式不能赋值变量 -->
<s:text name="test.hello">
<s:param value="222" />
<s:param><%=sss %></s:param>
</s:text>
4、在Action中国际化
String test = getText("test");
//带参数的国际化
String he = getText("test.hello", new String[]{"111","222"});
System.out.println(test);
System.out.println(he);