Material localization support
[debian/openrocket] / core / src / net / sf / openrocket / l10n / ResourceBundleTranslator.java
index 241ecefcfba93f62525c9f6bd0734cb2b6d3937e..d210e01e9b52c328292dbc1c100f0fcff51b0596 100644 (file)
@@ -1,6 +1,7 @@
 package net.sf.openrocket.l10n;
 
 import java.util.Locale;
+import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
 /**
@@ -11,6 +12,7 @@ import java.util.ResourceBundle;
 public class ResourceBundleTranslator implements Translator {
        
        private final ResourceBundle bundle;
+       private final ResourceBundle english;
        
        /**
         * Create a ResourceBundleTranslator using the default Locale.
@@ -29,6 +31,7 @@ public class ResourceBundleTranslator implements Translator {
         */
        public ResourceBundleTranslator(String baseName, Locale locale) {
                this.bundle = ResourceBundle.getBundle(baseName, locale);
+               this.english = ResourceBundle.getBundle(baseName, Locale.ROOT);
        }
        
        
@@ -40,4 +43,27 @@ public class ResourceBundleTranslator implements Translator {
                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;
+       }
 }