5.开发国际化的struts应用

上传人:aa****6 文档编号:35522162 上传时间:2018-03-16 格式:PDF 页数:24 大小:170.69KB
返回 下载 相关 举报
5.开发国际化的struts应用_第1页
第1页 / 共24页
5.开发国际化的struts应用_第2页
第2页 / 共24页
5.开发国际化的struts应用_第3页
第3页 / 共24页
5.开发国际化的struts应用_第4页
第4页 / 共24页
5.开发国际化的struts应用_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《5.开发国际化的struts应用》由会员分享,可在线阅读,更多相关《5.开发国际化的struts应用(24页珍藏版)》请在金锄头文库上搜索。

1、113 Sept. 2008 Neusoft ConfidentialStruts框架Struts框架东软IT人才实训中心东软IT人才实训中心22第五章 : 开发国际化的第五章 : 开发国际化的Struts应用应用学时:2学时教学方法:讲授ppt 上机练习学时:2学时教学方法:讲授ppt 上机练习章节目标: 本章主要使学员理解Struts是如何 实现国际化的,并能熟练使用 Struts框架进行国际化章节目标: 本章主要使学员理解Struts是如何 实现国际化的,并能熟练使用 Struts框架进行国际化33本章要点本章要点?本地化与国际化概念?Java对国际化的支持?Struts对国际化的支持?

2、将sayHello应用实现国际化?解决中文问题的最佳实践44本地化本地化?本地化(Localization)通过添加特定组件和翻译来使软件适用 于特定的场所和语言的过程。Localization可以缩写为L10N。55国际化国际化?国际化(Internationalization)又称为I18N ?一个支持国际化的应用程序应该具有以下特征: 不需要改变代码就可以实现支持添加的语言。 文本元素、消息元素以及图像都要从代码中脱离出来,存储 在代码外部。 文化相关的数据,如:时间、货币。都应该根据用户所在的 地理位置及语言环境进行格式化。 支持非标准的字符集。 能够快速适应新的语言或地区。66Jav

3、a对国际化的支持对国际化的支持?Struts框架对国际化的支持其实是依赖于 Java语言本身对国际化 的支持。?在Java 中可以通过使用3个关键的类来实现对国际化的支持,他 们分别是: java.util.Locale: java.util.ResourceBundle: java.text.MessageFormat:77Locale类类?Java对国际化的支持的核心是Locale类。Locale对象可以封装语 言、国家等信息。语言和国家代码通过ISO标准来定义ISO- 3166ISO-639。下表列出一部分国家代码和语言代码。国家代码说明es西班牙de德国fr法国gb英国cn中国kr韩国

4、jp日本语言代码说明es西班牙de德国fr法国en英国zh中国ko韩国ja日本88Locale类类?Locale对象主要由语言和国家代码组成?构造方法: New Locale(String language, String country) 例如:Locale locale1 = new Locale(“zh”,“CN”)99Locale类类?Web容器中Locale对象的来源: Java虚拟机在启动时会查询操作系统,为运行环境设置默认 的Locale。Java程序可以调用Locale.getLocale()来获得默认的 Locale。?在web应用中访问Locale对象 Request.ge

5、tLocale():返回浏览器中设置的默认Locale信息 Request.getLocales() :返回浏览器中设置的Locale信息列表Locale类示例:struts5-1 1、对于一个Java应用程序来说,JVM将会自动地检测到当前操作系统,为当前环境设置一个 Locale,这就是默认的Locale设置,可以通过调用Locale类的getDefaul()方法获得当前的默认 Locale设置信息,如下: Locale defaultLocale = Locale.getDefault(); 2、对于一个Web应用程序来说,作为Web服务器,它获得自身服务器上的Locale信息是没有 意

6、义的,它需要获得客户端的Locale信息,如何获得这个信息,Web服务器已经做好了相关 的工作,可以通过调用ServletRequest接口中的两个方法来查询相关信息,方法定义如下: public java.util.Locale getLocale(); public java.util.Enumeration getLocales(); 3、那么客户的Locale信息怎么传递到服务器上的呢?所谓的Web客户端,指的就是浏览器, 下面以IE为例,其他浏览器参见相关文档。在IE浏览器选择工具菜单-Internet选项- 常规-语言按钮,之后出现的画面是供选择使用语言用的页面,它是一个列表,按自

7、 上而下优先级逐渐递减。getLocale()方法会返回列表中第一个语言设置。而getLocales()方 法会返回表中所有设置。在列表中可以任意的添加和删除已有的语言选项。使用浏览器时, 浏览器中的语言设置会随着用户的请求传递到Web服务器中。1010ResourceBundle类类?ResourceBundle类主要用来提供存放和管理与Locale相关的资源的功 能,这些资源包括文本域或按钮的Lable、图片名、错误信息、网页标 题等。通常这些资源被包含在一个资源文件中。?资源文件的命名格式:baseName+Locale.properties,其中 baseName - 资源包的基本名称

8、,一个完全限定类名,是任意合法 的文件名。 Locale为语言和国家代码。 例如myMessage_zh_CN.properties。1111ResourceBundle类类?Native2ascii命令的位置和用法 作用:把文件从中文编码转换为unicode编码 位置:JAVA_HOME/bin 使用:native2ascii.exe 要转换的文件名 转换后的文件名?主要方法: getBundle(String baseName, Locale locale): 使用指定的基本名称、 语言环境和调用者的类加载器获取资源包。 getString(String key):从资源包或它的某个父包中

9、获取给定键值的 字符串。1212MessageFormat类类?MessageFormat类是对文本资源进行格式化的类?主要方法: format(String pattern, Object. arguments):创建具有给定模式的 MessageFormat,并用它来格式化给定的参数。 更多的方法请参见J2SEAPIResourceBundle类和MessageFormat类示例:Struts5-21313Struts对国际化的支持对国际化的支持?Struts已经将国际化的实现封装在框架中。?Struts中的Locale对象 在Struts框架中对Locale对象进行了封装。首先需要在st

10、ruts- config.xml配置文件中,使用元素中的locale属 性指定是否在session中存储Locale对象。默认为true,表示会 把Locale对象存储在session领域中。 在Action组件类中,如果想获得Locale对象,只需要调用 getLocale()方法即可?在Struts框架中并没有直接使用ResourceBundle类,而是定义了 两个新的类提供了ResourceBundle类似的功能。这两个类为: org.apache.struts.util.MessageResources org.apache.struts.util.PropertyMessageRes

11、ources1.在Struts框架中对Locale访问进行了封装。首先需要在struts-config.xml配置文件中,使用 元素中的locale属性指定是否在session中存储Locale对象。默认为true,表示 会把Locale对象存储在session领域中。 在Action组件类中,如果想获得Locale对象,只需要调用getLocale()方法即可。getLocale() 定义在Action类中,以下方法定义: protected Locale getLocale(HttpServletRequest request) HttpSession session = request.

12、getSession(); Locale locale = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (locale = null) locale = defaultLocale; return (locale); 2.对于Struts框架来说,虽然它没有直接使用ResourceBundle类,但是Struts框架中定义的MessageResources类的功能与ResourceBundle类是相似的。另外Struts框架封装了MessageFormat功能,具备了支持读取动态文本的能力。Struts框架读取资源文件的原理与在j

13、ava中读取相似,但Struts框架已经把相关的操作进行了封装,对于应用Struts框架的开发者来说,不需要自己进行资源文件的读取,Struts框架提供的资源文件读取的功能是透明的。1414Struts对国际化的支持对国际化的支持?在Struts框架中实现国际化,需要做以下工作: 针对不同的语言编写资源文件。 使用资源文件。1515Struts资源文件资源文件?创建Struts的资源文件的时候要遵守一些约定,例如资源包文件 名应该是以“.properties”为扩展名的一个文本文件,该文本文件 中的消息格式为:key=value。下面是一个资源文件的定义。login.name.error=in

14、validate name! login.password.error=invalidate password! invalidate.input=invalidate username or password!login.name.error=invalidate name! login.password.error=invalidate password! invalidate.input=invalidate username or password!1616Struts资源文件(续)资源文件(续)?资源文件分为两类,一类是默认的资源文件,即我们在struts- config.xml中使

15、用标记描述的内容,如下:?另一类就是特定语言的资源文件,特定语言的资源文件的名字 格式有两种,分别为: 默认资源文件名_语言代码.properties 默认资源文件名_语言代码_国家代码.properties 1717Struts框架选择资源文件的原则框架选择资源文件的原则?我们假定一个中文客户端访问我们的Struts应用。那么搜索顺序 应为:先到指定的目录下搜索application_zh_CN.properties。如果 找到就使用该资源文件。如果找不到则执行。其中CN是国家 代码,zh是语言代码。 搜索application_zh.properties资源文件。如果找到则使用该 文件。如

16、果找不到则执行。使用application.properties默认资源文件。1818使用资源文件使用资源文件?资源文件定义完毕,我们可以在以下情况中使用资源文件,从 而实现国际化。 静态文本:例如按钮,链接的名称等是事先已经固定好的信 息。 动态文本:需要在程序运行期间动态决定显示信息,包括成 功提示,错误提示,异常提示等。1919使用资源文件使用资源文件-静态文本静态文本?在JSP中使用Struts自定义标记标记引用资源文件 中的文本信息。如下:2020使用资源文件使用资源文件-动态文本动态文本?创建国际化消息 ActionMessages: ActionMessage:?传递国际化消息 saveMessage(): saveError():?显示国际化消息 2121将将sayHello应用实现国际化应用实现国际化?将sayHello应用转换为一个国际化的应用程序。2222解决中文问题的最佳实践解决中文问题的最佳实践?添加过滤器,统

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号