SpringMVC国际化的三种配置
第一步
准备好SpringMVC的环境
第二步
创建properties资源文件
message_en_US.properties
en_US代表语言(english_US)
zh_CN代表(中国_China)
第三步
然后配置Spring-mvc的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 扫描注解 -->
<context:component-scan base-package="com.connie.controller" />
<!-- 跳转的视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" />
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mycontroller/*.do"/><!-- 映射拦截路径 -->
<bean class="com.connie.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--
使用国际化:准备好资源文件后,在springmvc文件中加载资源文件
-->
<!-- 引入资源文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:message</value> <!-- 加载资源文件 -->
</list>
</property>
</bean>
<!-- 3中方式的配置 -->
<!-- 基于浏览器设置的配置 :只需要以上引入资源文件,在浏览器的设置中改语言设置-->
<!-- session 和cookie的设置,需要使用mvc的过滤器 :LocaleChangeInterceptor-->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
</mvc:interceptors>
<!-- 基于session的配置 -->
<!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> -->
<!-- 基于cookie的配置 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"></bean>
</beans>
第四步
jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 使用国际化,需导入标签库tags -->
<%@ taglib prefix="message" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h4>
<a
href="${pageContext.request.contextPath }/international/loginLoad.do?lang=zh">中文</a>|
<a
href="${pageContext.request.contextPath }/international/loginLoad.do?lang=en">english</a>
</h4>
<form
action="${pageContext.request.contextPath }/international/login.do">
<message:message code="login.name"></message:message>
:<input name="name"><br />
<br />
<message:message code="login.pwd"></message:message>
:<input name="pwd"><br />
<br /> <input type="submit"
value="<message:message code="login.submit"></message:message>">
</form>
</body>
</html>
第五步controller
package com.connie.controller;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContext;
/**
* 国际化
* @author Administrator
*
*/
@Controller
@Scope("singleton")
@RequestMapping("/international")
public class InternationalController {
/**
* 基于浏览器的国际化方法
* @param request
* @param model
* @return
*/
// //登陆加载方法
// @RequestMapping("/loginLoad.do") // 加载方法包含request和model参数
// public String loginLoad(HttpServletRequest request,Model model){
// System.out.println("loginLoad------------------");
// //设置国际化的值
// //手动获取资源文件数据并存入模型对象中
// RequestContext context = new RequestContext(request);
// model.addAttribute("login.name", context.getMessage("login.name"));
// model.addAttribute("login.pwd", context.getMessage("login.pwd"));
// model.addAttribute("login.submit", context.getMessage("login.submit"));
// model.addAttribute("index.welcom", context.getMessage("index.welcom"));
//
// //返回跳转视图路径
// return "login";
//
// }
//
/**
* 切换国际化语言的方法 基于session
* @param request
* @param model
* @return
*/
// @RequestMapping("/loginLoad.do") // 加载方法包含request和model参数
// public String loginLoad(HttpServletRequest request,HttpServletResponse response,String lang ){
// System.out.println("loginLoad------------------");
// System.out.println("lang=============="+lang);
//
// //判断语言
// if("zh".equals(lang)){
// Locale locale = new Locale("zh", "CN");//创建区域设置对象,把相对应的语言传入
// //为session区域解析器的区域session属性名称赋值,并存入session,就是把session的语言属性设置问对应的语言
// request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
// }else if("en".equals(lang)){
// 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());
//
// }
// //返回跳转视图路径
// return "login";
//
// }
/**
* 切换国际化语言的方法 基于cookie
*
* 在spring-mvc中配置CookieLocaleResolver
* <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
* @param request
* @param model
* @return
*/
@RequestMapping("/loginLoad.do") // 加载方法包含request和model参数
public String loginLoad(HttpServletRequest request,HttpServletResponse response,String lang ){
System.out.println("loginLoad------------------");
System.out.println("lang=============="+lang);
//判断语言
if("zh".equals(lang)){
Locale locale = new Locale("zh", "CN");//创建区域设置对象,把相对应的语言传入
//设置cookie的locale区域属性,就是把locale这个区域设置赋值给cookie的locale解析器,,同sesion
CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
cookieLocaleResolver.setLocale(request, response, locale);
}else if("en".equals(lang)){
Locale locale = new Locale("en","US");
//简写
(new CookieLocaleResolver()).setLocale(request, response, locale);
}else{
//没有指定,就使用默认的
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, LocaleContextHolder.getLocale());
(new CookieLocaleResolver()).setLocale(request, response, LocaleContextHolder.getLocale());
}
//返回跳转视图路径
return "login";
}
//登录方法
@RequestMapping("/login.do")
public ModelAndView login(String name, String pwd){
System.out.println(name);
System.out.println(pwd);
ModelAndView mav = new ModelAndView("index");
return mav;
}
}
最后
特别注意:要请求controller使自己的配置生效才会有效果,访问时不是直接访问login.jsp,而是要访问后台,我写了一个访问页面
test.jsp
login.jsp
注意:a标签的访问路径在下面的地址栏
login点击切换如下