如何将我们网站的其它内容(如菜单、标题等)做国际化处理呢?这就是本篇要将的内容—>国际化。
所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语、英语等。
一.配置我们项目的springservlet-config.xml文件添加的内容如下:
<!-- 存储区域设置信息
SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中
从session判断用户语言defaultLocale :默认语言-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh_CN" />
</bean>
<!-- 国际化资源文件
1.messageSource配置的是国际化资源文件的路径,
2.classpath:messages指的是classpath路径下的messages_zh_CN.properties文件和messages_en_US.properties文件
3.设置“useCodeAsDefaultMessage”,默认为false,这样当Spring在ResourceBundle中找不到messageKey的话,就抛出NoSuchMessageException,把它设置为True,则找不到不会抛出异常,而是使用messageKey作为返回值。 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="useCodeAsDefaultMessage" value="true" />
<property name="basenames" >
<list>
<value>classpath:messages</value>
</list>
</property>
</bean>
<!--该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息-->
<mvc:interceptors>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
二.在com.ray.controllers包中添加GlobalController.java内容如下:
/**
* @author Ray
* @date 2018/4/20 0020
* 国际化支持
*/
@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";
}
}
三.在项目中的源文件夹resources中添加messages_zh.properties、messages_en.properties两个文件
messages_zh.properties
money=\u91D1\u94B1
date=\u65E5\u671F
messages_en.properties
money=Money
date=Date
四.在views文件夹中添加globaltest.jsp视图,内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Insert title here</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<a href="global/test?langType=zh">中文</a> | <a href="global/test?langType=en">英文</a><br/>
<h3>下面展示的是后台获取的国际化信息:</h3>
${money}<br/>
${date}<br/><br/>
<h3>下面展示的是视图中直接绑定的国际化信息:</h3>
<spring:message code="money"/>:<br/>
<spring:eval expression="contentModel.money"></spring:eval><br/><br/>
<spring:message code="date"/>:<br/>
<spring:eval expression="contentModel.date"></spring:eval><br/>
</body>
</html>
运行测试: