# 国际化 i18n
boot 版本:2.4.4
它的作用范围(根据传递的语言获取对应的信息)目前笔者发现的有:
- 可以手动获取资源文件中对应 code 的信息
@Validated
验证抛出的信息
依赖
implementation 'org.springframework.boot:spring-boot-starter-web'
1
默认已经有资源文件的自动配置了
# 自动配置类是这个
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration
spring:
messages:
# messages 是默认的资源包前缀,意味着只能在 classpath 下存在 messages[_en].properties 这样的文件
# 想要放到其他路径下可以这样写 i18n/messages
basename: 'messages' # 这个是默认的资源包前缀
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
首先准备两个资源文件
# messages.properties
username=张三 {0}
# messages_en.properties
username=zhangsan {0}
1
2
3
4
5
2
3
4
5
编写工具类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
@Component
public class I18nServices {
// 直接注入资源包
@Autowired
private MessageSource messageSource;
public String get(String code, Object... args) {
// LocaleContextHolder 会拿到相关的解析器获取到的 local
// 关于这个解析器参考下面的说明
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
}
public String get(String code) {
return messageSource.getMessage(code, null, LocaleContextHolder.getLocale());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Locale 有几种解析器,可以查看 官方文档 (opens new window),有一个默认配置好的 请求头解析器 (opens new window)( org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
),它只能通过 Accept-Language
头来改变当前访问接口的语言信息。
前端请求的时候如下携带上指定的语言信息,就能被解析到
GET {{host}}/test/i18n
Authorization: bearer {{access_token}}
Accept-Language: en
1
2
3
2
3
对应的 controller 测试
@Autowired
private I18nServices i18nServices;
@ApiOperation("测试")
@GetMapping("i18n")
public Result i18n() {
final String username = i18nServices.get("username", 2);
return ResultHelper.ok(username);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
这里的语言信息与资源文件的对应关系是:
messages_[en].properties
# 方括号中的就是标头携带的
# 很多文档都定义的是 en_US ,那么如果要想找到这个资源,你的标头就必须写 en_US
1
2
3
2
3
# IDEA 中的 i18n 支持
idea 提供了一个 Resource Bundle Editor(资源编辑器),这个是需要我们自己在插件市场中安装的,它提供的功能就是方便你编辑多个语言版本,如下图所示 上面的界面在任意一个资源文件下侧部分都有入口,点击级可切换到对照页面