gpt4 book ai didi

java - 如何从 PropertyResourceBundle 覆盖一些资源

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:35 24 4
gpt4 key购买 nike

我有一个现有的 Java/JSF 网站,屏幕上的所有文本都来自属性文件,通过 从应用程序中提取文本。属性。

对于其中的运行时可配置子集,我想从其他地方(通过 Web 服务的 CMS)提取字符串。查看 ResourceBundle 类,它似乎有一个基础设施,用于接近此的东西,并委托(delegate)给父 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 为 null,我认为这更多地用于 default -> en -> en_GB 的情况。

我正在考虑一个不太吸引人的选项,即让属性文件使用与自定义资源包不同的名称,然后从 CustomResourceBundle.handleGetObject(key) 中委派 ResourceBundle.getBundle(PROPERTY_FILE_NAME).getString(key) 的完整堆栈.

有什么更好的主意吗?

最佳答案

我最终通过检查我们是否有一个覆盖值来解决这个问题,如果我们返回那个值,否则委托(delegate)给标准资源包

public class UILabels extends ResourceBundle {


private ResourceBundle getFileResources(){
return ResourceBundle.getBundle("com.example.web.UILabelsFile", this.getLocale());
}

public Enumeration<String> getKeys() {
return getFileResources().getKeys();
}

protected Object handleGetObject(String key) {
if(overrideValue(key)){
return getOverridenValue(key);
}
return getFileResources().getObject(key);
}

}

请注意名称类中的细微差别是 UILabels,所有客户端将使用该文件是 UILabelsFile,因此 ResourceBundle 加载器不会递归。

关于java - 如何从 PropertyResourceBundle 覆盖一些资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/653682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com