SpringBoot實(shí)現(xiàn)國(guó)際化的配置方法
一、什么是“國(guó)際化”(i18n)?
- 讓同一個(gè)應(yīng)用能 自動(dòng)顯示不同語(yǔ)言的內(nèi)容。
- 比如:
- 用戶(hù)瀏覽器語(yǔ)言是
zh-CN(簡(jiǎn)體中文)→ 顯示“歡迎” - 用戶(hù)語(yǔ)言是
en-US(美式英語(yǔ))→ 顯示“Welcome”
- 用戶(hù)瀏覽器語(yǔ)言是
Spring Boot 通過(guò) MessageSource 接口實(shí)現(xiàn)這一功能,而它默認(rèn)使用 資源文件(properties 文件) 來(lái)存儲(chǔ)不同語(yǔ)言的消息。
二、默認(rèn)行為:自動(dòng)配置 MessageSource
自動(dòng)生效的條件:
Spring Boot 只有在 classpath 根目錄下找到 messages.properties 文件時(shí),才會(huì)自動(dòng)配置 MessageSource。
也就是說(shuō):
- 如果你有
messages.properties(這是默認(rèn)語(yǔ)言,通常是英文或中性語(yǔ)言),Spring Boot 會(huì)自動(dòng)啟用國(guó)際化支持。 - 如果你只有
messages_zh.properties或messages_fr.properties,但沒(méi)有messages.properties,那么 Spring Boot 不會(huì)自動(dòng)配置MessageSource!
所以:必須提供一個(gè)默認(rèn)的 messages.properties,即使它是空的!
三、如何自定義資源包位置?
你可以通過(guò) application.properties 或 application.yml 修改默認(rèn)設(shè)置:
# 指定多個(gè)資源文件基名(basename),用逗號(hào)分隔 spring.messages.basename=messages,config.i18n.messages # 是否回退到系統(tǒng)本地語(yǔ)言(默認(rèn) true) spring.messages.fallback-to-system-locale=false
解釋?zhuān)?/h3>
spring.messages.basename=messages,config.i18n.messages
- 表示 Spring 會(huì)去加載兩類(lèi)資源文件:
messages.properties、messages_zh_CN.properties等config/i18n/messages.properties、config/i18n/messages_en.properties等
- 路徑可以是:
- 類(lèi)路徑根目錄下的文件(如
messages.properties) - 包路徑形式(如
config.i18n.messages→ 對(duì)應(yīng)classpath:config/i18n/messages.properties)
- 類(lèi)路徑根目錄下的文件(如
spring.messages.fallback-to-system-locale=false
- 默認(rèn)為
true:如果用戶(hù) locale 是zh-CN,但找不到messages_zh_CN.properties,就會(huì)嘗試messages_zh.properties→ 再找不到就用系統(tǒng)默認(rèn) locale(比如服務(wù)器操作系統(tǒng)的語(yǔ)言)。 - 設(shè)為
false:找不到精確匹配就直接用messages.properties(不回退到系統(tǒng) locale)。
四、資源文件命名規(guī)則
假設(shè)你的 basename 是 messages,那么 Spring 會(huì)按以下優(yōu)先級(jí)查找:
| 用戶(hù) Locale | 嘗試加載的文件(按順序) |
|---|---|
zh_CN | messages_zh_CN.properties → messages_zh.properties → messages.properties |
fr | messages_fr.properties → messages.properties |
| 任意未知 locale | 直接用 messages.properties |
注意:messages.properties 是兜底文件,必須存在,否則整個(gè)國(guó)際化機(jī)制不會(huì)啟動(dòng)!
五、代碼中如何使用?
在 Controller 或 Service 中注入 MessageSource:
@Autowired
private MessageSource messageSource;
@GetMapping("/greet")
public String greet(Locale locale) {
return messageSource.getMessage("greeting", null, locale);
}
對(duì)應(yīng)的 messages.properties:
greeting=Hello!
messages_zh.properties:
greeting=你好!
當(dāng)請(qǐng)求帶 Accept-Language: zh 時(shí),返回“你好!”;否則返回“Hello!”。
總結(jié)關(guān)鍵點(diǎn)
| 要點(diǎn) | 說(shuō)明 |
|---|---|
必須有 messages.properties | 否則 Spring Boot 不會(huì)自動(dòng)配置 MessageSource |
| 支持多組資源文件 | 用 spring.messages.basename=a,b,c 配置 |
| 路徑寫(xiě)法 | config.i18n.messages 表示 classpath:config/i18n/messages.properties |
| 回退機(jī)制 | 默認(rèn)會(huì)嘗試系統(tǒng) locale,可通過(guò) fallback-to-system-locale=false 關(guān)閉 |
| 文件命名 | basename + _ + language + _ + country + .properties |
建議實(shí)踐
- 在
src/main/resources/下創(chuàng)建:messages.properties(默認(rèn)英文)messages_zh.properties(中文)
在 application.yml 中明確配置(可選但推薦):
spring:
messages:
basename: messages
fallback-to-system-locale: false
- 在代碼中通過(guò)
MessageSource獲取本地化消息。
這樣你的 Spring Boot 應(yīng)用就具備了多語(yǔ)言能力!
到此這篇關(guān)于SpringBoot支持國(guó)際化的配置方法的文章就介紹到這了,更多相關(guān)SpringBoot支持國(guó)際化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)反轉(zhuǎn)義的示例代碼
本文主要介紹了Java實(shí)現(xiàn)反轉(zhuǎn)義的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Mac下安裝配置Maven并在IDEA中配置的詳細(xì)教程
這篇文章主要介紹了Mac下安裝配置Maven并在IDEA中配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
IDEA2022創(chuàng)建Maven Web項(xiàng)目教程(圖文)
本文主要介紹了IDEA2022創(chuàng)建Maven Web項(xiàng)目教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
SpringBoot公共字段自動(dòng)填充實(shí)現(xiàn)與避坑指南
在開(kāi)發(fā)外賣(mài)系統(tǒng)訂單模塊時(shí),我發(fā)現(xiàn)每個(gè)實(shí)體類(lèi)都包含create_time、update_by等重復(fù)字段,手動(dòng)維護(hù)這些字段不僅效率低下,還容易出錯(cuò),本文將分享一套經(jīng)過(guò)生產(chǎn)驗(yàn)證的自動(dòng)化方案,助你徹底擺脫公共字段維護(hù)的煩惱,需要的朋友可以參考下2025-05-05
SpringBoot3中使用虛擬線程的詳細(xì)過(guò)程
虛擬線程主要解決的問(wèn)題是減少I(mǎi)/O密集型任務(wù)的I/O阻塞,這篇文章主要介紹了SpringBoot3中使用虛擬線程的詳細(xì)過(guò)程,需要的朋友可以參考下2025-06-06
Spring組件初始化擴(kuò)展點(diǎn)BeanPostProcessor的實(shí)現(xiàn)
在Spring框架中,BeanPostProcessor是一個(gè)強(qiáng)大的擴(kuò)展接口,允許開(kāi)發(fā)者在Bean初始化的過(guò)程中插入自定義邏輯,本文就來(lái)介紹一下BeanPostProcessor的使用,感興趣的可以了解一下2025-08-08
Spring Boot與RabbitMQ結(jié)合實(shí)現(xiàn)延遲隊(duì)列的示例
本篇文章主要介紹了Spring Boot與RabbitMQ結(jié)合實(shí)現(xiàn)延遲隊(duì)列的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

