Spring Boot 國際化配置項詳解


Spring Boot 國際化配置項詳解


1. 核心配置項分類

將配置項分為以下類別,便于快速定位:


1.1 消息源配置(MessageSource 相關)

控制屬性文件的加載、編碼、緩存等行為。

配置項作用默認值示例說明
spring.messages.basename指定屬性文件的路徑前綴(不包含語言后綴)messagesclasspath:i18n/messages支持多路徑用逗號分隔,如 messages,custom
spring.messages.encoding屬性文件的編碼格式UTF-8GBK避免中文亂碼需顯式指定
spring.messages.cache-duration屬性文件緩存時間(僅 ReloadableResourceBundleMessageSource 有效)7200s(2小時)60sPT1M(ISO 8601格式)設置為 0 禁用緩存,實現熱加載

1.2 區域解析配置(LocaleResolver 相關)

控制如何確定用戶的區域(Locale)。

配置項作用默認值示例說明
spring.mvc.locale默認區域(當無法自動檢測時使用)由系統 Locale 決定es(西班牙語)直接指定語言代碼(如 zh-CN
spring.mvc.fallback-locale備用區域(當主區域無效時使用)enzh支持多個值,用逗號分隔
spring.http.accept-language.header自定義語言檢測的請求頭名稱Accept-LanguageX-Language例如從自定義頭讀取語言

1.3 Cookie 持久化配置(僅 CookieLocaleResolver
配置項作用默認值示例說明
spring.mvc.locale-resolver.cookie-nameCookie 名稱LOCALElang自定義 Cookie 名稱
spring.mvc.locale-resolver.cookie-max-ageCookie 有效期(秒)1440(24分鐘)3600(1小時)設置為 -1 表示會話級,0 刪除 Cookie

1.4 Session 持久化配置(僅 SessionLocaleResolver

無獨立配置項,依賴 Session 的默認行為。


1.5 其他高級配置
配置項作用默認值示例說明
spring.messages.always-use-message-format是否強制使用 MessageFormat 解析消息(支持 {0} 占位符)truefalse關閉后僅支持簡單鍵值對,性能更高
spring.messages.use-code-as-default-message當消息未找到時,是否返回原始鍵(如 error.loginfalsetrue開啟后避免因消息缺失導致空值

2. 完整配置示例(application.properties/yml)
2.1 properties 格式
# 消息源配置
spring.messages.basename=classpath:i18n/messages,classpath:i18n/overrides
spring.messages.encoding=UTF-8
spring.messages.cache-duration=3600s # 1小時熱加載# 區域配置
spring.mvc.locale=zh-CN
spring.mvc.fallback-locale=en
spring.http.accept-language.header=X-Language# Cookie 持久化配置
spring.mvc.locale-resolver.cookie-name=MY_LOCALE
spring.mvc.locale-resolver.cookie-max-age=86400 # 1天
2.2 YAML 格式
spring:messages:basename: "classpath:i18n/messages,classpath:i18n/overrides"encoding: UTF-8cache-duration: 3600smvc:locale: "zh-CN"fallback-locale: enlocale-resolver:cookie-name: MY_LOCALEcookie-max-age: 86400http:accept-language:header: X-Language

3. 代碼配置示例(Java 配置覆蓋)
3.1 自定義 ReloadableResourceBundleMessageSource
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;@Configuration
public class I18nConfig {@Beanpublic ReloadableResourceBundleMessageSource messageSource() {ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();source.setBasenames("i18n/messages", "i18n/overrides"); // 支持多個前綴source.setDefaultEncoding("UTF-8");source.setCacheSeconds(60); // 覆蓋配置項,60秒熱加載return source;}
}
3.2 自定義 LocaleResolver(Cookie 持久化)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;@Configuration
public class LocaleConfig {@Beanpublic CookieLocaleResolver localeResolver() {CookieLocaleResolver resolver = new CookieLocaleResolver();resolver.setCookieName("CUSTOM_LOCALE"); // 覆蓋配置項resolver.setCookieMaxAge(86400);         // 1天有效期resolver.setDefaultLocale(Locale.JAPAN); // 默認日語return resolver;}
}

4. 配置項總結表格
配置類型配置項作用默認值適用場景
消息源spring.messages.basename屬性文件路徑messages自定義多語言文件路徑
消息源spring.messages.encoding文件編碼UTF-8解決亂碼問題
消息源spring.messages.cache-duration熱加載間隔7200s開發環境快速調試
區域spring.mvc.locale默認語言系統默認設置全局默認語言
區域spring.http.accept-language.header自定義語言頭Accept-Language適配非標準請求頭
Cookiespring.mvc.locale-resolver.cookie-nameCookie 名稱LOCALE避免與其他應用沖突
Session無獨立配置項依賴 Session——會話內語言切換

5. 常見問題解答

Q1:如何確保屬性文件被正確加載?
  • 檢查路徑:確保文件位于 src/main/resources/i18n/ 目錄(或配置的路徑)。
  • 文件命名:格式為 <basename>_{language}.properties(如 messages_zh_CN.properties)。
  • 日志調試:添加 logging.level.org.springframework.context.support=DEBUG 查看加載日志。

Q2:如何強制使用固定語言?
# application.properties
spring.mvc.locale=es # 強制西班牙語
spring.mvc.fallback-locale=es # 備用語言也設為西班牙語

Q3:如何同時支持 URL 參數切換語言?

結合 LocaleChangeInterceptor

import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LocaleChangeInterceptor()).addPathPatterns("/**"); // 通過 ?lang=es 參數切換}
}

Q4:屬性文件中的 {0} 占位符無效?
  • 確保 spring.messages.always-use-message-format=true(默認值)。
  • 示例消息:
    greeting=Hello, {0}!
    

Q5:如何避免 Cookie 跨域問題?

CookieLocaleResolver 中設置域:

resolver.setCookieDomain(".example.com"); // 設置域為整個域名

6. 最佳實踐
  • 多環境配置:通過 application-{profile}.properties 區分開發和生產環境的 cache-duration
  • 性能優化:生產環境禁用熱加載(設為 0 可能影響性能)。
  • 國際化測試:使用 Postman 或瀏覽器插件修改 Accept-Language 頭測試不同語言。

總結

通過上述配置,可靈活控制 Spring Boot 國際化行為。核心是理解 MessageSourceLocaleResolver 的協作關系,結合業務需求選擇合適的持久化策略(Cookie/Session)和文件加載方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76288.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

拍攝的婚慶視頻有些DAT的視頻文件打不開怎么辦

3-12 現在的婚慶公司大多提供結婚的拍攝服務&#xff0c;或者有一些第三方公司做這方面業務&#xff0c;對于視頻拍攝來說&#xff0c;有時候會遇到這樣一種問題&#xff0c;就是拍攝下來的視頻文件&#xff0c;然后會有一兩個視頻文件是損壞的&#xff0c;播放不了&#xff0…

【力扣hot100題】(073)數組中的第K個最大元素

花了兩天時間搞明白答案的快速排序和堆排序。 兩種都寫了一遍&#xff0c;感覺堆排序更簡單很多。 兩種都記錄一下&#xff0c;包括具體方法和易錯點。 快速排序 class Solution { public:vector<int> nums;int quicksort(int left,int right,int k){if(leftright) r…

【親測】Linux 使用 Matplotlib 顯示中文

文章目錄 安裝中文字體在Matplotlib中使用該字體來顯示中文 在 Linux 系統中使用 Matplotlib 繪制圖表時&#xff0c;如果需要顯示中文&#xff0c;可能會遇到中文字符顯示為方塊或者亂碼的問題。這是因為Matplotlib 默認使用的字體不支持中文。本文手把手帶你解決這個問題。 …

Redis Java 客戶端 之 SpringDataRedis

SpringDataRedis SpringData是Spring中數據操作的模塊&#xff0c;包含對各種數據庫的集成&#xff0c;其中對Redis集成模塊就叫做SpringDataRedis&#xff0c; 官方地址&#xff1a;https://spring.io/projects/spring-data-redis 特性&#xff1a; 提供了對不同Redis客戶端…

數字化轉型:重構生存邏輯,不止系統升級

數字化轉型不過是升級系統&#xff0c;砸了錢、耗了力&#xff0c;卻沒達到預期&#xff0c;競爭力也沒提升。實際上&#xff0c;數字化轉型是對企業生存邏輯的徹~底重構&#xff0c;關乎商業模式、運營流程等方方面面。? 很多企業覺得數字化轉型是 IT 部門的事&#xff0c;只…

C語言隊列的實現

目錄 ?編輯 &#xff08;一&#xff09;隊列的定義,初始化及創建結點 &#xff08;二&#xff09;入隊和出隊&#xff0c;以及取隊頭隊尾的數據 (三)銷毀隊列 隊列是指只允許在一端進行插入數據操作&#xff0c;在另?端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先…

mapbox進階,使用本地dem數據,加載hillshade山體陰影圖層

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??hillshade 山體陰影圖層 api1.3.1 ??…

量子糾錯碼實戰:從Shor碼到表面碼

引言&#xff1a;量子糾錯的必要性 量子比特的脆弱性導致其易受退相干和噪聲影響&#xff0c;單量子門錯誤率通常在10?~10?量級。量子糾錯碼&#xff08;QEC&#xff09;通過冗余編碼測量校正的機制&#xff0c;將邏輯量子比特的錯誤率降低到可容忍水平。本文從首個量子糾錯…

10. git switch

基本概述 git switch是 Git 2.23 版本之后新增的命令&#xff0c;專門用于切換分支&#xff0c;目的是替代 git checkout 中與分支操作相關的功能&#xff0c;使命令語義更清晰、更安全。 基本用法 1.切換到已有分支 git switch <branch-name>常用選項 1.從當前分支…

LeetCode 熱題 100 堆

215. 數組中的第K個最大元素 給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 **k** 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 …

PIXOR:基于LiDAR的3D檢測模型解析

目錄 1、前言 2、PIXOR介紹 2.1. 什么是PIXOR&#xff1f; 2.2. PIXOR如何工作&#xff1f; 3、表現和應用 3.1、PIXOR的性能表現 3.2、PIXOR的應用場景 3.3、PIXOR的局限性與挑戰 4. PIXOR的未來展望 5. 結語 1、前言 自動駕駛技術正以前所未有的速度發展&#xff…

Vue中權限控制的方案

文章目錄 源碼&#xff1a;一、頁面級1.1、路由守衛1.2、動態路由 二、按鈕級別2.1、通過v-if來判斷2.2、通過組件包裹的方式來判斷2.3、通過自定義指令的方式 三、接口級別 源碼&#xff1a; https://gitee.com/liu-qiang-yyds/sysPermission 一、頁面級 1.1、路由守衛 前端…

【OSG學習筆記】Day 1: OSG初探——環境搭建與第一個3D窗口

什么是 OSG&#xff1f; 全稱&#xff1a;OpenSceneGraph&#xff08;開源場景圖&#xff09; 定位&#xff1a;一個基于 C/OpenGL 的高性能開源3D圖形開發工具包&#xff0c;專注于實時渲染和復雜場景管理。 核心思想&#xff1a;通過 場景圖&#xff08;Scene Graph&#xf…

Kubernetes 入門篇之網絡插件 calico 部署與安裝

在運行kubeadm init 和 join 命令部署好master和node節點后&#xff0c;kubectl get nodes 看到節點都是NotReady狀態&#xff0c;這是因為沒有安裝CNI網絡插件。 kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Not…

游戲開發中 C#、Python 和 C++ 的比較

&#x1f3ac; Verdure陌矣&#xff1a;個人主頁 &#x1f389; 個人專欄: 《C/C》 | 《轉載or娛樂》 &#x1f33e; 種完麥子往南走&#xff0c; 感謝您的點贊、關注、評論、收藏、是對我最大的認可和支持&#xff01;?? 摘要&#xff1a; 那么哪種編程語言最適合游戲開發…

LabVIEW真空度監測與控制系統

開發了一種基于LabVIEW的真空度信號采集與管理系統&#xff0c;該系統通過圖形化編程語言實現了真空度的高精度測量和控制。利用LabVIEW的強大功能&#xff0c;研制了相應的硬件并設計了完整的軟件解決方案&#xff0c;以滿足工業應用中對真空度監測的精確要求。 項目背景 隨著…

checkra1n越獄出現的USB error -10問題解決

使用checkra1n進行越獄是出現&#xff1a; 解決辦法(使用命令行進行越獄)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先進入恢復模式 a .可使用愛思助手 b. 或者長按home,出現關機的滑條&#xff0c;同時按住home和電源鍵&#…

spring boot 中 WebClient 與 RestTemplate 的對比總結

以下是 WebClient 與 RestTemplate 的對比總結&#xff0c;以純文本表格形式呈現&#xff1a; 核心特性對比 特性RestTemplateWebClient線程模型同步阻塞&#xff1a;每個請求占用線程&#xff0c;直到響應返回。異步非阻塞&#xff1a;基于事件循環&#xff0c;高效處理高并發…

深入淺出SPI通信協議與STM32實戰應用(W25Q128驅動)(實戰部分)

1. W25Q128簡介 W25Q128 是Winbond推出的128M-bit&#xff08;16MB&#xff09;SPI接口Flash存儲器&#xff0c;支持標準SPI、Dual-SPI和Quad-SPI模式。關鍵特性&#xff1a; 工作電壓&#xff1a;2.7V~3.6V分頁結構&#xff1a;256頁/塊&#xff0c;每塊16KB&#xff0c;共1…

STM32 HAL庫之EXTI示例代碼

外部中斷按鍵控制LED燈 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中斷優先級以及HAL_MspInit函數&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …