首页 > 代码库 > SpringMVC学习系列(8) 之 国际化

SpringMVC学习系列(8) 之 国际化

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

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

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">    <!-- 国际化信息所在的文件名 -->                         <property name="basename" value="http://www.mamicode.com/locale/message" />       <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->                   <property name="useCodeAsDefaultMessage" value="http://www.mamicode.com/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 Failmessage.login.success=Login Success

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

在Controller 文件添加一个方法

    @RequestMapping(value = "http://www.mamicode.com/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 = "http://www.mamicode.com/sessiontest", method = {RequestMethod.GET})
public String seesionTest(HttpServletRequest request, Model model,
@RequestParam(value = "http://www.mamicode.com/langType", defaultValue = "http://www.mamicode.com/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="http://www.mamicode.com/${ctx }/sessiontest?langType=zh">中文</a> | <a href="http://www.mamicode.com/${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 = "http://www.mamicode.com/cookietest", method = {RequestMethod.GET})    public String cookietest(HttpServletRequest request, HttpServletResponse response, Model model,        @RequestParam(value = "http://www.mamicode.com/langType", defaultValue = "http://www.mamicode.com/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="http://www.mamicode.com/${ctx }/cookietest?langType=zh">中文</a> | <a href="http://www.mamicode.com/${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) 之 国际化