• Spring MVC 七 - Locale 本地化


    Spring各模块都支持国际化,SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。

    request请求上来后,DispatcherServlet查找并设置Locale Resovler,我们可以通过RequestContext.getLocale()获取到对应的Locale。

    此外,可以利用拦截器在特定情况下修改locale,比如,根据请求参数修改locale。这项功能对于通过页面选项指定locale的应用非常有用(比如在页面上选择中文/英文的方式指定应用的语言)。

    Locale Resolver和拦截器定义在org.springframework.web.servlet.i18n包,可以通过配置文件指定,Spring支持如下locale resolver:

    1. Time Zone
    2. Header Resolver
    3. Cookie Resovlver
    4. Session Resolver
    5. Locale Interceptor
    Time Zone

    除获取用户locale之外,有时候也需要获取到用户的时区,LocaleContextResolver接口通过扩展LocaleResovler可提供对时区的支持。

    可通过RequestContext.getTimeZone() 获取用户时区。

    Header Resolver

    Header Resolver通过解析请求头的accept-language,从而获取到客户端浏览器发送上来的相关头信息。

    SpringMVC提供的Header Resolver:AcceptHeaderLocaleResolver。

    浏览器默默认会发送相关的请求头信息:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    SpringMVC通过DispatcherServlet.properties指定的默认LocaleResolver正是Header Resolver:

    org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
    
    
    • 1
    • 2
    Cookie Resolver

    检查客户端发送上来的请求的cookie中是否包含Locale或TimeZone信息,如包含则应用该信息创建Locale。

    SpringMVC提供的Cookie Resolver:org.springframework.web.servlet.i18n.CookieLocaleResolver。

    通过如下方式配置:

    
    
    	
    
    	
    	
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    Session Resolver

    SessionLocaleResolver通过session获取客户端的Locale和TimeZone信息,信息存储在HttpSession中,随着session的失效而失效。

    Locale Interceptor

    使用拦截器、通过页面参数设置Locale。SpringMVC提供了一个LocaleChangeInterceptor拦截器,可以直接使用。

    比如:

    
    	
    
    
    
    
    
    	
    		
    			
    		
    	
    	
    		/**/*.view=someController
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    配置localeChangeInterceptor,指定其参数名称为siteLanguage,将该拦截器配置到SimpleUrlHandlerMapping上,对*.view请求,根据请求参数siteLanguage决定其locale。

    上一篇 Spring MVC 六 - DispatcherServlet处理请求过程

  • 相关阅读:
    Python机器学习、深度学习提升气象、海洋、水文领域实践应用
    微信小程序开发06 自动化测试:提高小程序的交付质量
    C/C++数据结构——关键活动(拓扑排序、AOE网、前向星)
    php查询大量sql语句时内存溢出的解决方法
    Android Studio 插件开发1、创建标题 通知等
    Docker | 将本地项目发布到阿里云的实现流程
    Vue3 + Echarts 5 绘制带有立体感流线中国地图,建议收藏
    CSS基础12-canvas
    Sql优化(详解一条龙服务)
    系统日志管理
  • 原文地址:https://blog.csdn.net/weixin_44612246/article/details/132866100