package com.autel.cloud.base.mc.common.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.Objects;
/**
* 国际化内容获取工具类
*
* @Author: X22020
* @Date: 2023/02/03/14:17
* @Description:
*/
@Slf4j
@Component
public class MessageSourceUtil {
private final static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MessageSourceUtil.class);
@Autowired
private MessageSource messageSource;
public String getMessage(String messageKey) {
try{
return messageSource.getMessage(messageKey, null, LocaleContextHolder.getLocale());
}catch(Exception e){
LOGGER.error("解析资源文件异常:{}", e.getMessage());
}
return "";
}
public String getMessage(String messageKey,Object[] params, String language) {
try{
Locale locale = new Locale(language);
if(params == null || params.length==0){
return getMessage(messageKey, language);
}
String pattern = messageSource.getMessage(messageKey, null, locale);
MessageFormat mf = new MessageFormat(pattern);
String content = mf.format(params);
return content;
}catch(Exception e){
LOGGER.error("解析资源文件异常:{}", e.getMessage());
}
return "";
}
/**
* @param code
* @param language
* @return
* @function 根据登录用户的语言和错误码读取配置文件并返回国际化配置信息
*/
public String getMessage(String code, String language) {
Locale locale = null;
try {
language = StringUtils.isBlank(language) ? "en-US" : language;
String[] lan = language.split("-");
if (lan.length > 1) {
locale = new Locale(lan[0], lan[1]);
} else {
locale = new Locale(lan[0]);
}
return messageSource.getMessage(code, null, locale);
} catch (Exception e) {
log.error("解析资源文件异常:{}", e.getMessage());
}
return "";
}
/**
* @return
* @function 获得登录用户的语言
*/
public String getLoginUserLanguage() {
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
String localeLanguage = request.getLocale().getLanguage();
String language = request.getHeader("accept-language");
log.info("========== the language in the request header, the localeLanguage:{}, language:{}", localeLanguage, language);
return language;
}
}
MessageSourceUtil
最新推荐文章于 2024-08-23 10:50:07 发布
该代码段展示了如何在Spring框架中使用MessageSource和相关工具类来实现国际化内容的获取。它包括获取消息、格式化参数、处理不同语言环境的功能,并提供了获取当前登录用户语言的方法。
摘要由CSDN通过智能技术生成