SpringBoot下使用MessageSource实现国际化配置
1.1在ResourceBundle下创建国际化配置文件
(1)在【resources】目录下创建【i18n】目录(名称随意起),在目录上【右键】-->【new】-->【Resource Bundle】-->【起名message】(起名随意)。
(2)在message下创建国际化配置文件
messages.properties (默认的语言配置文件,当找不到其他语言的配置的时候,使用该文件进行展示)。
i18n.user.name=孙大圣
messages_zh_CN.properties(中文)
i18n.user.name=孙行者
messages_en_US.properties(英文)
i18n.user.name=SevenSun
1.2 yml配置文件中配置刚才创建的国际化配置文件
spring: messages: # 国际化资源文件路径 eg:"messages,config.i18n.messages" basename: i18n/messages encoding: UTF-8
*basename: i18n/messages //这里即为配置文件路径,如果创建时候改名了,这里记得要一致!!
1.3 配置拦截器
package com.tab343.myspringboot.internationalization; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import java.util.Locale; public class I18nConfig implements WebMvcConfigurer { //两种方式区一中即可 public LocaleResolver localeResolver() { //(1)Cookie方式 /* CookieLocaleResolver localeResolver = new CookieLocaleResolver(); localeResolver.setCookieName("localeCookie"); //设置默认区域 localeResolver.setDefaultLocale(Locale.ENGLISH); localeResolver.setCookieMaxAge(3600);//设置cookie有效期. return localeResolver;*/ //(2)Session方式 SessionLocaleResolver slr = new SessionLocaleResolver(); // 默认语言 slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); return slr; } public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); // 参数名实现国际化效果 lci.setParamName("lang"); return lci; } public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); } }
1.4 编写国际化测试Controller
package com.tab343.myspringboot.internationalization; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Locale; /** * @Description : 国际化Controller */ "/i18n") (public class I18nController { private MessageSource messageSource; "/hello") ( public String hello(){ Locale locale = LocaleContextHolder.getLocale(); return messageSource.getMessage("i18n.user.name", null, locale); } }
这里通过MessageSource获取配置文件中key为"i18n.user.name"的值
1.5使用PostMan访问
(1)英文
(2)中文