我有一个自定义的public Locale resolveLocale(HttpServletRequest request) {,它检查浏览器语言,但也检查用户是否经过身份验证,因为如果是这样,它将根据用户的设置再次更改区域设置。
现在,我尝试将语言选择器添加到未经身份验证的页面,方法是允许页面保存lang参数,如文档中所述。我目前有这个:
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}我注意到,通过转到例如添加了?lang=en的页面,setLocale正在被调用,这就是我被卡住的地方。我似乎找不到如何在此方法中实际设置语言?我目前有这个,但这导致了一个StackOverflowError:
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
localeResolver.setLocale(request, response, locale);
}有人能帮帮我吗?
发布于 2020-08-06 17:02:53
以下是我如何在我的程序中做到这一点,没有问题
@Bean
public LocaleResolver localeResolver() {
return new SessionLocaleResolver();
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new
LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}之后,它应该可以使用?lang=en在url中调用它。
https://stackoverflow.com/questions/63279405
复制相似问题