替换 JSP Web 应用程序中的默认 resourceBundle 和 resourceControl 实现

Replace default resourceBundle and resourceControl implementations in JSP web application

在现有的 Web 应用程序(JSP、Struts)中,本地化通过 JSTL 标记 fmt:setbundle、fmt:message 和 .properties 文件进行管理。

我想删除 .properties 文件并使用其他数据源进行本地化。

为了我的目标,我创建了自定义的 ResourceBundle 和 ResourceControl 实现(关于数据选择位置的详细信息,xml,数据库,超出范围),但我想知道如何注册和使用它们代替 default/factory 基于文件的实现,因此我不必在 Web 应用程序文件中修改标记代码 (fmt:message...)。

我看到了指向替换 fmtResourceKey 会话值的示例,但它仅限于一个包,它看起来像一个 "hack"。

有什么好主意吗?

感谢您的帮助!

好的,看来我整理了subclassing/customizing java.util.ResourceBundle,它还带有自定义ResourceBundleControl[=27=的实现] 和 ResourceBundleControlProvider(通过服务提供者接口 - SPI 注入)。

Oracle 的此页面描述了类似的解决方案:

https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/resourcebundlecontrolprovider.html

但缺少重要提示:"put your JAR inside VM" 因为 ResourceBundle.GetBundle 方法在内部使用 Serviceloader.LoadInstalled 搜索安装在 Java VM,如 LoadInstalled 文档所述:

This method is intended for use when only installed providers are desired. The resulting servicewill only find and load providers that have been installed into the current Java virtual machine; providers on the application's class path will be ignored.

谢谢!