您的位置:首页 > 编程语言 > Java开发

Struts 2 的国际化

2015-09-22 16:12 465 查看
1、Struts2 的国际化包括三个部分:前台页面的国际化(jsp页面)、Action类的国际化、验证配置文件的国际化。
2、Struts2 国际化资源文件的加载(只需要编写国际化消息的资源文件即可)
1)、加载全局资源文件
a、全局资源文件需要在struts.xml文件中配置<constant name="struts.custom.i18n.resources" value="全局资源文件名字">
b、在src目录下创建struts.properties文件并写入struts.custom.i18n.resources=全局资源文件名字
c、多个资源文件名以英文逗号(,)隔开。
2)、加载局部资源文件
a、指定包范围资源文件:在包根目录下建立package_<language>_<country>.properties(package基本名不可变)的资源文件,不需要配置。
b、指定Action范围资源文件:在Action类所在路径下创建ActionName_<language>_<country>.properties的资源文件,不需要配置。
c、临时范围的资源文件:在src目录中创建baseName_<language>_<country>.properties的资源文件,这种方式主要针对JSP视图页面。
<s:i18n name="baseName">     <!-- 指定临时资源文件 -->
<s:text name="key"></text><!-- 显示资源文件的内容 -->
</s:i18n>
注:Struts 会按照就近原则加载相应的资源内容。如:在Action类中通过getText("key")获取资源消息时会按照  Action资源文件-->包资源文件
-->全局资源文件  的顺序查找对应的资源内容;如果多个资源文件中都存在该key/value的话就选择最近的显示。

3、国际化资源消息的访问
1)、jsp 页面: <s:text name="key"></s:text>      <s:property value="getText('some.key')" />
2)、Action 类中: getText("key");
3)、表单中:在标签中指定一个key属性 <s:textfield name="user" key="some.key"></s:textfield>
4)、验证文件中:<message key="some.key"></message>
4、国际化消息中占位符的使用
1)、当消息内容中存在变量时,可以用  {n} 占位符来代替。然后在调用时进行填充
2)、占位符的填充:
a、JSP页面上的<s:text name="some.key"></s:text> 通过<s:param value="content"/> 标签来填充
b、Action中调用getText(String key, List args) 或 getText(String key ,String[] args) 的方式来填充占位符

5、Struts2 实现用户自行选择语言
1、通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。
2、Struts中提供了一个名为i18n的拦截器,并注册默认拦截器defaultStack中。i18n拦截器在Action方法执行前,会自动查找请求中一个名为
request_locale的参数,如果该参数存在,拦截器就自动将其转换成Local对象,并设置为用户的默认Locale(代表国家/语言环境),拦截器
会将参数设置在session中,每个请求默认的都会调用和设置。

6、所有页面的国际化
由于Sturts2 拦截器只能拦截Action请求,故所有被直接请求的jsp页面是不会被Struts2的拦截器拦截。也就不会应用之前设置的Locale而是使用
浏览器默认的(国家/语言环境)。解决方案为:让所有的重定向(redirect)到jsp界面的请求,转换成重定向(redirectAction)到Action的请求,经过
指定的Action然后转发到相应的jsp页面。
注:可以将不想让用户直接访问的jsp页面放在WEB-INF目录下(在该目录下的jsp页面用户是没有权限直接访问的,只能通过Action实现页面的跳转访问)

具体配置实例如下:
<package name="mailreader-support" namespace="/" extends="mailreader-default">
<action name="Registration_*" method="{1}" class="mailreader2.Registration">
<result name="input">/WEB-INF/jsp/Registration.jsp</result>
<result type="redirectAction">MainMenu</result>
</action>

</package>

<package name="wildcard" namespace="/" extends="mailreader-support">

<action name="*" class="mailreader2.MailreaderSupport">
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
</package>

上面的配置结果:如果对Registration_*的请求执行成功,将跳转到MainMenu.jsp页面。因为最终的MainMenu.jsp页面是重定向到Action的结果。所以
Action拦截器还会自动使用先前用户设定的Locale(国家/语言环境)来响应MainMenu.jsp页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: