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

2022-08-24 13:08:42

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

spring:messages:basename: i18n.message

springBoot关于webMvc有关于域组件的默认配置,如果我们想要自定义页面语言信息的显示,就需要自定义一个LocaleResolver并加入到容器中才行。
在这里插入图片描述下面通过简单的步骤来实现一个登陆也的多语言登录页。

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

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

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

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

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

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

publicclassMyLocalResolverimplementsLocaleResolver{@Overridepublic LocaleresolveLocale(HttpServletRequest httpServletRequest){
        Locale locale= Locale.getDefault();
        String lan= httpServletRequest.getParameter("lan");if(!StringUtils.isEmpty(lan)){
            String[] params= lan.split("_");
            locale=newLocale(params[0],params[1]);}return locale;}@OverridepublicvoidsetLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale){}}

2)加入容器中

@Beanpublic LocaleResolverlocaleResolver(){returnnewMyLocalResolver();}

多提一嘴,在org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration中有下面这段代码,@ConditionalOnMissingBean注解表示在容器中没有LocaleResolver组件时才会注入默认的。所以将我们自定义的LocaleResolver组件加入容器后,这段代码就不会再添加默认的组件了。
在这里插入图片描述
5. 测试
登录后的默认首页:
在这里插入图片描述
点击English超链接:
在这里插入图片描述
点击中文超链接:
在这里插入图片描述

  • 作者:穿条秋裤到处跑
  • 原文链接:https://roswu.blog.csdn.net/article/details/105865205
    更新时间:2022-08-24 13:08:42