2010-04-13 6 views

Respuesta

3

Extienda java.util.PropertyResourceBundle y llame al setParent.

+0

ParentResourceHoleder clase privada se extiende ResourceBundle { \t \t @ Override \t Enumeración pública GetKeys() {// \t \t TODO método generado Auto-stub \t \t return null; \t} \t @ Override \t protegido handleGetObject Object (String key) { \t \t // método generado-Auto TODO stub nula \t \t de retorno; \t} \t \t @ Override \t protegida setParent vacío (ResourceBundle padre) { \t \t super.setParent (padre); }} java.util.MissingResourceException: No se puede encontrar el recurso de java.util.PropertyResourceBundle paquete, clave input.error – Nrusingha

+0

Um, 'extiende java.util.PropertyResourceBundle'. –

+0

http://stackoverflow.com/a/4615268/823282 tal vez esto es lo que querías, pero no sabías que lo querías – activedecay

0

ResourceBundle.Control() controla la lista de archivos del ResourceBundle. Puede sobrescribir getCandidateLocales y toBundleName. toBundleName convierte la configuración regional en "nombre de archivo" y la lista de configuraciones regionales que puede controlar en getCandidateLocales. Por ejemplo como

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); 
       } 
      }); 

Sólo funciona en Java 1.6

0

Aquí es mi aplicación:

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()); 
    } 
}