1. 程式人生 > >SpringMVC 資源國際化實現以及常見問題

SpringMVC 資源國際化實現以及常見問題

text com lis frame ssi 三種 ltm manage 地址

資源國際化可以很方便的實現web項目語言的切換,解決了web項目按需顯示不同語言界面的問題.

SpringMVC 的資源國際化基於JDK的java.util.ResourceBundle實現,經過SpringMVC的封裝實現起來非常簡單:

簡單實現具體步驟如下:

  1.在SpringMVC的配置文件中配置ResourceBundleMessageSource(該類的作用是綁定資源文件,根據Locale值不同,顯示不同的語言)

 1     <!-- 資源國際化相關配置 -->
 2     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
> 3 <!-- 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作為名稱 --> 4 <property name="useCodeAsDefaultMessage" value="true" /> 5 <!-- 默認編碼格式為 utf-8 --> 6 <property name="defaultEncoding" value="UTF-8" /> 7 <!-- 國際化信息所在的文件名 --> 8 <
property name="basenames"> 9 <list> 10 <value>i18n.messages</value> 11 </list> 12 </property> 13 </bean>

   (PS:basenames屬性,值為資源文件的地址)

  2.配置LocaleResolver(該類指明了Locale應該存放在何處)

    LocaleResolver有三種選擇,分別是基於request,基於session,基於cookie,因為基於request的實現不支持手動切換,建議使用基於session

的實現

    三種方式的配置具體如下:

     a.基於request的實現:

    <!-- 基於request實現資源國際化 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" />

b.基於session的實現:

    
    <!-- 基於Session實現資源國際化 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en"/>
    </bean>

     c.基於cookie的實現

    <!-- 基於cookie實現資源國際化 -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="en"/>
    </bean>

  3.配置localeChangeInterceptor攔截器(該類的作用是根絕不同的LocaleResolve采用不同的方式設置Locale)

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

  (paramName屬性,是指請求中 切換語言的參數名)

  4.編寫資源文件

    資源文件的命名規則是 basename [ _language ] [ _country ] [ _variant ].properties

    languange country variant 需要為Locale類中的值

  5.頁面獲取資源文件中的值(以jsp為例)

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<spring:message code="comment.management" /> <!-- code的值為資源文件中對應的key -->

6.頁面切換語言

   這種方式實現的資源國際化,會攔截所有的請求,只要請求中帶有 localeChangeInterceptor 中定義的參數,攔截器就會修改存儲的Locale,實現語言的切換

常見問題(重點)(待補充,請稍後):

  1.基於session不使用攔截器實現

  2.資源文件的加載順序

3.默認語言的設置

    

    

SpringMVC 資源國際化實現以及常見問題