SpringBoot 中 实现国际化

本文介绍了SpringBoot中实现国际化的两种方式:默认的LocaleResolver和自定义LocaleResolver。默认方式只需配置国际化资源文件和指定位置,而自定义方式则通过创建地域解析器并结合配置文件实现不同区域的语言切换。通过请求头的属性,SpringBoot能够返回相应的区域对象,从而展示对应的语言内容。
摘要由CSDN通过智能技术生成

SpringBoot 中 localeResolver 的实现原理

WebMvcAutoConfiguration 类中

1、WebMvcAutoConfiguration 是SpringBoot中的 Web方面的自动配置类。
2、当用户没有创建自己的 localeResolver 时,这个配置方法就会生效,从而产生一个localeResolver。(配置自己的localeResolver时,Bean名必须为localeResolver)。
3、spring.web.locale-resolverspring.mvc.locale-resolver 的配置属性都有两个值可供选择。(fixedaccept_header)。
4、选择属性值 fixed,表示 Locale 区域对象是 固定的。
5、当属性值为fixed,应该搭配spring.web.localespring.mvc.locale 这两个配置属性一起使用,给出固定的Locale 区域对象。
6、假如属性值为fixed,又没有搭配上面两个属性之一,则因为上面两个属性没有默认值,则Locale 区域对象将会使用运行主机的默认语言环境生成一个Locale 区域对象。
6、从以下的方法的执行流程可以看出,spring.web.locale-resolver 优先级比 spring.mvc.locale-resolver 高一些。
7、因为spring.web.locale-resolverspring.mvc.locale-resolver 它们的 默认值 都为 accept_header,所以,只要不更改配置,默认就不是固定的Locale 区域对象。就会继续执行最下面的部分。

8、此时spring.web.localespring.mvc.locale 这两个配置属性,假如存在,就会成为AcceptHeaderLocaleResolver 的默认的Locale 区域对象。 并在请求响应的请求头中没有Accept-Language这个属性时,成为AcceptHeaderLocaleResolver返回的Locale 区域对象。

9、AcceptHeaderLocaleResolver 会根据请求响应的请求头中的Accept-Language属性,来返回特定的Locale 区域对象。

 @Bean
        @ConditionalOnMissingBean(
            name = {
   "localeResolver"}            //假如SpringBoot中没有这个 localeResolver Bean,就加载这个自动配置Bean
        )
        public LocaleResolver localeResolver() {
   
        //假如配置文件中有 spring.web.locale-resolver=fixed,就表示是固定的 Locale 配置
        //(这个属性默认值为 ACCEPT_HEADER,WebProperties 类中)
            if (this.webProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebProperties.LocaleResolver.FIXED) {
     
                return new FixedLocaleResolver(this.webProperties.getLocale());
         //假如配置文件中有 spring.mvc.locale-resolver=fixed,就表示是固定的 Locale 配置
        //(这个属性默认值为 ACCEPT_HEADER,WebMvcProperties 类中)        
            } else if (this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties.LocaleResolver.FIXED) {
   
                return new FixedLocaleResolver(this.mvcProperties.getLocale());
            } else {
   
                //使用请求对象的请求头中的Accept-Language属性来生成Locale 
                AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
                Locale locale = this.webProperties.getLocale() != null ? this.webProperties.getLocale() : this.mvcProperties.getLocale();
                localeResolver.s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值