2016-12-26 114 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嘗試了很多網站做到這一點,但仍然不工作爲什麼? –