springBoot国际化多语言开发配置,中文OR英文支持一键切换

springBoot有许多的自动化配置,其中就包括多语言的autoConfiguration,打开org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration可查看相关的配置。
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第1张图片
关于多语言的配置文件,系统默认为项目根路径下的message.properties,当然,这个配置可以在yaml中修改,比如下面的配置信息就将国际化多语言的配置文件地址指向根路径下的i18n目录下的message文件。

spring:
  messages:
    basename: i18n.message

springBoot关于webMvc有关于域组件的默认配置,如果我们想要自定义页面语言信息的显示,就需要自定义一个LocaleResolver并加入到容器中才行。
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第2张图片下面通过简单的步骤来实现一个登陆也的多语言登录页。

  1. 创建多语言配置文件
    在resources目录下创建i18n目录,并新建message.properties,message_en_US.properties,message_zh_CN.properties。在创建过程中,idea会识别到这是国际化多语言配置文件,显示Resource Bundle。我们打开其中一个文件,点击页面左下角的Resource Bundle,切换到多语言文件的配置页面。
    springBoot国际化多语言开发配置,中文OR英文支持一键切换_第3张图片
    点击左上角的加号可添加属性信息,在右侧,可以同时添加多个语言的信息,并且分别保存到对应的文件,非常方便。
    springBoot国际化多语言开发配置,中文OR英文支持一键切换_第4张图片
  2. 配置message文件的位置
    由于我们没有使用默认的多语言文件路径,需要在配置文件中设置message的basename为对应的自定义路径。
    springBoot国际化多语言开发配置,中文OR英文支持一键切换_第5张图片
  3. 使用#{ }表达式替换页面的字面量
    使用thymeleaf的#{xxx}表达式,动态替换标签体的内容。
<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tips}">Please sign inh1>

如果是input这种,则使用行内表达式:[[#{xxx}]]

<input type="checkbox" value="remember-me">[[#{login.remember}]]

在页面的底部,我们放置两个超链接,通过不同的参数信息来动态调整页面的语言信息。这里需要注意一下超链接的表达式写法和参数写法。

<a class="btn btn-sm" th:href="@{/index.html(lan=zh_CN)}">中文a>
<a class="btn btn-sm" th:href="@{/index.html(lan=en_US)}">Englisha>

步骤执行到这里,我们可以通过设置浏览器的语言配置,显示页面的语言类型,但是达不到在页面上就能动态切换。点击页面底部的超链接,我们的url是带有对应参数的,但是这个参数想要被系统解析为域对象,还需要我们自定义一个LocaleResolver组件,来替代springBoot默认的域组件。
4. 自定义LocaleResolver组件并加入容器
1)自定义LocaleResolver 组件

public class MyLocalResolver implements LocaleResolver {

    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        Locale locale = Locale.getDefault();
        String lan = httpServletRequest.getParameter("lan");
        if(!StringUtils.isEmpty(lan)){
            String [] params = lan.split("_");
            locale = new Locale(params[0],params[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}

2)加入容器中

    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocalResolver();
    }

多提一嘴,在org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration中有下面这段代码,@ConditionalOnMissingBean注解表示在容器中没有LocaleResolver组件时才会注入默认的。所以将我们自定义的LocaleResolver组件加入容器后,这段代码就不会再添加默认的组件了。
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第6张图片
5. 测试
登录后的默认首页:
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第7张图片
点击English超链接:
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第8张图片
点击中文超链接:
springBoot国际化多语言开发配置,中文OR英文支持一键切换_第9张图片

你可能感兴趣的:(Spring,Boot)