国际化-Action范围资源文件:
我们也可以为某个action单独指定资源文件,方法如下:
在Action类所在的路径,放置ActionClassName_language_country.properties资源文件
源文件,ActionClassName为action类的简单名称
当查找指定key的消息时,系统会先从
ActionClassName_language_country.properties资源文件查找,如果没有找到对
应的key,然后没着当前包往上查找基本名为package的的资源文件,一直找到最顶层包。
如果还没有找到对应的key,最后会从常量struts.customi18n.resources指定的资源文件中寻找。
国际化-jsp中直接访问某个资源文件:
struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们可以在类路径下直接
从某个资源文件中获取国际化数据,而无需任何配置:
<!-- 访问全局范围国际化资源 -->
<s:i18n name="itcast">
<s:text name="welcome">
<s:param>小明</s:param>
<s:param>学习</s:param>
</s:text>
</s:i18n>
itcast为类路径下资源文件的基本名。
如果要访问的资源文件在类路径的某个包下,可以这样访问:
<!-- 访问包范围国际化资源 -->
<s:i18n name="cn/itcast/action/package">
<s:text name="welcome">
<s:param>小明</s:param>
<s:param>学习</s:param>
</s:text>
</s:i18n>
<br/>
上面访问cn.itcast.action包下基本名为package的资源文件。
如果要访问的资源文件在类路径的某个Action,可以这样访问:
<!-- 访问Action范围国际化资源 -->
<s:i18n name="cn/itcast/action/PersonManageAction">
<s:text name="welcome">
<s:param>小明</s:param>
<s:param>学习</s:param>
</s:text>
</s:i18n>
上面访问cn/itcast/action/PersonManageAction下基本名为PersonManageAction的资源文件。
在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化
的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,
不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。
方法如下:
在java的包下放置package_language_county.properties资源文件,package为
固定写法,处于该包及子包下的action都可以访问该资源。当查找到key的消息
时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量
struts.custom.i18n.resources指定的资源文件中寻找welcome=package:{0},welcom to bdqn{1}welcome=package:{0},欢迎来到北大青鸟{1}
/WEB-INF/page/message.jsp
package cn.itcast.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class PersonManageAction extends ActionSupport {
@Override
public String execute() throws Exception {
// List
s = new ArrayList
();
// s.add("小明");
// s.add("你好");
// ActionContext.getContext().put("message", this.getText("welcome", s));
ActionContext.getContext().put("message", this.getText("welcome", new String[] { "小明", "学习" }));
return "message";
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
结果
${message }
中国万岁