복붙노트

[SPRING] 함수의 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 얻는 방법?

SPRING

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

나는 Spring 3.1을 사용하고 있고 현재 사용자를위한 로케일을 찾고 싶다. 로케일을 컨트롤러에서 서비스 레이어로 전달하지 않고 로케일을 직접 잡을 수있는 방법이있다.

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

해결법

  1. ==============================

    1.또한 로케일을 전달하지 않고도 로케일에 액세스하는 방법을 찾고 있었지만 여전히 스프링에 익숙하지 않으며 대부분의 솔루션이 혼란 스럽다는 것을 발견했습니다. Spring MVC는 스레드 로컬 저장소에 로케일을 저장합니다. 다음 방법으로 액세스 할 수 있습니다.

    또한 로케일을 전달하지 않고도 로케일에 액세스하는 방법을 찾고 있었지만 여전히 스프링에 익숙하지 않으며 대부분의 솔루션이 혼란 스럽다는 것을 발견했습니다. Spring MVC는 스레드 로컬 저장소에 로케일을 저장합니다. 다음 방법으로 액세스 할 수 있습니다.

    Locale locale = LocaleContextHolder.getLocale();
    

    From : Spring MVC 3로 로케일 전환 구성 (이 게시물은 로케일 가져 오기를위한 대체 구성 / 메소드도 제공하므로이 작업을 원하는 사용자에게 유용 할 수 있음).

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

  2. ==============================

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

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

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

        <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>
    

    다음과 같은 작업을 수행했다면 세션에서 로케일 매개 변수를 쉽게 검색 할 수 있습니다.

    희망이 당신을 도와줍니다.

    건배.

  3. ==============================

    3.우리에게는 같은 필요성이있었습니다. 따라서 Locale을 ThreadLocal 컨텍스트에 배치하는 것이 필요했습니다. 우리는 이미 ThreadLocal 컨텍스트에 객체 (일부 사용자 정보)를 저장 했으므로 추가 만하면됩니다 (해킹처럼 보이지만 가장 빠른 솔루션을 찾았습니다).

    우리에게는 같은 필요성이있었습니다. 따라서 Locale을 ThreadLocal 컨텍스트에 배치하는 것이 필요했습니다. 우리는 이미 ThreadLocal 컨텍스트에 객체 (일부 사용자 정보)를 저장 했으므로 추가 만하면됩니다 (해킹처럼 보이지만 가장 빠른 솔루션을 찾았습니다).

  4. from https://stackoverflow.com/questions/10792551/how-to-obtain-a-current-user-locale-from-spring-without-passing-it-as-a-paramete by cc-by-sa and MIT license