Java 从多个属性文件进行Spring i18n本地化

Java 从多个属性文件进行Spring i18n本地化,java,spring,maven,internationalization,Java,Spring,Maven,Internationalization,我有两个项目:A和B。A使用B功能,因此B作为maven依赖项添加到A。在B中,我有下一个locale.xml文件: >xmlns=”http://www.springframework.org/schema/beans" >xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" >xsi:schemaLocation=” > http://www.springframework.org/schema/beans >

我有两个项目:A和B。A使用B功能,因此B作为maven依赖项添加到A。在B中,我有下一个locale.xml文件:

>xmlns=”http://www.springframework.org/schema/beans"
>xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance"
>xsi:schemaLocation=”
>        http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans.xsd ">
> 
>     
>     
>     
>     
>         
>             
>/META-INF/i18n/messages
>             
>         
>         
>         
>      

在A中,我有/META-INF/i18n/文件夹和我的道具文件,我使用这些文件,但我还需要使用项目B中的道具文件。主要问题是:我如何在项目A中使用A和B中的道具文件并进行最小的更改?

我看到两种可能的方法来解决您的问题

我想这两个项目都在你的控制之下

备选案文1。在生成期间,将属性文件从B的位置复制到A的位置。我相信这在Maven身上是可能的,当然在Gradle身上是非常容易的…
我不太喜欢这个主意,但它应该行得通

备选案文2。创建一个项目C作为a和B之间的共享依赖项,它将为您的项目提供所需的MessageSourcebean。这是比选项1更优雅的解决方案,但需要额外的依赖关系

备选案文3。你提到的问题表明你的设计有问题。实际上,您不应该要求读取依赖项的资源。依赖项应该为您提供适当的翻译消息(通常需要以这种或那种方式传递区域设置)。如果您碰巧有许多公共消息,那么将它们移动到共享资源文件中并在构建时将它们复制到适当的位置是有意义的。但请确保这些消息非常常见,也就是说,您没有在不同的上下文中使用相同的消息(例如,按钮上的相同文本和窗口标题中的相同文本将以不同的方式翻译为多种语言)。

因此,这个选项是,尝试分析设计是否正确并修复潜在问题。

在项目A的源列表中添加项目B的/META-INF/

> <?xml version="1.0" encoding="UTF-8"?> <beans
> xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xsi:schemaLocation="
>        http://www.springframework.org/schema/beans
>        http://www.springframework.org/schema/beans/spring-beans.xsd ">
> 
>     <!-- ******************** -->
>     <!-- Internationalization -->
>     <!-- ******************** -->
>     <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
>         <property name="basenames">
>             <list>
>                 <value>/META-INF/i18n/messages</value>
>             </list>
>         </property>
>         <property name="defaultEncoding" value="UTF-8"/>
>         <property name="cacheSeconds" value="1"/>
>     </bean> </beans>