messages_zh_CN.properties
login.loginname=登录名:
login.password=密码
login.submit=提交
login.title=登录页面
messages_en_US.properties
login.loginname=Login name:
login.password=Password
login.submit=Submit
login.title=Login Page
messages.properties
空
注:在 Spring 中需要配置的 MessageSource 现在不用配置了,Spring Boot 会通过org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration 自动帮我们配置一个 MessageSource 实例。
application.properties
# 国际化多语言配置
spring.messages.basename=i18n.messages
# 默认设置中文环境
spring.web.locale=zh_CN
# 锁定之后不可动态切换语言
spring.web.locale-resolver=fixed
localeResolver,语言区域解析器接口,该接口有下面三个常用实现类
默认语言区域解析器
读取用户浏览器请求头的Accept-Language标题值,判断用户当前选择语言
一般语言切换都是直接在页面上操作,页面如何修改请求头中的Accept-Language?
页面内部通过ajax修改接口请求头
这种方式明显比较麻烦,可以用下面两种方式
非默认,需要进行显示配置
从HrrpSession / Cookie作用域中获取所设置的语言区域
接口参数传递语言类型,spring中增加拦截器获取,然后设置到session / cookie
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
// 切换语言URL?language=zh_CN,切换后将信息存入session/cookie
@Bean
public LocaleChangeInterceptor localeChangeInterceptor(){
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("language");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public LocaleResolver localeResolver(){
//return new CookieLocaleResolver();
return new SessionLocaleResolver();
}
}
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<link rel="icon" type="image/x-icon" th:href="@{/static/favicon.ico}">
<head>
<title th:text="#{login.title}"></title>
</head>
<body>
<!--多语言切换-->
<a href="loginForm?language=zh_CN">中文</a> | <a href="loginForm?language=en_US">英文</a>
<form action="/login">
<table>
<tr>
<td th:text="#{login.loginname}"></td>
<td><input type="text" name="loginname"/></td>
</tr>
<tr>
<td th:text="#{login.password}"></td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td><input type="submit" th:value="#{login.submit}"/></td>
</tr>
</table>
</form>
</body>
</html>