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;
    }

猜你喜欢

转载自blog.csdn.net/Mint6/article/details/103658950