国际化配置文件分为:
全局资源文件
包范围资源文件
Action类的资源文件
一、全局资源文件:
1、放到WEB-INF/classes目录下。
资源文件的命名规则: 文件名前缀.语言种类.properties
例如:
中文:
resource_zh_CN.properties
内容:
username=用户名
password=密码
英文:
resource_en_US.properties
内容:
username=username_en
password=password_en
2、在 struts.xml 中:
<struts>
<constant name="struts.custom.i18n.resources" value="itcast"></constant>
<package name="validate" namespace="/validate" extends="struts-default">
<action name="i18nAction" class="cn.google.action.I18nAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
3、在 I18nAction.java 中:
public class I18nAction extends ActionSupport implements Serializable {
public String execute(){
//取出资源文件中的welcome的值
String value = getText("username");
//封装到请求范围中
ActionContext.getContext().put("message", value);
return SUCCESS;
}
}
4、在 i18n.jsp 中:
<body>
<s:text name="welcome">
</s:text>
</body>
---------------------------------------------------------------------------------------
国际化——输出带占位符的国际化信息
1、资源文件中的内容如下: resource_zh_CN.properties:
welcome={0},欢迎来到中国{1}
2、利用页面传递参数:在 i18n.jsp 中
<body>
<s:text name="welcome">
<s:param>克林顿</s:param>
<s:param>学习</s:param>
</s:text>
</body>
3、结果
访问:localhost:8080/项目名/i18n.jsp,结果:welcome=克林顿,欢迎来到中国学习。
4、或者,通过Action类传递参数:在 I18nAction 中:
public class I18nAction extends ActionSupport implements Serializable {
public String execute(){
//取出资源文件中的welcome的值
String value = getText("welcome", new String[]("雷锋","学习"));
//封装到请求范围中
ActionContext.getContext().put("message", value);
return SUCCESS;
}
}
5、结果
访问:localhost:8080/项目名/i18n.jsp,结果:welcome=雷锋,欢迎来到中国学习。
---------------------------------------------------------------------------------------二、包范围资源文件
包范围资源文件:服务于Java类中的包下的动作类的。
取名规则:package_语言_国家.properties
示例:
在 src 中建立 package_CN.properties:
welcome={0},欢迎来到北京{1},package
在 src 中建立 package_US.properties:
welcome=Welcome to Beijing,package
访问:localhost:8080/项目名/validate/i18nAction //结果显示从包范文中取值。
*搜索顺序:
包 > 全局
---------------------------------------------------------------------------------------
三、Action 范围资源文件
动作类的资源文件:放到与动作类相同的包中
取名:动作类名_语言_国家.properties
示例:
在 I18nAction 同包中建立 I18nAction_zh_CN.properties:
welcome={0},欢迎来到北京{1}, action
在 src 中建立 package_US.properties:
welcome=Welcome to Beijing, action
访问:localhost:8080/项目名/validate/i18n.jsp //结果显示从全局范围中取值。
访问:localhost:8080/项目名/validate/i18nAction //结果显示从包范围中取值。
---------------------------------------------------------------------------------------
如果同时配置三个范围的国际化,struts2 提供个 i18n 标签来便捷的访问对应资源:
示例:在 i18n1.jsp 中:
<body>
<s:i18n name="resource">
<s:text name="welcome">
<s:param>yr</s:param>
<s:param>study</s:param>
</s:text>
</s:i18n>
<s:i18n name="cn/demo/action/package">
<s:text name="welcome">
<s:param>wxy</s:param>
<s:param>find boy friend</s:param>
</s:text>
</s:i18n>
</body>
访问:localhost:8080/项目名/validate/i18n.jsp 看结果