Cookie Chain Spring CookieLocaleResolver и AcceptHeaderLocaleResolver - PullRequest
11 голосов
/ 01 декабря 2011

Сначала я хочу разрешить локаль пользователя, обнаружив файл cookie, а если его нет, то по заголовку accept-language.Похоже, Spring хочет принять только одну LocaleResolver.

Интересно, что документы Spring для CookieLocaleResolver state

реализация LocaleResolver, которая использует cookieотправляется обратно пользователю в случае пользовательской настройки, с откатом к указанной локали по умолчанию или локали принятия заголовка запроса.

, но на самом деле это не так;тестирование показывает, что оно не работает, и быстрый взгляд на источник показывает, что он получает значение по умолчанию, только если нет файла cookie.

Является ли единственным решением написать мою собственную реализацию LocaleResolver?

Ответы [ 2 ]

12 голосов
/ 01 декабря 2011

Похоже, CookieLocaleResolver делает именно то, что вы хотите, если вы не установите его defaultLocale.

Если вы хотите что-то другое (например, откат до defaultLocale, когда ни кукини заголовок Accept не был найден), вы можете переопределить его determineDefaultLocale() соответственно.

5 голосов
/ 21 мая 2014

Пример распознавателя локали 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...