Мультимодуль Spring i18n с модулями, расширяющими содержимое messageSource

У меня есть многомодульный проект Spring с Maven. Я использую 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(...).

Спасибо за вашу помощь!


person Benjamin M    schedule 15.07.2013    source источник
comment
У меня точно такая же проблема. знак равно   -  person Fernando Gomes    schedule 17.05.2017


Ответы (3)


У меня есть сообщение в модуле, и в родительском массиве базовых имен я помещаю путь к классам

      <property name="basenames">

      <array>

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

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

      </array>
  </property>
person Gorka Zarate    schedule 25.08.2017
comment
Хорошо, у вас есть это сообщение, но что с ним делать? Пожалуйста, объясните свой ответ (должны ли они добавить это в свой файл конфигурации mvn? Использовать что-то подобное? ...?) - person NatNgs; 25.08.2017

Я лучше объясню.

Обычно у нас есть файл с URL файлов нового модуля. Например, com.prueba.test.J2EEDeclarations

открытый окончательный класс J2EEDeclarations { открытый статический окончательный String MESSAGES_BASENAME = "/WEB-INF/resources/pruebaUtils.i18n";

С помощью этого модуля мы создаем банку в нашем репозитории maven.

И в родителя импортируем эту банку.

После этого нам нужно только изменить базовое имя, чтобы использовать свойства или новый модуль.

  <array>

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

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

  </array>

person Gorka Zarate    schedule 25.08.2017