2014-10-26 208 views
0

我是一位新的Spring开发人员,尝试开发具有两种语言支持的示例Web应用程序。我想将默认语言环境设置为阿拉伯语,并在用户单击时更改语言环境JSP页面中所需的语言。Spring MVC默认语言环境和语言环境更改不起作用

这里是我的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

我曾经使用过,但不工作,由于此声明 “”。 – 2014-10-26 15:32:51

0

对我来说,我使用的是java版本的配置,并没有工作,直到我加入“localeResolver”bean名称。下面列出了我创建的国际化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; 
}