我有一个带Maven的多模块Spring项目。我正在使用带有注释配置的Spring 3.2.3。
我有以下布局:
parent
common (depends on parent)
webapp (depends on parent, common, module1, module2)
module1 (depends on parent)
module2 (depends on parent)
我需要common
,module1
和module2
可以指定自己的i18n属性(而webapp
会收集这些文件并以某种方式提供它们?!):
common: src/main/resources/i18n/messages_en.properties
module1: src/main/resources/i18n/messages_en.properties
module2: src/main/resources/i18n/messages_en.properties
我尝试使用
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
但看起来Spring只会使用一个的翻译文件,而是应该全部使用。
另一种可能性是为每个模块指定一个唯一的属性文件名,但后来我不知道要通过messageSource.setBasename(...)
设置什么 basename 。
感谢您的帮助!
答案 0 :(得分:0)
我在模块中有一条消息,在父basename数组中我放了classpath
<property name="basenames">
<array>
<value>/WEB-INF/resources/xxx.i18n</value>
<value>#{T(com.prueba.test.J2EEDeclarations).MESSAGES_BASENAME}</value>
</array>
</property>
答案 1 :(得分:0)
我会更好地解释我。
通常我们有一个文件,其中包含新模块文件的URL。例如com.prueba.test.J2EEDeclarations
public final class J2EEDeclarations { public static final String MESSAGES_BASENAME =“/ WWE-INF / resources /pruebaUtils.i18n”;
通过这个模块,我们在maven资源库中创建了一个jar
在父母中我们导入了这个jar。
之后我们只需要更改basename以使用属性或新模块
<array>
<value>/WEB-INF/resources/xxx.i18n</value>
<value>#{T(com.prueba.test.J2EEDeclarations).MESSAGES_BASENAME}</value>
</array>
答案 2 :(得分:0)
只需通过扩展ReloadableResourceBundleMessageSource创建使用PathMatchingResourcePatternResolver的自定义类 根据 https://stackoverflow.com/a/27532814/4258376
的答案然后,您将能够使用具有classpath *的基本名称为MesssageSource分配该自定义的类:
╔═══════════╦═══════════╦═══════╦══════════════════════╗
║ USER_ID ║ USERNAME ║ TYPE ║ LAST_LOGIN_DATE ║
╠═══════════╬═══════════╬═══════╬══════════════════════╣
║ 1 ║ XX ║ - ║ - ║LOG_ID(-)
║ 2 ║ YY ║ - ║ - ║LOG_ID(-)
║ 3 ║ ZZ ║ - ║ - ║LOG_ID(-)
╚═══════════╩═══════════╩═══════╩══════════════════════╝