package org.ripple.power.i18n; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; public class I18nSupport { private HashMap<Language, List<ResourceBundle>> pLanguageToBundles = new HashMap<Language, List<ResourceBundle>>(); private boolean pDirty; public void addBundle(ResourceBundle resourceBundle, Language language) { List<ResourceBundle> bundles = pLanguageToBundles.get(language); if (bundles == null) { bundles = new ArrayList<ResourceBundle>(); pLanguageToBundles.put(language, bundles); } bundles.add(resourceBundle); pDirty = true; } public void addBundle(String baseName, Language language) { Locale oldLocale = Locale.getDefault(); Locale.setDefault(language.getLocale()); ResourceBundle bundle = ResourceBundle.getBundle(baseName, language.getLocale()); addBundle(bundle, language); Locale.setDefault(oldLocale); pDirty = true; } public void addBundleOnlyIfNeeded(String baseName, Language language, String key) { try { translate(key, language); } catch (IllegalArgumentException e) { addBundle(baseName, language); } catch (MissingResourceException e) { addBundle(baseName, language); } } public String translate(String key, Language language) { List<ResourceBundle> bundles = pLanguageToBundles.get(language); if (bundles == null) { throw new IllegalArgumentException("Can't find bundle for '" + language + "' language."); } MissingResourceException exception = null; for (ResourceBundle bundle : bundles) { try { return bundle.getString(key); } catch (MissingResourceException e) { exception = e; } } throw exception; } public boolean hasKey(String key, Language language) { try { translate(key, language); } catch (MissingResourceException e) { return false; } return true; } public boolean isDirty() { return pDirty; } }