Struts2的国际化支持

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

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值