首页 > 解决方案 > 当缺少消息键时,如何使 Spring Boot 默认为语言环境?

问题描述

当 Spring Boot 在用户给定的语言环境中找不到消息键时,如何强制它使用默认语言环境?我找到了这个指南: https ://www.baeldung.com/spring-boot-internationalization

我有以下内容:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Bean
    public LocaleResolver localeResolver() {
        AcceptHeaderLocaleResolver lr = new AcceptHeaderLocaleResolver();
        lr.setDefaultLocale(Locale.ENGLISH);
        return lr;
    }

我有messages_es.propertiesmessages_en.properties(还有更多)。

我有钥匙oops-thememessages_en.properties但其他所有钥匙都没有messages*.properties

我将浏览器设置为Accept-Language: es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7.

然而,当我使用 访问 JSP 页面时oops-theme,它给出了异常

javax.servlet.jsp.JspTagException:在语言环境“es_ES”的代码“oops-theme”下找不到消息。

JSP 包含

<spring:message code="oops-theme"/>

当 Spring Boot 在给定的语言环境中找不到消息时,如何使用默认语言环境来查找消息?

春季启动 1.5.21。

标签: javaspringspring-bootinternationalizationspring-internationalization

解决方案


填写messages.properties备用文本的消息,例如英语。

然后不要写messages_en.properties,因为默认消息已经是英文的。

请注意,这完全独立于setDefaultLocale(Locale.ENGLISH),因为它只是说明在缺少 Accept-Language 标头时要使用的 Locale 。

示例:您可以用messages.properties德语书写,如果您愿意,可以使用messages_en.properties英语和messages_es.properties西班牙语。然后您可以拥有setDefaultLocale(Locale.SPANISH),这意味着如果浏览器未指定区域设置,您将获得西班牙语,但对于未在 中提供西班牙语文本的每条消息messages_es.properties,您将从 获得默认的德语文本messages.properties

您应该阅读 javadocResourceBundlePropertyResourceBundle子类以了解这一切是如何工作的。


推荐阅读