1. 程式人生 > >Spring Boot國際化支援

Spring Boot國際化支援

本章將講解如何在Spring Boot和Thymeleaf中做頁面模板國際化的支援,根據系統語言環境或者session中的語言來自動讀取不同環境中的文字。

國際化自動配置

Spring Boot中已經對國際化這一塊做了自動配置。

國際化自動配置類:

org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration

檢視自動配置原始碼有以下主要幾個引數:

private String basename = "messages";

private Charset encoding = Charset.forName("UTF-8"
); private int cacheSeconds = -1; private boolean fallbackToSystemLocale = true;

basename:預設的掃描的國際化檔名為messages,即在resources建立messages_xx.properties檔案,可以通過逗號指定多個,如果不指定包名預設從classpath下尋找。

encoding:預設的編碼為UTF-8。

cacheSeconds:載入國際化檔案的快取時間,單位為秒,預設為永久快取。

fallbackToSystemLocale:當找不到當前語言的資原始檔時,如果為true預設找當前系統的語言對應的資原始檔如messages_zh_CN.properties,如果為false即載入系統預設的如messages.properties檔案。

國際化實戰

1、國際化配置

spring:
    messages:
        fallbackToSystemLocale: false
        basename: i18n/common, i18n/login, i18n/index

2、在i18n目錄下建立以下幾個檔案

如index.properties,index_zh_CN.properties,index.properties作為找不到定義語言的資原始檔時的預設配置檔案。

建立對應的key/value,如:

index_zh_CN.properties

index.welcome=歡迎

index.properties

index.welcome=welcome

3、新增語言解析器,並設定預設語言為US英文

LocaleResolver介面有許多實現,如可以從session、cookie、Accept-Language header、或者一個固定的值來判斷當前的語言環境,下面是使用session來判斷。

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale(Locale.US);
    return sessionLocaleResolver;
}

4、新增切換語言過濾器

private LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("lang");
    return localeChangeInterceptor;
}

新增以上過濾器並註冊到spring mvc中

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

然後頁面通過訪問指定的url?lang=zh_CN進行切換。

5、通過#{}來讀取資原始檔

如Thymeleaf模板檔案中使用:

<label th:text="#{index.welcome}"></label>

預設會讀取英文的資原始檔並顯示:welcome

推薦閱讀

分享Java乾貨,高併發程式設計,熱門技術教程,微服務及分散式技術,架構設計,區塊鏈技術,人工智慧,大資料,Java面試題,以及前沿熱門資訊等。