/*
GeoGebra - Dynamic Mathematics for Everyone
http://www.geogebra.org
This file is part of GeoGebra.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation.
*/
package org.geogebra.desktop.main;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.geogebra.common.util.ResourceBundleAdapter;
import org.geogebra.common.util.debug.Log;
/**
* MyResourceBundle.createBundle() should be used in stead of
* ResourceBundle.getBundle() because it does not open network connections when
* used with an applet.
*/
public class MyResourceBundle extends PropertyResourceBundle
implements ResourceBundleAdapter {
/**
* Creates new bundle from a stream
*
* @param in
* input stream
* @throws IOException
* if problem occurs reading the stream
*/
public MyResourceBundle(InputStream in) throws IOException {
super(in);
}
/**
* Creates bundle given the filename and locale
*
* @param name
* filename of .properties file (without extension
* @param locale
* language locale
* @return created bundle
*/
final public static ResourceBundle createBundle(String name,
Locale locale) {
MyResourceBundle bundle, temp = null;
// base properties file
bundle = loadSingleBundleFile(name);
if (bundle == null) {
return null;
}
// language properties file
String lang = locale.getLanguage();
StringBuilder sb = new StringBuilder(name);
sb.append('_');
sb.append(lang);
String fileNameLanguage = sb.toString();
// load only non-English languages (English has already been loaded as
// base file)
if (!"en".equals(lang)) {
temp = loadSingleBundleFile(fileNameLanguage);
}
if (temp != null) {
temp.setParent(bundle);
bundle = temp;
}
// country and variant properties file
String country = locale.getCountry();
if (country.length() > 0) {
// check for variant
String variant = locale.getVariant();
if (variant.length() > 0) {
// country and variant
sb.append('_');
sb.append(country);
// needed for "no_NO_NY"
// we need to load "no_NO", not "no"
temp = loadSingleBundleFile(sb.toString());
if (temp != null) {
temp.setParent(bundle);
bundle = temp;
}
sb.append('_');
sb.append(variant);
} else {
// only country
sb.append('_');
sb.append(country);
}
String fileNameLanguageCountry = sb.toString();
temp = loadSingleBundleFile(fileNameLanguageCountry);
if (temp != null) {
temp.setParent(bundle);
bundle = temp;
}
}
return bundle;
}
/**
* Creates bundle from given file, but in single language only
*
* @param name
* filename (without .properties extension)
* @return created bundle
*/
public static MyResourceBundle loadSingleBundleFile(String name) {
// Application.debug("loadBundle: " + name);
String fileName = name + ".properties";
try {
InputStream in = MyResourceBundle.class
.getResourceAsStream(fileName);
MyResourceBundle ret = new MyResourceBundle(in);
in.close();
return ret;
} catch (Exception e) {
Log.error("Warning: could not load bundle: " + fileName);
// e.printStackTrace();
return null;
}
}
}