我是LocalContexHandler的新手。我读过它。据我所知,它用于检索java应用程序中的语言环境信息。
我从url传递语言环境,如下所示:
url?lang = fr
当我尝试在java应用程序中检索语言环境时,如下所示:
Locale locale = LocaleContextHolder.getLocale();
它给出了空值。有人可以帮我理解它的用法,还是有其他替代方法?
答案 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;
}
}