SpringMVC-servlet.xml
<!-- 1、读取国际化资源文件 == 资源文件在包里面,路径写全包名-->
<!-- 当国际化配置文件在WEB-INF下时使用org.springframework.context.support.ResourceBundleMessageSource -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<!-- i18n下的文件名应该问messages_en,messages_zh等-->
<value>classpath:resources/i18n/messages</value>
</list>
</property>
<property name="cacheSeconds" value="3600" />
<property name="defaultEncoding" value="UTF-8" />
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<!-- 2、Session本地解析器专门用来预设服务器本地的session属性 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh"></property>
<property name="cookieMaxAge" value="3600"/> <!-- value=-1代表浏览器关闭后cookies失效 -->
<!--property name="cookieName" value="clientlanguage"/-->
</bean>
<!-- springmvc拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有URL中包含/user/的请求 -->
<mvc:mapping path="/user/s/**"/>
<bean class="main.java.com.smart.interceptor.LoginInterceptor"/>
</mvc:interceptor>
<!-- 3、动态改变本地语言 -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<!-- property name="paramName" value=""/--><!-- 默认属性值为local,local的值为某语言 -->
</bean>
</mvc:interceptors>
<!-- 4、校验器(额外) -->
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="messageSource"/>
</bean>
配置好1-3在view中可以通过spring标签进行messages文件的属性访问
栗子:
<spring:message code="title"></spring:message>
配置好4可以在java全局通过大括号引入messages文件的属性,在注解中也可以使用
栗子,”Pattern.user.phone”为messages文件下的一个属性名:
@Pattern(regexp = "[0-9]{11}",message = "{Pattern.user.phone}")
private String phone;
LocaleFilter.java,定义过滤规则
package main.java.com.smart.filter;
import java.io.IOException;
import java.util.Locale;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
public class LocaleFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String lang = "zh";//默认中文
Cookie[] cookies = ((HttpServletRequest)request).getCookies(); //1、获取cookies
if (cookies != null && cookies.length > 0) { //2、判断cookies数组是否为空
for(Cookie cookie : cookies){
if ("lang".equals(cookie.getName())) {
lang = cookie.getValue(); //3、获取浏览器本地改变的的cookie值
}
}
}
//4、更改请求的cookie属性传递给服务器,服务器根据请求的lang值response响应的内容
((HttpServletRequest)request).getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale(lang));
System.out.println("change locale to " + lang);
chain.doFilter(request, response);//5、进行过滤操作,将request传入的参数过滤后传递给服务器,服务器在response
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
在web.xml下配置过滤器
<!-- 国际化配置过滤器 -->
<filter>
<filter-name>localeFilter</filter-name>
<filter-class>main.java.com.smart.filter.LocaleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>localeFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>localeFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
success.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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><spring:message code="title"></spring:message></title>
</head>
<body>
<script type="text/javascript">
function changeLocale(lang){
var exdate = new Date();
exdate.setDate(exdate.getDate() + 365);
document.cookie="lang=" + lang + ";expires=" + exdate.toGMTString();
location.reload();
}
</script>
<h1><spring:message code="title"></spring:message></h1>
<a href="javascript: changeLocale('zh')">中文</a>
<a href="javascript: changeLocale('en')">英文</a>
<div style="margin: 0 auto;margin-top: 100px; ">
<spring:message code="desc"></spring:message>
</div>
<P><a href="user/doLogout.html">退出登录</a></P>
</body>
</html>
原创+转载,如有侵权请指出,代码后续会优化整合为一个完整项目