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 配置拦截器
packagecom.tab343.myspringboot.internationalization; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.web.servlet.LocaleResolver; importorg.springframework.web.servlet.config.annotation.InterceptorRegistry; importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer; importorg.springframework.web.servlet.i18n.LocaleChangeInterceptor; importorg.springframework.web.servlet.i18n.SessionLocaleResolver; importjava.util.Locale; publicclassI18nConfigimplementsWebMvcConfigurer{ //两种方式区一中即可publicLocaleResolverlocaleResolver() { //(1)Cookie方式/* CookieLocaleResolver localeResolver = new CookieLocaleResolver();localeResolver.setCookieName("localeCookie");//设置默认区域localeResolver.setDefaultLocale(Locale.ENGLISH);localeResolver.setCookieMaxAge(3600);//设置cookie有效期.return localeResolver;*///(2)Session方式SessionLocaleResolverslr=newSessionLocaleResolver(); // 默认语言slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); returnslr; } publicLocaleChangeInterceptorlocaleChangeInterceptor() { LocaleChangeInterceptorlci=newLocaleChangeInterceptor(); // 参数名实现国际化效果lci.setParamName("lang"); returnlci; } publicvoidaddInterceptors(InterceptorRegistryregistry) { registry.addInterceptor(localeChangeInterceptor()); } }
1.4 编写国际化测试Controller
packagecom.tab343.myspringboot.internationalization; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.context.MessageSource; importorg.springframework.context.i18n.LocaleContextHolder; importorg.springframework.web.bind.annotation.GetMapping; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; importjava.util.Locale; /*** @Description : 国际化Controller*/"/i18n") (publicclassI18nController { privateMessageSourcemessageSource; "/hello") (publicStringhello(){ Localelocale=LocaleContextHolder.getLocale(); returnmessageSource.getMessage("i18n.user.name", null, locale); } }
这里通过MessageSource获取配置文件中key为"i18n.user.name"的值
1.5使用PostMan访问
(1)英文
(2)中文