码迷,mamicode.com
首页 > 其他好文 > 详细

使用Struts2国际化

时间:2015-03-30 16:34:20      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:struts 2   java   java web   国际化   

Struts2国际化是建立在Java国际化的基础之上,一样也是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息——整个过程与Java程序的国家化完全相同,只是Struts2Java程序国际化进一步封装,从而简化了应用程序的国际化。

Struts2中加载全局资源文件

通过在struts.xmlstruts.properties中配置struts.custom.i18n.resources常量,该常量的值为全局国际化资源文件的baseName

假设系统需要加载的国际化资源文件的baseNamemessageResource,则我们可以在struts.properties文件中指定如下一行:

#指定Struts2国际化资源文件的baseNamemessageResource

struts.custom.i18n.resources=messageResource

或者在struts.xml文件中配置如下的一个常量:

<!-- 指定Struts2国际化资源文件的baseNamemessageResource -->

<constantname=”struts.custom.i18n.resources” value=”messageResource”/>

通过这种方式加载国际化资源文件后,Struts2应用就可以在所有地方取出这些国际化资源文件了,包括JSP页面和Action

访问国际化消息

Struts2访问国际化消息有如下三种方式:

  1. JSP页面中输出国际化消息,使用Struts2<s:text…/>标签,该标签可以指定一个name属性,该属性指定了国际化资源文件中的key。比如<s:text name=”loginPage”/>

  2. 为了在Action类中访问国际化消息,可以使用ActionSupport类的getText方法,该方法可以接受一个name参数,该参数指定了国际化资源文件中的key。比如:

    ActionContext ctx = ActionContext.getContext();

    Ctx.put(“tip”,getText(“succTip”));

  3. 为了在该表单元素的Label里输出国际化信息,可以为该表单标签指定一个key属性,该key指定了国际化资源文件中的key。比如:

    <s:textfield name=”username” key=”user”/>

    注意:

  1. 资源文件名:mess_en_US.properties,表明该国际化资源文件的baseNamemess,它是英国英语的资源文件。

  2. 第二种方式中,取出了国际化资源文件中keysuccTip的信息,并将其设置成request范围的属性。通过这种方式,即使Action需要设置在下一个页面显示的信息,也无须直接设置字符串常量,而是使用国际化消息的key来输出,从而实现程序的国际化。

  3. 第三种方式,通过在表单元素textfield中指定key属性来输出国际化消息。

输出带占位符的国际化消息

占位符示例:

         succTip={0},Welcome,youhas logged in!

         welcomeMsg={0},Hello!Nowis {1}!

{0}{1}就是占位符,程序运行中,可以填充占位符。

         succTip=${username},欢迎,您已经登陆!

${username}直接将传入的username值填充。

        

 

Struts2中提供两种方式来填充消息字符串中占位符:

  1. 如果需要在JSP页面中填充国际化消息里的占位符,则可以通过在<s:text…/>标签中使用多个<s:param…/>标签来填充消息中的占位符。第一个<s:param…/>标签指定第一个占位符值,第二个<s:param…/>标签指定第二个占位符值…...比如:

             <jsp:useBeanid="d" class="java.util.Date" scope="page"/>

    <s:textname="welcomeMsg">

             <s:param><s:propertyvalue="username"/></s:param>//第一个username参数

             <s:param>${d}</s:param>//第二个时间参数

             </s:text>

  2. 如果需要在Action中填充国际化消息里的占位符,则可以通过在调用getText方法时使用getText(String aTextName,List args)getText(Stringkey,String[] args)方法来填充占位符。该方法的第二个参数既可以是一个字符串数组,也可以是字符串组成的List对象,从而完成对占位符的填充。其中字符串数组、字符串集合中第一个元素将填充第一个占位符,字符串数组、字符串集合中第二个元素将填充第二个占位符……比如:

             ActionContextctx = ActionContext.getContext();

    ctx.put("tip", getText("succTip" , new String[]{getUsername()}));

加载资源文件方式

包范围资源文件

         为了更好地体现软件工程里分而治之的原则,Struts2允许针对不同模块、不同Action来组织国际化资源文件。

         Struts2应用指定包范围资源文件的方法是:在包的跟路径下建立多个文件名为package_language_country.properties的文件,一旦建立了这个系列的国际化资源文件,应用处于该包下的所有Action都可以访问该资源文件。

         Action将优先使用包范围的资源文件。

Action范围资源文件

         Action单独指定国际化资源文件的方法是:在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件,一旦建立了这个系列的国际化资源文件,这系列资源文件只能由该Action来访问。

临时指定资源文件

         还有一种临时指定资源文件的方式,可以在JSP页面中输出国际化消息时临时指定国际化资源的位置,在这种方式下,需要借助Struts2的另外一个标签:<s:i18n…/>

         如果把<s:i18n…/>标签作为<s:text…/>标签的父标签,则<s:text…/>标签将会直接加载<s:i18n…/>标签里指定的国际化资源文件;如果把<s:i18n…/>标签当成表单标签的父标签,则表单标签的key属性将会从国际化资源文件中加载该消息。

使用Struts2国际化

标签:struts 2   java   java web   国际化   

原文地址:http://blog.csdn.net/kakarot5/article/details/44751113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!