2014年12月19日 星期五

[JAVA_Spring]建立一個SpringMVC Annotation Project 3 -2 國際化(i18n) - LocaleResolver 詳解



為了讓web支援i18n國際,需要識別使用者區域,並根據該區域顯示內容。

但在SpringMVC中,使用者區域是透過區域解析器來識別,它必須實作LocaleResolver
SpringMVC提供幾個LocaleResolver來實作,可用來解析區域。

除此之外,你也可以自己創建自己的區域解析器
要定義一個區域解析器,只需要在 AppConfig.java 裡註冊一個 LocaleResolver 的 Bean 即可。

你必須將區域解析器的Bean設置為localeResolver,這樣DispatcherServlet才能自動偵測它
,但必須注意的是一個DispatcherServlet只能註冊一個區域解析器。

1.依HTTP請求Header解析區域

Spring採用默認區域解析器是AcceptHeaderLocaleResolver。
它透過HTTP請求的accept-language Header來解析區域。
這Header是由使用者的web brower底層操作系統的區域置進行設定。
請注意,這區域解析器無法改變用戶的區域,
因為它無法修改用戶操作系統的區域配置設定。

2.依Session解析區域

解析區域的另一種方法是透過SessionLocaleResolver。
它透過使用者Session中所設置的屬性來解析區域。
如果該Session屬性不存在,它會根據accept-language HTTP header默認區域,
但也可以為這解析器設定defaultLocale屬性預設區域。
這解析器可以改變使用者的區域設定。

3.依Cookie解析區域

你也可以檢查使用者瀏覽器中的Cookie,用CookieLocaleResolver來解析區域。
這區域解析器所採用的Cookie可以透過cookieName和cookieMaxAge屬性進行制定。
cookieMaxAge屬性表示這cookie可以持續多少秒,
設定-1表示這cookie在瀏覽器關閉後就失效。
如果該Cookie屬性不存在,它會根據accept-language HTTP header默認區域,
但也可以為這解析器設定defaultLocale屬性預設區域。
這解析器可以改變使用者的區域設定。

4.依Fixed解析區域

一直使用固定的區域,無法修改區域。

5.修改使用者的區域

方式(一):呼叫LocaleResolver.setLocale()修改使用者的區域。

方式(二):LocaleChangeInterceptor映射到攔截器中,它會發現當前HTTP請求中出現的參數。
         其中的參數名稱也可以透過paramName屬性自行制定。如果當參數出現在請求中,
         攔截器會根據參數值來改變使用者當前區域。(請參考前一篇第7項. 結果呈現)

















其它文章

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (82) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) MySQL-基本系列教學 (10) SQLite for java (10) Windows (10) c/c++ (10) Notepad++ (9) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Spring MVC (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) centos (5) httpd (5) log4j (5) 基本資訊 (5) CSS Properties (4) Dev-C++ (4) Oracle DDL (4) Servlet (4) Sublime (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) Jboss (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) JAVA 7 (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JMX (1) JSP (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Struts 2 (1) Tool (1) TortoiseSVN (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) jsoup (1) modules (1) tomcat (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 櫻桃鴨 (1) 泰山 (1) 聊天 (1) 聚餐 (1) 開發工具 (1) 開發資訊 (1) 霸王櫻桃鴨 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...