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