首页 > 解决方案 > AcceptHeaderLocaleResolver 的 defaultLocale 不起作用

问题描述

我添加了 AcceptHeaderLocaleResolver。

@Configuration
public class ApplicationContextConfig {
    @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
        localeResolver.setDefaultLocale(Locale.KOREA); // ko_KR

        return localeResolver;
    }
}

但是,当我从没有接受语言标头的 http 请求中获取语言环境时,它会返回我系统的语言环境。

public class CustomIntercepterAdapter extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    request.getHeader("accept-language"); // null
    request.getLocale().toString(); // en_KR;
  }
}

为什么 defaultLocale 不起作用?

标签: javaspringlocale

解决方案


request.getLocale()的值由您的 Web 容器(例如Tomcat )确定,因此 spring localeResolver 不能不影响该值。这个值是Locale.getDefault(),如果你想改变你的默认语言环境,你可以再添加一个代码

@Configuration
public class ApplicationContextConfig {
    @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
        localeResolver.setDefaultLocale(Locale.KOREA); // ko_KR
        Locale.setDefault(Locale.KOREA);

        return localeResolver;
    }
}

推荐阅读