springboot国际化配置流程

1.配置国际化文件

在resource下面添加i18n文件夹,下面放置转换的文件后缀是有规则的,默认的messages.properties,英文:messages_en_US.properties,中文:messages_zh_CN.properties。

比如

2.告诉springboot这些文件的位置

@Configuration
public class I18nConfig {

    @Value(value = "${spring.messages.basename}")
    private String basename;
    @Value(value = "${spring.messages.encoding}")
    private String encoding;

    @Bean(name = "messageSource")
    public ResourceBundleMessageSource getMessageResource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename(basename);
        messageSource.setDefaultEncoding(encoding);
        return messageSource;
    }
}

两个配置放到yml里面

spring:
  messages:
    basename: i18n/messages
    encoding: UTF-8

3.封装MessageSource

这个类是官方获取国际化文件内容的类,现在封装一下。(1)getRequestMessage根据请求语言转换 (2)getLocalMessage根据本地时区转换语言

@Component
public class MessageSourceHandler {

    @Autowired
    private HttpServletRequest request;

    @Autowired
    private MessageSource messageSource;

    public String getRequestMessage(String messageKey) {
        String message = messageSource.getMessage(messageKey, null, RequestContextUtils.getLocale(request));
        return message;
    }

    public String getLocalMessage(String messageKey) {
        String message = messageSource.getMessage(messageKey, null, LocaleContextHolder.getLocale());
        return message;
    }
}

4.捕获异常类使用国际化

通过调用封装好的工具类,messageSourceUtil.getLocalMessage(String.valueOf(ex.getStatus()))通过错误码获取错误message,返回给前端。

    @ResponseBody
    @ExceptionHandler(value = FastBootException.class)
    public FastBootResult myErrorHandler(FastBootException ex) {
        LOGGER.error(ex.getMessage(), ex);
        FastBootResult response = new FastBootResult();
        response.setError(ex.getStatus(), null, messageSourceUtil.getLocalMessage(String.valueOf(ex.getStatus())));
        return response;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值