SpringBoot--页面国际化

首先要新建一个i18n的包来存放国际化配置:
SpringBoot--页面国际化_第1张图片
分别配置各种语言:
SpringBoot--页面国际化_第2张图片
然后要在application.yaml配置文件中添加配置参数,让国际化配置生效:

spring:
  thymeleaf:
    cache: false
  messages:
    basename: i18n.login

我们知道Thymeleaf的@、#、¥、*的作用:

${...}
变量引用模式,

*{...}
选择表达式,一般是th:object之后,直接取Object中的属性。当没有选取对象时,其功能等同于${...}。

@{...}
链接url的表达式

#{...}
i18n, 国际化

那么就要把表单里的参数换成国际化的形式:
SpringBoot--页面国际化_第3张图片
我们需要用到th:text之类的参数来替换原来的参数。
还要有Thymeleaf标签库:

这样就可以切换多国语言了,前提是配置过的。

还可以通过自定义配置,点击选项来切换页面中英文,其实就是通过标签来跳转地址,访问其他语言的页面。

效果如下图:
在这里插入图片描述

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

首先要在界面中添加两个按钮,分别跳转到不同语言的该页面,所以要在访问的url后添加一个参数:(language='zh_CN')。在Thymeleaf的模板语法中,参数是不用“?”的,而是使用小括号,然后参数按照key=value的形式设置,注意单引号;

那么为了让自定义的配置生效,就要改变默认配置,新建一个类MyLocaleResolver,用来实现 LocaleResolver 接口来解析不同的语言:
在这里插入图片描述

package com.example.hellospringboot.config;

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;


public class MyLocalResolver implements LocaleResolver {

    //解析请求
    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        //获取请求中的语言参数
        String language = httpServletRequest.getParameter("language");
        //如果没有就使用默认的
        Locale aDefault = Locale.getDefault();

        //如果请求的链接携带了国际化的参数
        if(!StringUtils.isEmpty(language)){
            //zh_CN
            String[] s = language.split("_");
            //国家、地区
            return new Locale(s[0], s[1]);
        }
        return aDefault;
    }

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

    }
}

通过这个类来获取我们访问的url后带的参数,根据_来拆分字符串获取区域和语言,然后通过这个参数来创建Locale对象,放到请求request中。这样就实现了不同语言的request。
然后需要把这个组件放到spring容器中,不然的话这个组件不会生效:

    /**让Spring检测到自定义的国际化*/
    @Bean("localeResolver")
    public LocaleResolver getMyLocaleResolver(){
        return new MyLocalResolver();
    }

这样就可以实现页面国际化语言切换了。

你可能感兴趣的:(SpringBoot,java,html)