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);
}