Merge branch 'develop' into feature/JAL-3551Pymol
[jalview.git] / src / jalview / util / MessageManager.java
index 4359506..bb94566 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;
 
 /**
  * 
@@ -37,11 +40,14 @@ public class MessageManager
 {
   private static ResourceBundle rb;
 
+  // BH 2018 switched to org.apache.llog4j.Logger
   private static Logger log = Logger
           .getLogger(MessageManager.class.getCanonicalName());
 
   private static Locale loc;
 
+  private static Set<String> reportedMissing = new HashSet<>();
+
   static
   {
     try
@@ -51,20 +57,21 @@ public class MessageManager
       // Locale.setDefault(loc);
       /* Getting messages for GV */
       log.info("Getting messages for lang: " + loc);
-      rb = ResourceBundle.getBundle("lang.Messages", loc);
-      if (log.isLoggable(Level.FINEST))
-      {
-        // this might take a while, so we only do it if it will be shown
-        log.finest("Language keys: " + rb.keySet());
-      }
+      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
+      // log.info("Language keys: " + rb.keySet()); // was FINEST
+      // }
     } catch (Exception q)
     {
-      log.warning("Exception when initting Locale for i18n messages\n"
+      log.warn("Exception when initting Locale for i18n messages\n"
               + q.getMessage());
       q.printStackTrace();
     } catch (Error v)
     {
-      log.warning("Error when initting Locale for i18n messages\n"
+      log.warn("Error when initting Locale for i18n messages\n"
               + v.getMessage());
       v.printStackTrace();
     }
@@ -86,7 +93,8 @@ public class MessageManager
       value = rb.getString(key);
     } catch (Exception e)
     {
-      log.warning("I18N missing: " + loc + "\t" + key);
+      String msg = "I18N missing: " + loc + "\t" + key;
+         logWarning(key, msg);
     }
     return value;
   }
@@ -112,7 +120,7 @@ public class MessageManager
       return MessageFormat.format(rb.getString(key), params);
     } catch (Exception e)
     {
-      log.warning("I18N missing: " + loc + "\t" + key);
+      log.warn("I18N missing: " + loc + "\t" + key);
     }
     String value = "[missing key] " + key + "";
     for (Object p : params)
@@ -160,9 +168,25 @@ public class MessageManager
       name = rb.getString(smkey);
     } catch (Exception x)
     {
-      log.finest("I18N missing key with root " + keyroot + ": " + loc + "\t"
-              + smkey);
+      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);
+       }
+  }
 }