springboot国际化支持以及默认语言不生效问题解决

spingboot的国际化支持已经非常的简化了,经过简单配置就可以使用,肥肠的方便

在application配置文件中进行路径配置
#国际化文件配置
spring.messages.basename=i18n/messages
建立配置文件

在这里插入图片描述

  1. 在resources目录下建一个i18n文件夹,并按照如图所示新建3个配置文件(一般情况下支持 汉-英 双语就足够了):
  • messages.properties:是默认的配置文件,里面可以不写,但是文件必须存在,否则不能正常使用
  • messages_en_US.properties:英文的配置文件
  • messages_zh_CN.properties:中文的配置文件
  1. 然后在配置文件中填写对应的提示信息

在这里插入图片描述

配置默认解析器 LocaleResolver ,以及 默认拦截器LocaleChangeInterceptor 用来切换语言

新建配置文件,并添加如下配置

@Configuration
public class LocaleConfig {

    /**
     *  国际化默认解析器,默认设置为汉语
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        return localeResolver;
    }

    /**
     * 默认拦截器 用来设置切换预言的参数为 lang 
     */
    @Bean
    public WebMvcConfigurer localeInterceptor() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
                localeInterceptor.setParamName("lang");
                registry.addInterceptor(localeInterceptor);
            }
        };
    }
}

添加国际化工具类
/**
 * 国际化工具类
 */
@Component
public class MessageUtils {

    private static MessageSource messageSource;

    public MessageUtils(MessageSource messageSource) {
        MessageUtils.messageSource = messageSource;
    }

    public static String get(String msgKey) {
        try {
            return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
        } catch (Exception e) {
            e.printStackTrace();
            return msgKey;
        }
    }
}
使用示例

异常信息提示,需要配置默认异常控制器 HandlerExceptionResolver,在自定义的异常信息中根据配置文件中的key值来取对应语言的提示信息
在这里插入图片描述

在这里插入图片描述
其中的异常key:student.learActive.missing就是配置文件messages_zh_CN.properties中的key

在这里插入图片描述
如果没有配置默认异常处理器的话,直接在抛出异常的地方调用MessageUtils.get(“key”)就可以了

在这里插入图片描述
同样的实体类中的参数校验异常,通过统一异常处理器进行处理

在这里插入图片描述

在这里插入图片描述

遇到的默认语言不生效问题

默认配置的汉语,但是测试发现并没有生效,经排查发现,原来是默认语言解析器使用了Locale.CHINESE

在这里插入图片描述
而他对应的是中文语言,并没有指定国家

在这里插入图片描述
但我的配置文件名是:messages_zh_CN.properties
在这里插入图片描述
所以改成如下所以就可以了:

在这里插入图片描述

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值