i18n(其 來源是英文單詞 internationalization的首末字符i和n,18為中間的字符數)是“國際化”的簡稱。在資訊領域,國際化(i18n)指讓產品(出版 物,軟件,硬件等)無需做大的改變就能夠適應不同的語言和地區的需要。對程序來說,在不修改內部代碼的情況下,能根據不同語言及地區顯示相應的界面。 在全球化的時代,國際化尤為重要,因為產品的潛在用戶可能來自世界的各個角落。通常與i18n相關的還有L10n(“本地化”的簡稱)。<摘自百度 百科http://baike.baidu.com/view/372835.htm?fr=aladdin >
代碼下載
http://pan.baidu.com/s/1sjNQmfF
Maven依賴
<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應用中,國際化的配置比較簡單,下面四步完成國際化的快速配置
第一步,配置messageSource和localeResolver
<!-- 配置國際化資源文件路徑 --> <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_*.properties
message_en.properties
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碼)
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
|
第三步,頁面引入spring標簽庫
引入
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
使用
<
spring:message
code
=
"welcome"
></
spring:message
>
|
第四步,切換語言
@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即失效了,沒有達到目的。當然,也可以保存用戶的語言設置信息到數據庫,用戶登錄之后即可將語言改變成用戶設置的語言。