本文主要實現的功能:
- 從文件夾中直接加載多個國際化文件
- 后台設置前端頁面顯示國際化信息的文件
實現
國際化項目初始化,簡單看下項目的目錄和文件
在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