Struts2的国际化支持

    技术2022-05-20  29

    软件的国际化涉及以下几个方面:

    1.       界面静态的文字显示。

    2.       提示信息,主要包括错误提示和操作提示、在线帮助等。

    3.       日期时间、数字、度量以及货币等与使用习惯相关的一些提示。

    4.       邮政编码格式、尊称和称谓习惯、电话号码格式以及地址格式等需要改变页面布局的一些内容。

    5.       声音图片等涉及文化习惯的一些资源。

     

     

        Struts2的国际化是建立在Java国际化的基础之上的,也是使用资源包的方式,通过getBundle()方法来寻找指定Local相关联的资源包,再从资源包文件中查找指定Key所对应的国际化资源信息。  Struts2框架的底层国际化与Java国际化是一致的,作为一个良好的MVC框架,Struts2Java的国际化功能进行了封装和简化。

     

    一、    配置资源文件

    Struts2强调的是各个组件之间的松散耦合,各个组件之间都是通过配置文件来实现相关联和交互的。Struts2框架的国际化也是如此。

    Struts2框架加载资源文件一般都是通过常量设置来完成的。配置资源文件常量,即配置Struts2框架的struts.custom.i18n.resources常量,该常量定义了Struts2框架全局国际化资源文件的basename

     

    配置struts.custom.i18n.resources常量,可以在属性文件struts.properties中定义,也可以在配置文件struts.xml或者web.xml中定义。

    假设要定义配置一个basenameglobalMessagesstruts.custom.i18n.resources常量,可以在struts.properties文件中做如下配置:

    #在属性文件中定义basename

                     struts.custom.i18n.resources=globalMessages

           也可以在struts.xml文件中配置basename

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

                  同样,也可以在web.xml文件中定义:

              <init-param>

                  <param-name> struts.custom.i18n.resources </param-name>

                             <param-value> globalMessages </param-value>

    </init-param>

                       

    二、    Struts2的国际化应用

    只要开发者指定了struts.custom.i18n.resources常量,即指定了国际化资源文件的basename,那么就可以开发国际化应用了。

     

     1. 建立中文和英文的资源文件,globalMessages_en_US.propertiesglobalMessages_zh_CN.properties ,内容如下:

       globalMessages_en_US.properties文件:

         bbs_id=Article_Id

    bbs_title=Title

    bbs_author=Author

    bbs_text=Context

    bbs_date=date

    bbs_first=First Page

    bbs_next=Next Page

    bbs_pre=Pre Page

    bbs_last=Last Page

       globalMessages_zh_CN.properties 文件:

              bbs_id=/u6587/u7AE0/u5E8F/u53F7           (文章编号)

    bbs_title=/u6587/u7AE0/u4E3B/u9898         (文章标题)

    bbs_author=/u6587/u7AE0/u4F5C/u8005       (作者)

    bbs_text=/u6587/u7AE0/u5185/u5BB9          (内容)

    bbs_date=/u53D1/u8868/u65E5/u671F          (日期)

    bbs_first=/u9996/u9875                      (首页)

    bbs_next=/u4E0B/u9875                     (下页)

    bbs_pre=/u4E0A/u9875                      (上页)

    bbs_last=/u672B/u9875                      (末页)

     

                       注意:由于中文为非西欧字符集,而Java使用的是Unicode作为字符编码,所

    以中文要转换为Unicode编码。MyEclipse中提供了自动转换。

     

    2.       访问资源文件

    1. 用户视图访问国际化资源

    <s:text/>是显示静态文本,该标签中可以使用key属性来输出国际化信息。Form元素的标签也可以使用key来获得国际化信息。例如:     

          <s:text name="bbs_title"/>

          <s:textfield name="bbs_author" key="bbs_author"/>

     

    2.Action访问国际化资源

                             Struts2提供了一个ActionSupport工具类,开发自己的Action,只要继承该类就可以了。在该类的API文档中,该类提供了一个getText(String tTextName)方法,该方法根据资源文件中的key值来返回一个国际化资源信息。

                            例如:ActionSystem.out.println(getText("bbs_author")+":"+bbs_author);

     

    三、    使用占位符

    globalMessages_en_US.properties文件:

    welcomemsg=Hello {0}Now is {1}

         globalMessages_zh_CN.properties 文件:

                  welcomemsg=你好 {0},现在时间是:{1}

    1、  JSP视图中输出支持占位符的国际化资源信息需要使用标签库,可以再<s:text/>标签中定义多个<s:param …/>子元素,来分别对应<s:text…/>标签中引用的国际化资源中的占位符。

    如:<% Date now=new Date();%>

    <s:text name="welcomemsg">

      <s:param><s:property value="userName"/></s:param>

      <s:param><%=now%></s:param>

    </s:text>

     

    2、  Action中使用国际化资源占位符,仍然使用getText()方法,ActionSupport类中声明了多个getText()方法:

    String getText(String aTextName):以国际化资源文件中的key为参数查找国际化信息。

    String getText(String aTextNameList args):增加了一个List参数,作为填充占位符的参数,定义与MessageFormat一致。

    String getText(String keyString[] args):增加了一个字符串数组参数,作为填充占位符的参数,定义与MessageFormat一致。

    ……等等方法

    应用示例:

                 Date now=new Date();

                 System.out.println(getText("welcomemsg"),new String []       

                 {username,now.toString()});

     

    四、    包范围和Action范围的资源文件

    前面使用的资源文件,是根据Struts2框架常量struts.custom.i18n.resources指定的basename来建立的,该资源文件是全局资源文件。  Struts2框架还允许建立包范围的资源文件、Action范围内的资源文件等。

    1、         使用包资源文件的方法是:在包的根路径下建立多个文件名为package_language_country.properties的资源文件。 建好该包范围的资源文件后,该包中的所有的Action都可以访问了。

    注意:上面package_language_country.properties中的package不是指配置文件中定义的包名,而是固定的名称:package

    2、          Action范围资源文件就是为单独的Action指定国际化资源。方法为:

    Action类所在的目录下,建立一个命名规范为ActionName_language_country.properties的资源文件。建立后,该Action就可以通过Action范围资源文件的访问来实现程序的国际互功能。

     

    五、    动态访问国际化资源文件

     

    配置文件struts-default.xml定义了一个国际化资源拦截器,部分代码如下:

      <interceptor name="i18n"

      class="com.opensymphony.xwork2.interceptor.I18nInterceptor" />

    在该拦截器执行Action之前,会在用户请求中查找名为request_local的参数,如果该参数存在,拦截器将读取该值,转换为local对象,并将其设置为Action所使用的local。下面代码可以通过改变request_local请求参数来动态访问国际化资源文件。

                 <s:url id="url" action="DynamicAction">

                        <s:param name="request_local">en_US</param>

         </s:url>

         <s:a href="%{url}">English</s:a>

     

         <s:url id="url" action="DynamicAction">

                       <s:param name="request_local">zh_CN</param>

         </s:url>

         <s:a href="%{url}">Chinese</s:a>

     


    最新回复(0)