Struts 2 的国际化

    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页面。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值