SpringBoot系列—国际化(八)
2019-09-26 本文已影响0人
海晨忆
个人博客:haichenyi.com。感谢关注
所谓的国际化就是语言切换。中文切换到其他语种。
国际化的信息,这些都是需要开发人员在配置类中配置好的。SpringBoot会自动加载这些配置类。
举个栗子:以登录界面为例,我们的登录界面输入账号、密码框的左边,会有这两个提示,我们就自动修改这两个提示。
创建配置文件
首先,你要在你的resources目录下面新建i18n目录,当然,不是必须的,可以不创建,直接创建文件。之所以创建这个目录,只是便于管理。
然后,在i18n目录下面创建配置文件,操作如下:
![](https://img.haomeiwen.com/i7041675/255a3a0ff8446f2f.png)
在i18n的目录下面,新建一个Resources Bundle类型的文件,名字叫login
![](https://img.haomeiwen.com/i7041675/e1de577b76bc0c69.png)
![](https://img.haomeiwen.com/i7041675/53656dc0c2eff9f3.png)
点击+号,创建中文,英文两种语言的配置文件。中文叫 zh_CN,英文叫 en_US,这两种类型是写死的。
![](https://img.haomeiwen.com/i7041675/6a80accf3ee735cc.png)
![](https://img.haomeiwen.com/i7041675/6e4ec6138b44e98a.png)
![](https://img.haomeiwen.com/i7041675/e9881dc3e5e21bbf.png)
根据如上操作,分别创建key为login.username,login.password,并且分别创建好对应的内容。这个key,页面会用到。
PS:不要忘记了,在全局配置文件中配置好,spring.messages.basename=i18n.login,这里现在是只有一个登陆页面需要国际化,如果有多个页面需要,比方说注册页面,就在后面添加。如:spring.messages.basename=i18n.login,i19n.register这样的方式,中间用逗号隔开即可。
修改页面显示内容
按照上面的步骤,创建好了之后,在你页面需要国际化的view,分别按如下的方式获取值:
<!--th:text="#{上面命名的key}"-->
<div class="inputbox">
<label for="user" th:text="#{login.username}">Username</label>
<input id="user" type="text" name="username" required/>
</div>
<div class="inputbox">
<label for="mima" th:text="#{login.password}">Password</label>
<input id="mima" type="password" name="password" required/>
</div>
自定义区域解析器
区域解析器LocaleResolver,按如下的方式实现即可。
package com.haichenyi.springbootbill.component;
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 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) {
}
}
最后,在你对应的超链接的地方传 zh_CN 和 en_US 即可实现。