dtcms插件 webstorm汉化包 Filter vue组件 Vue全家桶 acm list jpa terminal 抖音 datatables bitmap db2 vue网站 ajax的get请求 jquery获取元素宽度 hadoop源码 bootstrap时间轴 matlab根号怎么打出来 ipex接口 grep不是内部命令 oracle限制查询条数 git登陆命令 mysql或者条件 math保留两位小数 mysql重启 kubernetes实战 python类与对象 java在线教程 java中正则表达式 java的运行环境 java正则匹配数字 java日期转时间戳 linuxls命令 广告代码 allowoverride atq microkms ip地址转换器 php正则匹配
当前位置: 首页 > 学习教程  > 编程语言

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

2020/11/24 10:17:20 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

spingboot的国际化支持已经非常的简化了,经过简单配置就可以使用,肥肠的方便 建立配置文件 在resources目录下建一个i18n文件夹,并按照如图所示新建3个配置文件(一般情况下支持 汉-英 双语就足够了): mess…

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

建立配置文件

在这里插入图片描述

  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
在这里插入图片描述
所以改成如下所以就可以了:

在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_400240.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?