Spring boot 其實有自動配置好
因此只需要注入MessageSource就可以使用了
而~i18n檔案的目錄
可以從application.properties檔案中做控制
例如:
spring.messages.basename=static/i18n/report
這個是從resource下面開始的路徑
後面~我們檔案名稱就為report
多國檔就會為report_xxx
@Autowired
private MessageSource messageSource;
@Test
void test() {
String s1 = messageSource.getMessage(
"demo.message",
null,
Locale.ENGLISH);
System.out.println(s1);
String s2 = messageSource.getMessage(
"demo.message",
null,
Locale.TAIWAN);
System.out.println(s2);
}
在多國文字檔案的部分如下
run的結果如下
所以, 我另外寫了一個helper把它簡化
只要一開始設定完語言, 使用的時候就只要getMessage一個參數就搞定
寫好的內容如下, 裡面還有一個邏輯是圖片的邏輯
比方說中文版, 我們就原圖, 英文版我們使用英文版的圖, 圖檔名結尾為_en
這樣, 方便我們getImage取得相對應的路徑
程式碼如下
@Service
public class ReportHelper {
@Autowired
private MessageSource messageSource;
private Locale locale;
public String getMessage(String name) {
return messageSource.getMessage(name, null, locale);
}
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
public String getImagePath(String path) {
String suffix="";
if(locale.equals(Locale.TAIWAN)) {
suffix="";
} else {
suffix="_en";
}
return path + suffix;
}
}
使用如下
@Autowired
private ReportHelper reportMessage;
@Test
void utilTest() {
reportMessage.setLocale(Locale.TAIWAN);
String s2 = reportMessage.getMessage("demo.message");
System.out.println(s2);
}
最後~如果有超過一種以上的多國檔要注入只要在application.properties檔案用逗號隔開就好
ex
# i18n
spring.messages.basename=static/i18n/report, static/i18n/message
沒有留言:
張貼留言