使用Spring MVC 实现 国际化
使用Spring MVC 实现 国际化
博客分类: Spring
1、 版本 Spring 3.1
2、 配置 LocaleResolver
LocaleResolver 是指用什么策略来检测请求是哪一种Local, Spring 提供以下几种策略:
2.1、AcceptHeaderLocaleResolver
根据浏览器Http Header中的accept-language域判定(accept-language域中一般包含了当前操作系统的语言设定,可通过HttpServletRequest.getLocale方法获得此域的内容)。 改变Local 是不支持的,即不能调用LocaleResolver接口的 setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale); 方法设置Local.
2.2、SessionLocaleResolver
根据用户本次会话过程中的语言设定决定语言种类(如:用户登录时选择语言种类,则此次登录周期内统一使用此语言设定)。
2.3、CookieLocaleResolver
根据Cookie判定用户的语言设定(Cookie中保存着用户前一次的语言设定参数)。
2.4、FixedLocaleResolver 一直使用固定的Local, 改变Local 是不支持的 见(2.1)
如果需要使用哪一种策略,只需在DispatcherServlet 指定的Spring配置文件中配置就行, 例如需要使用CookieLocalResolver , 在配置文件如下配置:
< bean id = "localeResolver" class = "org.springframework.web.servlet.i18n.CookieLocaleResolver" ></ bean >
DispatchServlet 将在初始化的时候, 会调用initLocaleResolver(context) 方法去配置文件中找名字为“localeResolver" bean. 如果有就用配置文件配置的localResolver. 如果没有配置将用默认的localResolver " AcceptHeaderLocaleResolver".
3、使用Spring MVC时, controller如何得到请求的 Local
DispatchServlet 会在 processRequest(HttpServletRequest request, HttpServletResponse response) 方法中设置LocaleContext, 把LocalContext 和当前线程关联起来. 代码如下:
LocaleContextHolder.setLocaleContext (buildLocaleContext(request), this. threadContextInheritable );
DispatchServlet 中buildLocalContext代码如下:
protected LocaleContext buildLocaleContext( final HttpServletRequest request) {
return new LocaleContext() {
public Locale getLocale() {
return localeResolver .resolveLocale(request);
}
@Override
public String toString() {
return getLocale().toString();
}
};
}
这里的Local通过localResolver 解析得到, localResolver 即是从Spring 配置文件配置的localResolver, 默认是"AcceptHeaderLocaleResolver".
如果你想要在 controller 中得到当前请求的Local, 代码可以如下写:
Locale locale = LocaleContextHolder.getLocale();
或者你可以用Spring 中的RequestContextUtils 类方法getLocal得到 request 中保存的localResolver, 并用localResolver 解析得到Local. 代码如下:
public static Locale getLocale (HttpServletRequest request) {
LocaleResolver localeResolver = getLocaleResolver (request);
if (localeResolver != null ) {
return localeResolver.resolveLocale(request);
}
else {
return request.getLocale();
}
}
localResolver 会在DispatcherServlet的doService 方法中,将localResolver保存到request 属性中 代码如下:
request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver);
4、LocaleChangeInterceptor 的使用:
如果想要用户能改变Local, 我们需要配置 LocaleChangeInterceptor, 这个拦截器将检查传入的请求,如果请求中有“local" 的参数(参数可以配置),如http://localhost:8080/test?local=zh_CN. 该Interceptor将使用localResolver改变当前用户的
Local, 代码如下:
String newLocale = request.getParameter( this . paramName );
if (newLocale != null ) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver (request);
if (localeResolver == null ) {
throw new IllegalStateException( "No LocaleResolver found: not in a ..." );
}
//改变当前的Local
localeResolver.setLocale (request, response, StringUtils.parseLocaleString (newLocale));
}
要使得LocaleChangeInterceptor 有效果,在Spring 的配置文件加入即可:
< mvc:interceptors >
< bean class = "org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/ >
</ mvc:interceptors >
使用Spring MVC 实现 国际化的更多相关文章
- Java Web 学习(7) —— Spring MVC 之国际化
Spring MVC 之国际化 i18n 与 l10n internationalization:国际化,以 i 开头,以 n 结尾,中间 18 个字母,简称 i18n. localization:本 ...
- Spring MVC 的国际化和本地化
国际化: i18n 本地化: l10n java.util.Locale 类表示一个语言区域.一个 Locale 对象包含 3 个主要元件:language.country.variant java. ...
- [Spring]Spring Mvc实现国际化/多语言
1.添加多语言文件*.properties F64_en_EN.properties详情如下: F60_G00_M100=Please select data. F60_G00_M101=Are yo ...
- Spring mvc i18n国际化的简单demo
在渲染视图的xml文件中,配置一个i18nBean 实现两个接口: SessionLocaleResolver --> 加载资源主题 ReloadableResourceBundleMessag ...
- Spring MVC国际化配置
Spring MVC国际化配置 前言 项目开发中要考虑支持国际化,框架选用的是Spring MVC框架,那么问题来了Spring MVC如何配置并实现国际化. 实现过程(Maven项目) 对于Spri ...
- Spring MVC(十六)--Spring MVC国际化实例
上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式.我的场景是这样的: 访问一个页面时,这个页面有个表格,对表头中的列名实现国际化. 第 ...
- spring mvc+myBatis配置详解
一.spring mvc Spring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M- ...
- Spring MVC的优势
Spring 框架提供了构建Web应用程序的全功能MVC模块--Spring MVC. Spring MVC框架提供了一个DispatcherServlet作为前端控制器来分派请求,同时提供灵活的配置 ...
- Spring MVC(3)Spring MVC 高级应用
一.Spring MVC 的数据转换和格式化 前面的应用,都只是用HandlerAdapter去执行处理器. 处理器和控制器不是一个概念,处理器是在控制器功能的基础上加上了一层包装,有了这层包装,在H ...
随机推荐
- 基础-WeakReference
一.概述 为了更好的理解WeakHashMap的原理,我们有必要先来了解一下WeakReference的作用及实现原理.Java中有一个专门的包java.lang.ref,里面定义了我们通常所说的几种 ...
- MAC下反編譯安卓APK
所需工具: 1.apktool http://ibotpeaches.github.io/Apktool/ (配置說明) https://bitbucket.org/iBotPeac ...
- /dev/random 和 /dev/urandom的一点备忘
1. 基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流.很多解密程序与安全应用程序(如SSH Keys, ...
- docker nginx1.7.6+keepalived实现双机热备
0.前提条件 环境两台ubuntu版本14.04 64位系统(并获取root权限) 假设两台服务器ip为:172.16.34.214(master),172.16.34.215(backup),kee ...
- aviator使用手册在线
Aviator是一个高性能.轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值.现在已经有很多开源可用的 java 表达式求值引擎,为什么还需要 Avaitor 呢? Avi ...
- Spring4学习笔记2-配置集合属性
1 可使用<list> <map> <set>等来配置集合属性 2 List <!-- 配置List属性 --> <bean id="p ...
- Nivo Slider - 世界上最棒的 jQuery 图片轮播插件
Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- iOS 代理协议
代理,又称委托代理(delegate),是iOS中常用的设计一种模式.顾名思义,它是把某个对象要做的事情委托给别的对象去做.那么别的对象就是这个对象的代理,代替它来打理要做的事.反映到程序中, 首先要 ...
- DevExpress 2015.2发布 看看有哪些更新
下面是besy翻译的部分重要更新,要查看全部更新细节请访问英文官网. | 下载DevExpress 2015.2 Diagram Control 新的DevExpress Diagram Contro ...