首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring setLocale

Spring setLocale
EN

Stack Overflow用户
提问于 2020-08-06 16:12:06
回答 1查看 32关注 0票数 0

我有一个自定义的public Locale resolveLocale(HttpServletRequest request) {,它检查浏览器语言,但也检查用户是否经过身份验证,因为如果是这样,它将根据用户的设置再次更改区域设置。

现在,我尝试将语言选择器添加到未经身份验证的页面,方法是允许页面保存lang参数,如文档中所述。我目前有这个:

代码语言:javascript
复制
  @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

代码语言:javascript
复制
  @Override
  public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
    localeResolver.setLocale(request, response, locale);
  }

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-06 17:02:53

以下是我如何在我的程序中做到这一点,没有问题

代码语言:javascript
复制
@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中调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63279405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档