【问题标题】:How do you make Spring Boot default to a locale when a message key is missing?当缺少消息键时,如何使 Spring Boot 默认为语言环境?
【发布时间】:2019-12-01 01:17:27
【问题描述】:

当 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(还有更多)。

我在messages_en.properties 中有密钥oops-theme,但在所有其他messages*.properties 中都没有它。

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

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

javax.servlet.jsp.JspTagException:在区域设置“es_ES”的代码“oops-theme”下找不到消息。

JSP 包含

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

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

Spring Boot 1.5.21.

【问题讨论】:

    标签: java spring spring-boot internationalization spring-internationalization


    【解决方案1】:

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

    那就不要写messages_en.properties,因为默认消息已经是英文了。

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

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

    您应该阅读 ResourceBundle 的 javadoc 和 PropertyResourceBundle 子类来了解这一切是如何工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2014-08-09
      相关资源
      最近更新 更多