Spring MVC国际化
一、基于浏览器请求的Spring MVC国际化
Spring MVC会读取浏览器的accept-language,来判断使用哪种语言。
在Chrome调试模式中可以具体看到accept-language的值:

1.准备两个资源文件,可在IDEA中右键resource文件夹 --> New --> Resource Bundle 快速创建:
message_zh_CN.properties
#中文转unicode login = \u767b\u5f55 user = \u7528\u6237\u540d password = \u5bc6\u7801 pleaseEnterUserName = \u8f93\u5165\u7528\u6237\u540d pleaseEnterPassword = \u8f93\u5165\u5bc6\u7801
message_en_US.properties
login = Login user = User password = Password pleaseEnterUserName = Please Enter Username pleaseEnterPassword = Please Enter Password
2.添加Spring MVC配置:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- 国际化资源文件名 --> <property name="basenames" value="message"/> </bean>
3.修改JSP页面:
在JSP页面引入Spring标签库
<% @taglib prefix="spring" uri="http://www.springframework.org/tags" %>
使用<spring:message/>标签输出国际化资源
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix= "spring" uri= "http://www.springframework.org/tags" %> <html> <head> <title><spring:message code="login"/></title> <%--省略引用jQuery,Bootstrap--%> </head> <body> <form class="form-horizontal" role="form" style="padding: 100px 100px 10px;"> <div class="form-group"> <label for="user" class="col-sm-2 control-label"><spring:message code="user"/></label> <div class="col-sm-3"> <input type="text" class="form-control" id="user" placeholder="<spring:message code="pleaseEnterUserName"/>"> </div> </div> <div class="form-group"> <label for="password" class="col-sm-2 control-label"><spring:message code="password"/></label> <div class="col-sm-3"> <input type="text" class="form-control" id="password" placeholder="<spring:message code="pleaseEnterPassword"/>"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default"><spring:message code="login"/></button> </div> </div> </form> </body> </html>
最后在Controller调用该JSP页面,修改浏览器语言查看Spring MVC国际化是否生效。
@Controller public class LoginController { @RequestMapping(value = "/{fileName}") public String login(@PathVariable String fileName){ return fileName; }
Chrome修改语言方法:设置 --> 高级 --> 语言 --> 将英语(美国)移到顶部。
二、基于HttPSession/Cookie的Spring MVC国际化
1.添加Spring MVC配置:
<!-- 国际化操作拦截器 Session/Cookie 必需配置 --> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors>
2.基于Httpsession添加配置:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
3.基于Cookie添加配置:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
4.修改Controller
@Controller public class LoginController { @RequestMapping(value = "/{fileName}") public String login(@PathVariable String fileName, String language,HttpServletRequest request,HttpServletResponse response){ if (null == language || "zh_CN".equals(language)){ Locale locale = new Locale("zh","CN"); // 基于HttpSession request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); // 基于Cookie new CookieLocaleResolver().setLocale(request,response,locale); } if ("en_US".equals(language)){ Locale locale = new Locale("en","US"); // 基于HttpSession request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); // 基于Cookie new CookieLocaleResolver().setLocale(request,response,locale); } return fileName; } }
浙公网安备 33010602011771号