如何在WAR之外外化Spring MessageSource包

时间:2009-10-14 13:12:44

标签: spring internationalization external bundle resourcebundle

我必须将Spring MessageSources包外部化为类路径外的i18n支持(属性文件),以便更容易地修改属性。我怎么能这样做?

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="test-messages"/>

谢谢!

2 个答案:

答案 0 :(得分:2)

我们构建了一个消息源实现,用于在数据库中查找消息。你要做的是创建一个继承自spring的AbstractMessageSource的MessageSource实现(为了获得所有功能,请参阅javadoc)。

你必须在最小的情况下实现抽象方法'resolveCode(String,Locale)'(但实现'resolveCodeWithoutArguments(String,Locale)'将增加你的表现),它委托给指向那个简单表的DAO,这样的定义:

table translation (
  translation_id number pk
  code varchar(20)
  locale varchar(5)
  translation varchar(100)
)

代码和语言环境形成唯一索引。

你已经完成了。当然,您将添加一些缓存功能,并提供“区域设置降级”行为(即,如果找不到“en_US”,请尝试“en”),无论是在dao-或MessageSource级别。

这完美无缺。

答案 1 :(得分:1)

检查此thread以获取有关此问题的信息,但我认为将文件置于tomcat上下文之外并不是一个好习惯,因为您永远不知道它将在何处部署您的应用程序。

但是如果你需要,你会在那里找到一些非常好的解决方案。