国际化切换
根据浏览器,语言设置的信息
自动的切换国际化支持
也可以根据用户选择
来切换国际化支持
Locale,表示区域信息对象
LocaleResolver,用来获取区域信息对象
自动配置
WebMvcAutoConfiguration
localeResolver
如果,配置了
就用固定的
如果,没有配置
就使用AcceptHeaderLocaleResolver
AcceptHeaderLocaleResolver
resolveLocale
解析区域信息
解析方式,从request请求头中,获取区域信息
默认,就是根据请求头
带来的区域信息,获取Locale进行国际化
点击连接,实现切换国际化
可以更换掉,区域信息解析器
使用自定义的区域信息解析器
不使用默认的
实现方式
可以在连接上携带,区域信息
<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button>
<p class="mt-5 mb-3 text-muted">© 2017-2018</p>
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>
区域信息解析器
MyLocaleResolver
判断参数l的值,是否为空
如果,为空
使用系统默认的区域信息解析器
如果,不为空
获取区域信息,语言代码+国家代码
使用自定义的区域信息解析器
package com.atguigu.springboot.component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
/**
* 可以在连接上携带区域信息
*/
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l = request.getParameter("l");
Locale locale = Locale.getDefault();
if(!StringUtils.isEmpty(l)){
String[] split = l.split("_");
locale = new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
添加到容器
默认的解析器
根据@ConditionalOnMissingBean
检查已经存在区域信息解析器
就不再创建,默认的解析器
//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
//@EnableWebMvc 全面接管SpringMVC
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}