中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站開發(fā)流程書籍上海百網(wǎng)優(yōu)seo優(yōu)化公司

網(wǎng)站開發(fā)流程書籍,上海百網(wǎng)優(yōu)seo優(yōu)化公司,十堰h(yuǎn)5網(wǎng)站建設(shè),體驗(yàn)做愛網(wǎng)站1. 簡(jiǎn)介 Spring國(guó)際化(Spring Internationalization,簡(jiǎn)稱i18n)是Spring框架提供的一種機(jī)制,用于支持多語言的應(yīng)用程序。它使得開發(fā)者能夠輕松地在應(yīng)用程序中實(shí)現(xiàn)不同語言的支持,從而滿足全球化的需求。通過Spring國(guó)際…

1. 簡(jiǎn)介

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

2. API介紹

ApplicationContext 接口擴(kuò)展了一個(gè)名為 MessageSource 的接口,因此提供了國(guó)際化("i18n")功能。Spring 還提供了 HierarchicalMessageSource 接口,該接口可以分層解析消息。這些接口共同構(gòu)成了 Spring 實(shí)現(xiàn)消息解析的基礎(chǔ)。這些接口定義的方法包括:

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

用于從 MessageSource 獲取消息的基本方法。如果在指定的本地沒有找到消息,則使用默認(rèn)消息。通過標(biāo)準(zhǔn)庫(kù)提供的 MessageFormat 功能,傳入的任何參數(shù)都會(huì)成為替換值。

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

與前一種方法基本相同,但有一點(diǎn)不同:不能指定默認(rèn)信息。如果找不到信息,就會(huì)拋出 NoSuchMessageException 異常。

  • String getMessage(MessageSourceResolvable resolvable, Locale locale)

前面方法中使用的所有屬性也都封裝在一個(gè)名為 MessageSourceResolvable 的類中,你可以使用該方法。

3. 國(guó)際化初始化

Spring容器ApplicationContext初始化過程中,會(huì)從容器中查找MessageSource類型的Bean。并且該Bean的名稱必須是 messageSource。如果找到了這樣一個(gè) Bean,對(duì)前面方法的所有調(diào)用都會(huì)委托給消息源。如果沒有找到消息源,ApplicationContext 會(huì)嘗試查找包含同名Bean的父類。如果找到了,它就會(huì)使用該 bean 作為消息源。如果 ApplicationContext 無法找到任何消息源,則會(huì)實(shí)例化一個(gè)空的 DelegatingMessageSource,以便能夠接受對(duì)上述方法的調(diào)用。


public abstract class AbstractApplicationContext {public void refresh() {// 初始化消息源initMessageSource();}/*** 初始化消息源。* 如果當(dāng)前上下文中沒有定義消息源,則使用父級(jí)消息源。*/
protected void initMessageSource() {ConfigurableListableBeanFactory beanFactory = getBeanFactory();if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);// 使消息源知道父級(jí)消息源。if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource hms &&hms.getParentMessageSource() == null) {// 只有當(dāng)父級(jí)消息源尚未注冊(cè)時(shí),才將父上下文設(shè)置為父級(jí)消息源。hms.setParentMessageSource(getInternalParentMessageSource());}if (logger.isTraceEnabled()) {logger.trace("使用的消息源為 [" + this.messageSource + "]");}}else {// 使用空消息源以能夠接受getMessage調(diào)用。DelegatingMessageSource dms = new DelegatingMessageSource();dms.setParentMessageSource(getInternalParentMessageSource());this.messageSource = dms;beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);if (logger.isTraceEnabled()) {logger.trace("沒有'" + MESSAGE_SOURCE_BEAN_NAME + "' bean,使用 [" + this.messageSource + "]");}}
}
}


4. 國(guó)際化配置

基于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 ;
}

在包c(diǎn)om/pack/main/databinder下建2個(gè)文件分別:message_zh_CN.properties和message_en_US.properties。文件內(nèi)容如下:

message_zh_CN.properties

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

message_en_US.properties

user.name.empty=name is required

調(diào)用


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

基于SpringBoot環(huán)境

spring:messages:basename: message

注意:你需要提供一個(gè)默認(rèn)的message.properties文件


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

Locale從當(dāng)前線程上下文中獲取。該Locale是在DispatcherServlet中初始化的。

在接口調(diào)用時(shí),我們只需要指定Access-Language header

5. 其它配置

Spring為我們提供了一個(gè)便捷的類,可以更方便的訪問消息源,項(xiàng)目中只需要注冊(cè)如下bean:

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

訪問

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

帶占位符的消息訪問

在消息文件中定義如下:


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

訪問

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

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

http://www.risenshineclean.com/news/39213.html

相關(guān)文章:

  • 武漢南亞建設(shè)監(jiān)理有限公司網(wǎng)站seo優(yōu)化的內(nèi)容有哪些
  • 蘭州做高端網(wǎng)站禁止搜索引擎收錄的方法
  • 網(wǎng)站怎么做dwcs6自己做網(wǎng)站的軟件
  • 網(wǎng)站怎樣設(shè)計(jì)網(wǎng)址深圳英文網(wǎng)站推廣
  • 杭州富陽(yáng)網(wǎng)站建設(shè)公司現(xiàn)在如何進(jìn)行網(wǎng)上推廣
  • 昆明網(wǎng)站搭建公司百度客服24小時(shí)電話人工服務(wù)
  • 郴州網(wǎng)上報(bào)名小學(xué)系統(tǒng)登錄某一網(wǎng)站seo策劃方案
  • ps網(wǎng)站輪播圖怎么做app軟件推廣平臺(tái)
  • php網(wǎng)站系統(tǒng)培訓(xùn)機(jī)構(gòu)最新消息
  • 西寧做網(wǎng)站是什么網(wǎng)店如何推廣
  • 智能建站平臺(tái)z微信如何投放廣告
  • 個(gè)人網(wǎng)站開發(fā)總結(jié)文檔百度推廣最近怎么了
  • 網(wǎng)站如何發(fā)布和推廣百度推廣效果不好怎么辦
  • 專門做店面裝修設(shè)計(jì)的網(wǎng)站關(guān)鍵詞優(yōu)化最好的方法
  • 網(wǎng)站怎么做搜索欄seo怎么學(xué)
  • 做網(wǎng)站一般哪里找長(zhǎng)春網(wǎng)站建設(shè)解決方案
  • 微商怎么做網(wǎng)站鹽城seo培訓(xùn)
  • 網(wǎng)站建設(shè)的發(fā)票移動(dòng)排名提升軟件
  • 中國(guó)建設(shè)教育協(xié)會(huì)官方網(wǎng)站查百度搜索指數(shù)入口
  • 做個(gè)商城網(wǎng)站要多少錢農(nóng)產(chǎn)品營(yíng)銷方案
  • 中國(guó)企業(yè)500強(qiáng)厲害嗎電腦優(yōu)化軟件推薦
  • 免費(fèi)名字設(shè)計(jì)logo網(wǎng)站查網(wǎng)站
  • 做淘寶客網(wǎng)站要備案嗎營(yíng)銷網(wǎng)站建設(shè)都是專業(yè)技術(shù)人員
  • 個(gè)人網(wǎng)站建設(shè)策劃書百度推廣后臺(tái)
  • 家裝業(yè)務(wù)員怎么做網(wǎng)站營(yíng)銷網(wǎng)絡(luò)廣告有哪些形式
  • 嘉興營(yíng)銷型網(wǎng)站上海網(wǎng)絡(luò)推廣優(yōu)化公司
  • 高端網(wǎng)站開發(fā)建設(shè)網(wǎng)站媒體推廣
  • 做數(shù)據(jù)網(wǎng)站手機(jī)百度如何發(fā)布作品
  • 怎么用自己電腦做網(wǎng)站服務(wù)器嗎企業(yè)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)論文
  • avada做網(wǎng)站seo公司北京