복붙노트

[SPRING] 기본 MVC와 로케일 변경이 작동하지 않는 Spring MVC

SPRING

기본 MVC와 로케일 변경이 작동하지 않는 Spring MVC

저는 두 언어 지원을 사용하는 샘플 웹 애플리케이션을 개발하려고 시도한 새로운 Spring 개발자입니다. 기본 로켈을 아랍어로 설정하고 사용자가 JSP 페이지에서 원하는 언어를 클릭 할 때 로케일을 변경하려고합니다.

다음은 mvc-dispatcher-servlet.xml입니다.

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven/>

<!-- Handles HTTP GET requests for /resources/** by efficiently serving 
    up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<context:component-scan base-package="com.benchmark.ushers.presentation.controller"/>

<bean id="internalResourceResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!-- resource bundle  configuration-->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:locale/messages" />
    <property name="fallbackToSystemLocale" value="false"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="ar" />
</bean>

<mvc:interceptors>  
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
          <property name="paramName" value="lang"></property>
    </bean>
</mvc:interceptors>
<!-- end of resource bundle  configuration-->

그리고 내 JSP 페이지는 아래와 같습니다.

<% @ taglib prefix = "c"uri = "http://java.sun.com/jsp/jstl/core"%> <% @ taglib uri = "http://tiles.apache.org/tags-tiles"prefix = "타일"%> <% @ taglib uri = "http://www.springframework.org/tags"prefix = "spring"%>

안내 인 lang : 영어 | 아랍어

환영합니다 .springmvc :

여보세요 :

내 코드에서 무엇이 잘못되었는지는 모르지만 영어 텍스트 만 표시됩니다.

해결법

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

    1.질문에 위의 구성이 정확합니다. 문제는 요청 된 페이지 세트에 web.xml 파일의 환영 페이지로 설정되어 있으므로 인터셉터없이 실행됩니다.

    질문에 위의 구성이 정확합니다. 문제는 요청 된 페이지 세트에 web.xml 파일의 환영 페이지로 설정되어 있으므로 인터셉터없이 실행됩니다.

    web.xml에서이 부분을 주석 처리하면 모든 것이 잘 작동합니다.

    /WEB-INF/pages/adminHome.jsp ->

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

    2.당신이 어떤 로캘 변경 요청을 확인합니다 @RequestMapping 매핑 DefaultAnnotationHandlerMapping 필요가 있다고 생각합니다. 스프링 국제화 (Spring Internationalization)를 보라.

    당신이 어떤 로캘 변경 요청을 확인합니다 @RequestMapping 매핑 DefaultAnnotationHandlerMapping 필요가 있다고 생각합니다. 스프링 국제화 (Spring Internationalization)를 보라.

    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <ref bean="localeChangeInterceptor" />
        </property>
    </bean>
    

    이 주제를 읽고

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

    3.내 경우에는 java config 버전을 사용하고 있었고 "localeResolver"bean 이름을 추가 할 때까지 작동하지 않았다. 내가 만든 국제화 빈은 아래와 같습니다. URL의 lang 매개 변수를 변경하여 작동하는지 확인할 수 있습니다. /some-page.do?lang=ro

    내 경우에는 java config 버전을 사용하고 있었고 "localeResolver"bean 이름을 추가 할 때까지 작동하지 않았다. 내가 만든 국제화 빈은 아래와 같습니다. URL의 lang 매개 변수를 변경하여 작동하는지 확인할 수 있습니다. /some-page.do?lang=ro

    public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    
    ...
    
    @Bean(name="localeResolver")
    public LocaleContextResolver getLocaleContextResolver() {
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setDefaultLocale(Locale.US);
        return localeResolver;
    }
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getLocaleChangeInterceptor());
    }
    
    @Bean
    public LocaleChangeInterceptor getLocaleChangeInterceptor() {
        final LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("lang");
        return interceptor;
    }
    
  4. from https://stackoverflow.com/questions/26573886/spring-mvc-the-default-locale-and-locale-change-doesnt-work by cc-by-sa and MIT license