spring - Spring配置文件中的多个messageSources

标签 spring internationalization extensibility resourcebundle

我们的 Web 应用程序使用 Spring 2.5。它由几个模块组成,每个模块都可以带来额外的 Spring 上下文文件,这些文件会自动加载(到一个应用程序上下文中)。我们想让每个模块都提供额外的资源包(用于 I18N 支持)。

Spring 通过在配置文件中注册一个名为 messageSource 的 bean 来支持国际化,但这假设我确切知道包含翻译字符串的类或属性文件的完全限定名称是什么。这是一个问题,因为其他模块可能会将自己的属性文件放在不同的位置。所以我正在寻找一种方法让每个模块使用自己的资源包定义自己的 messageSource,但我不知道该怎么做。

有人知道这个问题的解决方案吗?

谢谢。

最佳答案

我使用 Spring 中的 Message Sources 来支持 i18n。就我而言,我只需要一个,因此很容易将我需要的一个消息源注入(inject)到我正在创建的服务 bean 中。

我希望看到类似我稍后将在 Spring 源代码中提出的内容。但我看不到任何会聚合异构消息源的东西。如果它们都是像属性文件这样的资源包的一部分,我相信你可以为 ResourceBundleMessageSource 编写一个包装器,它可以在注册 bean 时动态更新。

但是,如果您想聚合异构 MessageSource,这就是我的建议。创建一个消息源聚合 bean,它在加载时向 ApplicationContext 询问 MessageSource.class 类型的 bean。然后,此聚合 bean 可以让每个源尝试解析 key 并格式化消息。根据您拥有的文件/消息源类的数量,您可能希望允许聚合实现优先考虑它首先尝试使用的那些。如果性能成为问题,您还可以缓存哪个源解析了哪些键,这样聚合器就不必每次都猜测。

关于spring - Spring配置文件中的多个messageSources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947282/

相关文章:

c# - 将 MEF 与 C# 结合使用,如何从插件调用主机上的方法?

java - 将带有嵌套字符的字符串转换为java中特定的json格式

Spring - nginx 中的邮件发件人

java - 如何设置 Spring TCP 客户端和服务器模型?

c# - 根据当前文化调用不同的(本地化的) View

ruby-on-rails - 如何覆盖 ruby​​-on-rails 中的通用 activerecord 错误消息?

php - 在 PHP 应用程序中实现国际化(语言字符串)

c# - 如何将参数作为反射传递/传出? - visual studio 可扩展性 c#

.net - 微软的 MEF 与 Eclipse 相比如何?

spring - 链接到 Spring Data Rest 中的嵌入式实体