struts框架对国际化的支持体现在能够输出何用户locale相符合的文本何图片上。当struts配置文件的元素的locale属性为true时,struts框架把用户的locale实例保存在session范围内,这样,struts框架能自动根据这一lcoale实例来从resource bundle中选择合适的资源文件。当用户的locale为英文时,struts框架就会向用户返回来自于application_en.properties文件的文本内容:当用户的locale为中文时,struts框架就会向用户返回来自于appcation_ch.properties文件的文本内容。
实现应用的国际化 需要如下的三步
1 创建Struts的ResourceBundle资源文件
resource bundle的持久化消息文本存储在资源文件中,其扩展名为“.properties”,这一文件中消息的格式为:key=value。在创建resource bundle的资源文件时,可以先提供一个默认的资源文件,默认资源文件应该取名为application.properties。如果应用程序需要支持中文用户,可以再创建一个包含中文消息的资源文件,文件名为:application_ch_ch.properties或application_ch.properties。
当struts框架处理locale为中文的用户请求时,struts框架首先在web-inf/classes/目录下寻找application_ch_ch.properties文件,如果存在该文件,就从该文件中获取文本消息,否则再一次寻找application_ch.properties和application.properties文件。
应该总是为resource bundle提供默认的资源文件,这样,当不存在和某个locale对应的资源文件时,就可以使用默认的资源文件。
应该把resource bundle的资源文件放在能被定位并加载的位置。对于web应用程序,资源文件的存放目录为web-inf/classes目录。如果在配置resource bundle时还给定了包名,那么包名应该和资源文件所在的子目录对应。
2 访问Resource Bundle资源文件
struts应用的每个resource bundle和org.apache.struts.util.messageresources类(实际上是其子类propertymessageresources)的一个实例对应。messageresources对象中存放了来自资源文件的文本。当应用程序初始化时,这些messageresources实例被存储在servletcontext中(即application范围内),因此任何一个web组件都可以访问它们。一个messageresources对象可以包含多种本地化版本的资源文件的数据。
struts应用、子应用模块、resource bundle和资源文件之间存在以下关系:
一个struts应用可以有多个子应用模块,必须有且只有一个默认子应用模块。
一个子应用模块可以有多个resource bundle,必须有且只有一个默认的resource bundle。
一个resource bundle可以有多个资源文件,必须有且只有一个默认资源文件。
3 在Struts应用中访问ResourceBundle的方法
在Action基类中定义了getResources(request)方法,它可以返回默认的Message Resources对象,代表当前应用模块使用的默认resource bundle。如果要活得特定的messageresources对象,可以调用action基类的getresources(request, key)方法,其中参数key和struts配置文件中的元素的key属性对应。得到了messageresources对象后,就可以通过它的方法来访问消息文本。
org.apache.struts.util.messageresources的getmessage()方法有好几种重载形式,下面列出常用的几种:
根据参数置顶的locale检索对应的资源文件,然后返回和参数key对应的消息文本:
- getMessage(java.util.locale locale, java.lang.string key)
根据参数指定的locale检索对应的资源文件,然后返回和参数key对应的消息文本,args参数用于替换复合消息文本中的参数:
- getMessage(java.util.locale locale, java.lang.string key, java.lang.object[] args)
根据默认的locale检索对应的资源文件,然后返回和参数key对应的消息文本:
- getMessaeg(java.lang.string key)
3 在Struts应用中访问ResourceBundle的组件
struts框架中的许多内在组件和resource bundle是绑定在一起的,如:
ActionMessage类和标签。
每个actionmessage实例代表resource bundle中的一条消息。在调用actionmessage的构造方法时,需要传递消息key。
对于复合消息,在创建actionmessage对象时,可以调用带两个参数的构造方法:actionmessage(java.lang.string key, java.lang.object[] values),values参数用户替换复合消息中的参数。
在jsp页面中,使用标签,就能读取并显示ActionErrors集合中所有ActionMessage对象包含的消息文本。
struts bean标签库的标签。
struts框架包含了一些可以访问应用的消息资源的客户化标签,其中使用最频繁的一个标签为标签。标签从应用的resource bundle中获取消息字符串。
有一个bundle属性,用于指定被访问的resource bundle,它和元素的key属性匹配。如果没有设置bundle属性,将访问默认的resource bundle。
在validator验证框架中访问resource bundle。
在声明型异常处理中访问resource bundle。
阅读(1421) | 评论(0) | 转发(0) |