淺談SpringMVC國際化支援,淺談springmvc國際化
這周公司領導希望我對一個項目,出一個國際化的解決方案,研究兩個小時,採用了SpringMVC的國際化支援,在此記錄下。
原理: 在DispatchServlet中註冊 localeResolver(地區解析器) ,並添加 Locale攔截器(LocaleChangeInterceptor) ,來檢測請求中的參數和語言環境的改變。
在應用上下文中註冊 ResourceBundleMessageSource ,定義國際化檔案在程式中的路徑和名稱。
1. 語言解析器
在SpringMVC中,常用的語言解析器有
Header resolver:通過解析用戶端要求標頭資訊中心的accept-language,來擷取使用者需要的國際化語言。詳見=AcceptHeaderLocaleResolver
Cookie resolver:通過解析用戶端上Cookie指定的locale,來擷取使用者需要的國際化資訊。詳見=CookieLocaleResolver
Session resolver:通過解析用戶端請求域中的loacle資訊,來擷取需要的國際化資訊,並儲存在httpSession中。詳見=SessionLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="en_US" /> </bean>
2. 地區攔截器
我們需要在DispatchServlet中註冊監控地區改變的攔截器, 他能協助我們檢測請求參數,根據請求參數對應的語言,更改語言環境。
<mvc:interceptors> <bean class="com.xxx.web.interceptor.IhgLocaleChangeInterceptor" /> </mvc:interceptors>
3. 國際化資源配置
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="defaultEncoding" value="UTF-8" /> <property name="basename" value="classpath*:/ApplicationMessage" /> <property name="useCodeAsDefaultMessage" value="true" /> </bean>
4. 頁面國際化
在這裡,我是用的是jstl的fmt標籤來實現國際化。有興趣的同學也可以使用spring的message標籤。
1) 引入標籤庫<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
2) 指定國際化檔案資源名<fmt:setBundle basename="ApplicationMessage" />
3) 通過國際化資源檔的key,讀取檔案資訊。 <fmt:message key="security.account.number" />
5. 我們在第二步中選擇的是SessionResolver解析器。所以在請求中,我們需要在url的參數後面拼接上 locale=具體語言標識 (例如:locale=zh_CN)。
注意:在每個頁面都拼接url的話會顯得麻煩,通常使用者會希望能做的,一次選擇語言後,之後都首選這種語言。所以有興趣的同學可考慮,通過擴充LocaleChangeInterceptor,來達到更完善的功能。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。