2014-10-26 3 views
0

Я новый разработчик Spring пытался создать образец веб-приложения с поддержкой двух языков. Я хочу установить языковой стандарт по умолчанию на арабский язык и изменить локаль, когда пользователь нажимает нужный язык на странице JSP.Spring MVC по умолчанию Изменено Locale и Locale не работает

Вот мой MVC-диспетчерская-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="tiles"%> 
 
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
 
<tiles:insertDefinition name="defaultTemplate"> 
 
\t <tiles:putAttribute name="body"> 
 

 

 

 
\t \t <div class="body"> 
 
\t \t \t <h1>Ushers</h1> 
 

 
\t \t \t lang : <a href="?lang=en">English</a> | <a 
 
\t \t \t \t href="?lang=ar">Arabic</a> 
 

 
\t \t \t <h3> 
 
\t \t \t \t welcome.springmvc : 
 
\t \t \t \t <spring:message code="footer.content" text="default text" /> 
 
\t \t \t </h3> 
 
\t \t \t 
 
\t \t \t <h3> 
 
\t \t \t \t hello : 
 
\t \t \t \t <spring:message code="footer.hello" text="default text" /> 
 
\t \t \t </h3> 
 

 

 
\t \t </div> 
 

 

 

 
\t </tiles:putAttribute> 
 
</tiles:insertDefinition>

Я не знаю, что это неправильно в мой код, пока отображается только текст на английском языке.

ответ

1

Приведенная выше конфигурация в вопросе является правильным. Проблема была в запрошенных наборах страниц в качестве приветственной страницы в файле web.xml, поэтому она выполняется без каких-либо перехватчиков.

Каждая вещь работает отлично после комментария эту часть в web.xml

<!-- <welcome-file-list> 
 
\t \t <welcome-file>/WEB-INF/pages/adminHome.jsp</welcome-file> 
 
</welcome-file-list>-->

0

Я думаю, вам нужно DefaultAnnotationHandlerMapping для сопоставления с @RequestMapping, он будет проверять любой запрос изменения языка. См. Также Spring Internationalization.

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

Прочитайте это topic, чтобы избежать смешивания его с <mvc:annotation-driven/>

+0

Я попытался это раньше, но не работает в связи с этой декларацией «». –

0

В моем случае, я использовал версию Java конфигурации, и он не работал, пока я не добавил Название "localeResolver". Бункеры интернационализации, которые я создал, перечислены ниже. Вы можете проверить это, изменив параметр lang в URL: /some-page.do? языки = ро

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; 
} 
Смежные вопросы