十四、Struts2的国际化
1、配置全局国际化消息资源包
- 配置全局消息资源包
<!--配置全局消息资源包 -->
<constant name="struts.custom.i18n.resources" value="msg"></constant>
b、如何访问
- 在动作类中:
前提,动作类继承ActionSupport
public class Demo1Action extends ActionSupport{ @Override public String execute() throws Exception { // 在动作类中获取消息包中的信息 String str = getText("hello"); System.out.println(str); return NONE; } } |
- 在页面中:
<!-- 从消息包中取不到对应的key值,自己直接上了 --> <s:textfield name="username" key="hello"></s:textfield> |
或者
<s:text name="hello"></s:text>
- 自由指定消息资源包,借助struts2的有关国际化的标签:
<!-- 自由指定消息资源包:name 的值为资源包在类路径中的路径 --> <s:i18n name="msg"> <s:text name="hello"></s:text> </s:i18n> |
如果消息资源包在com.itheima.resources.msg_zh_CN.properties
<s:i18n name="com/itheima/resources/msg"> <s:text name="hello"></s:text> </s:i18n> |
配置局部消息资源包
一定要经过Action才行:
书写规范:在动作类所在包中,建立名字"动作类名-zh-CN.properties"的配置文件。动作类中访问,发现局部的比全局的优先级高。
/*
* 关于局部消息资源包内容的访问:
* 1.必须经过Action才行
* 2.Action继承了ActionSupport
* 才会从局部消息资源包中取数据。
*
* 如果这样来访问:(原理:ValueStack和OGNL有关)
* 1.直接访问jsp,没有经过动作类。从全局取
* 2.如果Action没有基础ActionSupport。从全局中取
*/
public class Demo1Action extends ActionSupport{
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
3、包范围的消息资源包
也得经过action访问
书写有规范的,名称为package_zh_CN.properties,放在类的包中。可以被包中及子包的所有动作类来访问。
总结: