在实际的项目开发中,资源文件不可或缺,因为所有的提示文字信息都要在资源文件中进行定义,而且资源文件是实现国际化技术的主要手段。如果想在SpringBoot里面进行资源文件的配置,只需要做一些简单的application.yml配置即可,而且所有注入的资源文件都可以像最初的Spring处理那样,直接使用MessageSource进行读取。
# 一、资源文件配置
在src/main/resources源文件夹下创建一个i18n的子目录(包)。
建立src/main/resources/i18n/Messages.properties文件,文件内容定义如下:
welcome.url=www.xxl.cn
welcome.msg=欢迎{0}光临
2
# 二、项目文件配置
修改application.yml
配置文件,追加资源文件配置
spring:
messages: # 定义配置文件,多个资源文件使用“,”分割
basename: i18n/Messages
2
3
# 三、资源文件读取
在控制器中注入org.springframework.context.MessageSource接口对象,并且利用此对象实现资源文件读取。
@Autowired
private MessageSource messageSource;
@GetMapping("/message")
public Object message() {
Map<String, String> map = new HashMap<>();
map.put("welcome.url", this.messageSource.getMessage("welcome.url", null, Locale.getDefault()));
map.put("welcome.msg", this.messageSource.getMessage("welcome.msg", new Object[]{"卡皮巴拉"}, Locale.getDefault()));
return map;
}
2
3
4
5
6
7
8
9
10
当程序中配置了资源文件之后,就可以通过MessageSource接口中提供的getMessage()方法进行资源的读取。
# 四、扩展:国际化开发
提示:可以借用此机制实现国际化开发。
当程序可以实现资源文件读取的时候,就意味着可以实现国际化开发处理了。MessageSource接口中的getMessage()方法里面需要接收一个Locale类的对象,此时就可以通过Locale类的设置来获取不同的资源文件。当然,也需要在项目中配置好不同语言的资源文件。例如,在src/main/resources/i18n目录中创建了Messages_zh_CN.properties
和Messages_en_US.properties
(注意baseName的名称相同)。
这样,当读取时可以采用不同的Locale对象实现指定语言的资源读取。例如,使用如下代码就可以实现Messages_en_US.properties
资源文件的读取:
map.put("welcome.msg", this.messageSource.getMessage("welcome.msg", new Object[]{"卡皮巴拉"}, new Locale("en", "US")));
需要注意的是,即使提供了不同语言的资源文件,在SpringBoot中也依然需要提供Messages.properties
配置文件,否则将无法实现资源文件的读取。
完整示例:
Messages_zh_CN.properties
welcome.url=www.xxl.cn
welcome.msg=欢迎{0}光临
2
Messages_en_US.properties
welcome.url=www.xxl.cn
welcome.msg=welcome{0}
2
application.yml
server:
port: 80 # 设置运行服务所在端口
servlet:
context-path: /xxl # 定义ContextPath访问路径
spring:
messages: # 定义配置文件,多个资源文件使用“,”分割
basename: i18n/Messages, i18n/Messages_zh_CN, i18n/Messages_en_US
2
3
4
5
6
7
测试类
@GetMapping("/i18n")
public Object i18n(String type) {
Map<String, String> map = new HashMap<>();
map.put("welcome.url", this.messageSource.getMessage("welcome.url", null, Locale.getDefault()));
if (type != null && type.equals("en")) {
map.put("welcome.msg", this.messageSource.getMessage("welcome.msg", new Object[]{"卡皮巴拉"}, new Locale("en", "US")));
return map;
}
map.put("welcome.msg", this.messageSource.getMessage("welcome.msg", new Object[]{"卡皮巴拉"}, new Locale("zh", "CN")));
return map;
}
2
3
4
5
6
7
8
9
10
11
访问:http://127.0.0.1/xxl/i18n
{
"welcome.msg": "欢迎卡皮巴拉光临",
"welcome.url": "www.xxl.cn"
}
2
3
4
访问:http://127.0.0.1/xxl/i18n?type=en
{
"welcome.msg": "welcome卡皮巴拉",
"welcome.url": "www.xxl.cn"
}
2
3
4