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>View Code
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>View Code
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,來達到更完善的功能。
本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151296.htm