in core/cocoon-core/src/main/java/org/apache/cocoon/i18n/I18nUtils.java [123:217]
public static Locale findLocale(Map objectModel,
String attribute,
Parameters parameters,
Locale defaultLocale,
boolean useLocale,
boolean useLocales,
boolean useBlankLocale,
LocaleValidator test) {
String localeStr;
Locale locale;
Request request = ObjectModelHelper.getRequest(objectModel);
// 1. Request parameter 'locale'
localeStr = request.getParameter(attribute);
if (localeStr != null) {
locale = parseLocale(localeStr);
if (test == null || test.test("request", locale)) {
return locale;
}
}
// 2. Session attribute 'locale'
HttpSession session = request.getSession(false);
if (session != null &&
((localeStr = (String) session.getAttribute(attribute)) != null)) {
locale = parseLocale(localeStr);
if (test == null || test.test("session", locale)) {
return locale;
}
}
// 3. First matching cookie parameter 'locale' within each cookie sent
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals(attribute)) {
localeStr = cookie.getValue();
locale = parseLocale(localeStr);
if (test == null || test.test("cookie", locale)) {
return locale;
}
break;
}
}
}
// 4. Sitemap parameter "locale"
if (parameters != null) {
localeStr = parameters.getParameter("locale", null);
if (localeStr != null) {
locale = parseLocale(localeStr);
if (test == null || test.test("sitemap", locale)) {
return locale;
}
}
}
// 5. Locale setting of the requesting browser or server default
if (useLocale && !useLocales) {
locale = request.getLocale();
if (test == null || test.test("request", locale)) {
return locale;
}
}
if (useLocales) {
Enumeration locales = request.getLocales();
while (locales.hasMoreElements()) {
locale = (Locale)locales.nextElement();
if (test == null || test.test("request", locale)) {
return locale;
}
}
}
// 6. Default
if (defaultLocale != null) {
locale = defaultLocale;
if (test == null || test.test("default", locale)) {
return locale;
}
}
// 7. Blank
if (useBlankLocale) {
locale = new Locale("", "");
if (test == null || test.test("blank", locale)) {
return locale;
}
}
// 8. Fail
return null;
}