1.生成各类文字properties文件
    image.png
    2.全局控制处理器

    1. package com.mochain.moline.common.interceptor;
    2. import com.mochain.moline.common.result.ResultVo;
    3. import com.mochain.moline.common.util.InternationalUtil;
    4. import org.springframework.core.MethodParameter;
    5. import org.springframework.http.MediaType;
    6. import org.springframework.http.server.ServerHttpRequest;
    7. import org.springframework.http.server.ServerHttpResponse;
    8. import org.springframework.web.bind.annotation.ControllerAdvice;
    9. import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
    10. import javax.annotation.Resource;
    11. /**
    12. * @author zhangning
    13. * @date 2020/07/09
    14. * 全局控制器处理
    15. */
    16. @ControllerAdvice
    17. public class ResponseBodyInterceptor implements ResponseBodyAdvice {
    18. @Resource
    19. private InternationalUtil internationalUtil;
    20. @Override
    21. public boolean supports(MethodParameter methodParameter, Class aClass) {
    22. return true;
    23. }
    24. @Override
    25. public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
    26. //控制器结果为字符串才进行处理
    27. if (body instanceof ResultVo){
    28. ResultVo resultVo = (ResultVo)body;
    29. String interNationalMsg = internationalUtil.getInterNationalMsg(resultVo.getMsg());
    30. resultVo.setMsg(interNationalMsg);
    31. return resultVo;
    32. }
    33. return body;
    34. }
    35. }

    3.国际化工具类

    package com.mochain.moline.common.util;
    
    import com.google.common.base.Charsets;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.CharSetUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    import javax.swing.text.StringContent;
    import java.nio.charset.Charset;
    import java.text.MessageFormat;
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    /**
     * 国际化工具类
     * @author zhangnign
     * @date 2020/07/09
     */
    @Component
    @Slf4j
    public class InternationalUtil {
        @Resource
        private HttpServletRequest request;
    
        @Value("${i18n.path}")
        private String i18nPath;
    
        private static final String ACCEPT_LANGUAGE ="Accept-Language";
        private static final String LANGUAGE_SEPARATOR ="-";
        /**
         * 获取国际化消息
         * @param key 国际化的key
         * @param args 被替换占位符的值
         * 1.带#号的不是key的字符串,直接过滤#号
         * 2.是key的字符串,有占位符的替换
         * 3.不是key的字符串,返回字符串本身
         *
         */
        public String getInterNationalMsg(String key, Object... args) {
            ResourceBundle rb;
            String requestHeader = request.getHeader(ACCEPT_LANGUAGE);
            //是key的字符串,有占位符的替换
            try {
                //如en-US,zh-CN
                if (StringUtils.isNotBlank(requestHeader) && requestHeader.contains(LANGUAGE_SEPARATOR)) {
                    rb = ResourceBundle.getBundle(i18nPath, new Locale(requestHeader.split(LANGUAGE_SEPARATOR)[0], requestHeader.split(LANGUAGE_SEPARATOR)[1]));
                } else {
                    rb = ResourceBundle.getBundle(i18nPath);
                }
                return rb.getString(key);
            } catch (Exception e) {
                log.error("国际化消息异常:",e);
                //不是key的字符串,返回字符串本身
                return key;
            }
        }
    }
    

    4.请求头处理
    image.png