struts2的i18n国际化资源文件及动态语言切换
总结:
如果在同一个package下同时存在action级别的资源文件和package级别的资源文件, 那么优先找的是action级别的资源文件,
如果找不到, 再找package级别的资源文件.
一, action级别的i18n(麻烦, 不常用)
*.properties资源文件要和action在同一个package下, 然后在页面中使用<s:property value="getText('资源文件的key')" />取值
二, package级别的i18n(麻烦, 不常用)
*.properties资源文件要和action在同一个package下, 并且资源文件的命名前缀固定是package
范例: package级别的资源文件
public class HelloAction extends ActionSupport {
private String msg; +getter/setter
@Override
public String execute() throws Exception {
this.setMsg(super.getText("hello.msg"));
return ActionSupport.SUCCESS;
}
}
同一个包下创建package.properties
hello.msg =Hello World \!\!\!\!
访问:
三, 全局级别的i18n(要用就用这种)
1. 在src目录下新建xxx_en_US.properties和xxx_zh_CN.properties资源文件, xxx一般设置为项目名
2. 在struts.xml中配置资源文件
<!-- i18n国际化资源文件, bbs2009是资源文件的前缀 -->
<constant name="struts.custom.i18n.resources" value="bbs2009" />
3. 在页面中使用<s:property value="getText('资源文件的key')" />取值
-------------------------------------------
对于全局级别的资源文件, 还有另外一种配置方法(前提要保证在action的同级package下不存在action级别的资源文件
和package级别的资源文件):
在src下创建: Message.properties
hello.msg =mldn World \!\!\!\!
同时创建: struts.properties
struts.custom.i18n.resources = Message
注意: struts.custom.i18n.resources在struts2-core-2.1.8.1.jar中的default.properties中,
用于找资源文件, 其值写成Message.properties资源文件的前缀, 这样才能找到该资源文件
四, 动态语言切换
方法1: 在浏览器中输入http://localhost:8080/struts2_3000_BBS2009_07/admin/Login_input?request_locale=zh_CN
回车, 页面切换成中文, 后面是request_locale=en_US的时候是英文, 而且这样切换之后整个session会话窗口中都保持着
方法2: 当点击中文, 登录界面切换成中文, 但点击English, 登录界面切换成英文
实现:
登录界面:
<a href="admin/language?request_locale=en_US">English</a> |
<a href="admin/language?request_locale=zh_CN">中文</a>
struts.xml: namespace="/admin"
<!-- 中英文切换 -->
<action name="language" class="com.bjsxt.bbs2009.action.LanguageAction">
<result>/admin/Login_input.jsp</result>
</action>
LanguageAction.java:
@SuppressWarnings("serial")
public class LanguageAction extends ActionSupport {
@Override
public String execute() throws Exception {
return super.execute();
}
}