本文主要讲解国际化的实现 基于spring boot的2.1.7版本
步骤:
1)、编写国际化配置文件,抽取页面需要显示的国际化消息
2),SpringBoot自动配置好了国际化资源文件,其默认的配置文件路径是messages.properties
;配置文件放在此路径下直接生效;但一般情况下会更改默认的配置文件路径。例如本例中的配置文件路径。
所以需要在配置文件中进行修改:
spring.messages.basename=i18n.login
3)去页面获取国际化值:
使用thymeleaf语法获取
4)国际化原理
国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
if (this.mvcProperties
.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
return new FixedLocaleResolver(this.mvcProperties.getLocale());
}
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
return localeResolver;
}
**默认的就是根据请求头带来的区域信息获取Locale进行国际化**
5)根据区域化信息进行国际化的切换
<a class="btn btn-sm" th:href="@{/(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/(l='en_US')}">English</a>
创建MyLocaleRes
类实现LocaleResolver
接口进行国际化判断
public class MyLocaleRes implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String sum = request.getParameter("l");
Locale locale = Locale.getDefault();
if (!StringUtils.isEmpty(sum)){
String[] spilt = sum.split("_");
locale = new Locale(spilt[0],spilt[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
6)将MyLocaleRes 组件加入IOC
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleRes();
}