LocalContextHandler用法

时间:2014-07-07 14:07:56

标签: spring internationalization

我是LocalContexHandler的新手。我读过它。据我所知,它用于检索java应用程序中的语言环境信息。

我从url传递语言环境,如下所示:     url?lang = fr

当我尝试在java应用程序中检索语言环境时,如下所示:     Locale locale = LocaleContextHolder.getLocale();

它给出了空值。有人可以帮我理解它的用法,还是有其他替代方法?

1 个答案:

答案 0 :(得分:2)

如果要在URL中传递区域设置,则必须注册LocaleChangeInterceptor拦截器并创建LocaleResolver bean。例如,SessionLocaleResolver在会话中存储选定的区域设置。然后LocaleContextHolder#getLocale将返回非null值。请查看Spring文档中的Using locales部分。您可以在下面看到基本的Java配置示例。

如果您只想使用LocaleContextHolder,则必须先致电LocaleContextHolder#setLocale,然后再致电LocaleContextHolder#getLocale。这只是简单的持有者类,可以将LocaleContext存储在ThreadLocal变量中。

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

  // Rest of Web MVC configuration omitted

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    super.addInterceptors(registry);

    registry.addInterceptor(localeChangeInterceptor());
  }

  @Bean
  public LocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale("fr");

    return sessionLocaleResolver;
  }

  @Bean
  public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
    interceptor.setParamName("lang");

    return interceptor;
  }

}