IT TIP

함수에 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 얻는 방법은 무엇입니까?

itqueen 2020. 12. 14. 21:25
반응형

함수에 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 얻는 방법은 무엇입니까?


저는 Spring 3.1을 사용하고 있으며 현재 사용자에 대해 활성화 된 로케일을 찾고 싶습니다. 컨트롤러에서 서비스 계층으로 전달하지 않고 로케일을 직접 가져 오는 방법이 있습니다.

스프링은 정적 메서드를 호출하여 얻을 수있는 스레드 로컬 저장소에 로케일을 저장합니까?


나는 또한 Locale주변을 지나치지 않고 로케일에 액세스하는 방법을 찾고 있었지만 여전히 Spring을 처음 접했으며 대부분의 솔루션이 혼란 스럽다는 것을 알았습니다. 그러나 Spring MVC는 스레드 로컬 스토리지에 로케일을 저장합니다. 다음을 통해 액세스 할 수 있습니다.

Locale locale = LocaleContextHolder.getLocale();

마지막 접근 [...]은 아키텍처의 모든 엔티티에서 현재 로케일을 제공하기 위해 스레드 로컬을 기반으로합니다. [...] LocaleContextHolder의 내용은 기본적으로 웹 요청에 지정된 로케일에 해당한다는 것을 알고 있어야합니다.

From : Spring MVC 3로 로케일 전환 구성 . (이 게시물은 또한 로케일을 가져 오기위한 대체 구성 / 방법을 제공하므로이를 수행하려는 모든 사람에게 유용 할 수 있습니다).

여기LocaleContextHolder 에서 Spring 문서를 볼 수도 있습니다 .


로케일을 저장하도록 구성한 위치, 세션 또는 쿠키에 따라 다릅니다.

내 응용 프로그램에서 아래에 언급 된 구성으로 세션에 사용자 로캘을 저장하도록 구성했습니다.

    <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으로 ThreadLocal상황. 우리는 이미 ThreadLocal컨텍스트에 저장된 객체 (일부 사용자 정보)가 있었으므로 그냥 추가했습니다 (핵처럼 보이지만 우리가 찾은 가장 빠른 솔루션).

참고 URL : https://stackoverflow.com/questions/10792551/how-to-obtain-a-current-user-locale-from-spring-without-passing-it-as-a-paramete

반응형