【问题标题】:Chaining Spring CookieLocaleResolver and AcceptHeaderLocaleResolver链接 Spring CookieLocaleResolver 和 AcceptHeaderLocaleResolver
【发布时间】:2012-01-10 15:04:44
【问题描述】:

我想首先通过检测 cookie 来解析用户的语言环境,如果没有,则通过接受语言标头来解析。 Spring 似乎只想接受一个LocaleResolver

有趣的是,CookieLocaleResolver state 的 spring 文档

LocaleResolver 实现使用发送回用户的 cookie 如果是自定义设置,则回退到指定的默认值 语言环境或请求的接受标头语言环境。

但实际上似乎并非如此;测试表明它不起作用,快速查看源代码表明它只有在没有 cookie 时才会获得默认值。

是编写我自己的LocaleResolver 实现的唯一解决方案吗?

【问题讨论】:

    标签: java spring spring-mvc internationalization


    【解决方案1】:

    看起来CookieLocaleResolver 完全符合您的要求,只要您不设置它的defaultLocale

    如果您想要不同的东西(例如,当既未找到 cookie 也未找到 Accept 标头时回退到 defaultLocale),您可以相应地覆盖其 determineDefaultLocale()

    【讨论】:

    • 谢谢,这似乎有效。也许我只是误解了文档,它可能会更清楚一点。
    【解决方案2】:

    首先回退到 Accept-Language 标头然后才回退到 defaultLocale 的示例 cookie 区域设置解析器:

    public class CookieThenAcceptHeaderLocaleResolver extends CookieLocaleResolver {
    
        @Override
        protected Locale determineDefaultLocale(HttpServletRequest request) {
    
            String acceptLanguage = request.getHeader("Accept-Language");
            if (acceptLanguage == null || acceptLanguage.trim().isEmpty()) {
                return super.determineDefaultLocale(request);
            }
            return request.getLocale();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 2019-12-28
      • 2020-11-26
      • 2012-08-19
      • 2018-02-25
      • 2017-09-14
      • 2019-07-08
      • 2021-04-27
      相关资源
      最近更新 更多