SpringBoot整合國際化I18n


本文主要實現的功能:

  • 從文件夾中直接加載多個國際化文件
  • 后台設置前端頁面顯示國際化信息的文件

實現

國際化項目初始化,簡單看下項目的目錄和文件

在resource下創建國際化文件

  • messages.properties
  • messages_en_US.properties
  • messages_zh_CN.properties

配置引用國際化文件

spring.messages.basename=messages

如果是多個源的話,用","相隔即可。

spring.messages.basename=messages,xxx,xxxx,xxxx

創建常量類

public class I18nConstant {

    /**
     * 一個例子
     */
    public static final String TEXT = "DeviceSummary.device.type.name";

}

對應分別在三個國際化(默認、中文、英文)中加入DeviceSummary.device.type.name對應轉換的語言

使用

  • 代碼中使用
@Autowired  
private MessageSource messageSource;  
  
String msg = messageSource.getMessage(I18nConstant.TEXT, null, locale);  
  • 獲取request的Locale
Locale locale1 = LocaleContextHolder.getLocale(); // 當前request
Locale locale2 = RequestContextUtils.getLocale(request); // 指定request
locale.getLanguage() //獲取當前語言
  • 默認根據瀏覽器的語言設置來決定顯示語言。一般應用多采用會話級別的語言設置SessionLocaleResolver。
@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale(Locale.CHINA);
    return sessionLocaleResolver;
}
  • 切換語言
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    lci.setParamName("lang");
    return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

URL中通過參數lang就可以切換到不同語言。比如:http://localhost:8080/hello.html?lang=zh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM