gpt4 book ai didi

java - 通过覆盖 ResourceBundle 重用属性文件中的键值

转载 作者:行者123 更新时间:2023-12-01 15:15:20 26 4
gpt4 key购买 nike

我们可以重用属性文件中的键值吗?如下所示?

key1=hello
key2=#{key1} world!

谢谢

<小时/>

更新:下面是覆盖 ResourceBundle 的代码,使键值可重用,

public class Messages extends ResourceBundle {

public Messages() {
setParent(getBundle("resources.test", FacesContext.getCurrentInstance().getViewRoot().getLocale()));
}

@Override
public Enumeration<String> getKeys() {
return parent.getKeys();
}


@Override
protected Object handleGetObject(String key) {

try {
return replaceKey(parent, key, 3);
} catch (Exception e) { }
try { return parent.getObject(key);
} catch (MissingResourceException e) {
return key;
}
catch (Exception e) {
return key;
}
}
private Pattern Pattern = Pattern.compile("\\$\\{([\\w\\.\\-]+)\\}");

private String replaceKey(ResourceBundle bundle, String key, int iteration) {
String message = bundle.getString(key);
if (message != null) {
StringBuffer sb = new StringBuffer();
Matcher matcher = Pattern.matcher(message);
while (matcher.find() && iteration > 0) {
// the magic
matcher.appendReplacement(sb, replaceKey(bundle, matcher.group(1), iteration - 1));
}
matcher.appendTail(sb);
return sb.toString();
}
return null;
}

}

请参阅下面的引用

Basic Implementation

Manuplation

最佳答案

这只有通过自定义 ResourceBundle 才能实现其中您覆盖 handleGetObject() 方法检查检索到的 bundle 值是否不包含某些特定语法,应相应地用另一个 bundle 值替换该语法。

最后只需注册自定义ResourceBundle相反在 <resource-bundle><f:loadBundle> .

关于java - 通过覆盖 ResourceBundle 重用属性文件中的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689843/

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