我有一个现有的 Java/JSF 网站,屏幕上的所有文本都来自属性文件,通过 <f:loadBundle basename="org.example.applicaltion" var="applicaltion" /> 从 applicaltion.properties 中提取文本。
对于这些的运行时可配置子集,我想从其他地方(通过 Web 服务的 CMS)提取字符串。查看 ResourceBundle 类,它似乎有一个基础设施,用于与此类似的东西,并委托给父 ResourceBundle。
我想要这样的东西
public class Applicaltion extends ResourceBundle{
@Override
protected Object handleGetObject(String key) {
if(overridenKey(key)){
return overridedValue(key);
}
return null; // ResourceBundle.getObject will delegate to parent
// if we return null
}
}
我已经尝试过了,并且 parent 为空,我认为这更多地用于默认 -> en -> en_GB 的情况。
我正在考虑一个不太吸引人的选项,即让属性文件与自定义 resourceBundle 的名称不同,然后从 CustomResourceBundle.handleGetObject(key) 中委托 ResourceBundle.getBundle(PROPERTY_FILE_NAME).getString(key) 的完整堆栈。
有更好的想法吗?