码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈struts2的国际化----i18n

时间:2015-07-17 22:51:43      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:struts   struts2.0   框架   国际化   

可能大家在使用struts框架的时候,偶尔会看到这个词: i18n。也就是 Internationalization    i 开头,n 结尾, 总共18个字母,今天的主要内容就是围绕这 四个字母。

struts2国际化是建立在 java 国际化的基础上的,通过提供不同国家、语言环境的消息资源,然后通过 ResourceBundle 加载指定Locale 对应的资源文件,取得文件中指定的 key 对应的信息。

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

ResourceBundle : public abstract class ResourceBundle extends Object  
 资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包中加载它。使用这种方式,可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离开来。

可能大家对于 ResourceBundle 不太熟悉,但是它的子类,我们可是用的不能再熟悉的。

public class PropertyResourceBundle extends ResourceBundle
读取 xxx.properties 的内容    类加载器 以流的形式读取资源文件
    PropertyResourceBundle.class.getClassLoader().getResourceAsStream(   "db.properties")

连接数据库、log4j的配置,我们都用到了  xxx.properties 的配置文件  ,注意,这些配置文件要放在 类路径之下。


struts2的国际化分为三类:类级别的、包级别的和全局的。 优先级从左至右依次降低。

1、全局的配置方式为: a、在struts.xml中的<constant name="struts.custom.i18n.resources"value="message"></constant>指定baseName 国际化文件名为:baseName_语言名_国家名.properties(如:message_zh_CN.properties)
           b、全局的国际化资源文件放在src下面

2、包级别的: a、包级别的国际化资源文件放在该包下面

                           b、命名规则为:package_语言名_国名.properties(如:package_zh_CN.properties)    其中package不变,不是指的是包名,每个包的国际化文件命名都这样

3、类级别的:  a、与该类放在同一目录中

                             b、命名规则为:类名_语言名_国家名.properties(如:RegisterAction_zh_CN.properties) 


访问国际化消息的三种方式:

                              1、JSP页面输出国际化消息:使用struts 的标签<s:text.../> name 属性指定了国际化资源文件的 key
                               2、Action 类中访问国际化消息,该 Action 继承 ActionSupport 实现 getText( ) ,接收一个 String 类型的参数,参数指定了国际化资源文件的 key

                               3、表单元素 Label 中输出国际化消息,为表单标签指定一个 key属性,指定了国际化资源文件的 key


知道大家觉得理论很枯燥,下面来结合实例讲解: 配置步骤(以全局配置JSP输出国际化消息为例)

1、在 src 目录下添加资源文件,命名方式:baseName_language_country.properties,资源文件的编写: 以键值对的形式,注意名称一定要匹配

技术分享

技术分享


2、在struts.xml文件中进行国际化配置,配置常量:<constant name="struts.custom.i18n.resources" value="baseName" /> 注意不要写错,要是你来质问我为什么没有效果,。。。。
Struts 2提供了一个名i18n的拦截器(Interceptor),并且将其住注册在默认的拦截器栈中(defaultStack)
<interceptor-ref name="i18n"/>
所以我们不需要再次配置一次国际化的拦截器

技术分享

3、jsp页面表单元素记得添加一个 key 的属性 ,key的值就是资源文件中配置好的 name

技术分享


4、大家可以看到页面上有两个超链接,传递的参数为 request_locale ,参数值与我们写好的资源文件命名的 language_country 相匹配。在这里起到的作用就是切换语言环境。struts2 的 I18nInterceptor拦截器会拦截所有的Action,它主要做的事情为从客户端发送过来的请求参数中寻找是否存在名为 request_locale 的参数。若有,则将request_locale 的 value 转化为 locale 保存起来,该locale是保存在以WW_TRANS_I18N_LOCALE所命名的session里面的。如果我们不做任何配置的话,客户端是不会发送request_locale参数的。它默认会用request的getLocale()方法得到默认locale,将其存放在session中。下面我们来看一看效果

技术分享

技术分享

这个就是今天的内容了。







版权声明:本文为博主原创文章,未经博主允许不得转载。

浅谈struts2的国际化----i18n

标签:struts   struts2.0   框架   国际化   

原文地址:http://blog.csdn.net/emilyrr/article/details/46931359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!