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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章