当前位置: 移动技术网 > IT编程>开发语言>Java > Spring boot自定义国际化不生效

Spring boot自定义国际化不生效

2020年07月27日  | 移动技术网IT编程  | 我要评论

Spring boot自定义国际化不生效

今天在学自定义国际化的时候,代码始终不生效,最后发现自己名称写的不一致o(╥﹏╥)o
在这里插入图片描述
一个地方写的cn,一个地方写的en,服了自己了

除此之外,还了解到个可能不生效的原因

WebMvcAutoConfiguration里边自动配置的localeResolver
1、默认是加载系统的
2、自己定义了localeResolver加载自己定义的
源码:

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
	if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
		return new FixedLocaleResolver(this.mvcProperties.getLocale());
	}
	AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
	localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
	return localeResolver;
}

所以当我们写自己写的LocaleResolver不生效的原因只能是@bean没有注册成功

  1. 了解到方法名必须是localeResolver()
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer{
        @Bean
        public LocaleResolver localeResolver() {
            return new MyLocaleResolver();
        }
    }
    
  2. 或者bean里面必须是localeResolver
    @Configuration
    	public class MyMvcConfig implements WebMvcConfigurer{
    	    @Bean("localeResolver")
    	    public LocaleResolver locale() {
    	        return new MyLocaleResolver();
    	    }
    	}
    

原因好像是源码里面固定的,具体是参考别的大佬的解释的

详情见:https://www.cnblogs.com/ql123456/p/12173219.html

在《Spring Boot 2 Recipes: A Problem-Solution Approach》书中提到这样一句话:

You can also define a locale resolver by registering a bean of type LocaleResolver in the web application context.
You must set the bean name of the locale resolver to localeResolver so it can be autodetected

上述英语意思为:在自定义localeResolver时方法名必须一致

注意:
写的时候一定要小心,别写错

本文地址:https://blog.csdn.net/weixin_44635198/article/details/107581138

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网