項目中采用SpringMVC的框架,需要動態切換語言,找了一些資料,最後決定采用基於session的動態切換,實現動態切換中文,英文,韓文,其實就是把中文翻譯成其他語言顯示。
SpringMVC國際化包括兩個方面,一個是前台頁面的國際化,spring有自己的標簽可以去實現,非常方便,另一個是後台java代碼種涉及中文的國際化。
有關bean的主要配置在spring-mvc.xml裡配置,messages文件夾裡放的是需要翻譯的內容格式如下:key = value 的格式
英文:
中文:
韓文 :
需要注意的是 配置文件裡面涉及到的中文需要轉成unicode編碼,否則翻譯後會出現亂碼的情況。
1 <!-- 國際化資源配置,資源文件綁定器--> 2 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 3 <!-- 國際化資源文件配置,指定properties文件存放位置 --> 4 <property name="basename" value="classpath:messages/message" /> 5 <!-- 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作為名稱 --> 6 <property name="useCodeAsDefaultMessage" value="true" /> 7 </bean> 8 <!-- 動態切換國際化 ,國際化放在session中 --> 9 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> 10 <mvc:interceptors> 11 <!-- 國際化操作攔截器 如果采用基於(請求/Session/Cookie)則必需配置 --> 12 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 13 <!-- 通過這個參數來決定獲取那個配置文件 --> 14 <property name="paramName" value="language" /> 15 </bean> 16 </mvc:interceptors>
需要注意的是 basename的值需要配置到messages/message 這一級別。也就是國際化文件存放的位置,一直到第一個下劃線前面。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %> 4 <%@taglib prefix="mvc" uri="http://www.springframework.org/tags/form" %> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>Insert title here</title> 10 </head> 11 <body> 12 選擇語言:<a href="?language=zh_CN">中文</a> | <a href="?language=en_US">英文</a> | <a href="?language=ko_KR">韓文</a> 13 <br></br> 14 這裡展示選擇對應語言後的“你好”的翻譯(前台標簽翻譯): 15 <spring:message code="你好" /> 16 <br></br> 17 這裡展示選擇對應語言後的“歡迎你”的翻譯(後台代碼翻譯):${welcome} 18 19 </body> 20 </html>
需要注意的是 頁面引入spring的標簽, code我這裡寫的是中文,對應那三個翻譯文件裡的key 如果code在翻譯文件裡沒有找到對應的key則使用code裡面的內容 這個配置在spring'-mvc 裡指定了。
1 package com.ccg.controller; 2 3 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 8 import org.springframework.stereotype.Controller; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.servlet.ModelAndView; 11 import org.springframework.web.servlet.support.RequestContext; 12 13 14 @Controller 15 @RequestMapping("test") 16 public class TestController { 17 18 @RequestMapping("view") 19 public ModelAndView view(HttpServletRequest request, HttpServletResponse response){ 20 //spring翻譯使用req.getmessage()方法 21 RequestContext req = new RequestContext(request); 22 ModelAndView model = new ModelAndView("test"); 23 model.addObject("welcome", req.getMessage("歡迎你")); 24 return model; 25 } 26 }
總結一下springMvc的國際化的關鍵點:
1)指定spring國際化需要翻譯的文件位置,需要注意的是路徑一定要寫完整。
2)指定spring國際化時的參數,上文中我用到是language,配置好之後,spring會根據請求中該參數的值找到對應的配置文件。
3)前台頁面使用spring標簽,code對應配置文件中的key,推薦使用中文,萬一對應不上的時候默認顯示code裡面的內容(需要在spring-mvc.xml裡指定配置)
4)後台代碼國際化使用RequestContext 對象的getMessage 方法,返回String。
以上就是我對springMvc國際化的實現,有問題可以留言。