diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java index 8cbd87fc88f..dddc7ee9528 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java @@ -80,6 +80,12 @@ public class MessageSourceAutoConfiguration { */ private boolean fallbackToSystemLocale = true; + /** + * Set whether to always apply the MessageFormat rules, parsing even messages without + * arguments. + */ + private boolean alwaysUseMessageFormat = false; + @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); @@ -92,6 +98,7 @@ public class MessageSourceAutoConfiguration { } messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale); messageSource.setCacheSeconds(this.cacheSeconds); + messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat); return messageSource; } @@ -127,6 +134,14 @@ public class MessageSourceAutoConfiguration { this.fallbackToSystemLocale = fallbackToSystemLocale; } + public boolean isAlwaysUseMessageFormat() { + return this.alwaysUseMessageFormat; + } + + public void setAlwaysUseMessageFormat(boolean alwaysUseMessageFormat) { + this.alwaysUseMessageFormat = alwaysUseMessageFormat; + } + protected static class ResourceBundleCondition extends SpringBootCondition { private static ConcurrentReferenceHashMap cache = new ConcurrentReferenceHashMap(); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfigurationTests.java index ddb6deb6981..68d2cf80040 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfigurationTests.java @@ -116,6 +116,21 @@ public class MessageSourceAutoConfigurationTests { .isFallbackToSystemLocale()).isFalse(); } + @Test + public void testFormatMessageDefault() throws Exception { + load("spring.messages.basename:test/messages"); + assertThat(this.context.getBean(MessageSourceAutoConfiguration.class) + .isAlwaysUseMessageFormat()).isFalse(); + } + + @Test + public void testFormatMessageOn() throws Exception { + load("spring.messages.basename:test/messages", + "spring.messages.always-use-message-format:true"); + assertThat(this.context.getBean(MessageSourceAutoConfiguration.class) + .isAlwaysUseMessageFormat()).isTrue(); + } + @Test public void existingMessageSourceIsPreferred() { this.context = new AnnotationConfigApplicationContext(); diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index fa31ea2ee9b..8c0dd59ad00 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -109,6 +109,7 @@ content into your application; rather pick only the properties that you need. spring.mandatory-file-encoding= # Expected character encoding the application must use. # INTERNATIONALIZATION ({sc-spring-boot-autoconfigure}/MessageSourceAutoConfiguration.{sc-ext}[MessageSourceAutoConfiguration]) + spring.messages.always-use-message-format=false # Set whether to always apply the MessageFormat rules, parsing even messages without arguments. spring.messages.basename=messages # Comma-separated list of basenames, each following the ResourceBundle convention. spring.messages.cache-seconds=-1 # Loaded resource bundle files cache expiration, in seconds. When set to -1, bundles are cached forever. spring.messages.encoding=UTF-8 # Message bundles encoding.