MessageSourceUtil

该代码段展示了如何在Spring框架中使用MessageSource和相关工具类来实现国际化内容的获取。它包括获取消息、格式化参数、处理不同语言环境的功能,并提供了获取当前登录用户语言的方法。
摘要由CSDN通过智能技术生成
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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值