在我的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。 Altought导致
ResourceBundle [com/project/moduleA/i18/journal/journal_messages] not found for MessageSource
如何访问/使用分割为多个依赖项的本地化文件?
答案 0 :(得分:0)
我现在找到了以下解决方案:
我实际上是从上面的配置。我使用main
:
maven-dependency-plugin
项目中的问题
<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
项目。在找到更好的解决方案之前,我们必须这样做。