后端——框架——视图层框架——spring mvc——LocaleResolver


  LocaleResolver相关的类有以下五个

  1. LocaleContextResolver:它继承自LocaleResolver,主要获取客户端的国际化信息,同时也可以获取时区信息。
  2. AcceptHeaderLocaleResolver:它是从请求消息头中获取国际化信息,请求头字段为accept-language
  3. CookieLocaleResolver:它是从Cookie中获取国际化信息。
  4. SessionLocaleResolver:它是从Session中获取国际化信息,同时也可以获取时区信息
  5. LocaleInterceptor:它是从请求URL中的queryString或参数中获取国际化信息

1、LocaleContextResolver

顶层接口,允许自定义获取国际化信息和时区信息的来源。CookieResolver和SessionLocaleResolver实现了此接口

2、AcceptHeader

从请求头中获取国际化信息,字段为accept-language。默认方式。它的实现类是AcceptHeaderLocaleResolver,注入该Resolver对象即可。查看DispatcherServlet.properties,它是默认注入的。

3、Cookie

从Cookie中获取国际化信息,需要约定cookie-name的名称,假定约定为lanaguage,CookieLocaleResolver每次解析Cookies时就会捕获lanaguage的值,把它的value 作为国际化的信息。

4、 Session

从Session中获取国际化信息,需要约定session中哪个属性代表国际化信息,例如调用session.setAttribute(“lanaguage”,Locale),它会根据lanaguage属性值获取国际化信息。

使用步骤如下:

第一步, 注入SessionLocaleResolver的对象

第二步, 配置SessionLocaleResolver对象,其中localeAttributeName配置国际化信息的属性名称,timeZoneAttributeName配置时区信息的属性名称。例如上例中localeAttributeName对应lanaguage。

参考示例

5、LocaleInterceptor

  从请求参数(query_string)中获取国际化信息,需要约定哪个参数代表国际化信息。例如lanaguage对应国际化信息,它会拦截请求,将其值为国际化信息的值。

使用步骤如下:

第一步,配置LocaleChangeInterceptor拦截器,

第二步,配置paramName属性,它的值为国际化参数的值,上例中为lanaguage。它的默认值为locale。

参考示例

相关