Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Не могу понять зачем нужно одновременно нужно реализовывать LocaleResolver и Interceptor.

Почему недостаточно например только Interceptor?


Люблю галеры - работящий коллектив, романтика мужского труда. Стоишь на мостике в пене брызг и эдак поворотясь:
- Голубчик! Утроить количество ударов - Али-паша уходит...
7 фев 19, 00:59    [21803148]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Я уточню: имеется ввиду локализация в Spring Framework и, к примеру, вот эта статья:
https://www.mkyong.com/spring-mvc/spring-mvc-internationalization-example/
7 фев 19, 10:18    [21803261]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4785
Maxifly,

resolver - как-то магически определяет текущую локаль пользователя
interceptor - определеяет локаль из запроса(вконце там может быть что то типа &lang=ru или что-то такое, не помню точно).
7 фев 19, 10:48    [21803292]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Озверин,

Ну вот у интерсептора вот такой метод
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)


А у ресолвера интерфейс с вот такими:
//Returns the locale for the given request
Locale resolveLocale(HttpServletRequest request);
 
//Method to set a locale value. Depending upon the LocaleResolver,
//  the locale can be set on the request, response or on to something else altogether.
void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale);



То бишь - они оба имеют доступ к одним и тем же данным.
Во всех туториолах по локализации используют одновременно и LocaleResolver и Interceptor и поэтому я никак не могу понять зачем?
7 фев 19, 12:37    [21803403]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4785
Maxifly, я чето вопроса не понял. Есть похожие интерфейсы и что? Функции у них разные. Один резолвит локаль из настроек ос\браузера, другой работает для поддержки нескольких языков, перехватывает запросы и из запроса пытается узнать язык, который запросили.
7 фев 19, 12:48    [21803414]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Озверин,

Есть резолверы которые получают локаль не из настроек. Вот например:

 AcceptHeaderLocaleResolver

It creates a locale object using the "accept-language" header of the HTTP request and returns it.
То есть - он резолвит локаль на основании запроса Так?

Интерсептор - тоже резолвит локаль на основании запроса.
7 фев 19, 13:24    [21803457]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Озверин,

хотя Вы навели меня на одну мысль - спасибо.
7 фев 19, 13:25    [21803460]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4785
Maxifly
Озверин,

Есть резолверы которые получают локаль не из настроек. Вот например:

 AcceptHeaderLocaleResolver

It creates a locale object using the "accept-language" header of the HTTP request and returns it.
То есть - он резолвит локаль на основании запроса Так?

Интерсептор - тоже резолвит локаль на основании запроса.


AcceptHeaderLocaleResolver - судя по названию, резолвит из хедера, а не из реквестпараметра.
7 фев 19, 13:30    [21803463]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Пылинка
Member

Откуда: СПб
Сообщений: 290
localeResolver - источник для получения локали потребителями, она сохраняет локаль в Session (там же ясно написано - SessionLocaleResolver).
А Interceptor проверяет в каждом запросе - не поменялась ли локаль, если нужно - "сохраняет" ее, но не сам а отдает той самой localeResolver.
7 фев 19, 13:55    [21803486]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с локализацией  [new]
Maxifly
Member

Откуда:
Сообщений: 521
Озверин

AcceptHeaderLocaleResolver - судя по названию, резолвит из хедера, а не из реквестпараметра.


Из хедера, а хедер берет из HttpServletRequest request, от туда же, откуда берет данные и Interseptor. В том-то и дело!

    public LocaleContext resolveLocaleContext(ServerWebExchange exchange) {
        List requestLocales = null;

        try {
            requestLocales = exchange.getRequest().getHeaders().getAcceptLanguageAsLocales();
        } catch (IllegalArgumentException var4) {
            ;
        }

        return new SimpleLocaleContext(this.resolveSupportedLocale(requestLocales));
    }
7 фев 19, 15:53    [21803630]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить