Struts2国际化

jopen 11年前

国际化资源文件
全局资源文件: WEB-INF/classes路径下 baseName.properties,baseName可自定义
包范围资源文件:包的根路径下package.properties,baseName必须是package
Action范围资源文件:Action类文件所在目录下ActionName.properties,baseName为相应ActionName
对于不同语言和地区的资源文件,命名方式为 baseName_<language>.propertiesbaseName_<language>_<local>.properties,如baseName_en.properties,baseName_en_US.properties,baseName_zh.properties,baseName_zh_CN.properties等

全局国际化资源
在struts.properties文件中配置常量
struts.custom.i18n.resources=<baseName>

临时指定资源文件
在JSP中<s:i18n name=""></s:i18n>之间的子标签使用临时指定的资源文件,其中name属性的值为临时指定的资源文件的baseName

输出国际化消息
在JSP页面中输出国际化消息,可以使用Struts2的标签<s:text name="" />,其中name属性对应资源文件中的key
在表单元素的Label里输出国际化消息,可以为该表单标签的key属性赋值,对应资源文件中的key
在Action类中访问国际化消息,可以使用ActionSupport类的getText方法,该方法接受一个name参数,对应资源文件中的key

输出带占位符的国际化消息
在JSP页面中输出带占位符的国际化消息,可以通过在<s:text />标签中使用多个<s:param />标签来依次填充消息中的占位符
在Action类中访问带占位符的国际化消息,可以调用getText(String key, List<?> args)或getText(String key, String[] args)方法填充消息中的占位符,其中参数args是一个字符串组成的List或字符串数组,其中元素依次填充到国际化消息的占位符中
此外,通过在国际化消息中使用OGNL作为占位符,可以直接访问值栈,将对应的值填充到国际化消息中

资源文件的加载顺序
在Action类中访问资源文件的顺序:
1.优先加载相同路径下baseName为ActionName的资源文件;
2.如果找不到指定的key,则查找超类路径下baseName为超类ActionName的资源文件;
3.如果找不到指定的key,则查找所实现接口路径下baseName为接口类名的资源文件;
4.如果找不到指定的key,且Action使用模型驱动模式,则对getModel()方法返回的model对象从第一步开始执行;
5.如果找不到指定的key,则加载当前包下的包范围资源文件;
6.如果找不到指定的key,则沿当前包上溯查找包范围资源文件,直到最顶层包;
7.如果找不到指定的key,则查找全局资源文件

在JSP中访问资源文件的顺序:
1.对于临时指定资源文件的标签,优先查找临时指定的资源文件;
2.在全局资源文件中查找指定的key;
3.如果找不到指定的key,则直接输出该key