读取资源文件

SpringBoot

在实际的项目开发中,资源文件不可或缺,因为所有的提示文字信息都要在资源文件中进行定义,而且资源文件是实现国际化技术的主要手段。如果想在SpringBoot里面进行资源文件的配置,只需要做一些简单的application.yml配置即可,而且所有注入的资源文件都可以像最初的Spring处理那样,直接使用MessageSource进行读取。

# 一、资源文件配置

在src/main/resources源文件夹下创建一个i18n的子目录(包)。

建立src/main/resources/i18n/Messages.properties文件,文件内容定义如下:

welcome.url=www.xxl.cn
welcome.msg=欢迎{0}光临
1
2

# 二、项目文件配置

修改application.yml配置文件,追加资源文件配置

spring:
  messages: # 定义配置文件,多个资源文件使用“,”分割
    basename: i18n/Messages
1
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;
}
1
2
3
4
5
6
7
8
9
10

当程序中配置了资源文件之后,就可以通过MessageSource接口中提供的getMessage()方法进行资源的读取。

# 四、扩展:国际化开发

提示:可以借用此机制实现国际化开发。

当程序可以实现资源文件读取的时候,就意味着可以实现国际化开发处理了。MessageSource接口中的getMessage()方法里面需要接收一个Locale类的对象,此时就可以通过Locale类的设置来获取不同的资源文件。当然,也需要在项目中配置好不同语言的资源文件。例如,在src/main/resources/i18n目录中创建了Messages_zh_CN.propertiesMessages_en_US.properties(注意baseName的名称相同)。

这样,当读取时可以采用不同的Locale对象实现指定语言的资源读取。例如,使用如下代码就可以实现Messages_en_US.properties资源文件的读取:

map.put("welcome.msg", this.messageSource.getMessage("welcome.msg", new Object[]{"卡皮巴拉"}, new Locale("en", "US")));
1

需要注意的是,即使提供了不同语言的资源文件,在SpringBoot中也依然需要提供Messages.properties配置文件,否则将无法实现资源文件的读取。

完整示例:

Messages_zh_CN.properties

welcome.url=www.xxl.cn
welcome.msg=欢迎{0}光临
1
2

Messages_en_US.properties

welcome.url=www.xxl.cn
welcome.msg=welcome{0}
1
2

application.yml

server:
  port: 80 # 设置运行服务所在端口
  servlet:
    context-path: /xxl # 定义ContextPath访问路径
spring:
  messages: # 定义配置文件,多个资源文件使用“,”分割
    basename: i18n/Messages, i18n/Messages_zh_CN, i18n/Messages_en_US
1
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;
}
1
2
3
4
5
6
7
8
9
10
11

访问:http://127.0.0.1/xxl/i18n

{
    "welcome.msg": "欢迎卡皮巴拉光临",
    "welcome.url": "www.xxl.cn"
}
1
2
3
4

访问:http://127.0.0.1/xxl/i18n?type=en

{
    "welcome.msg": "welcome卡皮巴拉",
    "welcome.url": "www.xxl.cn"
}
1
2
3
4
最近修改于: 2024/12/31 00:27:04
和宇宙温柔的关联
房东的猫