1. 程式人生 > 其它 >springboot配置國際化支援多語言

springboot配置國際化支援多語言

1.專案目錄

2.yml配置

spring:
  messages: # 語言環境
    basename: language/messages # 語言資原始檔路徑
    encoding: UTF-8

3.自己封裝的工具類

3.1InitializerBean

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.2SpringBean

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.3InternationalConfig

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.4Language

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.5ReMessage

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.6messages.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);
}