# 国际化 i18n
boot 版本:2.4.4
它的作用范围(根据传递的语言获取对应的信息)目前笔者发现的有:
- 可以手动获取资源文件中对应 code 的信息
@Validated
验证抛出的信息
依赖
implementation 'org.springframework.boot:spring-boot-starter-web'
Copied!
1
默认已经有资源文件的自动配置了
# 自动配置类是这个 org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration spring: messages: # messages 是默认的资源包前缀,意味着只能在 classpath 下存在 messages[_en].properties 这样的文件 # 想要放到其他路径下可以这样写 i18n/messages basename: 'messages' # 这个是默认的资源包前缀
Copied!
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}
Copied!
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()); } }
Copied!
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
Copied!
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); }
Copied!
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
这里的语言信息与资源文件的对应关系是:
messages_[en].properties # 方括号中的就是标头携带的 # 很多文档都定义的是 en_US ,那么如果要想找到这个资源,你的标头就必须写 en_US
Copied!
1
2
3
2
3
# IDEA 中的 i18n 支持
idea 提供了一个 Resource Bundle Editor(资源编辑器),这个是需要我们自己在插件市场中安装的,它提供的功能就是方便你编辑多个语言版本,如下图所示
上面的界面在任意一个资源文件下侧部分都有入口,点击级可切换到对照页面