一、概述
在项目的开发过程中,可能会针对不同国家地区得用户提供不同的视图,比如针对美国用户可以提供一个视图,而针对中国用户则可以提供另一个视图。因此需要实现国际化,使用LocaleResolver即可以实现对用户不同视图切换的目的。
二、LocaleResolver概述
LocaleResolver是Spring提供的一个接口,其声明如下。
public interface LocaleResolver {
// 根据request对象根据指定的方式获取一个Locale,如果没有获取到,则使用用户指定的默认的Locale
Locale resolveLocale(HttpServletRequest request);
// 用于实现Locale的切换。比如SessionLocaleResolver获取Locale的方式是从session中读取,但如果
// 用户想要切换其展示的样式(由英文切换为中文),那么这里的setLocale()方法就提供了这样一种可能
void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response,
@Nullable Locale locale);
}
三、LocaleResolver的实现方式
针对LocaleResolver,Spring提供了几种实现方式,分别如下:
FixedLocaleResolver:在声明该resolver时,需要指定一个默认的Locale,在进行Locale获取时,始终返回该Locale,并且调用其setLocale()方法也无法改变其Locale;
CookieLocaleResolver:其读取Locale的方式是在session中通过Cookie来获取其指定的Locale的,如果修改了Cookie的值,页面视图也会同步切换;
SessionLocaleResolver:其会将Locale信息存储在session中,如果用户想要修改Locale信息,可以通过修改session中对应属性的值即可;
AcceptHeaderLocaleResolver:其会通过用户请求中名称为Accept-Language的header来获取Locale信息,如果想要修改展示的视图,只需要修改该header信息即可。
需要说明的是,Spring虽然提供的几个不同的获取Locale的方式,但这些方式处理FixedLocaleResolver以外,其他几个也都支持在浏览器地址栏中添加locale参数来切换Locale。对于Locale的切换,Spring是通过拦截器来实现的,其提供了一个LocaleChangeInterceptor,在该拦截器中的preHandle()方法中,Spring会读取浏览器参数中的locale参数,然后调用LocaleResolver.setLocale()方法来实现对Locale的切换。
网友评论