在现有的 Web 应用程序(JSP、Struts)中,本地化通过 JSTL 标记 fmt:setbundle、fmt:message 和 .properties 文件进行管理。
我想摆脱 .properties 文件并使用替代数据源进行本地化。
为了我的目标,我创建了自定义的 ResourceBundle 和 ResourceControl 实现(有关数据选择位置、xml、数据库的详细信息超出范围),但我想知道如何注册和使用它们来代替默认/基于工厂文件的实现,因此我不必在 Web 应用程序文件中修改标记代码 (fmt:message...)。
我看到了指向替换 fmtResourceKey session 值的例子,但它仅限于一个包,看起来像一个“hack”。
有什么好主意吗?
感谢您的帮助!
最佳答案
好的,看来我通过子类化/自定义 java.util.ResourceBundle 解决了问题,它还带有自定义 ResourceBundleControl 和 ResourceBundleControlProvider 的实现(通过服务提供商接口(interface) - SPI 注入(inject))。
Oracle 的这个页面描述了类似的解决方案:
https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/resourcebundlecontrolprovider.html
但缺少重要提示:“将 JAR 放入 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.
谢谢!
关于java - 替换 JSP Web 应用程序中的默认 resourceBundle 和 resourceControl 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110886/