developer note pnly
[jalview.git] / src / jalview / util / MessageManager.java
index 71fc47a..823fcc3 100644 (file)
 package jalview.util;
 
 import java.text.MessageFormat;
+import java.util.HashSet;
 import java.util.Locale;
 import java.util.ResourceBundle;
-//import java.util.logging.Level;
-//import java.util.logging.Logger;
+import java.util.ResourceBundle.Control;
+import java.util.Set;
 
 import org.apache.log4j.Logger;
 
@@ -42,21 +43,22 @@ public class MessageManager
 
   private static ResourceBundle rb;
 
-  private static Logger log = Logger
+  private final static Logger log = Logger
           .getLogger(MessageManager.class.getCanonicalName());
 
-  private static Locale loc;
+  private final static Locale loc;
+
+  private final static Set<String> reportedMissing = new HashSet<>();
 
   static
   {
+    loc = Locale.getDefault();
     try
     {
-      /* Localize Java dialogs */
-      loc = Locale.getDefault();
-      // Locale.setDefault(loc);
       /* Getting messages for GV */
       log.info("Getting messages for lang: " + loc);
-      rb = ResourceBundle.getBundle("lang.Messages", loc);
+      Control control = Control.getControl(Control.FORMAT_PROPERTIES);
+      rb = ResourceBundle.getBundle("lang.Messages", loc, control);
       // if (log.isLoggable(Level.FINEST))
       // {
       // // this might take a while, so we only do it if it will be shown
@@ -84,7 +86,8 @@ public class MessageManager
       value = rb.getString(key);
     } catch (Exception e)
     {
-      log.warn("I18N missing: " + loc + "\t" + key);
+      String msg = "I18N missing: " + loc + "\t" + key;
+         logWarning(key, msg);
     }
     return value;
   }
@@ -96,20 +99,20 @@ public class MessageManager
 
   public static String formatMessage(String key, Object... params)
   {
-    return MessageFormat.format(rb.getString(key), params);
+    return MessageFormat.format(getString(key), params);
   }
 
   public static String formatMessage(String key, String[] params)
   {
-    return MessageFormat.format(rb.getString(key), (Object[]) params);
+    return MessageFormat.format(getString(key), (Object[]) params);
   }
 
   /**
-   * lookup and return a key given a root and a human-readable(ish) name that
+   * Looks up and returns a key given a root and a human-readable(ish) name that
    * when combined might resolve to an i18n string. If the key doesn't resolve,
-   * then name is returned.if the key doesn't exist. Use this for
-   * programatically constructed keys that have have a human readable
-   * alternative used in the program (e.g. BLOSUM62 and label.score_blosum62)
+   * then name is returned. Use this for programmatically constructed keys that
+   * have a human readable alternative used in the program (e.g. BLOSUM62 and
+   * label.score_blosum62).
    * 
    * @param keyroot
    * @param name
@@ -123,9 +126,25 @@ public class MessageManager
       name = rb.getString(smkey);
     } catch (Exception x)
     {
-      log.info("I18N missing key with root " + keyroot + ": " + loc + "\t"
-              + smkey); // was FINEST
+      String msg = "I18N missing key with root " + keyroot + ": " + loc + "\t"
+                         + smkey;
+         logWarning(smkey, msg);
     }
     return name;
   }
+
+  /**
+   * Logs missing keys (each key once only per run)
+   * 
+   * @param key
+   * @param msg
+   */
+  private static void logWarning(String key, String msg) 
+  {
+       if (!reportedMissing.contains(key))
+       {
+      reportedMissing.add(key);
+         log.info(msg);
+       }
+  }
 }