1.编写多语⾔国际化⽂件及配置⽂件
在项⽬的类路径
resources
下创建名称为
i18n
的⽂件夹,并在该⽂件夹中根据需要编写对应的多语⾔国际化⽂件
login.properties
、
login.zh_CN.properties
和
login.en_US.properties
⽂件。

1.下面以登陆注册为例进行配置
1.login.properties为⾃定义默认语⾔配置⽂件。
login.tip = 请登录login.username = ⽤户名login.password = 密码login.rememberme = 记住我login.button = 登录
2.login.zh_CN.properties
为⾃定义中⽂国际化⽂件。
login.tip = 请登录login.username = ⽤户名login.password = 密码login.rememberme = 记住我login.button = 登录
3.login.en_US.properties
为⾃定义英⽂国际化⽂件
login.tip = Please sign inlogin.username = Usernamelogin.password = Passwordlogin.rememberme = Remember melogin.button = Login
需要说明的是,Spring Boot默认识别的语⾔配置⽂件为类路径resources下的messages.properties;其他语⾔国 际化⽂件的名称必须严格按照 ⽂件前缀名_语⾔代码_国家代码.properties 的形式命名。
在项⽬类路径resources下⾃定义的i18n包⽤于统⼀配置管理多语⾔配置⽂件,后续如果需要引⼊⾃定义国际化⽂ 件,必须在项⽬的全局配置⽂件中进⾏国际化⽂件的基础名配置。
2.打开项⽬的application.properties全局配置⽂件在⽂件中添加国际化⽂件的基础名
# 配置国际化⽂件基础名 注意此路径位置是否匹配spring.messages.basename = i18n.login
3 定制区域信息解析器
创建名为
com.cy.config
的包,并在该包下创建⼀个⽤于定制国际化功能区域信息解析器的⾃定
义配置类
MyLocalResolver
import org.springframework.context.annotation.Configuration;
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;
@Configuration
public class MyLocalResolver implements LocaleResolver {
/** ⾃定义区域解析⽅式 */
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
// 获取⻚⾯⼿动切换传递的语⾔参数language的值
String language = httpServletRequest.getParameter("language");
// 获取请求头⾃动传递的语⾔参数Accept-Language
String header = httpServletRequest.getHeader("Accept-Language");
// Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
System.out.println("header=" + header);
Locale locale = null;
// 如果⼿动切换参数不为空,就根据⼿动参数进⾏语⾔切换,否则默认根据请求头信息切换
if (!StringUtils.isEmpty(language)) {
String[] split = language.split("_");
locale = new Locale(split[0], split[1]);
} else {
String[] splits = header.split(",");
String[] split = splits[0].split("-");
locale = new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse
httpServletResponse, Locale locale) {
}
/** 将⾃定义的MyLocalResolver类重新注册为⼀个类型MyLocalResolver的Bean组件 */
@Bean
public LocaleResolver localeResolver() {
return new MyLocalResolver();
}
}
需要注意的是,在请求参数
language
的语⾔⼿动切换组装时,使⽤的是下划线
_
进⾏的切割,这是由多语⾔配置⽂
件的格式决定的(例如
login_zh_CN.properties
);⽽在请求头参数
Accept-Language
的语⾔⾃动切换组装时,使
⽤的是短横线
-
进⾏的切割,这是由浏览器发送的请求头信息样式决定的(
Accept-Language: zh
CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
)。
4.编写表现层,注意完成以上配置后其实与此层无关,但是为有始有终,这里就先写好了
//访问路径可切换语言
@GetMapping("/toLoginPage")
public String toLoginPage(Model model){
return "login" ;
}
5.页面引用配置文件上的可直接用模板引用
例如引用用户名:th:text="#{login.username}" 注意是#,不是&
6.中文乱码处理
访问的项⽬登录⻚出现了中⽂乱码的情况。这是因为
IDEA
开发⼯具编写的
Properties
配置⽂件默认使⽤的是
GBK
编
码格式,这些⽂件内容显示时最终都会转换为
ASCII
码的形式,这就导致了中⽂乱码的情况
解决方案1:
打开项⽬设置窗⼝,在窗⼝中搜索
"File Encodings"关键字

设置窗⼝的"File Encodings"编码也只是对当前项⽬有效,后续 通过IDEA开发⼯具创建的Properties配置⽂件仍然默认使⽤GBK编码格式
解决方式2:
关闭此项目,打开
IDEA
⼯具全局默认配置⽂件窗⼝,同样搜索
"File Encodings"
关键字 并进⾏编码格式的设置。

7.根据上述操作提示,完成"File Encodings"编码格式更改后,项⽬中Properties配置⽂件含有的中⽂部分可能出现 乱码,需要重新编写。