SpringBoot实现国际化的配置方法

 更新时间:2025年11月07日 09:49:26   作者:lang20150928  
随着一个系统的规模做上去之后,国际化的问题就会逐渐暴露出来,简单来说,当你的系统面对的不再是本国的用户,而要面临海外用户时,系统必须要能适配国际化,所以本文给大家介绍了SpringBoot实现国际化的配置方法,需要的朋友可以参考下

一、什么是“国际化”(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(中文)

application.yml 中明确配置(可选但推荐):

spring:
  messages:
    basename: messages
    fallback-to-system-locale: false
  1. 在代码中通过 MessageSource 获取本地化消息。

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

到此这篇关于SpringBoot支持国际化的配置方法的文章就介绍到这了,更多相关SpringBoot支持国际化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Gson序列化指定忽略字段的三种写法详解

    Gson序列化指定忽略字段的三种写法详解

    在我们日常使用json序列化框架过程中,经常会遇到在输出json字符串时,忽略某些字段,那么在Gson框架中,要想实现这种方式,可以怎么处理呢,本文就来介绍一下
    2021-10-10
  • maven工程中jar包瘦身的五种方法

    maven工程中jar包瘦身的五种方法

    这篇文章主要介绍了maven工程中jar包瘦身的五种方法,帮助大家更好的理解和使用maven,感兴趣的朋友可以了解下
    2021-02-02
  • Java实现反转义的示例代码

    Java实现反转义的示例代码

    本文主要介绍了Java实现反转义的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Java获取磁盘空间的两种代码示例

    Java获取磁盘空间的两种代码示例

    这篇文章主要介绍了Java获取磁盘空间的两种代码示例,没什么事的时候可以拿来玩玩,需要的朋友参考下。
    2017-11-11
  • Mac下安装配置Maven并在IDEA中配置的详细教程

    Mac下安装配置Maven并在IDEA中配置的详细教程

    这篇文章主要介绍了Mac下安装配置Maven并在IDEA中配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • IDEA2022创建Maven Web项目教程(图文)

    IDEA2022创建Maven Web项目教程(图文)

    本文主要介绍了IDEA2022创建Maven Web项目教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • SpringBoot公共字段自动填充实现与避坑指南

    SpringBoot公共字段自动填充实现与避坑指南

    在开发外卖系统订单模块时,我发现每个实体类都包含create_time、update_by等重复字段,手动维护这些字段不仅效率低下,还容易出错,本文将分享一套经过生产验证的自动化方案,助你彻底摆脱公共字段维护的烦恼,需要的朋友可以参考下
    2025-05-05
  • SpringBoot3中使用虚拟线程的详细过程

    SpringBoot3中使用虚拟线程的详细过程

    虚拟线程主要解决的问题是减少I/O密集型任务的I/O阻塞,这篇文章主要介绍了SpringBoot3中使用虚拟线程的详细过程,需要的朋友可以参考下
    2025-06-06
  • Spring组件初始化扩展点BeanPostProcessor的实现

    Spring组件初始化扩展点BeanPostProcessor的实现

    在Spring框架中,BeanPostProcessor是一个强大的扩展接口,允许开发者在Bean初始化的过程中插入自定义逻辑,本文就来介绍一下BeanPostProcessor的使用,感兴趣的可以了解一下
    2025-08-08
  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    Spring Boot与RabbitMQ结合实现延迟队列的示例

    本篇文章主要介绍了Spring Boot与RabbitMQ结合实现延迟队列的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论