有的时候,我们所写的页面可能不只有中国人使用,还有可能有外国人使用,这就涉及到中文英文切换,甚至可能多种语言进行切换。这时候页面国际化就派上大用场了。
1、使用前准备
要在idea中同一设置properties配置文件的编码,同一设置为UTF-8。
2、编写国际化配置文件
-
在resources资源文件夹下创建一个文件夹
i18n
。用来存放国际化转换的信息。
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。
-
在i18n文件夹下创建properties文件(名字根据自己需求自定义)。
创建一个login.properties,再创建一个login_zh_CN.properties,这时idea就会自动识别到我要进行国际化操作,然后文件夹就会发生变化。自动生成一个文件夹把同类型的国际化properties(就是名字相同部分)包裹住。
如果再需要创建properties文件,就右键自动生成的文件夹new一个就可以了
选择需要的语言
也可以点击加号,自己添加,只需要输入编码即可。例如zh_HK(中国香港)、zh_TW(中国台湾)
-
编写配置文件
有两种方式可以选择,一种是每个配置文件都写,另一种是可视化编写。
Text为第一种,比较繁重,工作量大,Resource Bundle为可视化编写,我使用第二种。
依次添加完配置信息,配置文件就可以了。
其余配置
默认:
login.forget=忘记密码? login.login=登陆 login.loginTitle=用户登录 login.password=密码 login.remember=记住我 login.sysName=婚姻登记系统 login.tip=欢迎登陆 login.username=账号 login.verifyCode=验证码
zh_CN中文:
login.forget=忘记密码? login.login=登陆 login.loginTitle=用户登录 login.password=密码 login.remember=记住我 login.sysName=婚姻登记系统 login.tip=欢迎登陆 login.username=账号 login.verifyCode=验证码
en_US英文:
login.forget=Forget password? login.login=Log in login.loginTitle=User Login login.password=Password login.remember=Remember me login.sysName=ROM SYSTEM login.tip=Welcome to login.username=Username login.verifyCode=VerifyCode
3、如何使国际化配置文件生效
在application.properties
中配置国际化配置文件的真实路径,使其得以生效。
#国际化配置文件存放的位置
spring.messages.basename=i18n.login
配置页面国际化值后国际化就可以使用了。Thymeleaf模板使用#{…}取国际化消息
<input type="text" class="form-control" name="username" th:placeholder="#{login.username}">
4、配置国际化解析器
为了能够更自由的在语言之间切换,一般都会有按钮,携带参数传到配置中。
<a class="btn btn-xs" th:href="@{/login.html(l='zh_CN')}">中文</a>
<a class="btn btn-xs" th:href="@{/login.html(l='en_US')}">English</a>
编写一个处理国际化的组件类,需要实现一个接口LocaleResolver
package com.gx.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("l");
//获取默认的地区语言
Locale locale = Locale.getDefault();
//判断请求中携带的语言参数是否为空,为空使用默认,不为空使用自己设置的语言
if(!StringUtils.isEmpty(language)){
//分解参数 zh_CN
String[] split = language.split("_");
//国家_地区
locale = new Locale(split[0],split[1]);
}
return locale;
}
}
最后,需要使得国际化的组件类生效,得要在容器中注册这个类,在配置类@Bean
一下
//自定义国际化
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}