这周公司领导希望我对一个项目,出一个国际化的解决方案,研究两个小时,采用了SpringMVC的国际化支持,在此记录下。

原理: 在DispatchServlet中注册localeResolver(区域解析器),并添加Locale拦截器(LocaleChangeInterceptor),来检测请求中的参数和语言环境的改变。

       在应用上下文中注册ResourceBundleMessageSource,定义国际化文件在程序中的路径和名称。

  

1. 语言解析器

  在SpringMVC中,常用的语言解析器有

  Header resolver:通过解析客户端请求头信息中心的accept-language,来获取用户需要的国际化语言。详见=AcceptHeaderLocaleResolver

  Cookie resolver:通过解析客户端上Cookie指定的locale,来获取用户需要的国际化信息。详见=CookieLocaleResolver

  Session resolver:通过解析客户端请求域中的loacle信息,来获取需要的国际化信息,并存储在httpSession中。详见=SessionLocaleResolver

    

 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en_US" />
</bean>

2. 区域拦截器

  我们需要在DispatchServlet中注册监控区域改变的拦截器, 他能帮助我们检测请求参数,根据请求参数对应的语言,更改语言环境。

  

 <mvc:interceptors>
<bean class="com.xxx.web.interceptor.LocaleChangeInterceptor" />
</mvc:interceptors>

3.  国际化资源配置

      

 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="basename" value="classpath*:/ApplicationMessage" />
<property name="useCodeAsDefaultMessage" value="true" />
</bean>

4. 页面国际化

  在这里,我是用的是jstl的fmt标签来实现国际化。有兴趣的同学也可以使用spring的message标签。

  1) 引入标签库<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

  2) 指定国际化文件资源名<fmt:setBundle basename="ApplicationMessage" />

  3) 通过国际化资源文件的key,读取文件信息。 <fmt:message key="security.account.number" />

5. 我们在第二步中选择的是SessionResolver解析器。所以在请求中,我们需要在url的参数后面拼接上locale=具体语言标识(例如:locale=zh_CN)。

 注意:在每个页面都拼接url的话会显得麻烦,通常用户会希望能做的,一次选择语言后,之后都首选这种语言。所以有兴趣的同学可考虑,通过扩展LocaleChangeInterceptor,来达到更完善的功能。

SpringMVC国际化支持的更多相关文章

  1. 国际化支持(I18N)

    本章译者:@nixil 使用国际化支持(I18N)能够使你的应用根据用户所在地区的不同选择不同的语言.下面介绍如何在引用中使用国际化. 只允许使用UTF-8 Play只支持UTF-8一种字符编码.这是 ...

  2. 【SpringMVC】SpringMVC系列14之SpringMVC国际化

    14.SpringMVC国际化 14.1.概述 14.2.用户切换选择语言

  3. iOS国际化支持

    写给自己看: 1.先创建一个国际化文件,用于描述在不同的区域环境,显示不同的value.文件名必须是Localizable.strings,文件的内容稍后再写.

  4. Spring ApplicationContext的国际化支持

    ApplicationContext接口继承MessageSource接口,因此具备国际化功能.下面是MessageSource接口定义的三个国际化方法. >String getMessage( ...

  5. 扩展SpringMVC以支持绑定JSON格式的请求参数

    此方案是把请求参数(JSON字符串)绑定到java对象,,@RequestBody是绑定内容体到java对象的. 问题描述: <span style="font-size: x-sma ...

  6. springmvc国际化 基于请求的国际化配置

    springmvc国际化 基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主. 项目结构图: 说明:properties文件中为国际化资源文件.格式相关 ...

  7. springmvc国际化 基于浏览器语言的国际化配置

    当前标签: springmvc   springmvc国际化 基于浏览器语言的国际化配置 苏若年 2013-10-09 13:03 阅读:305 评论:0   SpringMVC中应用Ajax异步通讯 ...

  8. 基于session 的springMvc 国际化

    项目中采用springMvc的框架,需要动态切换语言,找了一些资料,最后决定采用基于session的动态切换,实现动态切换中文,英文,韩文,其实就是把中文翻译成其他语言显示 springMvc国际化包 ...

  9. JAVA记录-SpringMVC国际化配置

    1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...

随机推荐

  1. b继承a

    有下面这样的一段代码: function a(){ this.foo = function(){ console.log('foo'); } } var b = {}; 请问如何让b继承a? b.__ ...

  2. new day

    Learning English is so long,but my english still is not good.I hope that one day I can speak english ...

  3. Angular 向组件传递模板的几种方法

    最近在写一个日期选择器组件,为了满足将来可能出现的各种需求,所以需要能够高度的自定义组件的样式.为了达到这个目的,需要能够在日期选择器组件外控制每个日期格子内要显示的内容,比如,标上节假日之类的.这时 ...

  4. 阶段小项目1:循环间隔1秒lcd显示红绿蓝

    #include<stdlib.h>#include<stdio.h>#include<string.h>#include<error.h>#inclu ...

  5. Bruce Eckel的资源

    1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...

  6. Android Stutio 3.0 - Gradle sync failed

    0.Android Studio 权威教程 (url:http://blog.csdn.net/column/details/zsl-androidstudio.html) 1. 项目老是报错: Gr ...

  7. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  8. 试用MarkDown

    自定义界面风格 可以在设置中选择日间,或者夜间模式进行定义.具体的定义项的说明,可以查看菜单栏 (Windows版本位于托盘按钮上) 自定义的帮助. MarkEditor几乎所有跟色彩有关的界面,都已 ...

  9. 1.8 range

    哈哈,前边忘了介绍这个知识点了,老是用人家,不介绍一下都不好意思了. range()函数是一个用来创建数字序列的函数. 问题来了,为什么要写函数? 封装代码啊,让使用者不需要关心具体业务逻辑是如何实现 ...

  10. POJ - 2253 Frogger 单源最短路

    题意:给定n个点的坐标,问从第一个点到第二个点的最小跳跃范围.d(i)表示从第一个点到达第i个点的最小跳跃范围. AC代码 #include <cstdio> #include <c ...