我想首先通过检测cookie解析用户的语言环境,如果没有,则通过accept-language标头解析。 Spring似乎只想接受一个LocaleResolver
。
有趣的是,CookieLocaleResolver
州的春季文档
LocaleResolver实现,它使用发送回用户的cookie 如果是自定义设置,则回退到指定的默认值 locale或请求的accept-header语言环境。
但事实上似乎并非如此;测试显示它不起作用,快速查看源显示它只有在没有cookie的情况下才会获得默认值。
是编写我自己的LocaleResolver
实现的唯一解决方案吗?
答案 0 :(得分:12)
只要您没有设置CookieLocaleResolver
,defaultLocale
就会完全符合您的要求。
如果您想要不同的内容(例如,当找不到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();
}
}