这周公司领导希望我对一个项目,出一个国际化的解决方案,研究两个小时,采用了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. 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用

    今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...

  2. jquery对象和DOM对象的区别和转换

    jquery对象和DOM对象的区别和转换 在使用jquery时,我们直接通过jq的选择器获取元素,然后对元素进行操作,用jq选择器获取到的对象是一个jq对象,jq对象能够使用jq提供的方法,但是不能用 ...

  3. LearnPython_week1

    1.      Python安装 2.      Hello World程序 3.      变量的简单使用 4.      注释#'" 5.      用户输入 6.      字符串格式 ...

  4. Apache设置二级域名和虚拟主机

    apache  httpd.conf 最后: ------------------------------NameVirtualHost *:80<VirtualHost *:80>    ...

  5. zabbix客户端一键安装脚本

    #!/bin/bash #通过命令行参数指定if [ ! -z "$1" ];then ip=$1 echo "手动指定IP:$ip"else#根据默认路由获取 ...

  6. 在linux内核中修改TCP MSS值

    MTU: Maxitum Transmission Unit 最大传输单元 MSS: Maxitum Segment Size 最大分段大小 MSS最大传输大小的缩写,是TCP协议里面的一个概念.MS ...

  7. jq自定义多选下拉列表框

    多选选择国家插件 https://gitee.com/richard1015/dropDownList

  8. maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  9. input placeholder样式

    input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color:red; } input:-moz-plac ...

  10. java I/O框架 (三)基本流

    概述 基本流有字节输入输出流(InputStream,OutputStream),和字符输入输出流(Reader,Writer),它们都是抽象类,作为Java IO API中其他所有流的父类存在. 我 ...