转载:https://www.jianshu.com/p/e2eae08f3255
首先说国际化文件,在application.yml 中进行配置
spring:
messages:
basename: i18n.login # 国际化文件夹路径
encoding: UTF-8 # 编码格式
然后在resource目录下设置资源文件, 默认文件是login.properties
当你选择resource bundle能够对比各资源配置文件
接着配置一个拦截器
默认解析器:LocaleResolver
用于设置当前会话的默认的国际化语言。
默认拦截器:LocaleChangeInterceptor
指定切换国际化语言的参数名。例如?lang=zh_CN
表示读取国际化文件login_zh_CN.properties
。
/** * 配置国际化语言 */ @Configuration public class LocaleConfig { /** * 默认解析器 其中locale表示默认语言 */ @Bean public LocaleResolver localeResolver() { SessionLocaleResolver localeResolver = new SessionLocaleResolver(); localeResolver.setDefaultLocale(Locale.US); return localeResolver; } /** * 默认拦截器 其中lang表示切换语言的参数名 * 在spring boot2.0 之后 通过继承WebMvcConfigurer类 就可以完成拦截 * 在这里他直接返回了一个覆写了addInterceptors方法的WebMvcConfigurer匿名对象 * 以十分简洁的方式达成了他的目的 */ @Bean public WebMvcConfigurer localeInterceptor() { return new WebMvcConfigurer() { @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor(); localeInterceptor.setParamName("lang"); registry.addInterceptor(localeInterceptor); } }; } }
使用的模板引擎是Thymeleaf,在页面中需通过 th:xx="#{xxx.xxx}" 获取对应的国际化翻译值
切换国际化语通过在请求中附上拦截器中配置的参数lang即可
比如 “ http://127.0.0.1:8080?lang=en_US ” ?
不过一般都是在页面加个按钮吧...
<a href="?lang=zh_CN">简体中文</a> <a href="?lang=en_US">English(US)</a><br>