Spring MVC國際化配置
前言
項目開發中要考慮支持國際化,框架選用的是Spring MVC框架,那麼問題來了Spring MVC如何配置並實現國際化。
實現過程(Maven項目)
對於Spring MVC的國際化這裏我是基於session來實現的,具體實現過程如下:
1、首先我們需要在XML配置文件中進行如下配置:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 國際化信息所在的文件名 -->
<property name="basename" value="language.messages" />
<!-- 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作爲名稱 -->
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
這裏核心的配置是配置資源文件路徑"language.messages".
2. 基於session或cookies的要進行攔截配置,具體實現過程如下:
<mvc:interceptors>
<!-- 國際化操作攔截器 如果採用基於(請求/Session/Cookie)則必需配置 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!--local解析器-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
3、編寫Controller代碼用於切換語言。
@RequestMapping("/language")
@ResponseBody
public String lang(HttpServletRequest request){
String langType = request.getParameter("languageType");
if(langType.equals("zh")){
Locale locale = new Locale("zh", "CN");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
}
else if(langType.equals("en")){
Locale locale = new Locale("en", "US");
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
}
else
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
return null;
}
能夠知道的是,通過前端傳遞的語言類型,設置相應的語言環境Locale,之後Spring MVC內部根據Locale動態的選擇去加載指定語言的.porperties文件,前端通過特定的表達式進行調用顯示。
3.準備語言文件,這裏舉例中文、English: messages_en.properties 和 messages_zh.properties
裏面的內容已鍵值對的形式存儲了前端界面需要的信息(各種語言),簡單的看下英文文件裏面的內容。
ms.sysName=Manager System
ms.copyRight=CopyRight@2019 MrZhangxd
ms.languageEN=English
ms.languageZH=Chinese
4.前端界面調用
項目使用的是Velocity模板引擎構建頁面,在.vm文件中的調用方式爲如下形式:
#springMessage("ms.copyRight")