1、编写i18n国际化资源文件
resources下面新建 i18n包
-
login.properties 默认选择的
-
login_en_US.properties 英文
-
login_zh_CN.properties 中文
-
还在可以选择其他的,源码里面都有可以看
2、配置国际化资源文件名称
#自定义了国际化资源文件 i18n是文件名 login是定义名 login.***
spring.messages.basename=i18n.login
3、添加中英文切换标签链接
html页面中添加key-value参数
<!--thymeleaf中携带参数不用? 而用(key=value)-->
<h1 th:text="#{login.tip}"></h1>
<input type="checkbox" value="remember me!!">[[#{login.remember}]]
<a class="btn btn-sm" th:href="@{/index.html(language='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(language='en_US')}">English</a>
4、自定义地区解析器组件
因此我们想要实现上述自定义的国际化资源生效,只需要编写一个自己的地区解析器,继承LocaleResolver
接口,重写其方法即可
-
在config下面新建一个类MyLocaleResolver实现localeResolver这个类
package com.example.thymeleaf.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
//解析请求
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
//获取请求中的国际化参数
String language = httpServletRequest.getParameter("language");
//默认地区
Locale locale = Locale.getDefault();
//如果请求的链接参数不为空,携带了国际化参数
if (!StringUtils.isEmpty(language)){
String[] split = language.split("_");//zh_CN 语言_地区
locale = new Locale(split[0],split[1]);//split[0]=zh split[1]=CN
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
5、再将自定义LocaleResolver注入到spring容器中
为了让我们的区域化信息能够生效,我们需要再配置一下这个组件!在自己的MvcConofig
配置类下添加bean;
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}