Spring Boot自動配置MessageSource
多國語言(i18n)簡單範例。
範例環境:
- Java 8
- Spring Boot 2.2.1.RELEASE
- Maven
建立Spring Boot專案(參考IntelliJ IDEA,Eclipse STS)。
Spring Boot預設會尋找classpath根目錄下名稱為messages
的properties作為訊息來源。
若要設定不同語系的訊息,可新增messages_language_COUNTRY.properties
,例如新增台灣正體中文語系訊息檔為messages_zh_TW.properties
、日文語系訊息檔為messages_ja_JP
。檔案名稱規則參考Java的ResourceBundle
。
專案application.properties
設定。使用Spring Boot預設MessageSource
配置,所以不設定spring.messages
配置。
application.properties
#context path
server.servlet.context-path=/demo
#port
server.port=8080
messages.properties
及messages_zh_TW.properties
內容如下。
src/main/resources/messages.properites
demo.message=MessageSource auto config
demo.message.args=A message with args, arg_0={0}, arg_1={1}
src/main/resources/messages_zh_TW.properites
demo.message=MessageSource自動配置
demo.message.args=帶參數的訊息,參數0={0}, 參數1={1}
訊息來源檔中的{0}
、{1}
為MessageFormat
的format,可在程式中帶入變數。
新增DemoController
使用MessageSource
如下。注意第二個訊息的Locale
為Locale.TAIWAN
。
DemoController
package com.abc.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@RestController
public class DemoController {
@Autowired
private MessageSource messageSource;
@GetMapping("/message")
public void message() {
String s1 = messageSource.getMessage(
"demo.message",
null,
Locale.ENGLISH);
System.out.println(s1); // MessageSource auto config
String s2 = messageSource.getMessage(
"demo.message.args",
new String[]{"hello", "world"},
Locale.TAIWAN);
System.out.println(s2); // 帶參數的訊息,參數0=hello, 參數1=world
}
}
呼叫MessageSource.getMessage()
取得messages.properties
及messages_zh_TW.properties
的文字。
第一個參數為properties訊息的key,
第二個參數為format可帶入的變數,
第三個參數為Locale
,此參數決定從哪個語系檔取得key的值。若找不到對應的語系檔則從預設的messages.properties
取得訊息。
目錄結構
─src
└─main
├─java
│ └─com
│ └─abc
│ └─demo
│ │ DemoApplication.java
│ │
│ └─controller
│ DemoController.java
│
└─resources
│ application.properties
│ messages.properties
│ messages_zh_TW.properties
完整程式碼請參考github。
沒有留言:
張貼留言