SpringMVC国际化支持
这周公司领导希望我对一个项目,出一个国际化的解决方案,研究两个小时,采用了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国际化支持的更多相关文章
- 国际化支持(I18N)
本章译者:@nixil 使用国际化支持(I18N)能够使你的应用根据用户所在地区的不同选择不同的语言.下面介绍如何在引用中使用国际化. 只允许使用UTF-8 Play只支持UTF-8一种字符编码.这是 ...
- 【SpringMVC】SpringMVC系列14之SpringMVC国际化
14.SpringMVC国际化 14.1.概述 14.2.用户切换选择语言
- iOS国际化支持
写给自己看: 1.先创建一个国际化文件,用于描述在不同的区域环境,显示不同的value.文件名必须是Localizable.strings,文件的内容稍后再写.
- Spring ApplicationContext的国际化支持
ApplicationContext接口继承MessageSource接口,因此具备国际化功能.下面是MessageSource接口定义的三个国际化方法. >String getMessage( ...
- 扩展SpringMVC以支持绑定JSON格式的请求参数
此方案是把请求参数(JSON字符串)绑定到java对象,,@RequestBody是绑定内容体到java对象的. 问题描述: <span style="font-size: x-sma ...
- springmvc国际化 基于请求的国际化配置
springmvc国际化 基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主. 项目结构图: 说明:properties文件中为国际化资源文件.格式相关 ...
- springmvc国际化 基于浏览器语言的国际化配置
当前标签: springmvc springmvc国际化 基于浏览器语言的国际化配置 苏若年 2013-10-09 13:03 阅读:305 评论:0 SpringMVC中应用Ajax异步通讯 ...
- 基于session 的springMvc 国际化
项目中采用springMvc的框架,需要动态切换语言,找了一些资料,最后决定采用基于session的动态切换,实现动态切换中文,英文,韩文,其实就是把中文翻译成其他语言显示 springMvc国际化包 ...
- JAVA记录-SpringMVC国际化配置
1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...
随机推荐
- b继承a
有下面这样的一段代码: function a(){ this.foo = function(){ console.log('foo'); } } var b = {}; 请问如何让b继承a? b.__ ...
- new day
Learning English is so long,but my english still is not good.I hope that one day I can speak english ...
- Angular 向组件传递模板的几种方法
最近在写一个日期选择器组件,为了满足将来可能出现的各种需求,所以需要能够高度的自定义组件的样式.为了达到这个目的,需要能够在日期选择器组件外控制每个日期格子内要显示的内容,比如,标上节假日之类的.这时 ...
- 阶段小项目1:循环间隔1秒lcd显示红绿蓝
#include<stdlib.h>#include<stdio.h>#include<string.h>#include<error.h>#inclu ...
- Bruce Eckel的资源
1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...
- Android Stutio 3.0 - Gradle sync failed
0.Android Studio 权威教程 (url:http://blog.csdn.net/column/details/zsl-androidstudio.html) 1. 项目老是报错: Gr ...
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- 试用MarkDown
自定义界面风格 可以在设置中选择日间,或者夜间模式进行定义.具体的定义项的说明,可以查看菜单栏 (Windows版本位于托盘按钮上) 自定义的帮助. MarkEditor几乎所有跟色彩有关的界面,都已 ...
- 1.8 range
哈哈,前边忘了介绍这个知识点了,老是用人家,不介绍一下都不好意思了. range()函数是一个用来创建数字序列的函数. 问题来了,为什么要写函数? 封装代码啊,让使用者不需要关心具体业务逻辑是如何实现 ...
- POJ - 2253 Frogger 单源最短路
题意:给定n个点的坐标,问从第一个点到第二个点的最小跳跃范围.d(i)表示从第一个点到达第i个点的最小跳跃范围. AC代码 #include <cstdio> #include <c ...