SpringBoot 国际化i8n

转载: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> &nbsp;&nbsp;
<a href="?lang=en_US">English(US)</a><br>

猜你喜欢

转载自www.cnblogs.com/abefor/p/11668764.html