package com.whyc.util; import com.whyc.config.I18nLocaleResolver; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.nio.charset.StandardCharsets; import java.util.Locale; @Component public class MessageUtils { /*private static MessageSource messageSource; public MessageUtils(MessageSource messageSource) { MessageUtils.messageSource = messageSource; } public static String getMessage(String key) { try { return messageSource.getMessage( key, null, LocaleContextHolder.getLocale()); } catch (Exception e) { return key; } }*/ @Value("${spring.messages.basename}") private String basename; private final I18nLocaleResolver resolver; private static I18nLocaleResolver customLocaleResolver; private static String path; static{ if(customLocaleResolver == null) { customLocaleResolver = new I18nLocaleResolver(); path = "i18n/message"; } } public MessageUtils(I18nLocaleResolver resolver) { this.resolver = resolver; } @PostConstruct public void init() { setBasename(basename); setCustomLocaleResolver(resolver); } /** * 获取 国际化后内容信息 * * @param code 国际化key * @return 国际化后内容信息 */ public static String getMessage(String code) { Locale locale = customLocaleResolver.getLocal(); return getMessage(code, null, code, locale); } /** * 获取 国际化后内容信息 * * @param code 国际化key * @return 国际化后内容信息 */ public static String getMessageSocket(String code, String lang) { Locale locale = Locale.SIMPLIFIED_CHINESE; if (lang != null) { if ((lang.contains("zh"))) { locale = Locale.SIMPLIFIED_CHINESE; } else { //不是中文,则采用en_US locale = Locale.US; } } return getMessage(code, null, code, locale); } public static String getMessage(String code, Object[] args, String defaultMessage, Locale locale) { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setDefaultEncoding(StandardCharsets.UTF_8.toString()); //判断locale,如果不是zh或en,则使用英文 String language = locale.getLanguage(); if((language.equals("zh"))){ locale = Locale.SIMPLIFIED_CHINESE; }else{ //不是中文,则采用en_US locale = Locale.US; } messageSource.setBasename(path); String content; try { content = messageSource.getMessage(code, args, locale); } catch (Exception e) { content = defaultMessage; } return content; } public static void setBasename(String basename) { MessageUtils.path = basename; } public static void setCustomLocaleResolver(I18nLocaleResolver resolver) { MessageUtils.customLocaleResolver = resolver; } }