package net.sf.openrocket.l10n; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * A translator that obtains translated strings from a resource bundle. * * @author Sampo Niskanen <sampo.niskanen@iki.fi> */ public class ResourceBundleTranslator implements Translator { private final ResourceBundle bundle; private final ResourceBundle english; /** * Create a ResourceBundleTranslator using the default Locale. * * @param baseName the base name of the resource bundle */ public ResourceBundleTranslator(String baseName) { this(baseName, Locale.getDefault()); } /** * Create a ResourceBundleTranslator using the specified Locale. * * @param baseName the base name of the resource bundle * @param locale the locale to use */ public ResourceBundleTranslator(String baseName, Locale locale) { this.bundle = ResourceBundle.getBundle(baseName, locale); this.english = ResourceBundle.getBundle(baseName, Locale.ROOT); } /* * NOTE: This method must be thread-safe! */ @Override public synchronized String get(String key) { return bundle.getString(key); } @Override public synchronized String get(String base, String text) { String key = base + "." + L10N.normalize(text); try { return bundle.getString(key); } catch (MissingResourceException e) { return text; } } @Override public synchronized String getBaseText(String base, String translation) { String prefix = base + "."; for (String key : bundle.keySet()) { if (key.startsWith(prefix)) { String value = bundle.getString(key); if (value.equals(translation)) { return english.getString(key); } } } return translation; } }