【问题标题】:defaultLocale of AcceptHeaderLocaleResolver is not workingAcceptHeaderLocaleResolver 的 defaultLocale 不起作用
【发布时间】:2019-12-28 08:57:40
【问题描述】:

我添加了 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 不起作用?

【问题讨论】:

  • request.getHeader("Accept-Language") 的值是多少?
  • @clevertension 这是null

标签: java spring locale


【解决方案1】:

clevertension 的answer 说明了您的代码不起作用的正确原因,但问题出在其他地方。 request.getLocale() 仅返回来自您的 Accept-Language 标头的值,或者如果未提供,则返回系统默认值(如 the docs 中明确说明的那样)。您正在寻找LocaleContextHolder.getLocale()。它返回 Spring 使用您提供的解析器解析的语言环境(您在其中将默认语言环境配置为韩语)。

所以你的代码应该是这样的:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    request.getHeader("accept-language"); // null
    LocaleContextHolder.getLocale(); // should evaluate to "kr";
}

【讨论】:

    【解决方案2】:

    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多