Tôi muốn tải nhiều tệp thuộc tính từ các gói khác nhau như ResourceBundle. Tôi có thể đạt được điều đó trong JavaJava Nhiều ResourceBundles
5
A
Trả lời
3
Kéo dài java.util.PropertyResourceBundle
và gọi setParent
.
0
ResourceBundle.Control() kiểm soát danh sách tệp cho ResourceBundle. Bạn có thể ghi đè getCandidateLocales và toBundleName. toBundleName chuyển đổi miền địa phương thành "tên tệp" và danh sách các ngôn ngữ bạn có thể kiểm soát trong getCandidateLocales. Ví dụ như
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);
}
});
Nó chỉ hoạt động trong Java 1.6
0
Nhìn vào lớp này. Nó làm việc cho tôi một cách hoàn hảo! Javadoc cho lớp học giải thích cách sử dụng nó.
MultiplePropertiesResourceBundle (+ chi nhánh ResourceBundleEnumeration)
Ở đây bạn có thể tìm thấy hữu ích unit-tests tài liệu mã a.k.a..
0
Đây là triển khai thực hiện của tôi:
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());
}
}
tin lớp ParentResourceHoleder kéo dài ResourceBundle { \t \t @ Override \t Enumeration công getKeys() { \t \t // TODO phương pháp tự động tạo ra còn sơ khai \t \t trả về null; \t} \t @ Override \t bảo vệ Object handleGetObject (String key) { \t \t // TODO phương pháp tự động tạo còn sơ khai \t \t trở lại null; \t} \t \t @ Override \t protected void setParent (ResourceBundle mẹ) { \t \t super.setParent (mẹ); } } java.util.MissingResourceException: Không thể tìm tài nguyên cho gói java.util.PropertyResourceBundle, khóa đầu vào.error –
Nrusingha
Um, 'mở rộng java.util.PropertyResourceBundle'. –
http://stackoverflow.com/a/4615268/823282 có thể đây là những gì bạn muốn, nhưng không biết bạn muốn nó – activedecay