链接Spring CookieLocaleResolver和AcceptHeaderLocaleResolver

Qwe*_*rky 11 java spring spring-mvc internationalization

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

有趣的是,春天的文件为CookieLocaleResolver

LocaleResolver实现,使用在自定义设置的情况下发回给用户的cookie,回退到指定的默认语言环境或请求的accept-header语言环境.

但事实上似乎并非如此; 测试显示它不起作用,快速查看源显示它只有在没有cookie时才会获得默认值.

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

axt*_*avt 12

CookieLocaleResolver只要你没有设置它,它看起来就像你想要的那样defaultLocale.

如果你想要不同的东西(例如,defaultLocale当没有Accept找到cookie或标题时回退到),你可以相应地覆盖它determineDefaultLocale().


use*_*153 5

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)