You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot国际化fallback消息始终为英文,默认Locale配置不生效问题求助

问题根源

你遇到的问题是Spring Boot国际化资源的降级逻辑和LocaleResolver的默认区域配置独立导致的,两者作用场景完全不同:

  • LocaleResolver中配置的默认Locale,仅作用于**请求未携带任何区域标识(比如没传lang参数)**的场景
  • 资源文件缺失时的降级逻辑由MessageSource的fallbackToSystemLocale参数控制,该参数默认值为true:当找不到请求对应区域的资源文件时,会先尝试匹配JVM运行环境的默认区域,若你服务器JVM默认区域为英文,就会命中message_en.properties,最后才会回退到根资源文件,这就是你传入lang=es返回英文文案的原因。

解决步骤

1. 配置文件方式修改(适配默认自动装配的MessageSource)

如果你没有自定义MessageSource Bean,直接在application.properties中添加如下配置即可:

spring.messages.fallback-to-system-locale=false

如果使用application.yml,配置如下:

spring:
  messages:
    fallback-to-system-locale: false

关闭该配置后,只要找不到请求对应区域的资源文件,就会直接回退到根message.properties的意大利语文案。

2. 自定义Bean方式修改(适配自定义MessageSource的场景)

如果你手动声明了MessageSource Bean,需要在Bean定义中显式关闭该开关:

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("message");
    messageSource.setDefaultEncoding("UTF-8");
    // 核心配置:关闭回退到系统默认区域的逻辑
    messageSource.setFallbackToSystemLocale(false);
    return messageSource;
}

效果验证

配置完成后即可符合预期:

  • 携带lang=en参数时,返回message_en.properties的英文文案
  • 携带其他lang参数、或者未传lang参数时,统一返回message.properties的意大利语文案

内容的提问来源于stack exchange,提问作者Cristiano Longo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 23:12:00