为了让web应用程序支持国际化(i18n),需要识别每个用户的所在区域,并根据这个区域显示内容。在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须实现LocaleResolver接口。区域解析器的作用就是根据某种策略来决定如何响应用户的请求内容。
AcceptHeaderLocaleResolver类是SpringMVC默认的解析器。
该类的核心代码为:
@Override
public Locale resolveLocale(HttpServletRequest request) {
Locale defaultLocale = getDefaultLocale();
if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
return defaultLocale;
}
Locale locale = request.getLocale();
if (!isSupportedLocale(locale)) {
locale = findSupportedLocale(request, locale);
}
return locale;
}
结论:当Accept-Language==null时,使用系统默认Locale;否则,判断系统是否支持request最想使用Locale(没配置Locale或配置了想要的Locale都认为支持),支持则使用,不支持则使用服务器(如Tomcat)默认提供的Locale。对于Tomcat的Locale,可以在其启动脚本中配置Java参数设置。