i18n(其來源是英文單詞 internationalization的首末字符i和n,18爲中間的字符數)是「國際化」的簡稱。在資訊領域,國際化(i18n)指讓產品(出版物,軟件,硬件等)無需作大的改變就可以適應不一樣的語言和地區的須要。對程序來講,在不修改內部代碼的狀況下,能根據不一樣語言及地區顯示相應的界面。 在全球化的時代,國際化尤其重要,由於產品的潛在用戶可能來自世界的各個角落。一般與i18n相關的還有L10n(「本地化」的簡稱)。<摘自百度百科http://baike.baidu.com/view/372835.htm?fr=aladdin >html
http://pan.baidu.com/s/1sjNQmfFjava
1
2
3
4
5
6
7
8
9
10
11
|
< properties >
< springframework >4.0.5.RELEASE</ springframework >
</ properties >
< dependencies >
<!-- Spring web mvc -->
< dependency >
< groupId >org.springframework</ groupId >
< artifactId >spring-webmvc</ artifactId >
< version >${springframework}</ version >
</ dependency >
</ dependencies >
|
在Spring應用中,國際化的配置比較簡單,下面四步完成國際化的快速配置web
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- 配置國際化資源文件路徑 -->
< bean id = "messageSource" class = "org.springframework.context.support.ResourceBundleMessageSource" >
< property name = "basename" >
<!-- 定義消息資源文件的相對路徑 -->
< value >messages/message</ value >
</ property >
</ bean >
<!-- 基於Cookie的本地化解析器 -->
< bean id = "localeResolver" class = "org.springframework.web.servlet.i18n.CookieLocaleResolver" >
< property name = "cookieMaxAge" value = "604800" />
< property name = "defaultLocale" value = "zh_CN" />
< property name = "cookieName" value = "Language" ></ property >
</ bean >
<!-- 基於Session的本地化解析器 -->
<!--<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />-->
|
message_en.propertiesspring
1
2
3
4
5
6
7
|
hi=hello
something=The People's Republic of China
Chinese=Chinese
English=English
index=Index
welcome=Welcome
OtherPage=Other Page
|
message_zh_CN.properties(漢字已轉成unicode碼)數據庫
1
2
3
4
5
6
7
|
hi=\u4F60\u597D
something=\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD
Chinese=\u4E2D\u6587
English=\u82F1\u6587
OtherPage=\u5176\u4ED6\u9875\u9762
index=\u9996\u9875
welcome=\u6B22\u8FCE
|
引入瀏覽器
1
|
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
使用cookie
1
|
< spring:message code = "welcome" ></ spring:message >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@Autowired CookieLocaleResolver resolver;
//@Autowired SessionLocaleResolver resolver;
/**
* 語言切換
*/
@RequestMapping ( "language" )
public ModelAndView language(HttpServletRequest request,HttpServletResponse response,String language){
language=language.toLowerCase();
if (language== null ||language.equals( "" )){
return new ModelAndView( "redirect:/" );
} else {
if (language.equals( "zh_cn" )){
resolver.setLocale(request, response, Locale.CHINA );
} else if (language.equals( "en" )){
resolver.setLocale(request, response, Locale.ENGLISH );
} else {
resolver.setLocale(request, response, Locale.CHINA );
}
}
return new ModelAndView( "redirect:/" );
}
|
已完成國際化的配置,其中請注意SessionLocaleResolver和CookieLocaleResolver的區別,很顯然,經過Session只能對當前的會話有效,Cookie則對Cookie有效期內的會話都有效。在使用Cookie的時候,須要設置Cookie的過時時間,不然關閉瀏覽器以後,Cookie即失效了,沒有達到目的。固然,也能夠保存用戶的語言設置信息到數據庫,用戶登陸以後便可將語言改變成用戶設置的語言。mvc
運行效果截圖:app