springboot配置國際化支援多語言
阿新 • • 發佈:2021-07-10
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);
}