Chaining Spring CookieLocaleResolver 和 AcceptHeaderLocaleResolver

我想首先通过检测cookie来解析用户的区域设置,如果没有cookie,则通过接受语言标头。春天似乎只想接受一个。LocaleResolver

有趣的是,CookieLocaleResolver状态的春季文档

LocaleResolver 实现,该实现使用在自定义设置的情况下发送回用户的 Cookie,并回退到指定的默认区域设置或请求的接受标头区域设置。

但实际上情况似乎并非如此;测试显示它不起作用,快速查看源代码显示,如果没有cookie,它才会获得默认值。

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


答案 1

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

如果你想要一些不同的东西(例如,回退到既没有找到cookie也没有找到头文件的时间),你可以相应地覆盖它。defaultLocaleAcceptdetermineDefaultLocale()


答案 2

示例 Cookie 区域设置解析器,它首先回退到标头,然后才回退到:Accept-LanguagedefaultLocale

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

推荐