為了讓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項. 結果呈現)
其它文章
沒有留言:
張貼留言