X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2FI18nManager.java;h=349db3fcaff83bace412ebdf02e459b28d1e9199;hb=c0387c124840c9407e040600fda88f3c3e8f6aa6;hp=c056fe24d743ccb5e4cccd4118e21a733fccda02;hpb=312fec956e43f5d0a38617da5d0add9c62563e2c;p=GpsPrune.git diff --git a/tim/prune/I18nManager.java b/tim/prune/I18nManager.java index c056fe2..349db3f 100644 --- a/tim/prune/I18nManager.java +++ b/tim/prune/I18nManager.java @@ -1,7 +1,12 @@ package tim.prune; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.Locale; import java.util.MissingResourceException; +import java.util.Properties; import java.util.ResourceBundle; /** @@ -15,12 +20,15 @@ public abstract class I18nManager private static final Locale BACKUP_LOCALE = new Locale("en", "GB"); private static ResourceBundle EnglishTexts = null; - private static ResourceBundle ExtraTexts = null; + private static ResourceBundle LocalTexts = null; + + /** External properties file for developer testing */ + private static Properties ExternalPropsFile = null; /** - * Initialize the library - * using the (optional) locale + * Initialize the library using the (optional) locale + * @param inLocale locale to use, or null for default */ public static void init(Locale inLocale) { @@ -28,15 +36,46 @@ public abstract class I18nManager EnglishTexts = ResourceBundle.getBundle(BUNDLE_NAME, BACKUP_LOCALE); // Get bundle for selected locale, if any - if (inLocale != null) + try { - ExtraTexts = ResourceBundle.getBundle(BUNDLE_NAME, inLocale); + if (inLocale != null) + { + LocalTexts = ResourceBundle.getBundle(BUNDLE_NAME, inLocale); + } + else + { + // locale is null so just use the system default + LocalTexts = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault()); + } + } + catch (MissingResourceException mre) { // ignore error, default to english } - else + } + + + /** + * Add a language file + * @param inFilename filename of file + * @throws FileNotFoundException if load failed + */ + public static void addLanguageFile(String inFilename) throws FileNotFoundException + { + FileInputStream fis = null; + boolean fileLoaded = false; + try { - // locale is null so just use the system default - ExtraTexts = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault()); + File file = new File(inFilename); + ExternalPropsFile = new Properties(); + fis = new FileInputStream(file); + ExternalPropsFile.load(fis); + fileLoaded = true; // everything worked } + catch (IOException ioe) {} + finally { try { fis.close(); + } catch (Exception e) {} + } + // complain if file wasn't loaded, by throwing a filenotfound exception + if (!fileLoaded) throw new FileNotFoundException(); } @@ -47,15 +86,19 @@ public abstract class I18nManager */ public static String getText(String inKey) { - String value = null; + // look in external props file if available + if (ExternalPropsFile != null) + { + String extText = ExternalPropsFile.getProperty(inKey); + if (extText != null) return extText; + } // look in extra texts if available - if (ExtraTexts != null) + if (LocalTexts != null) { try { - value = ExtraTexts.getString(inKey); - if (value != null && !value.equals("")) - return value; + String localText = LocalTexts.getString(inKey); + if (localText != null) return localText; } catch (MissingResourceException mre) {} } @@ -64,9 +107,8 @@ public abstract class I18nManager { try { - value = EnglishTexts.getString(inKey); - if (value != null && !value.equals("")) - return value; + String engText = EnglishTexts.getString(inKey); + if (engText != null) return engText; } catch (MissingResourceException mre) {} }