Struts2学习(六)—国际化

在很多成熟的商业软件中,可以让用户自由切换语言,当用户进入系统时候,可以出现一个下拉列表框,让用户选择语言,一旦用户选择了自己需要使用的语言环境,整个系统的语言环境将一直是这种语言环境。
Struts2也可以允许用户自行选择程序语言。而且,因为Struts2的支持,在程序中自行选择语言环境将变得更加简单。

一. Struts2国际化的运行机制
在Struts 2中,我们可以通过ActionContext.getContext().setLocale(Locale arg)可以设置用户的默认语言。不过,这种方式完全是一种手动方式,而且需要编程实现。
为了简化设置用户默认语言环境,Struts 2提供了一个名i18n的拦截器(Interceptor),并且将其住注册在默认的拦截器栈中

i18n拦截器在执行Action方法前,自动查找请求中的一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,并转换成Locale对象,并将其设为用户默认的Locale(代表语言/国家环境)。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为“WW_TRANS_I18N_LOCALE”的属性中。一旦用户Session中存在一个名为“WW_TRANS_I18N_LOCALE”的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
我们在之前练习的项目中,我们在一些界面的提示信息使用的是英文,这对于非英语国家来说,并不是一个很好的设计,现在我们就使用struts2 的国际化来进行一些优化
Struts2学习(六)—国际化_第1张图片
配置action专属的国际化配置文件
属性文件名字和位置
在Action类相同包下建立以Action开头的国际化属性文件:
Struts2学习(六)—国际化_第2张图片
示例代码
编写属性文件内容
使用中文的配置文件
Struts2学习(六)—国际化_第3张图片
英语的同上,只是把值改成英文的
在jsp访问

    <s:debug></s:debug>
    <h2>
        <s:text name="messagetitle"></s:text>
        <!-- <s:property value="getText('messagetitle')" /> 这种方式通过OGNL调用方法getText(),也能输出国籍话语言 -->
    </h2>

    <s:form action="register">

        <!--key作用 1、生成input的name 2、要查找属性文件的key 3、当找不到时,就显示key -->
        <s:textfield key="personBean.firstName" />
        <s:textfield key="personBean.lastName" />
        <s:textfield key="personBean.email" />
        <s:textfield key="personBean.age" />
        <s:submit />
    </s:form>

因为属性文件是该Aciton专用,直接请求jsp,jsp不能帮你帮你读取属性文件,同时也不知道读取那个属性文件。
因此我们需要配置struts.xml转发到该jsp

<action name="registerInput" class="com.lgh.struts2maven.action.Register"
            method="input">

            <result name="input">/register.jsp</result>
        </action>

在index.jsp页面中

<s:url action="registerInput" var="regLink"></s:url>
<h2><p><a href="${regLink}"><s:text name="register"></s:text></a> for our prize drawing.</p></h2>

测试
Struts2学习(六)—国际化_第4张图片

使用英语访问:
index.jsp页面

<s:url action="registerInput" var="regLinkEN">
<!-- 传入的参数可以设置本地语言为en_US -->
<s:param name="request_locale" >en_US</s:param>
</s:url>
<h2><p><a href="${regLinkEN}"><s:text name="registerEN"></s:text></a> for our prize drawing.</p></h2>


注意:
我们设置request_locale 的值后,这时locale 的值 已经变为我们设置的值了,如果我们想使用原先的locale 的值,我们必须从新为其赋值
Struts2学习(六)—国际化_第5张图片
我们在上面写的国际化配置文件只是针对某个action起作用,我们还可以创建在包范围内配置文件,其可以被该文件所在包及其子包所使用
名字
在某个包下新建名字package开头的属性文件:

全局国际化
2.3.1 位置和名字
可以在任意包下,新建任意名字国际化属性文件:
Struts2学习(六)—国际化_第6张图片
在struts2.xml中配置全局属性文件

<constant name="struts.custom.i18n.resources" value="msg"></constant>

编写属性文件
Struts2学习(六)—国际化_第7张图片
另一个项目配置全局文件:
Struts2学习(六)—国际化_第8张图片
Struts2学习(六)—国际化_第9张图片
实例代码
可以在任意jsp页面添加:

<hr>
<s:text name="help"></s:text>

测试
直接请求jsp即可
总结
资源集按如下顺序搜索:

ActionClass.properties
Interface.properties (每个接口及子接口 )
BaseClass.properties ( Object.properties)
ModelDriven的 model (如果实现了 ModelDriven), 对于model 对象重复步骤 1
package.properties (类位于的文件夹和每个父文件夹,直到根文件夹)
查找 i18n消息 key自身层次
全局资源属性文件
  1. Action专用和包属性文件需要经过Action转发,而全局不需要
  2. 全局属性文件在框架启动后,就读取一直到项目结束,占用内存,因而尽力少写信息

你可能感兴趣的:(国际化,struts2.0)