spring mvc国际化资源实现

原创 2017年06月16日 18:54:45

springMVC给我们提供了国际化支持,简单来说就是设置整个系统的运行语言,然后根据系统的运行语言来展示对应语言的页面,一般我们称之为多语言。通过源码我们可以了解到springMVC对多语言的支持就是设置Locale的语言信息来实现的,只不过是设置了通过cookie、session等方式设置而已。

springMVC多语言具体由拦截器LocaleChangeInterceptor,解析器LocaleResolver,资源管理器来实现。

LocaleChangeInterceptor需要在配置文件中设置,用来获取客户端的Local信息。

解析器LocaleResolver接口有四个默认实现的类AcceptHeaderLocaleResolver,FixedLocaleResolver、CookieLocaleResolver和SessionLocaleResolver。

AcceptHeaderLocaleResolver:其实没有任何具体实现,是通过浏览器头部的语言信息来进行多语言选择。

FixedLocaleResolver:设置固定的语言信息,这样整个系统的语言是一成不变的,用处不大。

CookieLocaleResolver:将语言信息设置到Cookie中,这样整个系统就可以获得语言信息

SessionLocaleResolver:与CookieLocaleResolver类似将语言信息放到Session中,这样整个系统就可以从Session中获得语言信息。




资源管理器同样需要在配置文件中配置,主要有两个实现类:ResourceBundleMessageSource 和ReloadableResourceBundleMessageSource

要关心的是这两个的区别:

1.ResourceBundleMessageSource在xml配置中无法指定编码:
     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
     <property name="basenames">
          <list>
               <value >error</value >
               <value >message</value >
          </list>    
</property>
     </bean>


而ReloadableResourceBundleMessageSource可以指定编码,譬如:
     <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="defaultEncoding" value ="gbk" />
        <property name="basename" value ="message" />
    </bean>


2.加载资源文件的方式不同:
  ResourceBundleMessageSource的加载,使用ClassUtils.getDefaultClassLoader()加载器,getDefaultClassLoader方法;
  JVM默认的加载方式,先从当前线程中获取类加载器,如果没有,就获取这个类本身的类加载器
  ReloadableResourceBundleMessageSource默认也使用ClassUtils.getDefaultClassLoader()加载器。
  ReloadableResourceBundleMessageSource加载时,默认使用DefaultResourceLoader,他会先判断资源path是否带有classpath:前缀,如果有,用 ClassPathResource去加载资源文件,如果没有试着用文件协议的url去访问,再没有就在contextPath即WEB-INF下查找。


资源配置文件的时候注意useCodeAsDefaultMessage属性设置,默认为false,这样当Spring在ResourceBundle中找不到messageKey的话,就抛出NoSuchMessageException,   把它设置为True,则找不到不会抛出异常,而是使用messageKey作为返回值。


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

简单实现SpringMVC资源国际化

资源国际化 1.java在国际化方面的支持是很强大的,有locate类,可以获取language,country,variant,可以通过Locate.getDefault获取用户计算机的语言区域...
  • snakeMoving
  • snakeMoving
  • 2016年12月03日 16:57
  • 1428

基于SpringMVC国际化资源配置方式Demo

一.项目结构: 图 二.操作步骤: 在springmvc.xml配置如下内容 1.配置本地化变更拦截器 2.配置qi...
  • StemQ
  • StemQ
  • 2016年11月12日 15:30
  • 1874

SpringMvc国际化 根据不同请求调用不同的资源文件

项目要实现一功能,某个模块下的所有国际化要单独走一套资源文件,
  • hi_kevin
  • hi_kevin
  • 2014年04月18日 12:34
  • 6555

Spring mvc之JSR303框架实现数据格式化,数据验证,资源国际化

今天使用JSR303框架实现 mvc的3个重要的部分 数据格式化 数据验证 资源国际化 要使用到的3个jar包: hibernate-validator-4.3.2.Final.jar validat...
  • u013410747
  • u013410747
  • 2015年11月06日 23:43
  • 771

Spring MVC国际化的实现

 springMVC的国际化: 1 如何定义资源化文件:基名+语言名 2 使用拦截器处理国际化的流程 使用拦截器拦截设置语言的请求     LocaleChangeInt...
  • isunnyvinson
  • isunnyvinson
  • 2016年10月10日 20:06
  • 300

spring MVC国际化的简单实现

需要的工程jar包这里就不多说,网上有很多可以下载。下面直接入正题 要实现的功能如下,点击语言列表可以切换语言 2.下面是需要的一些文件下面是几种语言的.properties文件 ...
  • wearetheworld1
  • wearetheworld1
  • 2016年12月22日 16:06
  • 222

Spring MVC学习总结(15)——SpringMVC之国际化简单实现

什么叫国际化:在平时的网站开发中国际化经常会用到,针对不同的人群页面显示文字也要求不同,通常有中文简体,中文繁体和英文几种 首先要检查项目中是否导入jar包,i18n 2.在sprin...
  • u012562943
  • u012562943
  • 2017年07月06日 13:46
  • 645

spring mvc jdbc jquery dwr 真静态 假静态 国际化 jstl

  • 2009年05月01日 03:14
  • 160KB
  • 下载

Maven + Spring mvc + Mybatis + Velocity +国际化配置 demo

  • 2017年04月26日 16:44
  • 39KB
  • 下载

Spring MVC 实现跨域资源 CORS 请求

什么是 CORS ? 跨来源资源共享(Cross-origin resource sharing)是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策...
  • liyongshun82
  • liyongshun82
  • 2016年10月11日 12:54
  • 279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring mvc国际化资源实现
举报原因:
原因补充:

(最多只允许输入30个字)