在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。
方法如下:
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。
实例:
在与action同一个包下新建个文件,名字为package_zh_CN.properties
welcome= package:{0}\uFF0C\u6B22\u8FCE\u6765\u5230\u4F20\u667A\u64AD\u5BA2{1}
在src下新建一个配置文件,名字为csdn_zh_CN.properties
welcome= all{0}\uFF0C\u6B22\u8FCE\u6765\u5230\u4F20\u667A\u64AD\u5BA2{1}
通过action访问
struts.xml文件:
<constant name="struts.custom.i18n.resources" value="csdn" />
<package name="itcast" namespace="/test" extends="struts-default">
<action name="manage" class="cn.csdn.action.ManageAction">
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
</package>
Action中的方法:
public class ManageAction extends ActionSupport{
@Override
public String execute() throws Exception {
ActionContext.getContext().put("message", this.getText("welcome",new String[]{"小明","玩"})) ;
return "message";
}
}
重新加载后再次运行时,输出的内容为
package:小明,欢迎来到传智播客玩
通过jsp 访问:
Index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>国际互</title>
</head>
<body>
<s:text name="welcome">
<s:param>李明明</s:param>
<s:param>学习</s:param>
</s:text>
</body>
</html>
浏览器输出结果:
all李明明,欢迎来到传智播客学习
jsp中的写法默认的访问的就是全局的