首页 > 解决方案 > Spring setLocale

问题描述

我有一个自定义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);
  }

有人能帮我吗?:D

标签: springlocalizationsetlocale

解决方案


这是我在程序中的做法,没有问题

@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());
}

之后,它应该可以在 url 中调用它?lang=en


推荐阅读