链接Spring CookieLocaleResolver和AcceptHeaderLocaleResolver

时间:2011-12-01 13:04:18

标签: java spring spring-mvc internationalization

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

有趣的是,CookieLocaleResolver州的春季文档

  

LocaleResolver实现,它使用发送回用户的cookie   如果是自定义设置,则回退到指定的默认值   locale或请求的accept-header语言环境。

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

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

2 个答案:

答案 0 :(得分:12)

只要您没有设置CookieLocaleResolverdefaultLocale就会完全符合您的要求。

如果您想要不同的内容(例如,当找不到Cookie或defaultLocale标头时回退到Accept),您可以相应地覆盖其determineDefaultLocale()

答案 1 :(得分: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();
    }
}