日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Spring國際化的應(yīng)用及原理詳解

來源: 責(zé)編: 時間:2024-01-04 09:33:17 303觀看
導(dǎo)讀環(huán)境:Spring5.3.231. 簡介Spring國際化(Spring Internationalization,簡稱i18n)是Spring框架提供的一種機制,用于支持多語言的應(yīng)用程序。它使得開發(fā)者能夠輕松地在應(yīng)用程序中實現(xiàn)不同語言的支持,從而滿足全球化的需求。通過

環(huán)境:Spring5.3.23E3k28資訊網(wǎng)——每日最新資訊28at.com

1. 簡介

Spring國際化(Spring Internationalization,簡稱i18n)是Spring框架提供的一種機制,用于支持多語言的應(yīng)用程序。它使得開發(fā)者能夠輕松地在應(yīng)用程序中實現(xiàn)不同語言的支持,從而滿足全球化的需求。通過Spring國際化,開發(fā)者可以將應(yīng)用程序的文本、標(biāo)簽、消息等資源抽取出來,并使用合適的語言文件進行翻譯,使得應(yīng)用程序能夠根據(jù)用戶的語言偏好自動切換語言。這種機制不僅簡化了多語言支持的實現(xiàn),還使得應(yīng)用程序更加易于維護和擴展。在Spring國際化的實現(xiàn)中,主要涉及到了MessageSource、LocaleResolver等核心組件,它們共同協(xié)作,實現(xiàn)了語言切換的功能。通過使用Spring國際化的API,開發(fā)者可以方便地定義語言區(qū)域、加載資源文件、處理消息等操作,從而快速構(gòu)建多語言的應(yīng)用程序。E3k28資訊網(wǎng)——每日最新資訊28at.com

2. API介紹

ApplicationContext 接口擴展了一個名為 MessageSource 的接口,因此提供了國際化("i18n")功能。Spring 還提供了 HierarchicalMessageSource 接口,該接口可以分層解析消息。這些接口共同構(gòu)成了 Spring 實現(xiàn)消息解析的基礎(chǔ)。這些接口定義的方法包括:E3k28資訊網(wǎng)——每日最新資訊28at.com

  • String getMessage(String code, Object[] args, String default, Locale loc)

用于從 MessageSource 獲取消息的基本方法。如果在指定的本地沒有找到消息,則使用默認消息。通過標(biāo)準(zhǔn)庫提供的 MessageFormat 功能,傳入的任何參數(shù)都會成為替換值。E3k28資訊網(wǎng)——每日最新資訊28at.com

  • String getMessage(String code, Object[] args, Locale loc)

與前一種方法基本相同,但有一點不同:不能指定默認信息。如果找不到信息,就會拋出 NoSuchMessageException 異常。E3k28資訊網(wǎng)——每日最新資訊28at.com

  • String getMessage(MessageSourceResolvable resolvable, Locale locale)

前面方法中使用的所有屬性也都封裝在一個名為 MessageSourceResolvable 的類中,你可以使用該方法。E3k28資訊網(wǎng)——每日最新資訊28at.com

3. 國際化初始化

Spring容器ApplicationContext初始化過程中,會從容器中查找MessageSource類型的Bean。并且該Bean的名稱必須是 messageSource。如果找到了這樣一個 Bean,對前面方法的所有調(diào)用都會委托給消息源。如果沒有找到消息源,ApplicationContext 會嘗試查找包含同名Bean的父類。如果找到了,它就會使用該 bean 作為消息源。如果 ApplicationContext 無法找到任何消息源,則會實例化一個空的 DelegatingMessageSource,以便能夠接受對上述方法的調(diào)用。E3k28資訊網(wǎng)——每日最新資訊28at.com

public abstract class AbstractApplicationContext {  public void refresh() {    // 初始化消息源    initMessageSource();  }  protected void initMessageSource() {    ConfigurableListableBeanFactory beanFactory = getBeanFactory();    // 判斷容器中是否有messageSource    if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {      this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);      if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) {        HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource;        if (hms.getParentMessageSource() == null) {          hms.setParentMessageSource(getInternalParentMessageSource());        }      }    } else {      // Use empty MessageSource to be able to accept getMessage calls.      DelegatingMessageSource dms = new DelegatingMessageSource();      dms.setParentMessageSource(getInternalParentMessageSource());      this.messageSource = dms;      beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);    }  }}

4. 國際化配置

基于Spring環(huán)境

@Bean(AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME)public MessageSource messageSource() {  ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource() ;  // 這里設(shè)置的是basename,message是文件的前綴(不是包)  messageSource.addBasenames("classpath:com/pack/main/databinder/message") ;  return messageSource ;}

在包com/pack/main/databinder下建2個文件分別:message_zh_CN.properties和message_en_US.properties。文件內(nèi)容如下:E3k28資訊網(wǎng)——每日最新資訊28at.com

message_zh_CN.propertiesE3k28資訊網(wǎng)——每日最新資訊28at.com

#姓名必須填寫user.name.empty=/u59D3/u540D/u5FC5/u987B/u586B/u5199

message_en_US.propertiesE3k28資訊網(wǎng)——每日最新資訊28at.com

user.name.empty=name is required

調(diào)用E3k28資訊網(wǎng)——每日最新資訊28at.com

try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class)) {  // Locale.CHINA或者Locale.US  System.out.println(context.getMessage("user.name.empty", null, Locale.CHINA)) ;}

基于SpringBoot環(huán)境E3k28資訊網(wǎng)——每日最新資訊28at.com

spring:  messages:    basename: message

注意:你需要提供一個默認的message.properties文件E3k28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/i18n")public class I18NController {  @Resource  private ApplicationContext context ;    @GetMapping("/index")  public String index() {    return context.getMessage("user.name.empty", null, "默認消息", LocaleContextHolder.getLocale()) ;  }  }

Locale從當(dāng)前線程上下文中獲取。該Locale是在DispatcherServlet中初始化的。E3k28資訊網(wǎng)——每日最新資訊28at.com

在接口調(diào)用時,我們只需要指定Access-Language headerE3k28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片E3k28資訊網(wǎng)——每日最新資訊28at.com

5. 其它配置

Spring為我們提供了一個便捷的類,可以更方便的訪問消息源,項目中只需要注冊如下bean:E3k28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic MessageSourceAccessor messageSourceAccessor(MessageSource messageSource) {  MessageSourceAccessor accessor = new MessageSourceAccessor(messageSource) ;  return accessor ;}

訪問E3k28資訊網(wǎng)——每日最新資訊28at.com

@Resourceprivate MessageSourceAccessor accessor ;@GetMapping("/index")public String index() {  return accessor.getMessage("user.name.empty") ;}

帶占位符的消息訪問

在消息文件中定義如下:E3k28資訊網(wǎng)——每日最新資訊28at.com

#年齡的取值范圍從{0}~{1}user.age.range=/u5E74/u9F84/u7684/u53D6/u503C/u8303/u56F4/u4ECE{0}~{1}

訪問E3k28資訊網(wǎng)——每日最新資訊28at.com

@GetMapping("/index")public String index() {  return accessor.getMessage("user.age.range", new Object[] {1, 100}) ;}

注:Spring 還提供了一個ReloadableResourceBundleMessageSource 類。該變體支持相同的捆綁文件格式,但比基于 JDK 的標(biāo)準(zhǔn) ResourceBundleMessageSource 實現(xiàn)更靈活。特別是,它允許從任何 Spring 資源位置(而不僅僅是從類路徑)讀取文件,并支持捆綁屬性文件的熱重載(同時在兩者之間有效地緩存它們)。E3k28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-57390-0.htmlSpring國際化的應(yīng)用及原理詳解

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 為什么只有Unicode是不夠的,UTF-8如何解決編碼問題?

下一篇: 代碼出錯了,IDE竟然不報錯?太詭異了....

標(biāo)簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經(jīng)典設(shè)計

    8月3日消息,今天下午博主數(shù)碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發(fā)布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 俄羅斯:將審查iPhone等外國公司設(shè)備 保數(shù)據(jù)安全

    iPhone和特斯拉都屬于在各自領(lǐng)域領(lǐng)頭羊的品牌,推出的產(chǎn)品也也都是數(shù)一數(shù)二的,但對于一些國家而言,它們的產(chǎn)品可靠性和安全性還是在限制范圍內(nèi)。近日,俄羅斯聯(lián)邦通信、信息技術(shù)
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個小小的重要功能可以大大改善您網(wǎng)站的用戶體驗
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發(fā)仿造稿定設(shè)計的圖片編輯器到現(xiàn)在,不知不覺已過去一年時間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內(nèi)上線了“本地生活”入口,位置較深,位于首頁的“充值中心”內(nèi),目前主要售賣美食相關(guān)的
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 上海舉辦人工智能大會活動,建設(shè)人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發(fā)展盛典人工
Top 主站蜘蛛池模板: 四川省| 德兴市| 霍城县| 浦东新区| 广元市| 静乐县| 涞水县| 昌邑市| 台湾省| 陆川县| 济源市| 长垣县| 隆化县| 永靖县| 铅山县| 灵寿县| 富锦市| 峨眉山市| 阿拉善右旗| 开远市| 昌都县| 台南市| 石楼县| 河南省| 开封县| 华亭县| 横山县| 湖口县| 大城县| 新昌县| 怀安县| 长春市| 永兴县| 马尔康县| 毕节市| 沙河市| 蛟河市| 池州市| 阿城市| 嘉定区| 宜黄县|