Allow common messages to be specified for message sources
Extend message source configuration properties and auto-configuration to support common messages. See gh-42472
This commit is contained in:
parent
d9668672f8
commit
573ccc5007
|
@ -16,7 +16,10 @@
|
|||
|
||||
package org.springframework.boot.autoconfigure.context;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.time.Duration;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||
|
@ -41,6 +44,7 @@ import org.springframework.context.support.ResourceBundleMessageSource;
|
|||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.core.io.support.PropertiesLoaderUtils;
|
||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.ConcurrentReferenceHashMap;
|
||||
|
@ -81,6 +85,19 @@ public class MessageSourceAutoConfiguration {
|
|||
}
|
||||
messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
|
||||
messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
|
||||
|
||||
try {
|
||||
if (properties.getCommonMessages() != null) {
|
||||
Properties commonProperties = new Properties();
|
||||
for (Resource commonResource : properties.getCommonMessages()) {
|
||||
PropertiesLoaderUtils.fillProperties(commonProperties, commonResource);
|
||||
}
|
||||
messageSource.setCommonMessages(commonProperties);
|
||||
}
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new UncheckedIOException("Failed to load common messages", ex);
|
||||
}
|
||||
return messageSource;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.util.List;
|
|||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.convert.DurationUnit;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
/**
|
||||
* Configuration properties for Message Source.
|
||||
|
@ -44,6 +45,11 @@ public class MessageSourceProperties {
|
|||
*/
|
||||
private List<String> basename = new ArrayList<>(List.of("messages"));
|
||||
|
||||
/**
|
||||
* Comma-separated list of locale-independent common messages.
|
||||
*/
|
||||
private List<Resource> commonMessages;
|
||||
|
||||
/**
|
||||
* Message bundles encoding.
|
||||
*/
|
||||
|
@ -123,4 +129,12 @@ public class MessageSourceProperties {
|
|||
this.useCodeAsDefaultMessage = useCodeAsDefaultMessage;
|
||||
}
|
||||
|
||||
public List<Resource> getCommonMessages() {
|
||||
return this.commonMessages;
|
||||
}
|
||||
|
||||
public void setCommonMessages(List<Resource> commonMessages) {
|
||||
this.commonMessages = commonMessages;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -116,6 +116,14 @@ class MessageSourceAutoConfigurationTests {
|
|||
.run((context) -> assertThat(context.getMessage("foo", null, "Foo message", Locale.UK)).isEqualTo("bar"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCommonMessages() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.messages.basename:test/messages",
|
||||
"spring.messages.common-messages:test/common-messages")
|
||||
.run((context) -> assertThat(context.getMessage("hello", null, "Hello!", Locale.UK)).isEqualTo("world"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFallbackDefault() {
|
||||
this.contextRunner.withPropertyValues("spring.messages.basename:test/messages")
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
hello=world
|
Loading…
Reference in New Issue