SpringBoot實現(xiàn)國際化的配置方法
一、什么是“國際化”(i18n)?
- 讓同一個應(yīng)用能 自動顯示不同語言的內(nèi)容。
- 比如:
- 用戶瀏覽器語言是
zh-CN(簡體中文)→ 顯示“歡迎” - 用戶語言是
en-US(美式英語)→ 顯示“Welcome”
- 用戶瀏覽器語言是
Spring Boot 通過 MessageSource 接口實現(xiàn)這一功能,而它默認(rèn)使用 資源文件(properties 文件) 來存儲不同語言的消息。
二、默認(rèn)行為:自動配置 MessageSource
自動生效的條件:
Spring Boot 只有在 classpath 根目錄下找到 messages.properties 文件時,才會自動配置 MessageSource。
也就是說:
- 如果你有
messages.properties(這是默認(rèn)語言,通常是英文或中性語言),Spring Boot 會自動啟用國際化支持。 - 如果你只有
messages_zh.properties或messages_fr.properties,但沒有messages.properties,那么 Spring Boot 不會自動配置MessageSource!
所以:必須提供一個默認(rèn)的 messages.properties,即使它是空的!
三、如何自定義資源包位置?
你可以通過 application.properties 或 application.yml 修改默認(rèn)設(shè)置:
# 指定多個資源文件基名(basename),用逗號分隔 spring.messages.basename=messages,config.i18n.messages # 是否回退到系統(tǒng)本地語言(默認(rèn) true) spring.messages.fallback-to-system-locale=false
解釋:
spring.messages.basename=messages,config.i18n.messages
- 表示 Spring 會去加載兩類資源文件:
messages.properties、messages_zh_CN.properties等config/i18n/messages.properties、config/i18n/messages_en.properties等
- 路徑可以是:
- 類路徑根目錄下的文件(如
messages.properties) - 包路徑形式(如
config.i18n.messages→ 對應(yīng)classpath:config/i18n/messages.properties)
- 類路徑根目錄下的文件(如
spring.messages.fallback-to-system-locale=false
- 默認(rèn)為
true:如果用戶 locale 是zh-CN,但找不到messages_zh_CN.properties,就會嘗試messages_zh.properties→ 再找不到就用系統(tǒng)默認(rèn) locale(比如服務(wù)器操作系統(tǒng)的語言)。 - 設(shè)為
false:找不到精確匹配就直接用messages.properties(不回退到系統(tǒng) locale)。
四、資源文件命名規(guī)則
假設(shè)你的 basename 是 messages,那么 Spring 會按以下優(yōu)先級查找:
| 用戶 Locale | 嘗試加載的文件(按順序) |
|---|---|
zh_CN | messages_zh_CN.properties → messages_zh.properties → messages.properties |
fr | messages_fr.properties → messages.properties |
| 任意未知 locale | 直接用 messages.properties |
注意:messages.properties 是兜底文件,必須存在,否則整個國際化機(jī)制不會啟動!
五、代碼中如何使用?
在 Controller 或 Service 中注入 MessageSource:
@Autowired
private MessageSource messageSource;
@GetMapping("/greet")
public String greet(Locale locale) {
return messageSource.getMessage("greeting", null, locale);
}
對應(yīng)的 messages.properties:
greeting=Hello!
messages_zh.properties:
greeting=你好!
當(dāng)請求帶 Accept-Language: zh 時,返回“你好!”;否則返回“Hello!”。
總結(jié)關(guān)鍵點
| 要點 | 說明 |
|---|---|
必須有 messages.properties | 否則 Spring Boot 不會自動配置 MessageSource |
| 支持多組資源文件 | 用 spring.messages.basename=a,b,c 配置 |
| 路徑寫法 | config.i18n.messages 表示 classpath:config/i18n/messages.properties |
| 回退機(jī)制 | 默認(rèn)會嘗試系統(tǒng) locale,可通過 fallback-to-system-locale=false 關(guān)閉 |
| 文件命名 | basename + _ + language + _ + country + .properties |
建議實踐
- 在
src/main/resources/下創(chuàng)建:messages.properties(默認(rèn)英文)messages_zh.properties(中文)
在 application.yml 中明確配置(可選但推薦):
spring:
messages:
basename: messages
fallback-to-system-locale: false
- 在代碼中通過
MessageSource獲取本地化消息。
這樣你的 Spring Boot 應(yīng)用就具備了多語言能力!
到此這篇關(guān)于SpringBoot支持國際化的配置方法的文章就介紹到這了,更多相關(guān)SpringBoot支持國際化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot集成FTP文件服務(wù)器簡單應(yīng)用方式
這篇文章主要介紹了SpringBoot集成FTP文件服務(wù)器簡單應(yīng)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
SpringBoot使用Apache Tika實現(xiàn)多種文檔的內(nèi)容解析
在日常開發(fā)中,我們經(jīng)常需要解析不同類型的文檔,如PDF、Word、Excel、HTML、TXT等,Apache Tika是一個強(qiáng)大的內(nèi)容解析工具,可以輕松地提取文檔中的內(nèi)容和元數(shù)據(jù)信息,本文將通過SpringBoot和Apache Tika的結(jié)合,介紹如何實現(xiàn)對多種文檔格式的內(nèi)容解析2024-12-12
java讀寫excel文件實現(xiàn)POI解析Excel的方法
在日常工作中,我們常常會進(jìn)行Excel文件讀寫操作,這篇文章主要介紹了java讀寫excel文件實現(xiàn)POI解析Excel的方法,實例分析了java讀寫excel的技巧,非常具有實用價值,需要的朋友可以參考下2018-10-10
關(guān)于BufferedReader讀取文件指定字符集問題
這篇文章主要介紹了關(guān)于BufferedReader讀取文件指定字符集問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作
這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
簡化API提升開發(fā)效率RestTemplate與HttpClient?OkHttp關(guān)系詳解
這篇文章主要為大家介紹了簡化API,提升開發(fā)效率,RestTemplate與HttpClient?OkHttp關(guān)系介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Java日期時間與正則表達(dá)式超詳細(xì)整理(適合新手入門)
如果使用得當(dāng),正則表達(dá)式是匹配各種模式的強(qiáng)大工具,下面這篇文章主要給大家介紹了關(guān)于Java日期時間與正則表達(dá)式超詳細(xì)整理的相關(guān)資料,本文非常適合新手入門,需要的朋友可以參考下2023-04-04
springboot 2.0 mybatis mapper-locations掃描多個路徑的實現(xiàn)
這篇文章主要介紹了springboot 2.0 mybatis mapper-locations掃描多個路徑的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

