SpringBoot国际化
1.目录结构
2.编写配置
在resource目录下新建目录i18n目录,并新建文件login.properties文件作为默认语言文件,再添加loginzhCN.properties文件和loginenUS.properties文件。 编写完成以后在其中添加需要的字段与对应的文字,可点击Resource Bundle按钮切换到此视图。
3.页面取值
在HTML文档中将值取出,本文采用thymeleaf语法。
语法:
th:text="#{login.username}"
例:
<label for="login-username" class="label-material" th:text="#{login.username}">User Name</label>
启动项目,在浏览器中通过修改浏览器的语言则可以看到语言的替换,但是无法做到点击按钮切换语言。
4.按钮替换
通常情况下是通过按钮来进行语言的替换,在前端发送请求的时候附带语言编码。
<a id="Chinese" href="" th:href="@{/(l='zh_CN')}" class="btn" >中文</a>
<a id="English" href="" th:href="@{/(l='en_US')}" class="btn" >English</a>
其中th:href="@{/(l='enUS')}"表示的意思为请求项目时附带语言编码为enUS。
5.配置路径
需要指明配置文件的路径,根据配置规则,在配置文件中配置如下:
spring:
messages:
basename: i18n.login
6.重写resolveLocale
新建类MyLocaleResolver,并实现接口LocaleResolver,重写其中的resolveLocale方法,主要是想获取请求的中的语言编码,如果没有附带则取本地的地区编码。
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
// 获取参数中的`l`
String l = httpServletRequest.getParameter("l");
// 设置为系统默认
Locale locale = Locale.getDefault();
if (!StringUtils.isEmpty(l)){
// 设置为参数所带的地区和语言
String[] s = l.split("_");
locale = new Locale(s[0],s[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
到目前已经写好了后台处理程序,但是并没有注入到springboot中,springboot还是采用的默认的语言和地区,需要将此组件注入到springboot中。
7.注入springboot
在springMVC配置类中注入此组件。
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
8.启动测试
重启项目,点击按钮可以随意切换语言