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支持国际化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot集成FTP文件服务器简单应用方式

    SpringBoot集成FTP文件服务器简单应用方式

    这篇文章主要介绍了SpringBoot集成FTP文件服务器简单应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot使用Apache Tika实现多种文档的内容解析

    SpringBoot使用Apache Tika实现多种文档的内容解析

    在日常开发中,我们经常需要解析不同类型的文档,如PDF、Word、Excel、HTML、TXT等,Apache Tika是一个强大的内容解析工具,可以轻松地提取文档中的内容和元数据信息,本文将通过SpringBoot和Apache Tika的结合,介绍如何实现对多种文档格式的内容解析
    2024-12-12
  • java读写excel文件实现POI解析Excel的方法

    java读写excel文件实现POI解析Excel的方法

    在日常工作中,我们常常会进行Excel文件读写操作,这篇文章主要介绍了java读写excel文件实现POI解析Excel的方法,实例分析了java读写excel的技巧,非常具有实用价值,需要的朋友可以参考下
    2018-10-10
  • 关于BufferedReader读取文件指定字符集问题

    关于BufferedReader读取文件指定字符集问题

    这篇文章主要介绍了关于BufferedReader读取文件指定字符集问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 自定义注解和springAOP捕获Service层异常,并处理自定义异常操作

    自定义注解和springAOP捕获Service层异常,并处理自定义异常操作

    这篇文章主要介绍了自定义注解和springAOP捕获Service层异常,并处理自定义异常操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 详解spring中aop不生效的几种解决办法

    详解spring中aop不生效的几种解决办法

    这篇文章主要介绍了详解spring中aop不生效的几种解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 简化API提升开发效率RestTemplate与HttpClient OkHttp关系详解

    简化API提升开发效率RestTemplate与HttpClient OkHttp关系详解

    这篇文章主要为大家介绍了简化API,提升开发效率,RestTemplate与HttpClient OkHttp关系介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Spring超详细讲解BeanUtils改造

    Spring超详细讲解BeanUtils改造

    BeanUtils.copyProperties();确实为我们做了很多事情,虽然不能完美完成深拷贝,但是对于 po、vo、dto 的拷贝已经足够用了。但是其还是有一些不够完美的地方,下面我们来探讨一下有哪些不足以及改造
    2022-06-06
  • Java日期时间与正则表达式超详细整理(适合新手入门)

    Java日期时间与正则表达式超详细整理(适合新手入门)

    如果使用得当,正则表达式是匹配各种模式的强大工具,下面这篇文章主要给大家介绍了关于Java日期时间与正则表达式超详细整理的相关资料,本文非常适合新手入门,需要的朋友可以参考下
    2023-04-04
  • springboot 2.0 mybatis mapper-locations扫描多个路径的实现

    springboot 2.0 mybatis mapper-locations扫描多个路径的实现

    这篇文章主要介绍了springboot 2.0 mybatis mapper-locations扫描多个路径的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论