struts2国际化详解.docx

上传人:b****1 文档编号:2441192 上传时间:2022-10-29 格式:DOCX 页数:9 大小:20.38KB
下载 相关 举报
struts2国际化详解.docx_第1页
第1页 / 共9页
struts2国际化详解.docx_第2页
第2页 / 共9页
struts2国际化详解.docx_第3页
第3页 / 共9页
struts2国际化详解.docx_第4页
第4页 / 共9页
struts2国际化详解.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

struts2国际化详解.docx

《struts2国际化详解.docx》由会员分享,可在线阅读,更多相关《struts2国际化详解.docx(9页珍藏版)》请在冰豆网上搜索。

struts2国际化详解.docx

struts2国际化详解

准备资源文件,资源文件的命名格式如下:

baseName_language_country.properties

baseName_language.properties

baseName.properties

其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。

如:

中国大陆:

baseName_zh_CN.properties

美国:

baseName_en_US.properties

现在为应用添加两个资源文件:

第一个存放中文:

itcast_zh_CN.properties

内容为:

welcome=欢迎来到传智播客

第二个存放英语(美国):

itcast_en_US.properties

内容为:

welcome=welcometoitcast

对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。

命令的使用方式如下:

native2ascii源文件.properties目标文件.properties

配置全局资源与输出国际化信息

当准备好资源文件之后,我们可以在struts.xml中通过struts.custom.i18n.resources常量把资源文件定义为全局资源文件,如下:

itcast为资源文件的基本名。

后面我们就可以在页面或在action中访问国际化信息:

在JSP页面中使用

textname=“”/>标签输出国际化信息:

textname=“user”/>,name为资源文件中的key

在Action类中,可以继承ActionSupport,使用getText()方法得到国际化信息,该方法的第一个参数用于指定资源文件中的key。

在表单标签中,通过key属性指定资源文件中的key,如:

textfieldname="realname"key="user"/>

国际化—输出带占位符的国际化信息

资源文件中的内容如下:

welcome={0},欢迎来到传智播客{1}

在jsp页面中输出带占位符的国际化信息

textname="welcome">

param>

propertyvalue="realname"/>

param>

param>学习

param>

text>

在Action类中获取带占位符的国际化信息,可以使用getText(Stringkey,String[]args)或getText(StringaTextName,Listargs)方法。

国际化—包范围资源文件

在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。

方法如下:

在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。

当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。

国际化—Action范围资源文件

我们也可以为某个action单独指定资源文件,方法如下:

在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。

当查找指定key的消息时,系统会先从ActionClassName_language_country.properties资源文件查找,如果没有找到对应的key,然后沿着当前包往上查找基本名为package的资源文件,一直找到最顶层包。

如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的资源文件中寻找。

国际化—JSP中直接访问某个资源文件

struts2为我们提供了

i18n>标签,使用

i18n>标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:

i18nname="itcast">

textname=“welcome”/>

i18n>

Itcast为类路径下资源文件的基本名。

如果要访问的资源文件在类路径的某个包下,可以这样访问:

i18nname=“cn/itcast/action/package">

textname="welcome">

param>小张

param>

text>

i18n>

上面访问cn.itcast.action包下基本名为package的资源文件。

Struts2的国际化

资源文件的命名:

basename_language_country.properties

JAVA国际化

如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。

对于简体中文的Locale,ResourceBundle搜索资源的顺序是:

(1)baseName_zh_CN.class

(2)baseName_zh_CN.properties

(3)baseName_zh.class

(4)baseName_zh.properties

(5)baseName.class

(6)baseName.properties

Struts2的国际化入门

Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle

加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同,只是

Struts2框架对JAVA程序国际化进行了进一步封装,从而简化了应用程序的国际化。

Struts2需要国际化的部分

类型转换:

数据校验:

验证框架xml配置文件的国际化:

RegisterAction-validation.xml文件

JSP页面的国际化:

textname="addUser"/>

Action的国际化:

利用ActionSupport类提供的getText()方法.

Struts2中加载全局资源文件

struts.xml

struts.properties

struts.custom.i18n.resources=baseName

访问国际化消息

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

(1)JSP页面:

textname="key"/>

(2)Action类中:

使用ActionSupport类的getText方法。

(3)表单元素的Label里:

为表单元素指定一个key属性

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

Struts2中提供了如下两种方式来填充消息字符串中的占位符

(1)JSP页面,在

text.../>标签中使用多个

param.../>标签来填充消息中的占位符。

(2)Action中,在调用getText方法时使用getText(StringaTextName,Listargs)或getText(Stringkey,String[]args)方法来填充占位符。

除此之外,Struts2还提供了对占位符的一种替代方式,这种方式允许在国际化消息资源文件中使用表达式,对于这种方式,则可避免在使用国际化消息时还需要为占位符传入参数

值。

如下在消息资源中使用表达式

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

在上面的消息资源中,通过使用表达式,可以从ValueStack中取出该username属性值,自动填充到该消息资源中。

加载资源文件的方式

(1)加载全局资源文件:

(2)包范围资源文件:

为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_country.properties的文件,一旦建立了

这个系列的国际化资源文件,应用中处于该包下的所有Action都可以访问该资源文件。

需要注意的是上面的包范围资源文件的baseName就是package,不是Action所在的包名。

(3)Action范围资源文件:

在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件。

(4)临时指定资源文件:

i18n.../>标签的name属性指定临时的国际化资源文件

加载资源文件的顺序

Action中加载资源文件,假设我们在某个ChildAction中调用了getText("user.title"),Struts2.0的将会执行以下的操作:

(1)优先加载系统中保存在ChildAction的类文件相同位置,且baseName为ChildAction的系列资源文件。

(2)如果在

(1)中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在ParentAction的类文件相同位置,且

baseName为ParentAction的系列资源文件。

(3)如果在

(2)中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在IChildAction的类文件相同位置,且

baseName为IChildAction的系列资源文件。

(4)如果在(3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即使用模型驱动模式),则对于getModel()方法返回的model对象,

重新执行第

(1)步操作。

(5)如果在(4)中找不到指定key对应的消息,则查找当前包下baseName为package的系列资源文件。

(6)如果在(5)中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包来查找baseName为package的系列资源文件。

(7)如果在(6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。

(8)如果经过上面的步骤一直找不到key对应的消息,将直接输出该key的字符串值。

对于在JSP中访问国际化消息,则简单的多,他们又可以分为两种形式:

(1)对于使用

i18n.../>标签作为父标签的

text.../>标签、表单标签的形式:

a、将从

i18n.../>标签指定的国际化资源文件中加载指定key对应的消息。

b、如果在a中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1