歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 基於session 的SpringMVC 國際化

基於session 的SpringMVC 國際化

日期:2017/3/1 9:06:26   编辑:Linux編程

項目中采用SpringMVC的框架,需要動態切換語言,找了一些資料,最後決定采用基於session的動態切換,實現動態切換中文,英文,韓文,其實就是把中文翻譯成其他語言顯示。

SpringMVC國際化包括兩個方面,一個是前台頁面的國際化,spring有自己的標簽可以去實現,非常方便,另一個是後台java代碼種涉及中文的國際化。

1、項目總體結構

有關bean的主要配置在spring-mvc.xml裡配置,messages文件夾裡放的是需要翻譯的內容格式如下:key = value 的格式

英文:

中文:

韓文 :

需要注意的是 配置文件裡面涉及到的中文需要轉成unicode編碼,否則翻譯後會出現亂碼的情況。

2、在spring-mvc加入以下配置:

 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 這一級別。也就是國際化文件存放的位置,一直到第一個下劃線前面。

3、前台頁面實現

 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 裡指定了。

4、後台代碼的實現

 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 }

5、效果展示

總結一下springMvc的國際化的關鍵點:

1)指定spring國際化需要翻譯的文件位置,需要注意的是路徑一定要寫完整。

2)指定spring國際化時的參數,上文中我用到是language,配置好之後,spring會根據請求中該參數的值找到對應的配置文件。

3)前台頁面使用spring標簽,code對應配置文件中的key,推薦使用中文,萬一對應不上的時候默認顯示code裡面的內容(需要在spring-mvc.xml裡指定配置)

4)後台代碼國際化使用RequestContext 對象的getMessage 方法,返回String。

以上就是我對springMvc國際化的實現,有問題可以留言。

Copyright © Linux教程網 All Rights Reserved