2011-12-01 66 views
7

我想通过检测cookie来解析用户的语言环境,并且如果没有一个接受accept-language头文件。春天似乎只想接受一个LocaleResolver链接Spring CookieLocaleResolver和AcceptHeaderLocaleResolver

有趣的是,春天文档为CookieLocaleResolver状态

使用在自定义设置的情况下发送回用户 一个cookie,用回退到指定的默认 区域设置或请求的接受

的LocaleResolver实施 - 首部语言环境。

但这实际上并不是这样;测试显示它不起作用,快速查看源代码显示,如果没有cookie,它只会获得默认值。

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

回答

9

它看起来像CookieLocaleResolver做你想要的只要你没有设置它的defaultLocale

如果你想要不同的东西(例如,退回到defaultLocale时被发现既不是饼干也不Accept头),可以相应地覆盖其determineDefaultLocale()

+0

谢谢,这似乎工作。也许我只是误解了文档,可能会更清楚一点。 – Qwerky

3

例饼干本地化解析器是第一回退到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(); 
    } 
}