2013-05-06 5 views
1

У меня есть два файла свойств для i18n и вы хотите получить локализованное сообщение в методе обслуживания. Я ввел messageSource, и теперь все, что я хочу, это получить локаль пользователя.Не удается получить пользовательский язык в службе

  1. Во-первых, я попытался сделать это за LocaleContextHolder.getLocale(), но он возвращает мой системный язык независимо от языка запроса.
  2. Затем я ввел HttpServletRequest в эксплуатацию и пробовал: RequestContextUtils.getLocaleResolver(request).resolveLocale(request), но даже не получил LocaleResolver (это было null).

Я не могу отправить локаль некоторым образом от контроллера к этой услуге, потому что это просто реализация Spring Security UserDetailsService

И я использую CookieLocaleResolver в моем проекте, если это имеет значение.

+0

Что определяет местонахождение, которое вы хотите использовать? – soulcheck

+0

@soulcheck не совсем понял вопрос. Я хочу отображать локализованное сообщение при неудачной авторизации, поэтому я должен знать текущий локатор пользователя – Patison

+1

, в этом случае локаль определяется запросом. Вы можете получить его в своем контроллере/аутентификационном перехватчике и передать его службе в качестве параметра. – soulcheck

ответ

1

В общем, вы хотите оставить проблемы презентации с презентационным слоем.

В вашем случае, поскольку вы хотите отобразить сообщение в jsp, используйте <spring:message /> (или обычный <fmt:message />) тег в этом jsp и пусть весна беспокоится о l10n.

Если вы не можете этого сделать, другой вариант выдает исключение из вашего уровня обслуживания и обрабатывает его в контроллере/перехватчике, где у вас есть доступ к ServletRequest и, следовательно, к языку пользователя.

+0

Конечно, я использую '' в моем проекте. Но, как я понимаю, в общем случае во время авторизации могут возникать разные ошибки, которые я хочу перевести и передать Spring Security. Как я могу решить этот нюанс, используя ''? – Patison

+0

@vasileusky, конечно, существуют различные классы ошибок, которые могут произойти, но только ошибка аутентификации является специфичной для проверки подлинности и, по крайней мере, весной-безопасностью, вы можете определить страницу с ошибкой, использующую ' ' – soulcheck

+0

Благодарим за помощь! Я постараюсь сделать исключение в моем сервисе и обработать его где-то на более высоком уровне. – Patison

Смежные вопросы