当前位置: 首页 > news >正文

Spring Boot 如何支持国际化

🌍 一、什么是“国际化”(i18n)?

  • 让同一个应用能 自动显示不同语言的内容
  • 比如:
    • 用户浏览器语言是 zh-CN(简体中文)→ 显示“欢迎”
    • 用户语言是 en-US(美式英语)→ 显示“Welcome”

Spring Boot 通过 MessageSource 接口实现这一功能,而它默认使用 资源文件(properties 文件) 来存储不同语言的消息。


📁 二、默认行为:自动配置 MessageSource

✅ 自动生效的条件:

Spring Boot 只有在 classpath 根目录下找到 messages.properties 文件时,才会自动配置 MessageSource

也就是说:

  • 如果你有 messages.properties(这是默认语言,通常是英文或中性语言),Spring Boot 会自动启用国际化支持。
  • 如果你只有 messages_zh.propertiesmessages_fr.properties,但没有 messages.properties,那么 Spring Boot 不会自动配置 MessageSource

💡 所以:必须提供一个默认的 messages.properties,即使它是空的!


📦 三、如何自定义资源包位置?

你可以通过 application.propertiesapplication.yml 修改默认设置:

# 指定多个资源文件基名(basename),用逗号分隔
spring.messages.basename=messages,config.i18n.messages# 是否回退到系统本地语言(默认 true)
spring.messages.fallback-to-system-locale=false

解释:

  • spring.messages.basename=messages,config.i18n.messages

    • 表示 Spring 会去加载两类资源文件:
      1. messages.propertiesmessages_zh_CN.properties
      2. config/i18n/messages.propertiesconfig/i18n/messages_en.properties
    • 路径可以是:
      • 类路径根目录下的文件(如 messages.properties
      • 包路径形式(如 config.i18n.messages → 对应 classpath:config/i18n/messages.properties
  • spring.messages.fallback-to-system-locale=false

    • 默认为 true:如果用户 locale 是 zh-CN,但找不到 messages_zh_CN.properties,就会尝试 messages_zh.properties → 再找不到就用系统默认 locale(比如服务器操作系统的语言)。
    • 设为 false:找不到精确匹配就直接用 messages.properties(不回退到系统 locale)。

🗂️ 四、资源文件命名规则

假设你的 basename 是 messages,那么 Spring 会按以下优先级查找:

用户 Locale尝试加载的文件(按顺序)
zh_CNmessages_zh_CN.propertiesmessages_zh.propertiesmessages.properties
frmessages_fr.propertiesmessages.properties
任意未知 locale直接用 messages.properties

⚠️ 注意:messages.properties 是兜底文件,必须存在,否则整个国际化机制不会启动!


🔧 五、代码中如何使用?

在 Controller 或 Service 中注入 MessageSource

@Autowired
private MessageSource messageSource;@GetMapping("/greet")
public String greet(Locale locale) {return messageSource.getMessage("greeting", null, locale);
}

对应的 messages.properties

greeting=Hello!

messages_zh.properties

greeting=你好!

当请求带 Accept-Language: zh 时,返回“你好!”;否则返回“Hello!”。


✅ 总结关键点

要点说明
必须有 messages.properties否则 Spring Boot 不会自动配置 MessageSource
支持多组资源文件spring.messages.basename=a,b,c 配置
路径写法config.i18n.messages 表示 classpath:config/i18n/messages.properties
回退机制默认会尝试系统 locale,可通过 fallback-to-system-locale=false 关闭
文件命名basename + _ + language + _ + country + .properties

💡 建议实践

  1. src/main/resources/ 下创建:
    • messages.properties(默认英文)
    • messages_zh.properties(中文)
  2. application.yml 中明确配置(可选但推荐):
    spring:messages:basename: messagesfallback-to-system-locale: false
    
  3. 在代码中通过 MessageSource 获取本地化消息。

这样你的 Spring Boot 应用就具备了多语言能力!

需要我给你一个完整的示例项目结构吗?

http://www.dtcms.com/a/577636.html

相关文章:

  • Excel斜线表头怎么做?合并单元格后添加对角线+两侧输入文字,新手也能秒会!
  • ara::core——Adaptive AUTOSAR
  • 大语言模型训推一体机:AI算力革命的“新引擎”,2031年市场规模突破123亿的黄金赛道
  • 百度网站降级的原因计算机一级考试网站怎么做
  • 复数的矩阵表示 | 欧拉恒等式的复数矩阵变换
  • Linux 系统调用在 ARM 上的实现与工作机制
  • 红松小课如何成为激活老年人生活的新引擎?从兴趣学习到价值重塑!
  • 怎么才能去定义自己的生活呢?
  • 嘉兴云建站模板重庆网站备案大厅
  • Java并发实战:ConcurrentHashMap原理与常见面试题
  • 前端FAQ: 在React中,如何优化⼤列表的渲染性能?
  • 华硕ROC奥创中心Armoury Crate服务崩溃解决办法
  • 工业软件国产替代:突破“卡脖子”,筑牢制造业升级基石
  • 大专生就业是否存在学历歧视?
  • Java 8 Stream API 进阶实战:从基础到业务落地的全解析​
  • Java117 最长公共前缀
  • 共聚焦显微镜(LSCM)的针孔尺寸标准解析
  • 长春网站优化方式投票链接制作
  • 酷炫的网站欢迎页面wordpress图片分页
  • 深入理解 flex-shrink:CSS 弹性布局中的 “收缩” 智慧
  • React+Tailwind CSS+Shadcn UI
  • 神经网络—— 优化
  • 有名的网站制怎样才能把网站宣传做的更好
  • MIPI DSI和MIPI Tx IP 的建立
  • 基于时间的 SQL 盲注-延时判断和基于布尔的 SQL 盲注
  • 个人微信公众号怎么做微网站seo完整教程视频教程
  • C++_chapter10_C++IO流类库
  • 树莓派5-docker里的ros常用命令
  • 网站地图1 500 怎么做网站推广方案及预算
  • 餐饮网站方案一个完整的网站怎么做