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