我想从各种包中加载多个属性文件作为 ResourceBundle。我可以用Java实现吗
9976 次
4 回答
3
扩展java.util.PropertyResourceBundle
和调用setParent
。
于 2010-04-13T14:36:22.590 回答
0
ResourceBundle.Control() 控制 ResourceBundle 的文件列表。您可以覆盖 getCandidateLocales 和 toBundleName。toBundleName 将语言环境转换为“文件名”和您可以在 getCandidateLocales 中控制的语言环境列表。例如像
final String[] variants = new String[]{"your names"};
ResourceBundle.getBundle(baseName, locale,
new ResourceBundle.Control() {
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
List<Locale> out = new ArrayList<Locale>();
String language = locale.getLanguage();
String country = locale.getCountry();
for (String variant : variants) {
out.add(new Locale(language, country, variant));
}
out.addAll(super.getCandidateLocales(baseName, locale));
return out;
}
public String toBundleName(String baseName, Locale locale) {
Locale l = new Locale(locale.getLanguage(), locale.getCountry());
return locale.getVariant() + "." + super.toBundleName(baseName, l);
}
});
它仅适用于 Java 1.6
于 2010-12-01T14:03:16.523 回答
0
这是我的实现:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
public class CombinedResourceBundle extends ResourceBundle
{
private Map<String, String> combinedResources = new HashMap<>();
private List<String> bundleNames;
private Locale locale;
private Control control;
public CombinedResourceBundle(List<String> bundleNames, Locale locale, Control control)
{
this.bundleNames = bundleNames;
this.locale = locale;
this.control = control;
}
public void load()
{
bundleNames.forEach(bundleName ->
{
ResourceBundle bundle = ResourceBundle.getBundle(bundleName, locale, control);
Enumeration<String> keysEnumeration = bundle.getKeys();
ArrayList<String> keysList = Collections.list(keysEnumeration);
keysList.forEach(key -> combinedResources.put(key, bundle.getString(key)));
});
}
@Override
public Object handleGetObject(String key)
{
return combinedResources.get(key);
}
@Override
public Enumeration<String> getKeys()
{
return Collections.enumeration(combinedResources.keySet());
}
}
于 2018-01-31T21:17:49.537 回答
0
看看这堂课。它非常适合我!Javadoc for class 解释了如何使用它。
MultiplePropertiesResourceBundle (+ 附属ResourceBundleEnumeration )
在这里您可以找到有用的单元测试,也就是代码文档。
于 2016-05-09T04:55:36.423 回答