zoukankan      html  css  js  c++  java
  • Spring 4 官方文档学习(十一)Web MVC 框架之locales

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-localeresolver

    Spring架构的多数部分都支持国际化,如同Spring Web MVC这样。DispatcherServlet使得你可以自动的处理messages -- 使用客户端的locale。 这是通过LocaleResolver对象完成的。

    当一个请求进来时,DispatcherServlet会查找一个locale resolver,如果找到了一个,它会试着使用它来设置locale。 使用RequestContext.getLocale()方法,你可以一直获取到由locale resolver处理过的locale。

    除了自动的locale处理,你还可以添加一个拦截器来处理映射,以在特定情景下改变locale,例如,基于请求中的某个parameter。

    Locale resolvers和拦截器,都是定义在包 org.springframework.web.servlet.i18n 中,然后在你的应用context中以常规方式配置。 这里是Spring中locale resolvers的一个选择。

    1、获取Time Zone信息

    除了获取客户端的locale,还经常需要知道他们的时区信息。LocaleContextResolver接口扩展了LocalResolver,允许resolvers提供更加丰富的LocaleContext -- 可能含有时区信息。

    当可以的时候,用户的TimeZone 可以使用RequestContext.getTimeZone()获取。 Spring ConversionService中注册的Date/Time Converter和Formatter会自动的使用时区信息。

    2、AcceptHeaderLocaleResolver

    这个locale resolver会检查请求中的accept-language header。一般,该header字段包含了客户端操作系统的locale。

    注意,该locale resolver不支持时区信息。

    3、CookieLocaleResolver

    该locale resolver会检查可能存在于客户端的Cookie,以判断是否指定了Locale或者TimeZone。如果有,就会使用指定的信息。通过使用该locale resolver的properties,你可以指定cookie的名字以及寿命。 下例:

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    
        <property name="cookieName" value="clientlanguage"/>
    
        <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->
        <property name="cookieMaxAge" value="100000"/>
    
    </bean>

    Table 22.4. CookieLocaleResolver properties

    PropertyDefaultDescription

    cookieName

    classname + LOCALE

    The name of the cookie

    cookieMaxAge

    Integer.MAX_INT

    The maximum time a cookie will stay persistent on the client. If -1 is specified, the cookie will not be persisted; it will only be available until the client shuts down their browser.

    cookiePath

    /

    Limits the visibility of the cookie to a certain part of your site. When cookiePath is specified, the cookie will only be visible to that path and the paths below it.

    4、SessionLocaleResolver

    SessionLocaleResolver 允许你从session中获取Locale和TimeZone。 相对于CookieLocaleResolver,这种策略会在Servlet容器的HttpSession中存储选中的locale设置。相应的,这些设置相对每个session来说都是临时的,并且,当每个session结束时会丢失。

    注意,这和外部session管理机制没有直接的关系 -- 如Spring Session project。这个SessionLocaleResolver会简单的评估和修改当前HttpServletRequest相应的HttpSession attributes。

    5、LocaleChangeInterceptor

    通过将LocaleChangeInterceptor添加到handler mappings之一,你可以启用locales的改变。它会探测request中的一个parameter,并修改locale。 它会调用LocaleResolver的setLocale()。下例示意了调用含有名字为siteLanguage的parameter的所有”*.view”资源,会立即改变locale。对该例来说,请求”http://www.sf.net/home.view?siteLanguage=nl” 会改变site语言为Dutch。

    <bean id="localeChangeInterceptor"
            class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="siteLanguage"/>
    </bean>
    
    <bean id="localeResolver"
            class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
    
    <bean id="urlMapping"
            class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="localeChangeInterceptor"/>
            </list>
        </property>
        <property name="mappings">
            <value>/**/*.view=someController</value>
        </property>
    </bean>
  • 相关阅读:
    IE9 Beta首则演示视频泄露 狼人:
    浅析网页界面设计——首页设计 狼人:
    需警惕CSS3属性的书写顺序 狼人:
    IE9 Beta与四大浏览器基准测试对比 狼人:
    Ubuntu 9.04将在10月23日停止更新服务和技术支持 狼人:
    IE9对CSS3的支持情况概述 狼人:
    ASP.NET惊爆新安全漏洞 攻击者可访问任意文件 狼人:
    Rails3之父Yehuda离开Engine Yard投奔HTML5 狼人:
    实用HTML,CSS和JavaScript速查表 狼人:
    20个学习CSS的绝佳网站——让你从入门到精通 狼人:
  • 原文地址:https://www.cnblogs.com/larryzeal/p/6132244.html
Copyright © 2011-2022 走看看