Как получить текущую локаль пользователя из Spring, не передавая ее в качестве параметра в функции?
Я использую Spring 3.1 и хочу найти локаль, активную для текущего пользователя, есть ли способ захватить локаль напрямую, не будучи вынужденным передавать ее с контроллера на уровень сервиса ... так далее.
сохраняет ли spring локаль в локальном хранилище потока, где ее можно захватить, вызвав какой-либо статический метод?
3 ответов:
Я также искал, как получить доступ к локали без передачи
Localeвокруг, но я все еще довольно новичок в Spring и нашел большинство решений, которые сбивают с толку. Оказывается, однако, что Spring MVC хранит локаль в локальном хранилище потоков. Он может быть доступен по адресу:Locale locale = LocaleContextHolder.getLocale();последний подход...] основан на локальном потоке, чтобы обеспечить текущую локаль в любом объекте вашей архитектуры. [...] Вы должны знать, что содержание LocaleContextHolder по умолчанию соответствует языковому стандарту, указанному в веб-запросе.
от: настройка переключения локали с помощью Spring MVC 3. (Этот пост также предлагает альтернативные конфигурации / методы для получения локали, которые могут быть полезны для тех, кто хочет это сделать).
вы также можете посмотреть
LocaleContextHolderдокументы с весны здесь.
Это зависит от того, где вы настроили хранить язык в сессии или в куки?
в моем приложении я настроил для хранения языкового стандарта пользователя в его сеансе с приведенной ниже конфигурацией.
<mvc:interceptors> <ref bean="localeChangeInterceptor"/> </mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"/> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="en"/> </bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>/WEB-INF/i18n/labels</value> <value>/WEB-INF/i18n/messages</value> <value>/WEB-INF/i18n/include</value> </list> </property> <property name="defaultEncoding" value="UTF-8"/> </bean>Если вы сделали что-то подобное, то вы можете легко получить параметр locale из сеанса.
надеюсь, что это поможет вам.
Ура.
у нас была такая же потребность, так-то
LocaleнаThreadLocalконтексте. У нас уже был объект (некоторая пользовательская информация), хранящийся вThreadLocalконтекст, так что просто добавил его (выглядит как хак, но самое быстрое решение, которое мы нашли).
Comments