【SpringBoot】国际化

SpringBoot进行国际化

  1. 编写国际化配置文件,抽取页面需要显示的国际化消息
    在这里插入图片描述

  2. 在全局配置文件中写我们配置的位置
    在这里插入图片描述
    原理就是

    SpringBoot自动配置好了管理国际化资源文件的组件
    MessageSourceAutoConfiguration会去全局配置文件中找spring.messages开头的 找到对应的国际化配置文件在这里插入图片描述
    其中etBasename()的默认返回值是messages,也就是我们的国际化资源文件的名字可以直接写成messages,这样就不用再在全局配置文件中配置我们自己写的名字了

  3. 去页面获取国际化的值

SpringBoot用的模板引擎是Thymeleaf, 通过#{}来获取国际化资源的值

在这里插入图片描述

properties中文乱码

properties中写中文后 会有乱码问题我们可以在Idea设置
在这里插入图片描述

SpringBoot 国际化的自动配置

在SpringBoot中的WebMvcAutoConfiguration类中的localeResolver方法就是关于国际化的自动配置
LocalResolver用来获取区域信息对象

localeResolver()方法:
属性有指定的固定的就用属性指定的
没有就 new AcceptHeaderLocaleResolver();在这里插入图片描述

AcceptHeaderLocaleResolver

从AcceptHeaderLocaleResolver类中的resolveLocale方法中,我们可以看出 这个解析器是通过请求头request中拿到区域信息

在这里插入图片描述
所以我们用这个解析器的效果就是, 我们的浏览器设置的指定语言是什么,然后发送请求时的请求头就会对应。
如下图浏览器设置的中文在最前面, Request Headers 的Accept-Language的最前面就是zh-CN ,解析器获取的就是 中文,就会显示对应中文的信息
在这里插入图片描述
在这里插入图片描述

自定义LocaleResolver

我们想实现点击链接实现国际化,就要自己实现LocaleResolver
效果就是 点下面的English 然后 参数就会带l=en_US ,通过我们的LocaleResolver 返回 英文的locale
在这里插入图片描述

  1. 第一步:实现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, Locale locale) {
    
        }
    }
    
  2. 第二步:将我们的LocaleResolver加入到容器中
    在MyMvcConfig中加入localeResolver()方法
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}

原理

WebMvcAutoConfiguration自动配置的LocaleResolver上面有@ConditionalOnMissingBean注解
也就是容器中没有LocaleResolver的时候才会配,如果有就不会配。
所以我们把自己实现的LocaleResolver加入到容器中后,系统就不会配了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值