客戶端經過Accept-Language
控制國際化顯示。spring
一、springboot自帶國際化,不須要單獨引入依賴。springboot
二、在resource下新建 i18n/messages.properties
spa
三、在啓動配置文件增長如下內容code
# locale 國際化 spring.messages.basename=i18n/messages spring.messages.encoding=UTF-8 spring.messages.cache-duration=-1
# locale 國際化 spring: messages: basename: i18n/messages encoding: UTF-8 cache-duration: -1
四、在使用的類中引入 MessageResource
blog
@ControllerAdvice public class GlobalExceptionHandler { @Autowired private MessageSource messageSource; private String getLocaleMessage(HttpServletRequest request, String code, Object[] msgArg) { Locale locale = RequestContextUtils.getLocale(request); if(locale == null){ locale = Locale.US; } return messageSource.getMessage(code, msgArg, locale); } }
五、在靜態類中使用get
public static BaseResponse success(HttpServletRequest request, String requestId, Object object){ ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setCacheSeconds(-1); messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name()); messageSource.setBasenames("/i18n/messages"); Locale locale = RequestContextUtils.getLocale(request); String code = ErrorCode.SUCCESS; String message = messageSource.getMessage(code, null, locale); BaseResponse res = new BaseResponse(); res.setRequestId(requestId); res.setCode(code); res.setMessage(message); res.setData(object); return res; }
public static String message(String code, Object... args){ MessageSource messageSource = SpringUtils.getBean(MessageSource.class); return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); }