Как получить языковой стандарт посетителя в JSP, используя SessionLocaleResolver в Spring 3
Мне нужно получить языковой стандарт посетителя на моих страницах JSP, чтобы я мог правильно отобразить раскрывающееся меню со списком языков и выбрать выбранный язык в соответствии с их текущим языковым стандартом. Обычно я мог бы сделать что-то вроде ${pageContext.request.locale}
,
Проблема, я думаю, заключается в том, что я получу только локаль в соответствии с заголовками запросов пользователя (что посылает браузер). Но пользователь, возможно, изменил свой язык / локаль, поэтому мне нужно использовать механизм Spring, который также смотрит на сессию:
RequestContextUtils.getLocale(request).toString();
Но тогда не так легко получить доступ к странице JSP и заставить работать с ней код JSP.
Или есть другой более простой механизм для отображения выпадающего меню языков пользователю? Сохраняет ли Spring текущую локаль в объекте, легко доступном из JSP?
3 ответа
При использовании SessionLocaleResolver текущая локаль сохраняется в сеансе с использованием имени атрибута, указанного в классе SessionLocaleResolver. Ссылка на SessionLocaleResolver сохраняется в запросе с использованием имени другого атрибута (org.springframework.web.servlet.DispatcherServlet#LOCALE_RESOLVER_BEAN_NAME).
Я не вижу простой способ получить локаль прямо на странице JSP без использования Java-кода.
Я бы выбрал текущую локаль и создал бы список доступных для выбора языков в контроллере и добавил бы это к модели.
Это делает код тестируемым и перемещает код java из jsp в контроллер.
Для нас
${pageContext.response.locale}
сделал трюк. Это свойство соответствует тому, что было установлено средством распознавания локали Spring.