目录
1.编写国际化配置
首先需要在 resources 资源目录下创建国际化配置。我们创建一个文件夹 i18n,用来存储国际化配置(命名随意,一般为 i18n),然后在目录下分别创建i18n.properties
、i18n_zh_CN.properties
、i18n_en_US.properties
,需要几种语言就写几种。
但是名称必须是:xxx_zh_CN,xxx_en_US 这种格式。zh、en 代表语言,CN、US 代表国家
。国际化配置仅支持 .properties
类型。
2.配置国际化文件所在路径
在 Spring Boot 主配置文件 application.yml/properties 中,配置国际化文件所在的包名/基础名
,如下图所示:Spring Boot 国际化,默认扫描的是 basename 为 messages 文件夹
3.页面代码修改支持国际化
在之前文章 Spring Boot 引入 Thymeleaf 及入门使用 中,我们有介绍到 #{…}
这个表达式,它就是用来完成国际化操作的。接下来我们就使用#{…}
表达式来完成对页面的改造,使其支持国际化。
4.目前页面已经支持国际化
到这一步,页面已经支持国际化。不过目前国际化切换是跟随浏览器语言来改变的。
比如说:你设置的浏览器语言是中文(简体)
,会显示汉语;如果你的浏览器语言设置为英语(美国)
,则会显示英语。如果你此时选择英语(加拿大)
,由于我们没有配置 加拿大,所以他会使用默认配置显示。如下图所示:我们也可以通过点击页面的方式,来支持国际化
5.(优化)通过点击链接方式切换
5.1 使用点击链接方式切换国际化
点击链接的方式,我们可以通过传参的方式来解决这一问题。从而实现根据点击不同链接,传参的不同来动态切换国际化配置。
5.2 自定义国际化解析器
因为 Spring Boot 默认配置的国际化解析器,就是上面j介绍根据语言来划分的那种(国际化配置位于MessageSourceAutoConfiguration
类下)。这种解析器显然无法满足我们的需求,所以我们需要自定义国际化解析器。
/** * 可以在连接上携带区域信息 */
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取传过来的参数
String l = request.getParameter("l");
Locale locale = Locale.getDefault();
//不为空,通过 Locale对象修改国际化配置
if(!StringUtils.isEmpty(l)){
String[] split = l.split("_");
locale = new Locale(split[0],split[1]);
}
//反之使用默认配置
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
5.3 通过代码方式,配置 url 映射关系;将自定义解析器注入到 Spring 容器
5.4 点击链接方式实现国际化切换 测试结果,如下图所示
6.附 Spring Boot 国际化源码
本文基于 Spring Boot 1.x 版本。2.x 版本中,在自定义国际化解析器时,继承的不是 WebMvcConfugurerAdapter 类,Spring 官方在此处有所变动。不过方法都是类似的,触类旁通一下就好了。
博主写作不易,来个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ