/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
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;
/**
*
public class MessageManager
{
+ // BH 2018 switched to org.apache.llog4j.Logger
+
private static ResourceBundle rb;
- private static Logger log = Logger.getLogger(MessageManager.class
- .getCanonicalName());
+ private final static Logger log = Logger
+ .getLogger(MessageManager.class.getCanonicalName());
+
+ private final static Locale loc;
- private 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);
- 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();
}
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;
}
public static String formatMessage(String key, Object... params)
{
- return MessageFormat.format(rb.getString(key), (Object[]) params);
+ return MessageFormat.format(getString(key), params);
+ }
+
+ public static String formatMessage(String key, String[] 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
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);
+ }
+ }
}