zoukankan      html  css  js  c++  java
  • SpringMVC学习系列(8) 之 国际化

    一.基于浏览器请求的国际化实现:

    1)在 spring的配置文件中添加

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <!-- 国际化信息所在的文件名 -->                     
        <property name="basename" value="locale/message" />   
        <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->               
        <property name="useCodeAsDefaultMessage" value="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 Fail
    message.login.success=Login Success
    

    3)在后台中读取资源化文件中的内容,并返回给前台

    在Controller 文件添加一个方法

        @RequestMapping(value = "/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 = "/sessiontest", method = {RequestMethod.GET})
    public String seesionTest(HttpServletRequest request, Model model,
    @RequestParam(value = "langType", defaultValue = "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="${ctx }/sessiontest?langType=zh">中文</a> | <a href="${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 = "/cookietest", method = {RequestMethod.GET})
        public String cookietest(HttpServletRequest request, HttpServletResponse response, Model model,
            @RequestParam(value = "langType", defaultValue = "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="${ctx }/cookietest?langType=zh">中文</a> | <a href="${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

  • 相关阅读:
    HDFS Maintenance State
    HDFS Maintenance State
    HDFS“慢节点”监控分析功能
    Confluence 6 找到你的支持识别代码(SEN)
    Confluence 6 降级你的许可证
    Confluence 6 增加和减少你许可证的用户数
    Confluence 6 理解你许可证的用户数
    Confluence 6 升级你的许可证
    Confluence 6 查看你的许可证细节
    Confluence 6 管理你的 Confluence 许可证
  • 原文地址:https://www.cnblogs.com/panie2015/p/5855645.html
Copyright © 2011-2022 走看看