一.基于浏览器请求的国际化实现:

1)在 spring的配置文件中添加

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 国际化信息所在的文件名 -->
<property name="basename" value="locale/message" />
<!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 -->
<property name="useCodeAsDefaultMessage" value="true" />
</bean>

2)在resources 下 建立文件夹 locale ,在locale下添加messages.properties、messages_zh_CN.properties、messages_en_US.properties三个文件

比如 resources/locale/messages_zh_CN.properties  下的内容

message.login.fail=登录失败
message.login.success=登录成功

比如 resources/locale/messages_en_US.properties  下的内容

message.login.fail=Login Fail
message.login.success=Login Success

3)在后台中读取资源化文件中的内容,并返回给前台

在Controller 文件添加一个方法

    @RequestMapping(value = "/testMessage.do")
public String testMessage(HttpServletRequest request,Model model)
{
logger.debug("enter MainController.testMessage()"); //从后台代码获取国际化信息
RequestContext requestContext = new RequestContext(request);
model.addAttribute("message", requestContext.getMessage("message.login.success"));
return "testmessage";
}

4)前台显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
下面展示的是后台获取的国际化信息:<br/>
${message} 在前台上直接显示国际化文件中的内容
<spring:message code="message.login.fail" ></spring:message>
</body>
</html>

  

二.基于Session的国际化实现:

1)在 spring的配置文件中添加

<mvc:interceptors>
<!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

2)在后台中

@RequestMapping(value = "/sessiontest", method = {RequestMethod.GET})
public String seesionTest(HttpServletRequest request, Model model,
@RequestParam(value = "langType", defaultValue = "zh") String langType)
{

if (langType.equals("zh"))
{
Locale locale = new Locale("zh", "CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
}
else if (langType.equals("en"))
{
Locale locale = new Locale("en", "US");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
}
else
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
LocaleContextHolder.getLocale());

// 从后台代码获取国际化信息
RequestContext requestContext = new RequestContext(request);
model.addAttribute("message", requestContext.getMessage("message.login.success"));
return "testmessage";
}

 3) 同上

4) 在jsp 页面上加入

使用session 切换
<a href="${ctx }/sessiontest?langType=zh">中文</a> | <a href="${ctx }/sessiontest?langType=en">英文</a><br/>
${message}<br>

三.基于Cookie的国际化实现:

同session 类似,不与session方式同时存在

1)在 spring的配置文件中添加

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />

2)后台

@RequestMapping(value = "/cookietest", method = {RequestMethod.GET})
public String cookietest(HttpServletRequest request, HttpServletResponse response, Model model,
@RequestParam(value = "langType", defaultValue = "zh") String langType)
{
if (langType.equals("zh"))
{
Locale locale = new Locale("zh", "CN");
(new CookieLocaleResolver()).setLocale(request, response, locale);
}
else if (langType.equals("en"))
{
Locale locale = new Locale("en", "US");
(new CookieLocaleResolver()).setLocale(request, response, locale);
}
else
(new CookieLocaleResolver()).setLocale(request, response, LocaleContextHolder.getLocale()); // 从后台代码获取国际化信息
RequestContext requestContext = new RequestContext(request);
model.addAttribute("message", requestContext.getMessage("message.login.success"));
return "testmessage";
}

 

 3) 同上

4) 在jsp 页面上加入

使用cookie 切换
<a href="${ctx }/cookietest?langType=zh">中文</a> | <a href="${ctx }/cookietest?langType=en">英文</a><br/>
${message}<br>

四.基于URL请求的国际化的实现:

1)自定义一个类

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.LocaleResolver; public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver { private Locale myLocal; public Locale resolveLocale(HttpServletRequest request) {
return myLocal;
} public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
myLocal = locale;
} }

  2)在 spring的配置文件中添加

<bean id="localeResolver" class="xx.xxx.xxx.MyAcceptHeaderLocaleResolver"/>

  “xx.xxx.xxx”是刚才添加的MyAcceptHeaderLocaleResolver 类所在的包名。

保存之后就可以在请求的URL后附上 locale=zh_CN 或 locale=en_US

 

参考:http://www.cnblogs.com/liukemng/p/3750117.html

SpringMVC学习系列(8) 之 国际化的更多相关文章

  1. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  2. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

  3. SpringMVC学习系列-后记 开启项目的OpenSessionInView

    在系列的 SpringMVC学习系列(12) 完结篇 的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView.在ma ...

  4. SpringMVC学习系列(2) 之 经典的HelloWorld实现

    前一篇简单介绍了Spring MVC的一些知识,下面就要开始学习如何把Spring MVC运用到具体的项目中去. 首先还是从一个简单的Hello World项目说起: 我机器的开发环境为: Ubunt ...

  5. SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

    到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProj ...

  6. SpringMVC学习系列(11) 之 表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  7. SpringMVC学习系列(3) 之 URL请求到Action的映射规则

    在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在系列(2)中我们在HelloWorldContr ...

  8. SpringMVC学习系列(1) 之 初识SpringMVC

    1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论 ...

  9. SpringMVC学习系列(6) 之 数据验证

    在系列(4).(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证. 这里我们采用Hibernate-validator来进行验 ...

随机推荐

  1. ComboBox的数据联动

    实现效果: 点击年级下拉框值时,获取科目下拉框值 一:加载年级下拉框值 GradeDAL层: //检索所有年级名称集合,返回的是泛型集合List<Grade> public List< ...

  2. Git/Github + TortoiseGit 使用教程

    前言 Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 在github上有很多优秀的项目,一个伟大的学习宝库.本文分享使用tortoisegit对github/ ...

  3. 嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构

    硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...

  4. ubuntu在命令行新建用户后无法进入桌面的原因

    在命名行模式下 用useradd新建一个用户后 在图形界面输入密码无法登陆 这是因为未对新建的用户进行任何配置 用adduser命令新建用户即可进入桌面 下面说一下useradd 和 adduser的 ...

  5. 方便!C++ builder快捷键大全

    Clipboard control (default) Ctrl+Ins Edit|Copy Shift+Del Edit|Cut Shift+Ins Edit|Paste Ctrl+C Edit|C ...

  6. 实现了与maya场交互的能力

    今天把模拟节点与maya场的对接做好了,效果如图: 图中黄色线为每个节点受到的外力,由于加了一个重力场,所以外力都是竖直向下. 节点连线方式如图所示: 交互的具体方法是在每次模拟之前,更新每个节点所受 ...

  7. Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  8. History 对象

    History 对象 History 对象包含用户(在浏览器窗口中)访问过的 URL. History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. 注 ...

  9. 创建Visual studio项目模板 vstemplate关键点纪要

    from:http://www.cnblogs.com/stickman/p/3454719.html 经过多次的实验,终于完美生成一个.VSIX的项目模板安装包,其中遇到不少问题与挫折,久经goog ...

  10. NodeJS 开篇 牛刀小试

    一.Node&NPM的安装与配置 下载:https://nodejs.org/en/ V4.2.x LTS(9.75MB)——长期支持版,成熟可靠 V5.x.x Stable(9.71MB)— ...