Spring Boot 會自動配置 MessageSource 的bean 做i18n多國語言訊息,
預設會尋找classpath根目錄下名稱為messages的properties。
也可在Spring Boot配置檔application.properties設定其他名稱或路徑。
本文範例環境:
Java 11
Spring Boot 2.6.3.RELEASE
Maven
IntelliJ IDEA 2020.3 x64
專案名稱:springbooti18ntestdemo
pom.xml dependencies
圖1 本文使用spring-boot-starter-web
在resources 資料夾下新增i18n資料夾後放messages的properties。
為什麼新增i18n資料夾,是因為好跟其它的設定檔分開。
創建.propertis語言包
message.properties
message_en_US.properties
message_zh_TW.properties
本文使用IDEA 工具 Create Resource Bundle 功能
如果你沒用過可以參考以下文章
圖2
配置application.properties
spring.messages.basename=i18n/message
spring.messages.encoding=UTF-8
spring.messages.cache-duration=3600
spring.messages.basename 是設定message.properties 主檔案的位置
預設位置classpath下。
spring boot 預設位置classpath,有resources資料夾
所以在spring.messages.basename=i18n/message設定 i18n 下的message
而message,就是message.properties 的檔名,如果你不是用這個名稱記得也要改這設定
圖3
你使用IDEA 產生的檔會使用預設編碼
記得也要改。
本文使用 UTF-8
選單-> Settings -> File Encodings
把相關的都設定為你要用的編碼
圖5 點選 message.properties -> 進入介面 左下有 Resource Bundle ->上面有個+ 可以新增code
圖6 設定 code ,
本文加入 spring.boot.hello.world
圖7 code 新增後,加入值,如圖
加入 測試用的controller
需要MessageSource的getMessage方法來讀檔,主要依Locale 來判斷要使用那個檔
getMessage("code key",參數,Locale 語言)
程式如下:
其它文章
@RestController public class SampleController { @Autowired private MessageSource messageSource; @RequestMapping("/index") public String index(@RequestParam("lang") String langStr){ Locale locale = Locale.ROOT;//預設使用,測試用的會使用message.properties if("zh".equals(langStr)){ locale = Locale.TAIWAN;//設定會使用message_zh_TW.properties } else if("en".equals(langStr)){ locale = Locale.US;//設定會使用message_en_US.properties } String str = messageSource.getMessage("spring.boot.hello.world", null, locale); System.out.println(str); return str; } }
圖8
圖 9 測試 message_zh_TW.properties
http://localhost:8080/index?lang=zh
圖 10 測試 message_en_US.properties
http://localhost:8080/index?lang=en
圖 11 測試 message.properties
http://localhost:8080/index?lang=jj
用LINE傳送分享
其它文章
沒有留言:
張貼留言