实现点按钮来转换网页的语言的功能
原理:
1.Locale(区域信息对象),这个对象决定了SpringMVC判断浏览器请求页面的语言
2.SpingMVC是通过LocaleResolver这个组件来获取Locale(区域信息对象)的。
3.在WebMvcAutoConfiguration自动配置类中可以看到localeResolver这个方法。
这个方法的代码逻辑大概就是根据配置文件获取配置后判断,如果配置用默认的就向容器返回默认的Locale解析器,如果没有指定用默认的就返回AcceptHeaderLocaleResolver这个Locale解析器。
4.在AcceptHeaderLocaleResolver这个解析器中有resolverLocale方法获取Locale,这个方法就是用request从请求头中获取Locale信息的然后返回Locale对象的。
思路:如果我们要用按钮请求来切换页面的语言,我们就需要在普通的请求信息中获取Locale信息,所以我们不能用默认的组件,因为默认的localeResolver组件是从浏览器发送的请求头中的获取Locale信息的。
操作:
第一步:
编写页面按钮发送值到服务器端
<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>
第二步:
编写新的LocaleResolver组件
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String l = httpServletRequest.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 httpServletRequest, HttpServletResponse httpServletResponse, @Nullable Locale locale) {
}
}
第三步:
在配置类上面把自己的组件放入到容器中
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
//这里是搞一个组件,把自己的localeResolver换上去,做出了中文和英文按钮
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
}