首页 > 代码库 > 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) 之 国际化