springboot配置国际化支持多语言

1.项目目录

 

 

2.yml配置

spring:
  messages: # 语言环境
    basename: language/messages # 语言资源文件路径
    encoding: UTF-8

 

3.自己封装的工具类

3.1 InitializerBean 

package com.hc.common.config.language;

import org.springframework.context.MessageSource;

/**
 * 静态获取Bean实体
 *
 * @author Metliet.Runcle
 * @version 1.0
 * @date 2020/9/25 16:46
 */
public class InitializerBean {

    public static MessageSource messageSource;

    static {
        messageSource = SpringBean.getBean(MessageSource.class);
    }
}

 

 

3.2 SpringBean 

package com.hc.common.config.language;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import javax.validation.constraints.NotNull;

/**
 * 自动注入Bean容器
 *
 * @author Metliet.Runcle
 * @version 1.0
 * @date 2020/9/24 14:55
 */
@Component
public class SpringBean implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(@NotNull ApplicationContext applicationContext) throws BeansException {
        if (SpringBean.applicationContext == null) {
            SpringBean.applicationContext = applicationContext;
        }
    }

    /**
     * 获取applicationContext
     *
     * @return ApplicationContext
     */
    private static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取Bean
     *
     * @param name 名称
     * @return 对象
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通过class获取Bean
     *
     * @param clazz 对象
     * @return 对象
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name,以及Clazz返回指定的Bean
     *
     * @param name  名称
     * @param clazz 对象
     * @return 对象
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}

 

3.3  InternationalConfig 

 

package com.hc.common.config.language;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

/**
 * 国际化语言配置
 *
 * @author Metliet.Runcle
 * @version 1.0
 * @date 2020/11/24 16:58
 */
@Configuration
public class InternationalConfig {

    /**
     * 会话语言解析器
     */
    @Bean
    public SessionLocaleResolver localeResolver() {
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.US);
        return sessionLocaleResolver;
    }


}

 

3.4  Language 

 

package com.hc.common.config.language;

import org.apache.commons.lang3.StringUtils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Locale;

/**
 * 消息源处理程序
 *
 * @author Metliet.Runcle
 * @version 1.0
 * @date 2020/11/24 16:58
 */
public class Language {

    public final static String LANG_ZH_CN = "ZH_CN";

    public final static String LANG_EN_US = "EN_US";

    /**
     * Language:Internationalized language
     */
    private static MessageSource messageSource = InitializerBean.messageSource;

    /**
     * 获取国际化消息数据
     */
    public static String source(ReMessage source) {
        String en = "en", zh = "zh";
        Locale locale = LocaleContextHolder.getLocale();
        String language = locale.getLanguage();
        if (!en.equalsIgnoreCase(language) && !zh.equalsIgnoreCase(language)) {
            locale = Locale.US;
        }
        return messageSource.getMessage(source.name(), null, locale);
    }


   

 

3.5 ReMessage 

package com.hc.common.config.language;

/**
 * 系统语言
 *
 * @author Metliet.Runcle
 * @version 1.0
 * @date 2021/1/9 17:01
 */
public enum ReMessage {

    SERVICE_COMMON_SERVICE_1, //邮箱验证
    SERVICE_COMMON_SERVICE_2, //您的邮箱验证码为:
   

}

3.6 messages.properties

 中英文同理

 

 

3.7 使用方法

@GetMapping("/test")
    @ApiOperation("测试")
    public CommonResult getTest() {
        Map<String, Object> map = new HashMap<>();
        map.put("tile", "测试");
        map.put("name", Language.source(ReMessage.SERVICE_COMMON_SERVICE_1));
return CommonResult.ok(map);
}

 

posted @ 2021-07-10 09:59  峡谷小短腿  阅读(1329)  评论(0编辑  收藏  举报