使用Struts2国际化

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

Struts2中加载全局资源文件

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

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

#指定Struts2国际化资源文件的baseName为messageResource

struts.custom.i18n.resources=messageResource

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

<!--
指定Struts2国际化资源文件的baseName为messageResource
-->

<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,表明该国际化资源文件的baseName是mess,它是英国英语的资源文件。
  2. 第二种方式中,取出了国际化资源文件中key为succTip的信息,并将其设置成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属性将会从国际化资源文件中加载该消息。

时间: 2024-10-27 00:16:34

使用Struts2国际化的相关文章

struts2学习(10)struts2国际化

一.国际化简介: 二.struts2国际化设置: struts.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dt

Struts2国际化

一:简单理解 国际化简称i18n,其来源是英文单词 internationalization的首末字符i 和n.18为中间的字符数. 随着全球经济的一体化,软件开发者应该开发出支持多国语言.国际化的Web应用.对于Web应用来说,同样的页面在不同的语言环境下需要显示不同的效果. 国际化文件的命名规则: 1.基本名.properties 如:message.properties 2.基本名_语言编码_国家编码.properties 如:message_zh_CN.properties, messa

【转】Struts2国际化

原文章:http://www.cnblogs.com/hellokitty1/p/5083663.html 简单理解     国际化简称i18n,其来源是英文单词 internationalization的首末字符i 和n.18为中间的字符数.     随着全球经济的一体化,软件开发者应该开发出支持多国语言.国际化的Web应用.对于Web应用来说,同样的页面在不同的语言环境下需要显示不同的效果.     国际化文件的命名规则:           1.基本名.properties 如:messa

[JavaWeb基础] 016.Struts2 国际化配置

如果一个软件想要让其受众是全球或者是几个国家的人,那么这个软件就需要支持多种语言,那么我们就需要软件的国际化去对一些文字信息进行国际化处理.web也一样,当外国人打开我们的网站,要是看到满屏幕的中文,他估计就傻了,好比我们看英文的,或者其他语言的网站时候也不舒服.那么,下面我们就来介绍下使用struts2如何来处理国际化. 1.首先要在strust.xml中在<struts>标签下配置<constant name="struts.custom.i18n.resources&qu

【Struts2系列】Struts2 国际化资源文件的机制原理

[Struts2国际化资源文件定义的3种范围方法] 1)全局的国际化资源文件,对所有的Action和View都有效 定义方式: 在struts.xml中增加全局资源文件定路径定义:        <constant name="struts.custom.i18n.resources" value="globalMessage"></constant> 对应的资源文件为classpath根目录位置: globalMessage.propert

(六)Struts2 国际化

所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:国际化简介 国际化(Internationlization),通俗地讲,就是让软件实现对多种语言的支持. 让美国人看到的是英语,让中国人看到的汉语 第二节:Struts2 国际化设置 <constant name="struts.custom.i18n.resources" value="wishwzp"></consta

struts2国际化全例 错误解决

在struts2中需要做国际化的有: jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化 在之前的例子中已经做过和国际化相关的例子了,在struts.xml中配置过 view plaincopy to clipboardprint? <constant name="struts.custom.i18n.resources" value="message"></constant> 其中的message就

struts2国际化支持

几年之前,应用程序开发者能够考虑到仅仅支持他们本国的只使用一种语言(或者有时候是 两种)和通常只有一种数量表现方式(例如日期.数字.货币值)的应用.然而,基于web技术的应用程序的爆炸性增长,以及将这些应用程序部署在 Internet或其它被广泛访问的网络之上,已经在很多情况下使得国家的边界淡化到不可见.这种情况转变成为一种对于应用程序支持国际化 (internationalization,经常被称做"i18n",因为18是字母"i"和字母"n"

struts2 国际化

国际化概述: 软件国际化:一个软件根据来访者地区不同,显示不同语言. 国际化: * 必须有一组资源包: * 一组属性文件命名: 基本名称_语言(小写)_国家(大写).properties * 如:message_zh_CN.properties   message_en_US.properties * 使用ResourceBundle这个类. * ResourceBundle.getBundle(String baseName,Locale locale); Struts2中的国际化: 全局国际