原文:http://www.cnblogs.com/liukemng/p/3750117.html

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

首先配置我们项目的springservlet-config.xml文件添加的内容如下:

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

在com.demo.web.controllers包中添加GlobalController.java内容如下:

package com.demo.web.controllers;import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.support.RequestContext;
import com.demo.web.models.FormatModel;@Controller
@RequestMapping(value = "/global")
public class GlobalController {@RequestMapping(value="/test", method = {RequestMethod.GET})public String test(HttpServletRequest request,Model model){if(!model.containsAttribute("contentModel")){//从后台代码获取国际化信息RequestContext requestContext = new RequestContext(request);model.addAttribute("money", requestContext.getMessage("money"));model.addAttribute("date", requestContext.getMessage("date"));FormatModel formatModel=new FormatModel();formatModel.setMoney(12345.678);formatModel.setDate(new Date());model.addAttribute("contentModel", formatModel);}return "globaltest";}}

这里展示模型还用系列(7)中的作为演示。

在项目中的源文件夹resources中添加messages.properties、messages_zh_CN.properties、messages_en_US.properties三个文件,其中messages.properties、messages_zh_CN.properties里面的"money", "date",为中文,messages_en_US.properties里面的为英文。

在views文件夹中添加globaltest.jsp视图,内容如下:

<%@ 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/>${money}<br/>${date}<br/>下面展示的是视图中直接绑定的国际化信息:<br/><spring:message code="money"/>:<br/><spring:eval expression="contentModel.money"></spring:eval><br/><spring:message code="date"/>:<br/><spring:eval expression="contentModel.date"></spring:eval><br/></body>
</html>

运行测试:

更改浏览器语言顺序,刷新页面:

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

在项目的springservlet-config.xml文件添加的内容如下(第一种时添加的内容要保留):

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

更改globaltest.jsp视图为如下内容:

<%@ 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><a href="test?langType=zh">中文</a> | <a href="test?langType=en">英文</a><br/>下面展示的是后台获取的国际化信息:<br/>${money}<br/>${date}<br/>下面展示的是视图中直接绑定的国际化信息:<br/><spring:message code="money"/>:<br/><spring:eval expression="contentModel.money"></spring:eval><br/><spring:message code="date"/>:<br/><spring:eval expression="contentModel.date"></spring:eval><br/></body>
</html>

更改GlobalController.java为如下内容:

package com.demo.web.controllers;import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContext;
import com.demo.web.models.FormatModel;@Controller
@RequestMapping(value = "/global")
public class GlobalController {@RequestMapping(value="/test", method = {RequestMethod.GET})public String test(HttpServletRequest request,Model model, @RequestParam(value="langType", defaultValue="zh") String langType){if(!model.containsAttribute("contentModel")){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("money", requestContext.getMessage("money"));model.addAttribute("date", requestContext.getMessage("date"));FormatModel formatModel=new FormatModel();formatModel.setMoney(12345.678);formatModel.setDate(new Date());model.addAttribute("contentModel", formatModel);}return "globaltest";}}

运行测试:

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

把实现第二种方法时在项目的springservlet-config.xml文件中添加的

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

注释掉,并添加以下内容:

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

更改GlobalController.java为如下内容:

package com.demo.web.controllers;import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
//import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContext;import com.demo.web.models.FormatModel;@Controller
@RequestMapping(value = "/global")
public class GlobalController {@RequestMapping(value="/test", method = {RequestMethod.GET})public String test(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam(value="langType", defaultValue="zh") String langType){if(!model.containsAttribute("contentModel")){/*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());*/if(langType.equals("zh")){Locale locale = new Locale("zh", "CN"); //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);(new CookieLocaleResolver()).setLocale (request, response, locale);}else if(langType.equals("en")){Locale locale = new Locale("en", "US"); //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);(new CookieLocaleResolver()).setLocale (request, response, locale);}else //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());(new CookieLocaleResolver()).setLocale (request, response, LocaleContextHolder.getLocale());//从后台代码获取国际化信息RequestContext requestContext = new RequestContext(request);model.addAttribute("money", requestContext.getMessage("money"));model.addAttribute("date", requestContext.getMessage("date"));FormatModel formatModel=new FormatModel();formatModel.setMoney(12345.678);formatModel.setDate(new Date());model.addAttribute("contentModel", formatModel);}return "globaltest";}}

运行测试:

关于<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />3个属性的说明(可以都不设置而用其默认值):

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"><!-- 设置cookieName名称,可以根据名称通过js来修改设置,也可以像上面演示的那样修改设置,默认的名称为 类名+LOCALE(即:org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE--><property name="cookieName" value="lang"/><!-- 设置最大有效时间,如果是-1,则不存储,浏览器关闭后即失效,默认为Integer.MAX_INT--><property name="cookieMaxAge" value="100000"><!-- 设置cookie可见的地址,默认是“/”即对网站所有地址都是可见的,如果设为其它地址,则只有该地址或其后的地址才可见--><property name="cookiePath" value="/">
</bean>

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

首先添加一个类,内容如下:

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;}}

然后把实现第二种方法时在项目的springservlet-config.xml文件中添加的

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

注释掉,并添加以下内容:

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

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

保存之后就可以在请求的URL后附上 locale=zh_CN 或 locale=en_US 如 http://xxxxxxxx?locale=zh_CN 来改变语言了,具体这里不再做演示了。

国际化部分的内容到此结束。

代码下载:http://pan.baidu.com/s/1bnlaOaj

转载于:https://www.cnblogs.com/natian-ws/p/10852919.html

SpringMVC 国际化相关推荐

  1. springMVC 国际化 多语言

    springMVC 国际化(多语言) 配置 系统有时需要考虑多国人员使用(比如中国人.美国人.日本人.韩国人),面向不同国家的使用者应该能方便地在不同语言之间进行切换,比如中文.英文.日文.韩文. 常 ...

  2. 关于SpringMVC国际化的问题--中文状态下运行正常,英文状态不正常

    注意:这是我自己的分析,如有什么不对的地方请评论区指正. 问题描述: 昨天学习了关于SpringMVC国际化的知识,在所有代码完成的情况下,我在配置文件中配置i18n文件之后,浏览器出现在中文环境下好 ...

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

    项目结构图如下: 说明:lib下存放的是Spring相关包,项目应用包为Spring3.2,message_*.properties中存放的是国际化的资源文件 资源文件 英语的资源文件message_ ...

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

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

  5. SpringMvc国际化i18n

    所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语.英语等.    下面简单说一下Springmvc下的i18n的国际化配置: 首先发下我的目录结构图: spri ...

  6. springmvc国际化

    2019独角兽企业重金招聘Python工程师标准>>> 1.配置 在spring配置文件中引入国际化 <!-- 定义国际化消息 --> <bean id=" ...

  7. SpringMVC 国际化-中英文切换

    国际化是为了实现不同地区页面呈现不同的语言问题: 编写程序实现国际化,在xml文件中做响应的配置,然后编写.properties文件即可. 实现登录界面的中英文切换: xml文件配置: <!-- ...

  8. springmvc 拦截器、国际化、验证

    2019独角兽企业重金招聘Python工程师标准>>> springmvc 拦截器 继承了HandlerIntercepter的类可以作为拦截器类: package com.yawn ...

  9. Spring MVC -- 国际化

    在全球化的今天,现在比过去更需要编写可以在不同语言国家和地区部署的应用程序.在这方面,需要了解两个术语: 国际化:常常缩写为i18n,因为其单词internationalization以i开始,以n结 ...

最新文章

  1. python实现一个抽象数据结构:栈
  2. apache activemq ActiveMQ 修改密码
  3. USACO 3.1 Agri-Net 最短网络 (最小生成树)(克鲁斯卡尔算法)
  4. [CodeForces1603D] Artistic Partition(四边形不等式 + 决策单调性优化dp + 分治 + 线性筛 + 数论分块)
  5. 澳网:公茂鑫/张择创历史 中国男网夺大满贯首胜
  6. 字符串以及文件的hashlib的md5和sha1等的运用
  7. 阶乘因式分解 一 c语言,阶乘因式分解(一)(C/C++语言代码)
  8. “冲击波”病毒的症状和解决方案
  9. TextCNN代码解读及实战
  10. jTopo的基本使用
  11. 学习备忘英语单词转载
  12. 【已解决】 “discovered_interpreter_python“: “/usr/bin/python“
  13. HTML中的盒子模型
  14. ai智能写作如何快速写文?
  15. CMMI认证等级应该怎么选
  16. Photoshop如何修改图片的颜色
  17. netty系列之:请netty再爱UDT一次
  18. 燕十八 mysql_燕十八mysql笔记
  19. 基于android的计步器文档,基于Android的计步器(Pedometer)的讲解(六)
  20. 线性系统的三种串联校正方法比较

热门文章

  1. 算法分析 载货问题_协会发布 | 汽车市场走势分析及2021年预测报告
  2. android 多个dialog 交替显示,Android如何在一个AlertDialog中一个接一个地显示两个ListViews...
  3. php如何定义url,使用自定义函数作为URL规则
  4. php的div和p的区别,p标签与div标签区别
  5. docker搭建ssr
  6. 做了5年Java,java文件下载代码
  7. 一个Java程序员的面试心得,最终入职阿里
  8. python【力扣LeetCode算法题库】14-最长公共前缀(列表解压)
  9. php margin参数,margin参数简单介绍_html/css_WEB-ITnose
  10. 内核电源管理器已启动关机转换_Linux系统启动流程