8

我有一个带有 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)

我需要它commonmodule1并且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(...).

谢谢你的帮助!

4

3 回答 3

0

只需根据https://stackoverflow.com/a/27532814/4258376上的答案扩展 ReloadableResourceBundleMessageSource 来创建一个使用 PathMatchingResourcePatternResolver 的自定义类

然后,您将能够使用具有类路径 * 的基本名称为您的 MessageSource 分配该自定义类:

    @Bean
    public MessageSource messageSource() {
        SmReloadableResourceBundleMessageSource messageSource = new SmReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath*:i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
于 2019-06-20T03:36:02.853 回答
0

我会更好地解释我。

通常我们有一个文件,其中包含新模块文件的 url。例如 com.prueba.test.J2EEDeclarations

公共最终类 J2EEDeclarations { 公共静态最终字符串 MESSAGES_BASENAME = "/WEB-INF/resources/pruebaUtils.i18n";

使用这个模块,我们在我们的 Maven 存储库中创建一个 jar

在父级中,我们导入了这个 jar。

之后,我们只需更改基本名称即可使用属性或新模块

  <array>

    <value>/WEB-INF/resources/xxx.i18n</value>

      <value>#{T(com.prueba.test.J2EEDeclarations).MESSAGES_BASENAME}</value>

  </array>

于 2017-08-25T12:17:28.120 回答
0

I have a message in a module and in the parent basename array i put the classpath

      <property name="basenames">

      <array>

        <value>/WEB-INF/resources/xxx.i18n</value>

          <value>#{T(com.prueba.test.J2EEDeclarations).MESSAGES_BASENAME}</value>

      </array>
  </property>
于 2017-08-25T11:26:13.470 回答