import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Properties;
setLocale(Locale.getDefault());
}
+ /** List of I18nables that are notified when the language changes. */
+ private static final List<I18nable> i18nables = new ArrayList<I18nable>();
+
/**
* Returns the translated value for a key. The translated values may contain
* placeholders that are replaced with the given parameters.
inputStream = I18n.class.getResourceAsStream("jSite_" + currentLocale.toString() + ".properties");
if (inputStream != null) {
currentLanguage.load(inputStream);
+ notifyI18nables();
}
} catch (MissingResourceException mre1) {
currentLocale = Locale.ENGLISH;
Closer.close(inputStream);
}
}
+
+ /**
+ * Registers the given I18nable to be updated when the language is changed.
+ *
+ * @param i18nable
+ * The i18nable to register
+ */
+ public static void registerI18nable(I18nable i18nable) {
+ i18nables.add(i18nable);
+ }
+
+ /**
+ * Deregisters the given I18nable to be updated when the language is
+ * changed.
+ *
+ * @param i18nable
+ * The i18nable to register
+ */
+ public static void deregisterI18nable(I18nable i18nable) {
+ i18nables.remove(i18nable);
+ }
+
+ //
+ // PRIVATE METHODS
+ //
+
+ /**
+ * Notifies all registered {@link I18nable}s that the language was changed.
+ */
+ private static void notifyI18nables() {
+ for (I18nable i18nable: i18nables) {
+ i18nable.updateI18n();
+ }
+ }
+
}