/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.util; import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author David Roldan Martinez * @author Thomas Abeel * * */ public class MessageManager { private static ResourceBundle rb; private static Logger log = Logger .getLogger(MessageManager.class.getCanonicalName()); private static Locale loc; static { 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()); } } catch (Exception q) { log.warning("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" + 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; try { value = rb.getString(key); } catch (Exception e) { log.warning("I18N missing: " + loc + "\t" + key); } return value; } public static Locale getLocale() { 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) { try { return MessageFormat.format(rb.getString(key), params); } catch (Exception e) { log.warning("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 formatMessage(key, (Object[]) params); } /** * 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 * @return */ public static String getStringOrReturn(String keyroot, String name) { String smkey = keyroot + name.toLowerCase().replaceAll(" ", ""); try { name = rb.getString(smkey); } catch (Exception x) { log.finest("I18N missing key with root " + keyroot + ": " + loc + "\t" + smkey); } return name; } }