package org.hwo.i18n; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; public class Messages { protected static Messages pInstance; protected static List instanceList; protected static Locale activeLocale; protected String BUNDLE_NAME = "org.hwo.i18n.messages"; private ResourceBundle defaultResourceBundle; private ResourceBundle localeResourceBundle; private Properties missingKeys; private String missingKeysFileName; protected Messages() { initialize(); } protected Messages(String bundleName) { BUNDLE_NAME = bundleName; initialize(); } public void saveMissingStrings() { if (missingKeys != null) { FileOutputStream fos; try { fos = new FileOutputStream(missingKeysFileName); System.err.println(String.format("Writing missing strings to %s",missingKeysFileName)); missingKeys.store(fos, ""); fos.close(); } catch (Exception e) { e.printStackTrace(); } } } private void initialize() { System.err.println(this.getClass().getName() + ": Using Locale:" + activeLocale.getCountry() + " / " + activeLocale.getLanguage()); defaultResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME); localeResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME,activeLocale); instanceList.add(this); } public String getMissingKeysFileName() { return missingKeysFileName; } public void setMissingKeysFileName(String fileName) { missingKeysFileName = fileName; } public void enableMissingKeys() { missingKeys = new Properties(); } public static String getString(String key) { for (Messages messages: instanceList) { if (messages.hasKey(key)) return messages.getInstanceString(key); } if (getInstance().missingKeys != null) { getInstance().missingKeys.setProperty(key, ""); } return key; } public boolean hasKey(String key) { return localeResourceBundle.containsKey(key) | defaultResourceBundle.containsKey(key); } protected String getInstanceString(String key) throws MissingResourceException { if (localeResourceBundle.containsKey(key)) return localeResourceBundle.getString(key); if (defaultResourceBundle.containsKey(key)) return defaultResourceBundle.getString(key); throw new MissingResourceException(BUNDLE_NAME, key, ""); } public static Messages getInstance() { return pInstance; } static { if (activeLocale == null) activeLocale = Locale.getDefault(); if (instanceList == null) instanceList = new LinkedList(); if (pInstance == null) pInstance = new Messages(); } }