摘要:概述為我們提供國際化支持,通過設置系統的環境,根據運行環境使用不同的語言顯示。提供接口的作用是解析客戶端使用的地區,目的是為了根據這些信息實現視圖多語言即國際化。接口繼承接口,增加時區支持。
概述
Spring MVC為我們提供國際化支持,通過設置系統的環境,根據運行環境使用不同的語言顯示。
Spring提供LocaleResolver接口的作用是解析客戶端使用的地區(Locale),目的是為了根據這些信息實現視圖多語言即國際化。
LocaleContextResolver接口繼承LocaleResolver接口,增加時區(TimeZone)支持。
解析器(默認AcceptHeaderLocaleResolver)AcceptHeaderLocaleResolver解析器implements LocaleResolver接口,重寫resolverLocale(HttpServletRequest request)方法,通過檢查客戶端發送請求中的Accept-Language頭來確定客戶端Locale(地區信息)。
此解析器不支持程序設置Locale,只能通過改變客戶端Accept-Language頭信息來改變設置,核心源碼如下:
/** * 從當前的request中解析Locale */ @Override public Locale resolveLocale(HttpServletRequest request) { // 獲取默認設置,可在配置AcceptHeaderLocaleResolver Bean中設置defaultLocale屬性 Locale defaultLocale = getDefaultLocale(); // 設置了默認值并且請求中沒有Accept-Language頭信息時,使用默認設置 if (defaultLocale != null && request.getHeader("Accept-Language") == null) { return defaultLocale; } // 從當前請求中獲取Locale Locale requestLocale = request.getLocale(); // 從配置中獲取支持的Locale集合,可在AcceptHeaderLocaleResolver Bean中設置supportedLocales屬性 List實戰supportedLocales = getSupportedLocales(); // 未設置supportedLocales或者supportedLocales中包括請求Locale,則使用請求Locale if (supportedLocales.isEmpty() || supportedLocales.contains(requestLocale)) { return requestLocale; } // 找到設置的Locale集合中是否有請求的Locale Locale supportedLocale = findSupportedLocale(request, supportedLocales); if (supportedLocale != null) { return supportedLocale; } return (defaultLocale != null ? defaultLocale : requestLocale); } /** * 不支持程序設置Locale */ @Override public void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale) { throw new UnsupportedOperationException( "Cannot change HTTP accept header - use a different locale resolution strategy"); }
項目結構
配置文件
在Spring MVC配置文件中配置資源加載以及AcceptHeaderLocaleResolver Bean,配置如下:
屬性文件
在類路徑下創建配置文件,本項目放置路徑為:resources/i18n/messages_*.proerties,詳見項目結構,配置文件中配置信息如下:
messages_en.properties
message.locale=en
messages_en _US.properties
message.locale=en_US
messages_zh _CN.properties
message.locale=zh_CN
控制器
編寫Controller控制器,以便測試,代碼如下:
@GetMapping(value = "/acceptHeaderLocaleResolver" , produces = "text/html;charset=UTF-8") @ResponseBody public String test(HttpServletRequest request) { String clientLocale = ""; Enumerationenus = request.getLocales(); while (enus.hasMoreElements()){ Locale locale = enus.nextElement(); clientLocale += locale + ","; } RequestContext requestContext = new RequestContext(request); String value = requestContext.getMessage("message.locale"); return "客戶端支持的Locale有:"+clientLocale+" 當前使用的Locale是:" + requestContext.getLocale() + " 使用的資源Locale文件是:" + value ; }
測試
以chrome為例,首先確認chrome的語言設置,如下:
有上圖可見,測試的第一語言為中文(簡體),我們在地址欄訪問我們的Controller,返回信息如下:
由于客戶端設置的為zh-CN,Spring MVC國際化使用的屬性文件是messages_zh _CN.properties,我們通過修改客戶端屬性進行測試,調整chrome語言,即把英語設置到第一位,再次訪問Controller,返回信息如下:
此時的系統使用語言已經切換為message_en.properties。
總結各瀏覽器默認的語言各不相同,可通過設置進行修改調整;
客戶端請求頭Accept-Languages的第一個(權重最大)為Spring MVC使用的Locale;
權重最大的Locale名必須與屬性文件一致,否則找不到,如Accept-Languages的第一個為en,則資源文件名必須設置為messages_en.properties,如果第一個是zh-CN,則資源名稱為messages_zh _CN.properties;
使用messageSource Bean時,如果資源文件放在類路徑下,basename的值必須以classpath:開頭。
最后創建了qq群方便大家交流,可掃描加入,同時也可加我qq:276420284,共同學習、共同進步,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69326.html
摘要:概述我們繼續分析學習,本節我們分析使用的是。與類似,運用用戶會話實現功能。最后創建了群方便大家交流,可掃描加入,同時也可加我,共同學習共同進步,謝謝 概述 我們繼續分析學習Spring MVC LocaleResolver,本節我們分析使用的是SessionLocaleResolver。SessionLocaleResolver與CookieLocaleResolver類似,運用用戶會...
摘要:需求根據客戶端環境,界面顯示不同的國旗圖案。選擇的技術方案可利用提供的國際化和主題定制來解決。注意此時返回的中沒有國際化及主題相關的信息。修改請求參數的值為荷蘭,即后再發起請求,結果如下與預期一致,測試通過。 概述 以上分析了Spring MVC的LocaleResolver和ThemeResolver兩個策略解析器,在實際項目中很少使用,尤其是ThemeResolver,花精力去分析...
摘要:概述上一篇就默認的進行了分析,詳細請參考,本節我們繼續分析學習,主要分析解析器類繼承關系如下圖由上面類圖可知,繼承并實現接口,主要是操作的工具類,繼承接口,增加了信息操作。即通過實現的選擇。 概述 上一篇就Spring MVC默認的LocaleResovler(AcceptHeaderLocaleResolver)進行了分析,詳細請參考https://segmentfault.com/...
摘要:此解析器不能動態設置主題。實戰目標練習使用解析器,最終效果如下項目結構在下創建了主題文件夾及主題文件,下創建了靜態資源文件。是默認的解析器,再此配置是為了自定義屬性值,即屬性文件名稱。其實此解析器與的實現原理基本相同。 概述 主題就是系統的整體樣式或風格,可通過Spring MVC框架提供的主題(theme)設置應用的整體樣式風格,提高用戶體驗。Spring MVC的主題就是一些靜態資...
摘要:類繼承關系如下該類實現接口,實現解析設置主題功能繼承類,以具備操作功能。新增并更換一張不同的圖片。配置文件只要替換即可,代碼如下配置默認的主題文件視圖和控制器視圖和控制器代碼與上一章一致,參考上章代碼。 概述 上節介紹了SessionThemeResolver解析器,本章分析下CookieThemeResolver,兩個解析器實現的功能是一樣的,只是使用的主題載體有區別而已,Sessi...
閱讀 3160·2021-11-19 09:40
閱讀 3647·2021-11-16 11:52
閱讀 2980·2021-11-11 16:55
閱讀 3170·2019-08-30 15:55
閱讀 1176·2019-08-30 13:08
閱讀 1655·2019-08-29 17:03
閱讀 3011·2019-08-29 16:19
閱讀 2579·2019-08-29 13:43