【问题标题】:i18: Combine localization files from multiple dependenciesi18:组合来自多个依赖项的本地化文件
【发布时间】:2018-03-15 23:51:56
【问题描述】:

在我的 Spring 项目中,我有一个需要本地化的资源。该项目由一个base 包和多个可以相互构建的附加包组成。最后我有一个主项目,它简单地声明了所有必要的依赖项(base 模块是强制性的)。

需要翻译的资源是日志事件ID。每个模块独立地定义自己的日志事件。这意味着每个模块最终都会有journal_messages 属性用于翻译。

main
|_ dependencies
    |
    |-moduleA
    |     |_`journal_messages_de.properties`
    |     |_`journal_messages_en.properties`
    |
    |-moduleB
          |_`journal_messages_de.properties`
          |_`journal_messages_en.properties`

在主项目中,我最终需要访问所有这些文件。 当我与Spring 合作时,我尝试了以下方法:

我的base 模块创建了ResourceBundleMessageSource bean:

@Bean
public ResourceBundleMessageSource journalMessageSource() {
    ResourceBundleMessageSource source = new ResourceBundleMessageSource();
    source.setBasename("classpath:com/project/base/i18/journal/journal_messages");
    source.setUseCodeAsDefaultMessage(true);
    return source;
}

并且在main\resources\com\project\base\i18\journal中也有自己的文件

在我的其他模块中,我创建了一个配置文件来添加该模块的特定基本名称。

@Autowired
public void addResources(ResourceBundleMessageSource journalMessageSource) {
    journalMessageSource.addBasenames("classpath:com/project/moduleA/i18/journal/journal_messages");
}

main\resources\com\project\moduleA\i18\journal拥有自己的文件

这样,我预计每个模块都会将其自己的本地化文件加载到共享的ResourceBundleMessageSource bean。没想到这会导致

ResourceBundle [com/project/moduleA/i18/journal/journal_messages] not found for MessageSource

如何访问/使用拆分为多个依赖项的本地化文件?

【问题讨论】:

    标签: java spring localization dependencies


    【解决方案1】:

    我现在找到了以下解决方案:

    我实际上是按照上面的配置进行的。我使用maven-dependency-plugin 解决了我的main 项目中的问题:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
            <!-- unpacks i18 resources to be used by the main project -->
            <execution>
                <id>unpack-backend-resources</id>
                <phase>generate-resources</phase>
                <goals>
                    <goal>unpack</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>com.project</groupId>
                            <artifactId>moduleA</artifactId>
                        </artifactItem>
                    </artifactItems>              
                    <overWrite>true</overWrite>
                    <outputDirectory>${project.build.directory}/classes</outputDirectory>
                    <excludes>**/*.class</excludes>
                    <includes>**/i18n/**/*.properties</includes>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    这不是很方便,因为我需要将每个模块声明为artefactItem,但它可以工作。它会将翻译文件从每个依赖项复制到main 项目。在我找到更好的解决方案之前,必须这样做。

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 2019-06-29
      • 1970-01-01
      • 2017-09-21
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多