X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FMessageManager.java;h=acd45910a5670fcf43802114bb78b80c1afcb190;hb=a1984b1c8c273ed33c7ce9283039f4027dcae2de;hp=51f23bb54835f9f2c82be52dbb1b6604b165c1f3;hpb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;p=jalview.git diff --git a/src/jalview/util/MessageManager.java b/src/jalview/util/MessageManager.java index 51f23bb..acd4591 100644 --- a/src/jalview/util/MessageManager.java +++ b/src/jalview/util/MessageManager.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) - * Copyright (C) 2015 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. * @@ -21,10 +21,13 @@ 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 jalview.log.JLoggerLog4j; /** * @@ -35,14 +38,15 @@ import java.util.logging.Logger; */ public class MessageManager { - private static ResourceBundle rb; - private static Logger log = Logger.getLogger(MessageManager.class - .getCanonicalName()); + private static JLoggerLog4j log = JLoggerLog4j + .getLogger(MessageManager.class.getCanonicalName()); private static Locale loc; + private static Set reportedMissing = new HashSet<>(); + static { try @@ -52,26 +56,34 @@ 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(); } } + /** + * Returns the resource bundle text for the given key, or if not found, the + * key prefixed by "[missing key]" + * + * @param key + * @return + */ public static String getString(String key) { String value = "[missing key] " + key; @@ -80,7 +92,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; } @@ -90,22 +103,57 @@ public class MessageManager return loc; } + /** + * Returns the resource bundle text for the given key, with tokens {@code {0}, + * {1} etc replaced by the supplied parameters. If the key is not found, + * returns the key and values prefixed by "[missing key]" + * + * @param key + * + * @return + */ public static String formatMessage(String key, Object... params) { - return MessageFormat.format(rb.getString(key), params); + try + { + return MessageFormat.format(rb.getString(key), params); + } catch (Exception e) + { + log.warn("I18N missing: " + loc + "\t" + key); + } + String value = "[missing key] " + key + ""; + for (Object p : params) + { + value += " '" + p.toString() + "'"; + } + return value; } + /** + * Returns the resource bundle text for the given key, with tokens {@code {0}, + * {1} etc replaced by the supplied parameters. If the key is not found, + * returns the key and values prefixed by "[missing key]" + * + * @param key + * + * @return + */ public static String formatMessage(String key, String[] params) { - return MessageFormat.format(rb.getString(key), (Object[]) params); + return formatMessage(key, (Object[]) params); } /** - * lookup and return 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) + * Returns resource bundle text given a root and a human-readable(ish) name + * that when combined might resolve to an i18n string. {@code name} is forced + * to lower case, with any spaces removed, and concatenated to {@code keyroot} + * to form a lookup key. + *

+ * If the key doesn't resolve, then {@code name} is returned. + *

+ * Use this for programmatically constructed keys that might have a human + * readable alternative used in the program (e.g. BLOSUM62 and + * label.score_blosum62). * * @param keyroot * @param name @@ -113,15 +161,32 @@ public class MessageManager */ public static String getStringOrReturn(String keyroot, String name) { - String smkey = keyroot + name.toLowerCase().replaceAll(" ", ""); + String smkey = keyroot + + name.toLowerCase(Locale.ROOT).replaceAll(" ", ""); try { 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); + } + } }