package org.geogebra.desktop.main;
import java.util.ArrayList;
import java.util.Locale;
import java.util.ResourceBundle;
import org.geogebra.common.jre.main.LocalizationJre;
import org.geogebra.common.main.Feature;
import org.geogebra.common.util.lang.Language;
/**
* Desktop localization
*/
public class LocalizationD extends LocalizationJre {
/** path to menu */
static final String RB_MENU = "/org/geogebra/desktop/properties/menu";
/** path to commands */
static final String RB_COMMAND = "/org/geogebra/desktop/properties/command";
private static final String RB_ERROR = "/org/geogebra/desktop/properties/error";
private static final String RB_SYMBOL = "/org/geogebra/desktop/properties/symbols";
/** path to javaui properties (without extension) */
public static final String RB_JAVA_UI = "/org/geogebra/desktop/properties/javaui";
private static final String RB_COLORS = "/org/geogebra/desktop/properties/colors";
/**
* @param dimension
* 3 for 3D
*/
public LocalizationD(int dimension) {
super(dimension);
}
// supported GUI languages (from properties files)
private static volatile ArrayList<Locale> supportedLocales = null;
private static Object lock = new Object();
@Override
protected ArrayList<Locale> getSupportedLocales() {
return getSupportedLocales(
app != null && app.has(Feature.ALL_LANGUAGES));
}
/**
* @param prerelease
* whether we also have prereleased languages
* @return locales
*/
public static ArrayList<Locale> getSupportedLocales(boolean prerelease) {
if (supportedLocales == null) {
synchronized (lock) {
if (supportedLocales == null) {
ArrayList<Locale> supportedLocales0 = new ArrayList<Locale>();
Language[] languages = Language.values();
for (int i = 0; i < languages.length; i++) {
Language language = languages[i];
if (language.fullyTranslated || prerelease) {
if (language.locale.length() == 2) {
// eg "en"
supportedLocales0
.add(new Locale(language.locale));
} else if (language.locale.length() == 4) {
// eg "enGB" -> "en", "GB"
supportedLocales0.add(new Locale(
language.locale.substring(0, 2),
language.locale.substring(2, 4)));
} else if (language.locale.length() == 6) {
// eg "noNONY" -> "no", "NO", "NY"
supportedLocales0.add(new Locale(
language.locale.substring(0, 2),
language.locale.substring(2, 4),
language.locale.substring(4, 6)));
}
}
}
supportedLocales = supportedLocales0;
}
}
}
return supportedLocales;
}
@Override
protected ResourceBundle createBundle(String key, Locale locale) {
// TODO Auto-generated method stub
return MyResourceBundle.createBundle(key, locale);
}
@Override
protected String getMenuRessourcePath() {
return RB_MENU;
}
@Override
protected String getCommandRessourcePath() {
return RB_COMMAND;
}
@Override
protected String getColorRessourcePath() {
return RB_COLORS;
}
@Override
protected String getErrorRessourcePath() {
return RB_ERROR;
}
@Override
protected String getSymbolRessourcePath() {
return RB_SYMBOL;
}
}