X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fi18n%2FI18n.java;h=4647ddc50d57bf20902067e715bd6ed79d7aa497;hb=c63257e8cc0ba1a5aca9364b22171abe7279d479;hp=0acdced5cfbf0d64d9086dddb3883f05821868e0;hpb=b71f4f4aeb7440b88dd82a252cd296506427c440;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/i18n/I18n.java b/src/net/pterodactylus/jsite/i18n/I18n.java index 0acdced..4647ddc 100644 --- a/src/net/pterodactylus/jsite/i18n/I18n.java +++ b/src/net/pterodactylus/jsite/i18n/I18n.java @@ -31,19 +31,27 @@ import java.util.Locale; import java.util.MissingResourceException; import java.util.Properties; import java.util.StringTokenizer; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.KeyStroke; import net.pterodactylus.util.io.Closer; +import net.pterodactylus.util.logging.Logging; /** * Class that handles i18n. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> - * @version $Id$ */ public class I18n { + /** Logger. */ + private static final Logger logger = Logging.getLogger(I18n.class.getName()); + + /** List of I18nables that are notified when the language changes. */ + private static final List i18nables = new ArrayList(); + /** The current locale. */ private static Locale currentLocale; @@ -64,16 +72,13 @@ public class I18n { } catch (IOException e) { /* something is fucked. */ } - setLocale(Locale.getDefault()); + setLocale(Locale.getDefault(), false); } - /** List of I18nables that are notified when the language changes. */ - private static final List i18nables = new ArrayList(); - /** * Returns the translated value for a key. The translated values may contain * placeholders that are replaced with the given parameters. - * + * * @see MessageFormat * @param key * The key to get @@ -87,7 +92,9 @@ public class I18n { String value = null; value = currentLanguage.getProperty(key); if (value == null) { - return key; + logger.log(Level.WARNING, "please fix “" + key + "”!", new Throwable()); + /* TODO - replace with value when done! */ + return null; } if ((parameters != null) && (parameters.length > 0)) { return MessageFormat.format(value, parameters); @@ -99,14 +106,14 @@ public class I18n { * Returns the keycode from the value of the given key. You can specify the * constants in {@link KeyEvent} in the properties file, e.g. VK_S for the * keycode ‘s’ when used for mnemonics. - * + * * @param key * The key under which the keycode is stored * @return The keycode */ public static int getKey(String key) { - String value = get(key); - if (value.startsWith("VK_")) { + String value = currentLanguage.getProperty(key); + if ((value != null) && value.startsWith("VK_")) { try { Field field = KeyEvent.class.getField(value); return field.getInt(null); @@ -120,19 +127,20 @@ public class I18n { /* ignore. */ } } - return value.toUpperCase().charAt(0); + System.err.println("please fix “" + key + "”!"); + return KeyEvent.VK_UNDEFINED; } /** * Returns a key stroke for use with swing accelerators. - * + * * @param key * The key of the key stroke * @return The key stroke, or null if no key stroke could be * created from the translated value */ public static KeyStroke getKeyStroke(String key) { - String value = get(key); + String value = currentLanguage.getProperty(key); if (value == null) { return null; } @@ -148,6 +156,9 @@ public class I18n { modifierMask |= InputEvent.SHIFT_DOWN_MASK; } else { if (keyToken.startsWith("VK_")) { + if (keyToken.equals("VK_UNDEFINED")) { + return null; + } try { Field field = KeyEvent.class.getField(keyToken); return KeyStroke.getKeyStroke(field.getInt(null), modifierMask); @@ -169,19 +180,40 @@ public class I18n { /** * Sets the current locale. - * + * * @param newLocale * The new locale to use */ public static void setLocale(Locale newLocale) { + setLocale(newLocale, true); + } + + /** + * Sets the current locale. + * + * @param newLocale + * The new locale to use + * @param notify + * true to notify registered {@link I18nable}s + * after the language was changed + */ + private static void setLocale(Locale newLocale, boolean notify) { currentLocale = newLocale; InputStream inputStream = null; try { currentLanguage = new Properties(defaultLanguage); - inputStream = I18n.class.getResourceAsStream("jSite_" + currentLocale.toString() + ".properties"); + if (newLocale == Locale.ENGLISH) { + if (notify) { + notifyI18nables(); + } + return; + } + inputStream = I18n.class.getResourceAsStream("jSite_" + newLocale.getLanguage() + ".properties"); if (inputStream != null) { currentLanguage.load(inputStream); - notifyI18nables(); + if (notify) { + notifyI18nables(); + } } } catch (MissingResourceException mre1) { currentLocale = Locale.ENGLISH; @@ -193,8 +225,29 @@ public class I18n { } /** + * Returns the current locale. + * + * @return The current locale + */ + public static Locale getLocale() { + return currentLocale; + } + + /** + * Finds all available locales. + * + * @return All available locales + */ + public static List findAvailableLanguages() { + List availableLanguages = new ArrayList(); + availableLanguages.add(Locale.ENGLISH); + availableLanguages.add(Locale.GERMAN); + return availableLanguages; + } + + /** * Registers the given I18nable to be updated when the language is changed. - * + * * @param i18nable * The i18nable to register */ @@ -205,7 +258,7 @@ public class I18n { /** * Deregisters the given I18nable to be updated when the language is * changed. - * + * * @param i18nable * The i18nable to register */ @@ -221,7 +274,7 @@ public class I18n { * Notifies all registered {@link I18nable}s that the language was changed. */ private static void notifyI18nables() { - for (I18nable i18nable: i18nables) { + for (I18nable i18nable : i18nables) { i18nable.updateI18n(); } }