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;
    }
}

 

 

 

posted on 2017-11-18 12:11  4l3x丶  阅读(157)  评论(0)    收藏  举报

导航