springmvc是什么_Spring MVC 什么是本地化?国际化项目怎么做?三分钟带你了解

背景

大家应该见过一些网站,在它们的某个角落(最常见的是右上角)提供了语言切换的图标,比如:英文、中文、繁体等等字样。这种语言切换功能不要求用户更改浏览器的设置,它们通过Cookie、Session或者请求参数就可以做到切换本地化类型,给用户带来极大的便利。那么,spring在本地化这一块到底给我们带来了什么?我们如何去做一个国际化项目?

6040e97796c5a9fe9a9834abc85b8f14.png

关于本地化解析器

Spring MVC 在收到请求时,会在上下文中寻找一个本地化解析器,找到后使用它获取请求所对应的本地化类型信息。

另外,Spring MVC 还允许装配一个动态变更本地化类型的拦截器,通过指定一个请求参数就可以控制单个请求的本地化类型。本地化解析器和拦截器都定义在org.springframework.web.servlet.il8n包中,我们可以在DispatcherServlet上下文中配置它们。

e7b8d42a159c7699688bf61f4ae4c000.png

Spring提供的4个本地化解析器

  • AcceptHeaderLocaleResolver

根据HTTP报文头的Accept-Language参数确定本地化类型,如果没有显式定义本地化解析器,Spring MVC 默认采用AcceptHeaderLocaleResolver,不再赘述,下面主要对另外三种进行简单介绍一下。

  • CookieLocaleResolver

根据指定Cookie值确定本地化类型。

在需要使用Cookie保存本地化类型信息时,服务端只需要在上下文配置一个CookieLocaleResolver即可,DispatcherServlet便会自动识别它并进行装配,具体配置参照如下:

cookieName:表示客户端保存本地化类型的Cookie名;

cookieMaxAge:表示Cookie最大存活时间,单位为秒;

cookiePath:表示Cookie的保存路径;

defaultLocale:表示默认本地化类型。

这样,客户端只需要通过js更改clientLanguage这个Cookie值就可以控制服务端返回相应的本地化页面了。

需要注意的是,实际web应用中,一般都是将此类用户个性化信息保存在数据库中,在用户登录时进行加载,以达到此个性化设置能永久生效,而不会随着cookie或session的过期或清除而消失。

dd0b42c481053410f18b020c6e4d0845.png
  • SessionLocaleResolver

根据Session中特定的属性值确定本地化类型。

SessionLocaleResolver查找Session中属性名为SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME的属性,并将其转换成Locale对象,以此作为客户端的本地化类型。如果应用程序使用Session维护用户的信息,那么SessionLocaleResolver无疑是最适合不过的了

使用时也只要将配置添加到上下文配置文件中即可,参考如下:

注意,SessionLocaleResolver与CookieLocaleResolver的区别是:前者要求拥抱过户登录后生成的会话才是有效的,而后者只要浏览器有Cookie存在即可生效。

0a918b55c2fec0f853df103a50361c7f.png
  • LocaleChangeInterceptor

从请求参数中获取本次对应的本地化类型。

还有一些国际化网站,它们这样控制本地化,如:www.xxxx.com?locale=zh_CN 返回对应中文的本地化网页,通过URL(注意问号后的参数)来控制本地化,也很灵活。那么,这个如何实现呢?我们通过配置拦截器即可达到目的,具体参考如下:

由于LocaleChangeInterceptor是从请求中获取本地化类型的,所以在配置LocaleChangeInterceptor之前,必须要在上下文中先配置一个本地化解析器,作为默认值,比如可以连同上面的CookieLocaleResolver或这SessionLocaleResolver一起配置即可

AcceptHeaderLocaleResolver是从请求报文头中获取本地化信息的,因为不能被动态修改,如果需要使用LocaleChangeInterceptor,那么只能选择CookieLocaleResolver或者SessionLocaleResolver。

好了,就到这里,关注我,更多精彩等着你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值