SpringMVC4.3x教程之七國際化的三種實現詳解
阿新 • • 發佈:2019-01-09
國際化(internationalization)是設計和製造容易適應不同區域要求的產品的一種方式。它要求從產品中抽離所有地域語言,國家/地區和文化相關的元素。換言之,應用程式的功能和程式碼設計考慮在不同地區執行的需要,其程式碼簡化了不同本地版本的生產。開發這樣的程式的過程,就稱為國際化。—摘自百度百科
SpringMVC也是支援國際化的操作,主要是前端控制器內部擁有國際化解析器
SpringMVC的國際化的支援方式:
1、Accept-Language
控制器無需寫額外的內容,是根據請求訊息頭自動獲取
2、HttpSession
使用Session傳輸語言環境
3、Cookie
使用Cookie傳送語音環境
第一種基於Accept-Language實現
使用步驟:
1、建立國際化配置檔案,存放到src下
英文
message_en_US.properties:
內容:
labeltime=Current Time
中文
message_zh_CN.properties:
內容:
labeltime=當前時間
2、設定配置檔案
<!--配置國際化檔案的格式:載入指定格式開頭的檔案 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" >
<!--多個檔案開頭用basenames,檔案開頭都相同用basename-->
<!-- <property name="basenames">
<list>
<value>message</value>
</list>
</property> -->
<property name="basename" value="message"/>
</bean>
<!--國際化實現的第一種方式:藉助訊息頭實現:Accept-Language -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"></bean>
3、頁面中使用
通過SpringMVC的message獲取國際化文字內容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--配置標籤庫 -->
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>國際化的實現</title>
</head>
<body>
<!--使用Spring MVC的國際化支援, spring:message可以載入國際化檔案的key -->
<h1><spring:message code="labeltime"/>:${time}</h1>
</body>
</html>
上述在火狐瀏覽器測試最好用,直接設定內容的語言就可以,無需重啟,選項—-內容—語言—上移想要的語言
第二種使用HttpSession實現國際化
首先配置:
需要將之前配置的第一種給註釋掉
<!--如果國際化是通過Session或Cookie實現的,那麼需要配置攔截器 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
<!--國際化實現的第二種方式:藉助HttpSession -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
控制器:
//國際化控制器
@Controller
public class LanguageController {
@ModelAttribute
public void test4(Model model) {
model.addAttribute("time",
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS").format(Calendar.getInstance().getTime()));
}
// 基於Session的實現
@RequestMapping("/gjhBySession")
public String test2(String lge, HttpSession session) {
Locale locale;// 國際化語言資訊
System.out.println(lge);
switch (lge) {
case "zh":// 中文
// 引數說明:1、語言2、國家
locale = new Locale("zh", "CN");
break;
case "en":// 英文
locale = new Locale("en", "US");
break;
default:
// 獲取預設的國際化
locale = LocaleContextHolder.getLocale();
break;
}
// 設定屬性標記當前的語言環境
session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
return "index";
}
}
頁面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--配置標籤庫 -->
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>國際化的實現</title>
</head>
<body>
<div style="float:right">
<a href="gjhBySession?lge=zh">中文</a>|<a href="gjhBySession?lge=en">英文</a>
</div>
<h1><spring:message code="labeltime"/>:${time}</h1>
</body>
</html>
第三種基於Cookie實現國際化
配置檔案
<!--國際化實現的第一種方式:藉助訊息頭實現:Accept-Language -->
<!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"></bean> -->
<!--如果國際化是通過Session或Cookie實現的,那麼需要配置攔截器 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
<!--國際化實現的第三種方式:藉助Cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"></bean>
控制器:
//國際化控制器
@Controller
public class LanguageController {
@Autowired
private CookieLocaleResolver localeResolver;
@ModelAttribute
public void test4(Model model) {
model.addAttribute("time",
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS").format(Calendar.getInstance().getTime()));
}
//基於Cookie的實現
@RequestMapping("/gjhByCookie")
public String test3(String lge, HttpServletRequest request,HttpServletResponse response) {
Locale locale;// 國際化語言資訊
System.out.println(lge);
switch (lge) {
case "zh":// 中文
// 引數說明:1、語言2、國家
locale = new Locale("zh", "CN");
break;
case "en":// 英文
locale = new Locale("en", "US");
break;
default:
// 獲取預設的國際化
locale = LocaleContextHolder.getLocale();
break;
}
//CookieLocaleResolver localeResolver=new CookieLocaleResolver();
localeResolver.setLocale(request, response, locale);
return "index";
}
}
頁面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--配置標籤庫 -->
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>國際化的實現</title>
</head>
<body>
<div style="float:right">
<a href="gjhByCookie?lge=zh">中文</a>|<a href="gjhByCookie?lge=en">英文</a>
</div>
<h1><spring:message code="labeltime"/>:${time}</h1>
</body>
</html>
上述就是SpringMVC實現國際化的三種方式的詳細程式碼。