package it.albertus.cycles.resources; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import it.albertus.util.logging.LoggerFactory; public class Messages { private static final Logger logger = LoggerFactory.getLogger(Messages.class); public enum Language { ENGLISH(Locale.ENGLISH), ITALIAN(Locale.ITALIAN); private final Locale locale; private Language(final Locale locale) { this.locale = locale; } public Locale getLocale() { return locale; } } private static final String BASE_NAME = Messages.class.getName().toLowerCase(); private static ResourceBundle resources = ResourceBundle.getBundle(BASE_NAME, ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES)); /** Aggiorna la lingua in cui vengono mostrati i messaggi. */ public static void setLanguage(final Language language) { if (language != null) { resources = ResourceBundle.getBundle(BASE_NAME, language.getLocale(), ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES)); } } public static Language getLanguage() { for (final Language language : Language.values()) { if (language.locale.equals(resources.getLocale())) { return language; } } return Language.ENGLISH; // Default. } public static String get(final String key, final Object... params) { final List<String> stringParams = new ArrayList<String>(params.length); for (final Object param : params) { stringParams.add(String.valueOf(param)); } String message; try { message = MessageFormat.format(resources.getString(key), stringParams.toArray()); message = message != null ? message.trim() : ""; } catch (final MissingResourceException e) { logger.log(Level.WARNING, e.getMessage(), e); message = key; } return message; } }