Spring boot国际化切换

国际化切换

根据浏览器,语言设置的信息
自动的切换国际化支持

也可以根据用户选择
来切换国际化支持

Locale,表示区域信息对象
LocaleResolver,用来获取区域信息对象

自动配置
WebMvcAutoConfiguration
localeResolver
Spring boot国际化切换_第1张图片
如果,配置了
就用固定的

如果,没有配置
就使用AcceptHeaderLocaleResolver
Spring boot国际化切换_第2张图片
AcceptHeaderLocaleResolver

resolveLocale
解析区域信息

解析方式,从request请求头中,获取区域信息
默认,就是根据请求头

带来的区域信息,获取Locale进行国际化
Spring boot国际化切换_第3张图片
点击连接,实现切换国际化
可以更换掉,区域信息解析器

使用自定义的区域信息解析器
不使用默认的

实现方式
可以在连接上携带,区域信息

<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign inbutton>
<p class="mt-5 mb-3 text-muted">© 2017-2018p>
<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')}">Englisha>

Spring boot国际化切换_第4张图片
区域信息解析器
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();
    }

}

你可能感兴趣的:(————Spring,Boot)