Skip to content

Commit 573ccc5

Browse files
mmoayyedphilwebb
authored andcommitted
Allow common messages to be specified for message sources
Extend message source configuration properties and auto-configuration to support common messages. See gh-42472
1 parent d966867 commit 573ccc5

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616

1717
package org.springframework.boot.autoconfigure.context;
1818

19+
import java.io.IOException;
20+
import java.io.UncheckedIOException;
1921
import java.time.Duration;
22+
import java.util.Properties;
2023

2124
import org.springframework.aot.hint.RuntimeHints;
2225
import org.springframework.aot.hint.RuntimeHintsRegistrar;
@@ -41,6 +44,7 @@
4144
import org.springframework.core.Ordered;
4245
import org.springframework.core.io.Resource;
4346
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
47+
import org.springframework.core.io.support.PropertiesLoaderUtils;
4448
import org.springframework.core.type.AnnotatedTypeMetadata;
4549
import org.springframework.util.CollectionUtils;
4650
import org.springframework.util.ConcurrentReferenceHashMap;
@@ -81,6 +85,19 @@ public MessageSource messageSource(MessageSourceProperties properties) {
8185
}
8286
messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
8387
messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
88+
89+
try {
90+
if (properties.getCommonMessages() != null) {
91+
Properties commonProperties = new Properties();
92+
for (Resource commonResource : properties.getCommonMessages()) {
93+
PropertiesLoaderUtils.fillProperties(commonProperties, commonResource);
94+
}
95+
messageSource.setCommonMessages(commonProperties);
96+
}
97+
}
98+
catch (IOException ex) {
99+
throw new UncheckedIOException("Failed to load common messages", ex);
100+
}
84101
return messageSource;
85102
}
86103

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/context/MessageSourceProperties.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import org.springframework.boot.context.properties.ConfigurationProperties;
2727
import org.springframework.boot.convert.DurationUnit;
28+
import org.springframework.core.io.Resource;
2829

2930
/**
3031
* Configuration properties for Message Source.
@@ -44,6 +45,11 @@ public class MessageSourceProperties {
4445
*/
4546
private List<String> basename = new ArrayList<>(List.of("messages"));
4647

48+
/**
49+
* Comma-separated list of locale-independent common messages.
50+
*/
51+
private List<Resource> commonMessages;
52+
4753
/**
4854
* Message bundles encoding.
4955
*/
@@ -123,4 +129,12 @@ public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage) {
123129
this.useCodeAsDefaultMessage = useCodeAsDefaultMessage;
124130
}
125131

132+
public List<Resource> getCommonMessages() {
133+
return this.commonMessages;
134+
}
135+
136+
public void setCommonMessages(List<Resource> commonMessages) {
137+
this.commonMessages = commonMessages;
138+
}
139+
126140
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/context/MessageSourceAutoConfigurationTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ void testMessageSourceFromPropertySourceAnnotation() {
116116
.run((context) -> assertThat(context.getMessage("foo", null, "Foo message", Locale.UK)).isEqualTo("bar"));
117117
}
118118

119+
@Test
120+
void testCommonMessages() {
121+
this.contextRunner
122+
.withPropertyValues("spring.messages.basename:test/messages",
123+
"spring.messages.common-messages:test/common-messages")
124+
.run((context) -> assertThat(context.getMessage("hello", null, "Hello!", Locale.UK)).isEqualTo("world"));
125+
}
126+
119127
@Test
120128
void testFallbackDefault() {
121129
this.contextRunner.withPropertyValues("spring.messages.basename:test/messages")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hello=world

0 commit comments

Comments
 (0)