SpringMVC国际化的三种配置

来源:互联网 发布:unity3d像素游戏制作 编辑:程序博客网 时间:2024/05/23 19:00

第一步

准备好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点击切换如下