要使用spring mvc配置國際化,首先用MessageSource來管理國際資源文件:
<!-- 國際化資源文件 messageSource配置的是國際化資源文件的路徑,
classpath:messages指的是classpath路徑下的 messages_zh_CN.properties文件和messages_en_US.properties文件
設置“useCodeAsDefaultMessage”,默認爲false,這樣當Spring在ResourceBundle中找不到messageKey的話,就拋出NoSuchMessageException, 把它設置爲True,則找不到不會拋出異常,而是使用messageKey作爲返回值。 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="useCodeAsDefaultMessage" value="true" />
<property name="cacheSeconds" value="10"></property>
<property name="basenames">
<list>
<value>classpath:messages</value>
</list>
</property>
</bean>
主要有三種方式:
-
默認爲基於瀏覽器(以谷歌瀏覽器爲例,設置語言的首選項即爲默認語言,Accept-Language)
-
基於Cookie
<!--CookieLocaleResolver解析會檢查客戶端是否有Cookie,裏面可能存放了地區Locale或時區TimeZone信息。如果檢查到相應的值,解析器就使用它們。通過該解析器的屬性,你可以指定cookie的名稱和其最大的存活時間。-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="clientlanguage"/>
<!-- 單位爲秒。若設置爲-1,則cookie不會被持久化(客戶端關閉瀏覽器後即被刪除) -->
<property name="cookieMaxAge" value="100000">
</bean>
<mvc:interceptors>
<!-- 國際化操作攔截器 如果採用基於(請求/Session/Cookie)則必需配置,這個攔截器會攔截請求中的參數,然後根據參數去調用LocaleResolver的setLocale()方法,改變當前的locale值 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
-
基於Session
<mvc:interceptors>
<!-- 國際化操作攔截器 如果採用基於(請求/Session/Cookie)則必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />