1. 程式人生 > 實用技巧 >Springboot使用MessageSource讀取資原始檔

Springboot使用MessageSource讀取資原始檔

1、專案開發過程中的提示文字資訊可以在資原始檔中進行定義,而且資原始檔是實現國際化技術的主要手段。如果想在SpringBoot裡面進行資原始檔的配置,只需要做一些簡單的application.yml配置即可,而且所有注入的資原始檔都可以像最初的Spring處理那樣,直接使用MessageSource進行讀取。

首先,在src/main/resources原始檔夾下建立一個i18n的子目錄(包),然後建立src/main/resources/i18n/Messages.properties檔案,然後輸入自己的提示資訊。

1 springboot.url=www.bie.com
2 springboot.msg=歡迎{0
}光臨!

然後,修改application.yml配置檔案,追加資原始檔配置,如下所示:

1 server.port=8081
2 
3 # 定義資原始檔,多個資原始檔使用逗號進行分割
4 spring.messages.basename=i18n/Messages 

專案結構,如下所示:

編寫測試程式,如下所示:

 1 package org.springboot.tentent.controller;
 2 
 3 import java.util.HashMap;
 4 import java.util.Locale;
 5 import java.util.Map;
 6 
 7
import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.context.MessageSource; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RestController; 11 12 @RestController 13 public class SampleController {
14 15 // 利用該物件實現資原始檔的讀取 16 @Autowired 17 private MessageSource messageSource; 18 19 @RequestMapping(value = "/message") 20 public Map<String, String> message() { 21 Map<String, String> map = new HashMap<String, String>(); 22 // 當程式中配置了資原始檔之後,就可以通過MessageSource介面中提供的getMessage()方法進行資源的讀取 23 map.put("springboot.url:", this.messageSource.getMessage("springboot.url", null, Locale.getDefault())); 24 map.put("springboot.msg:", 25 this.messageSource.getMessage("springboot.msg", new Object[] { "哈哈哈" }, Locale.getDefault())); 26 return map; 27 } 28 29 }

執行效果,如下所示:

2、可以使用此機制實現國際化開發,當程式可以實現資原始檔讀取的時候,就意味著可以實現國際化開發處理了。可以發現,MessageSource介面中的getMessage()方法裡面需要接收一個Locale類的物件,此時就可以通過Locale類的設定來獲取不同的資原始檔。當然,也需要在專案中配置好不同語言的資原始檔。例如,本程式在src/main/resources/i18n目錄中又建立了Messages_zh_CN.properties和Messages_en_US.properties(注意baseName的名稱相同)。

1 springboot.url=www.bie.com
2 springboot.msg=歡迎{0}光臨!
1 springboot.url=www.bie.com
2 springboot.msg=welcome to {0} here!

專案結構,如下所示:

測試案例,如下所示:

 1 package org.springboot.tentent.controller;
 2 
 3 import java.util.HashMap;
 4 import java.util.Locale;
 5 import java.util.Map;
 6 
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.context.MessageSource;
 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RestController;
11 
12 @RestController
13 public class SampleController {
14 
15     // 利用該物件實現資原始檔的讀取
16     @Autowired
17     private MessageSource messageSource;
18 
19     @RequestMapping(value = "/message")
20     public Map<String, String> message() {
21         Map<String, String> map = new HashMap<String, String>();
22         // 當程式中配置了資原始檔之後,就可以通過MessageSource介面中提供的getMessage()方法進行資源的讀取
23         map.put("springboot.url", this.messageSource.getMessage("springboot.url", null, Locale.getDefault()));
24         map.put("springboot.msg",
25                 this.messageSource.getMessage("springboot.msg", new Object[] { "哈哈哈" }, new Locale("en", "US")));
26         
27         System.out.println(map.get("springboot.msg"));
28         // 採用不同的Locale物件實現指定語言的資源讀取
29         map.put("springboot.msg",
30                 this.messageSource.getMessage("springboot.msg", new Object[] { "哈哈哈" }, new Locale("zh", "CN")));
31         
32         System.out.println(map.get("springboot.msg"));
33         return map;
34     }
35 
36 }

注意:即使提供了不同語言的資原始檔,在SpringBoot中也依然需要提供Messages.properties配置檔案,否則將無法實現資原始檔的讀取。

1 server.port=8081
2 
3 # 定義資原始檔,多個資原始檔使用逗號進行分割
4 spring.messages.basename=i18n/Messages,i18n/Messages_en_US,i18n/Messages_zh_CN