2016-12-26 129 views
2

大家好我正在使用spring mcv进行国际化。但我无法执行语言更改。请帮忙。这里是我servlet.xml中国际化问题

<bean id="messageSource" 
    class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages" /> 
    <!-- <property name="defaultEncoding" value="UTF-8" /> --> 
</bean> 


<bean id="localeChangeInterceptor" 
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="language" /> 
</bean> 

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

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > 
    <property name="interceptors"> 
     <list> 
     <ref bean="localeChangeInterceptor" /> 
     </list> 
    </property> 
</bean> 

,这是我的文件目录结构: enter image description here

,这是语言选择菜单:

<span style="float: right"> 
 
\t \t \t \t <a href="?language=en">en</a> | 
 
\t \t \t \t <a href="?language=ge">ge</a> | 
 
\t \t \t \t <a href="?language=it">it</a> 
 
\t \t \t </span>

请帮助我解决语言问题选举问题 为什么它不适合我?请提供建议。

新编辑servlet.xml中

- >

<bean id="localeChangeInterceptor" 
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="language" /> 
</bean> 

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

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

回答

0

夫妇的事情,

请使用ReloadableResourceBundleMessageSource代替ResourceBundleMessageSource

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource "> 
    <property name="basename" value="/WEB-INF/messages"></property> 
</bean> 

那么你必须将你的资源包文件从当前的src/main/resources移动到你的WEB-INF。

另外补充相关束按您的要求一样,

messages_en,messages_gt,messages_it在WEB-INF。

编辑:

而且我怀疑你需要以下,

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

相反的,

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > 
    <property name="interceptors"> 
     <list> 
     <ref bean="localeChangeInterceptor" /> 
     </list> 
    </property> 
</bean> 

这是因为,虽然改变的语言,你不调用任何控制器的映射。因此它不会被拦截器拦截,你的语言也不会被改变。

+0

没有scanQR它不工作,我... –

+0

giveing我的 - HTTP状态500 - 请求处理失败;嵌套异常是错误 –

+0

如果您在src/main/resources中添加属性文件,或者您在WEB-INF中添加它没有任何区别。如果我将它设为默认值,那么它将和“en”一样。但它现在没有迭代我只想解决这个问题。 –

0

注册SessionLocaleResolver

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

注册 “LocaleChangeInterceptor” 拦截器,并调用它 到需要支持这些语言

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
     <property name="paramName" value="language" /> 
    </bean> 

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > 
     <property name="interceptors"> 
      <list> 
       <ref bean="localeChangeInterceptor" /> 
      </list> 
     </property> 
    </bean> 

而且处理器映射(这是什么你错过了)

<!-- Register the messages_.properties --> 
    <bean id="messageSource" 
       class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basename" value="messages" /><!-- value="messages" as the prefix is messages_.properties --> 
    </bean> 

而且它不会神奇地翻译任何文字的页面上,你仍然需要引用文本中的.properties文件,他们将被翻译的:

对于如:

messages_en.properties包含:

messages.text = My name 

messages_ge.properties包含

messages.text = Ich heise 

然后你输出这段文字的目标页面

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
... 
... 
    <h3> your message : <spring:message code="messages.text" text="default text" /> </h3> 
+0

感谢您的回答,但它不适合我。还有我注册的消息源属性,但有一些错误,所以它不显示在code.i尝试了很多网站做到这一点,但仍然不工作为什么? –