Struts2笔记——6.国际化

Struts2的国际化是建立在java的国际化基础上的。通过提供不同国家或者语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再获取该资源文件中的指定key对应的消息。Struts2框架对这一过程进行了进一步的封装,简化了应用程序的国际化。它可以为jsp,Action,全局范围提供不同的国际化资源,因此维护的时候可以分开维护。Struts2的国际化可以按照以下步骤进行:加载国际化资源文件、输出国际化。

action范围、包范围的国际化资源会被系统自动加载,jsp范围,全局范围的需要使用标签库,配置常量的方式手动加载。视图页面的国际化消息需要struts2标签库输出,action中的消息需要ActionSupport的getText()方法完成。

资源文件需要是properties,并且放在src下。命名规则必须严格按照baseName_language_country.properties。比方说我们要实现与login相关的国际化,就要建立login_zh_CN.properties和login_en_US.properties这两个文件或者更多。然后两个文件中对于相同的key字段,要给出中英文value。其中,value值可以使用占位符,比如:你好{0},至于怎么传参数,稍后再解释。

视图页面的国际化

jsp中指定国际化资源需要通过《s:i18n/》标签。之所以叫i18n,因为internationalization一共18个字母。当text标签在il8n里面时,text就会加载il8n指定的国际化资源文件。当form在i18n里面时,表单里的key(就是普通jsp里的value,显示在页面的内容)就会从国际化中提取信息。资源文件是一个properties。放在src或其子目录下。jsp中的i18n标签里面的name属性指定properties文件位置。如下代码能够加载位于packagename包下面的baseName为myinternational的一系列国际化资源文件。

<s:i18n name="packagename.myinternational">

Action与包的国际化

当对action或者action的输入校验进行国际化时,可以为action单独指定一份国际化资源文件。在action的路径下建立多个名为ActionName_language_country.properties的文件。这些国际化文件会被系统自动加载。在action中直接使用父类的getText方法获取指定key的value值。ps:校验文件中使用国际化value,可以用message子元素的可以属性。为每个action都制定一份国际化文件太麻烦了,在包下建立package_language_country.properties一系列文件,这些文件会被系统自动加载。

全局国际化

在struts.xml中或者struts.properties中配置struts.custom.i18n.resource常量就可以加载全局国际化资源文件。该常量的值为一系列全局国际化文件的baseName。如果baseName为example的话,在struts.properties中加入如下代码:

struts.custom.i18n.resource=example

此时应该注意国际化文件应该与配置文件同路径。全局国际化消息资源可以被整个应用的所有组件使用。

带占位符的国际化消息

当国际化资源中包含形如{0},{1}的占位符时,这些占位符必须要被一些参数所代替。jsp中的占位符会被s:param元素中的值所代替。第几个param就代替第几个占位符。

 <s:text name="username"></s:text>        <s:text name="welcomg">    <s:param><s:property value="username"/></s:param>    <s:param>S{d}</s:param>        </s:text>

而对应的welcomg资源文件中的值应该为

welcome={0}, 你好,现在时间是:{1}-----------------------------------------welcome={0}, Hello, now is {1}

除此之外,在国际化消息中还可以使用表达式。使用这种方式,就不需要在调用国际化消息时,额外为占位符赋值。比如:

current username=当前用户为:${username}

这种方式的工作原理是:系统会在ValueStack中取出该username的值,然后填充到国际化消息中。

加载资源文件顺序

假设说一个action要加载它需要的action文件,那么顺序如下:

  1. 先找它自己独享的,也就是baseName与action同名的。
  2. 如果没有,就找它的父类的独享。
  3. 如果没有,就找action的接口的独享。
  4. 如果还没有,找action所在的包的独享文件。
  5. 如果还没有,顺着包往上找,最后还没没有的话,就去找全局的。
  6. 如果还没有的话,就直接输出key属性的值。

假设说要为jsp加载国际化文件,如果有s:i18n作为父标签,顺序如下:

  1. 找s:i18n指定的nameBase。
  2. 如果没有,就去找全局的。
  3. 如果还没有,那没办法了,直接找出key的字符串数值。

如果没有使用s:i18n作为父标签,则直接加载全局资源文件。找不到就直接输出key属性的值。

时间: 2024-10-17 06:25:07

Struts2笔记——6.国际化的相关文章

struts2的返回类型、struts的标签库、struts2中完成国际化

struts2的返回类型:在jsp-servlet中, 返回的类型主要有 转发, 重定向: 转发主要是RequestDispatcher的forward方法来进行操作的req.getRequestDispatcher("goods/queryGoodFenYe.jsp").forward(req, resp);重定向主要使用response对象的一些方法来操作:1.response.sendRedirect("index.jsp");2.response.addHe

6、Struts2中的国际化、Ognl(对象图导航语言)表达式语言

Struts2中的国际化.Ognl(对象图导航语言)表达式语言 回顾:Servlet 中国际化: 1). 写资源文件 基础名.properties [默认的语言环境的配置] 基础名语言简称国家简称.properties 2). 读取资源文件,再使用 程序:ResourceBundle Jsp: jstl提供的格式化与国际化标签库. 一.Struts2中国际化: 1. 写资源文件 (同servlet) 2. 读资源文件 程序:ResourceBundle (同servlet) JSP: 1)jst

Struts2笔记(学struts2只需要这一篇文章)

1.struts2框架引入到web项目中      1.把struts2相关jar包引入到项目中 2.把struts2的配置文件直接放到src下面,名字要叫做struts.xml.(运行时配置文件会被框架自动读取).      注意:如果struts.xml文件中不能自动提示标签,把相应的dtd文件配置上去. 3.在web.xml文件中配置struts2框架的过滤器.     这个过滤器的作用:拦截struts2框架中的action.     注意:如果不配置这个filter,struts2框架

Struts2学习笔记(八)——国际化

1.Struts2国际化介绍 国际化即internationalization简称i18n. 为了实现程序的国际化,必须先提供程序所需要的资源文件.资源文件的内容是key-value键值对. 资源文件的命名可以是如下3种形式: baseName_language_country.properties baseName_language.properties baseName.properties 其中baseName是资源文件的基本名称,用户可以自由定义,而language和country都不可

Struts2的i18n国际化-关于默认资源文件

昨天接到一个新的任务,将之前的一个供货商管理系统进行国际化支持,该系统采用了Status2框架,因此对Struts2的国际化进行了一些研究,下面是关于国际化配置的一些结果,分享给大家参考: 1.    建立资源文件: 建立资源文件如:             message.properties:作为默认资源文件使用,当无法匹配其他资源文件时使用:             message_zh_CN.properties:中文语言资源文件. 因为需求目前仅需要英文语言和中文语言,因此只建立了这两

Struts2中的国际化

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

Struts2之i18N国际化

对于i18n其实没有太多内容,一般的公司用不到这些内容,除非是跨国公司,但即便是跨国公司也不一定会使用i18n来进行国际化处理,所以本篇内容仅供大家了解,不做深入的探讨,希望通过本篇内容,可以帮助大家了解i18n的使用.好了废话不多说,下面进入今天的正题. 首先说一下i18n在Struts中分为三个等级:Action.package.Application三种,分别对应着其作用的范围,我想你一定已经知道什么意思了.先通过一个java project简单认识一下i18n的使用:i18n文件上的后缀

Struts2笔记——9.输入校验

校验分为客户端校验跟服务器校验.客户端主要依靠javascript代码完成,服务器端校验通过在程序中的编程完成.客户端仅能防止正常的误操作从而减低服务器的负载,而服务器端则可以防止恶意的攻击. 编写校验规则文件 Struts2提供了基于验证框架的输入校验,因此我们只需要编写简单的配置文件,框架就会自动帮我们进行服务器客户端校验.有了这套框架,我们无需对代码进行任何修改,仅仅增加一个校验规则文件即可.在想要进行校验的action目录下创建一个ActionName-validation.xml文件作

Struts2笔记——10.文件上传

只有当表单的method为post,并且enctype要设置为multipart/form-data时,本地的二进制文件才能够上传到服务器.Struts2本身并不会去解析multipart/form-data,而是需要借助其他框架,所以它的上传功能需要依赖Common-FileUpload.COS等组件.相应的,我们需要把commons-io包跟commons-fileupload包添加到项目中.Struts2对原有的上传解析器做了进一步的封装,使用起来更加简便. 实现文件上传的action S