java-org.hwo/src/org/hwo/i18n/Messages.java

120 lines
2.7 KiB
Java

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<Messages> 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<Messages>();
if (pInstance == null)
pInstance = new Messages();
}
}