為了讓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項. 結果呈現)
