`
eggbucket1
  • 浏览: 81163 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Struts2的Internationalization

 
阅读更多

下面略述com.opensymphony.xwork2.ActionSupport.getText()方法
public String getText(String aTextName)
说明:Gets a messages based on a message key,or null if no message is found
Parameters:aTextName-the resource bundle key that is to be searched for

得到一个基于key的消息,如果没有找到这个消息则返回null
参数:aTextName是在资源包寻找到的所匹配的key
小结:该方法用来完成国际化,接收的参数即资源包中的key,返回资源包中的value
public String getText(String aTextName,List args)
说明:Gets a message based on a key using the supplied args,as defined in MessageFormat
使用提供的一个被定义在MessageFormat中的参数args得到一个基于key的消息
小结:即此时资源包的key的值可以带参数,即{0}占位符,该参数由List类型的args提供
换句话说,此时可以传递一些运行时的参数,使得消息的产生是动态的
另外还有个与该方法功能相同的public String getText(String key,String[] args)
只不过List参数的方法可接收Object参数,而数组参数的方法则只能接收String
实际上Object类型的参数真正输出到页面时,也是调用toString()转换成字符串
public String getText(String aTextName,String defaultValue)
说明:Gets a message based on a key,if the message is not found,a supplied default value is returned
小结:即当在资源包中找不到key时,就会返回defaultValue


Struts2里面国际化资源文件的三个存活范围
Struts2提供了更精细化的资源文件定义方式,可分全局的局部的
而局部的国际化资源文件又分为两种情况,分别是:包级别类级别
包级别资源文件自然要在相应包下建立,它的命名是固定的package_zh_CN.properties
若存在相同key,那么包级别中的提示信息要高于全局资源文件中的提示信息
这就好似Java一样,若定义了同名的成员变量和局部变量,那么成员变量将被覆盖掉
类级别资源文件同样要建立在相应包下,它的命名类似于LoginAction_zh_CN.properties
类级别的提示信息更加具体,因此类级别的提示信息要高于包级别资源文件的提示信息


类级别和包级别在应用中的触发点
若要在表单中进行国际化信息的显示,则应去掉<s:form/>theme="simple"属性
然后将姓名输入域改为<s:textfield name="username" key="username.xml.invalid"/>
访问页面时,会在姓名位置显示包级别提示信息,即package_zh_CN.properties中的
点击Submit时会在姓名位置显示类级别别提示信息,即RegisterAction_zh_CN.properties中的
点击Submit后,表单便与在struts.xml中设定的Action关联在一起,故显示类级别提示信息
所以当使用类级别国际化文件时,必须经过Action才能生效,才能按照预定的进行国际化
若未经Action而直接访问JSP页面,则无法显示类级别的国际化消息,这一点和Struts1.X是不一样的


在国际化资源文件中嵌套OGNL表达式
国际化资源文件中的内容示例如下
login.text = 登录
login.title = %{getText("login.text")}页面
那么在页面中显示login.title国际化消息时,就会显示:登录页面


页面中国际化的显示
<s:text name="key"/>会自动按照范围到资源文件中查找name所指定的key
然后输出Key所对应的Value,若Key不存在,则将name值原封不动的输出
并且它也是可以动态传递参数的,这时需要在该标签中嵌套<s:param/>标签
<s:label key=""/>在输出国际化信息时,会自动在国际化文本后面加上一个多余的冒号
通过查看页面源文件发现:使用<s:label/>输出的国际化信息位于HTML的<label/>标签内
使用<s:text/>输出的国际化信息则是一些单纯的文本
<s:i18n name=""/>用来明确的指定所使用的临时的国际化资源文件
并且该临时资源文件默认与struts.xml处于同一目录下,亦可在name中指定其存放路径
它的name值用来指定所要读取的国际化资源文件,然后再嵌套<s:text/>标签就可以输出指定的key值了
<s:param/>中显示国际化信息如在<s:param value="%{getText('login.tip')}"/>
<s:param/>中接收Action属性如<s:param value="%{username}"/>
Struts2表单标签的key属性通常用来输出国际化信息,可以在key值中传一个OGNL表达式
label属性中放的是字符串,所以也可以使用%{}输出国际化信息,如下所示
<s:property value="getText('key')"/>或者<s:textfield label="%{getText('key')}"/>
另外关于<s:radio/>标签的国际化显示,如下所示
<s:radio list="#{1:getText('i18n.sex.male') ,0:getText('i18n.sex.female')}" name="sex" value="1" key="i18n.sex"/>
这个时候就不用再写成%{getText('i18n.sex.male')}了,也就是说可以把%{}去掉了
由于<s:textfield label="%{getText('key')}"/>label默认使用的是字符串,所以要加上%{}
而在<s:radio/>list属性里面本身已经有{}符号了,说明它已经是一个OGNL表达式了
所以在<s:radio list=“#{}”/>中就没必要再使用%{}


浅述Struts2国际化的实现过程
Struts2的I18nInterceptor拦截器会拦截所有的Action,它主要做的事情为
从客户端发送过来的请求参数中寻找是否存在名为request_locale的参数
若有,则将request_locale的value转化为locale保存起来
该locale是保存在以WW_TRANS_I18N_LOCALE所命名的session里面的
详见源码的第124行session.put(attributeName, locale)
其中attributeName即79行的protected String attributeName = DEFAULT_SESSION_ATTRIBUTE
和第75行的public static final String DEFAULT_SESSION_ATTRIBUTE = "WW_TRANS_I18N_LOCALE"
于是便可通过这种方式实现一个选择页面所显示的语言环境的功能
比如选择中文,那么就可以将request_locale设置为zh_CN
如果我们不做任何配置的话,客户端是不会发送request_locale参数的
它默认会用request的getLocale()方法得到默认locale,将其存放在session中
这样就使得以后客户的所有操作都是在同一个国际化的环境下执行
就不需要我们每一次都手工判断用户的国际化环境了


接下来为大家展示示例代码

首先是struts.xml文件

然后是web.xml文件

用于显示国际化信息的internationalization.jsp页面

访问成功后跳转到loginSuccess.jsp页面

然后是用到的InternationalizationAction.java类

用来测试<s:i18n>、<s:text>、<s:param>标签组合使用的temp_zh_CN_en_US.properties国际化资源文件

最后是用到的全局的message_zh_CN.properties和message_en_US.properties国际化资源文件

分享到:
评论

相关推荐

    struts2 API帮助文档

    Struts2是一个强大的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。这个API帮助文档是开发者在使用Struts2框架时的重要参考资料,它详细阐述了框架的各种组件、类库和方法,有助于理解并有效...

    Struts2全部jar包

    8. **国际化(Internationalization, i18n)**:Struts2内置对国际化支持,允许应用根据不同地区显示不同的内容。 9. **异常处理**:通过全局异常处理,Struts2可以统一处理未捕获的异常,避免错误信息直接暴露给...

    struts2四天的学习笔记

    8. **国际化(Internationalization, i18n)**:Struts2支持多语言环境,通过资源包(Properties文件)实现不同语言的切换,提供更好的用户体验。 9. **异常处理**:Struts2允许定义全局和Action级别的异常处理策略...

    struts2 lib包

    5. **Validation and Internationalization (i18n)**: Struts2包含内置的验证框架,允许开发者定义验证规则,并支持多语言。`struts2-validation-plugin`和相关的资源文件如`struts.properties`和`struts.xml`用于...

    struts2 最新版 不用去官网上下载了

    5. **国际化(Internationalization)**: Struts2支持多语言环境,开发者可以通过配置文件轻松地实现应用的国际化。 6. **Ajax支持**: Struts2与jQuery和其他JavaScript库集成良好,可以方便地创建异步更新的用户界面...

    Struts2实例 国际化 类型转换 struts标签

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发。这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查...

    struts2-docs

    8. **国际化(Internationalization, i18n)**:Struts2内置对国际化支持,允许根据用户的语言设置显示不同版本的内容。 9. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用中的异常情况。 10. ...

    struts2.x所需要的支持类库,内附struts2的学习资料

    - **Struts2与i18n(internationalization)**:为多语言支持提供便利,如struts2-i18n-plugin,通过资源文件实现内容的国际化。 - **Tiles2整合(struts2-tiles-plugin)**:利用Tiles2来定义和管理页面布局,使得视...

    struts2 demo project

    9. **Internationalization(国际化)**:Struts2支持多语言环境,可以通过资源包(Properties文件)实现应用程序的国际化。 10. **插件系统**:Struts2有一个强大的插件系统,可以轻松地添加新的功能或集成其他...

    struts2教学用ppt

    8. **国际化(Internationalization,i18n)**:Struts2支持多语言环境,可以通过资源文件轻松实现界面文本的国际化。 9. **异常处理**:Struts2提供了一套完善的异常处理机制,可以捕获并处理Action执行过程中的...

    struts2 学习资料

    8. **国际化(Internationalization, i18n)**:Struts2支持多语言,可以方便地实现应用程序的国际化。 9. **Ajax支持**:Struts2提供了与Ajax交互的能力,可以创建部分页面更新的应用,提高用户体验。 学习Struts...

    struts2实战.pdf

    9. **国际化(Internationalization,i18n)**:Struts2支持多语言环境,通过资源包(properties文件)实现不同语言的显示。 10. **异常处理**:Struts2提供了全局和局部异常处理机制,可以在框架级别统一处理运行...

    struts2必要jar包

    8. **国际化(Internationalization, i18n)**:Struts2支持多语言,通过资源包(Properties文件)可以轻松实现应用程序的国际化。 9. **表单验证**:Struts2提供了一种声明式的表单验证方式,开发者可以定义Action...

    Struts2_Validation

    5. **Internationalization(国际化)**:Struts2的验证错误消息可以本地化,通过messages.properties(或其他语言的.properties文件)定义不同语言的错误提示。 6. **Programmatic验证**:除了XML配置外,Struts2...

    Struts2登录DEMO

    8. **国际化(Internationalization, i18n)**:对于错误消息和提示信息,Struts2支持国际化,你可以看到DEMO中可能包含资源文件如`messages.properties`,用来存储不同语言环境下的文本。 通过这个Struts2登录DEMO...

    struts2的核心jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它极大地简化了Java Web应用程序的开发。这个核心jar包是Struts2框架的基础,包含了实现Struts2功能的关键组件和类库。以下是关于Struts2...

    struts2_jar

    9. **国际化(Internationalization, i18n)**:Struts2支持多语言环境,通过资源包(Properties文件)管理不同语言的文本信息。 10. **注解(Annotations)**:从Struts2.1版本开始,框架支持注解配置,允许开发者...

    struts2使用手册

    - **国际化(Internationalization, i18n)**:Struts2提供了丰富的国际化支持,可以通过配置文件轻松实现多语言切换。 - **验证与转换(Validation & Conversion)**:Struts2提供了一套完整的验证和转换机制,可以...

    struts2标签下的用户注册

    4. **国际化(Internationalization, i18n)**:Struts2支持多语言,可以创建资源文件来存储错误消息和提示信息,便于根据不同地区的用户展示不同的文本。 5. **结果(Result)**:当用户提交表单后,Struts2会根据...

    Struts2标签集锦(附Struts2标签详解word文档)

    Struts2标签是Java开发中一个非常重要的工具,它极大地简化了MVC框架下的视图层构建,使得开发者能够更加高效地实现动态网页。在Struts2框架中,标签库是一系列预定义的JSP标签,它们提供了丰富的功能,如数据绑定、...

Global site tag (gtag.js) - Google Analytics