第五章开发国际化的Struts应用 update

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 默认资源文件名_语言代码.properties – 默认资源文件名_国家代码_语言代码.properties
IT Education & Training
Struts框架选择资源文件的原则
我们假定一个日文客户端访问我们的Struts应用.那么搜索顺序应为: ①先到指定的目录下搜索application_ja_jp.properties.如果找到就使用该资源 文件.如果找不到则执行②.其中ja是国家代码,jp是语言代码. ②搜索application_ja.properties资源文件.如果找到则使用该文件.如果找不到 则执行③. ③使用application.properties默认资源文件.
– Public java.util.Locale getLocale(); – Public java.util.Enumeration getLocales();
IT Education & Training
续:
那么客户的Locale信息怎么传递到服务器上的呢?所谓的web客户端指的就是 浏览器.在IE上选择[工具]->[Internet选项] ->[常规] ->[语言] 如上操作之后出现了提供的选择语言用的页面.它是一个列表,按自上而下优 先级逐渐递减.getLocale()方法返回列表中的第一个语言设置,而getLocales() 方法返回列表中所有设置. 使用浏览器的时候其中的语言设置会随着用户的请求传递到web服务器中.可 以见例子5-1,通过Servlet获得客户Locale信息. 将如下的servlet类发布到web服务器上,通过客户端浏览器请求该Servlet类, 浏览器的语言区域设置信息就会作为相应信息输出在浏览器上.
AppliccationResources_zh.properties
客户2
Locale=cn
Struts应用
AppliccationResources_en.properties
客户3
Locale=ja AppliccationResources_ja.properties
上图说明了Locale信息与特定资源文件之间的关系.
IT Education & Training
续:
特定语言的资源文件的名字格式有两种:
– 默认资源文件名_语言代码.properties – 默认资源文件名_国家代码_语言代码.properties
并且特定语言的资源文件不需要描述在struts-config.xml文件中.
客户1
Locale=zh
IT Education & Training
Locale类
Java对国际化的支持的核心是Locale类.Locale对象可以封装语言,国家等信息. 语言和国家代码通过ISO标准来定义[ISO-3166,ISO-639].
国家代码 es de fr gb cn kr jp
说明 西班牙 德国 法国 英国 中国 韩国 日本
IT Education & Training
国际化
国际化(Internationalization)又称为I18N 一个支持国际化的应用程序应该具有以下特征:
– 不需要改变代码就可以实现支持添加的语言. – 文本元素,消息元素以及图像都要从代码中脱离出来,存储在代码外部. – 文化相关的数据,如:时间,货币.都应该根据用户所在的地理位置及语言环境进行 格式化. – 支持非标准的字符集. – 能够快速适应新的语言或地区.
– org.apache.struts.util.MessageResources – org.apache.struts.util.PropertyMessageResources – 注意的是MessageResources类仍然是一个抽象类,它的功能定义和 ResourceBundle类定义非常类似;PropertyMessageResources类是 MessageResources类的非抽象子类.
– 静态文本:即文本内容已经明确指定; – 动态文本:即文本内容没有完全指定,只有在运行时候才能确定文本内容,不确定的 文本内容使用{ }来指定.
Struts框架已经把相关的操作进行了封装,对于应用Struts框架的开发者来说不 需要自己进行资源文件的读取,Struts框架提供的资源文件读取的功能是透明 的.
把语言代码和国家代码传递到Locale构造中,即可创建一个Locale对象. 注意:Locale对象并不作任何的国际化相关的解析或是格式化工作,它的作用 是将这些信息传递给一些敏感类.所谓的敏感类是:一个类根据Locale对象在 运行期更改其运行功能,那么这个类就被称为敏感类.如:DateFormat类, Nu百度文库berFormat类. 对于一个java应用程序来说,JVM将会自动的检测到当前操作系统,为当前环 境设置一个Locale,这就是默认的Locale设置.可以通过调用Locale类的 getDefault()方法获得当前的默认Locale设置信息:Locale defaultLoc = Locale.getDefault(); 那么对于一个web应用程序来说,作为web服务器它需要获得客户端的Locale信 息.如何获得呢?可以通过调用ServletRequest接口中的两个方法来查询相关 信息:
IT Education & Training
MessageFormat类
MessageFormat类是对文本资源进行格式化的类. 在Struts框架中最常用的资源文件就是ApplicationResources.properties.该文件 给出了文本消息和资源名字的对应关系. 在这个文件中包含两种文本:
– 针对不同的语言编写资源文件. – 使用资源文件夹.
IT Education & Training
Struts资源文件
创建Struts的资源文件的时候要遵守一些约定,例如资源包文件名应该是以 ".properties"为扩展名的一个文本文件,该文本文件中的消息格式为: key=value.下面是一个资源文件的定义. login.name.error=invalidate name! login.name.error=invalidate name! login.password.error=invalidate password! login.password.error=invalidate password! invalidate.input=invalidate username or password! invalidate.input=invalidate username or password! 要注意的是:在定义key的时候要注意,分隔符应该是".";在一个资源文件中 key是不应该重复的. 资源文件有两种,一类是默认资源文件,即在struts-config.xml中用<messageresources>标记描述的内容:<message-resources parameter="cn.edu.struts.ApplicationResources"/> 另一类是特定语言的资源文件,如果要开发一个国际化的应用,就一定要针对 不同的国家语言定义相应的资源文件.比如当客户的Locale信息是英文时,要 提供一个ApplicationResources_en.properties文件;如果Locale信息是中文 的,就要提供一个ApplicationResources_cn.properties文件.框架会自动根据 客户的Locale信息找到相应的资源文件.这些文件就是特定语言的资源文件.
IT Education & Training
本地化
本地化(Localization)通过添加特定组件和翻译来使软件适用于特定的场所和 语言的过程.Localization可以缩写为L10N. 通常本地化最费时间的部分是翻译消息文本. 其他类型的数据如声音,图像等如果也是文化敏感的,可能也需要进行本地 化. 本地化也包括对货币符号,时间格式,数字格式,日期格式等的修改.
IT Education & Training
Beyond Technology
第五章
开发国际化的Struts应用
Copyright2007 版权所有 东软培训
IT Education & Training
本章要点
国际化与本地化 Java对国际化的支持 Struts对国际化的支持转换函数 将sayHello应用实现国际化 解决中文问题的最佳实践
IT Education & Training
Struts资源文件(续)
资源文件分为两类,一类是默认的资源文件,即我们在struts-config.xml中使用 <message-resources>标记描述的内容,如下:
<message-resources parameter="cn.edu.neusoft.struts.ApplicationResources" <message-resources parameter="cn.edu.neusoft.struts.ApplicationResources" /> /> 另一类就是特定语言的资源文件,特定语言的资源文件的名字格式有两种,分 别为:
– Return RequestUtils.getUserLocale(request,null);
} 而在RequestUtils类的getUserLocale()方法中,其实还是调用了 request.getLocale()方法.
IT Education & Training
ResourceBundle类
IT Education & Training
Struts对国际化的支持
Struts框架提供了对国际化的支持,处理国际化的重点在于将客户所看到的所有 资源(文本,图像等)进行本地化处理.Struts框架可以获得客户的Locale对象 信息,并且Locale对象将存储在Session领域,一旦确定了客户的区域信息,框 架就可以使用该信息从资源包中查询本地化的文本及其他资源信息了. Struts已经将国际化的实现封装在框架中. 在Struts框架中实现国际化,需要做以下工作:
IT Education & Training
续:
在Struts框架中对Locale访问进行了封装. 在Action组件类中如果想获得Locale对象,只需要调用getLocale()方法即可, 该方法定义在Action类中: Protected Locale getLocale(HttpServletRequest request){
IT Education & Training
Java对国际化的支持
Struts框架对国际化的支持其实是依赖于 Java语言本身对国际化的支持. 在Java 中可以通过使用3个关键的类:
– – – java.util.Locale, java.util.ResourceBundle, java.text.MessageFormat来实现对国际化的支持
java.util.ResourceBundle类提供了根据指定的Locale对象的设定,将所需资源 组合起来的功能. ResourceBundle是一个抽象类. 在Struts框架中并没有直接使用ResourceBundle类,而是定义了两个新的类提 供了ResourceBundle类似的功能.这两个类为:
IT Education & Training
使用资源文件
资源文件定义完毕,我们可以在以下情况中使用资源文件,从而实现国际化.
– 在进行错误处理时,使用资源文件中的内容封装错误信息. – 在代码中,通过调用方法,获得资源文件中的信息. – 在JSP中使用自定义标记库标记,引用资源文件中的文本信息.
语言代码 es de fr en zh ko ja
说明 西班牙 德国 法国 英国 中国 韩国 日本
IT Education & Training
续:
创建Locale对象的方式:
– Locale loc1 = new Locale("en","gb"); – Locale loc2 = new Locale("zh",cn");
相关文档
最新文档