package net.sf.openrocket.startup.providers; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; import java.util.prefs.Preferences; import net.sf.openrocket.l10n.DebugTranslator; import net.sf.openrocket.l10n.L10N; import net.sf.openrocket.l10n.ResourceBundleTranslator; import net.sf.openrocket.l10n.Translator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Provider; public class TranslatorProvider implements Provider<Translator> { private final static Logger log = LoggerFactory.getLogger(TranslatorProvider.class); private AtomicReference<Translator> translator = new AtomicReference<Translator>(); @Override public Translator get() { Translator oldTranslator = translator.get(); if (oldTranslator != null) { return oldTranslator; } // Check for locale propery String langcode = System.getProperty("openrocket.locale"); if (langcode != null) { Locale l = L10N.toLocale(langcode); log.info("Setting custom locale " + l); Locale.setDefault(l); } else { // Check user-configured locale Locale l = getUserLocale(); if (l != null) { log.info("Setting user-selected locale " + l); Locale.setDefault(l); } else { log.info("Using default locale " + Locale.getDefault()); } } // Setup the translator Translator newTranslator; newTranslator = new ResourceBundleTranslator("l10n.messages"); if (Locale.getDefault().getLanguage().equals("xx")) { newTranslator = new DebugTranslator(newTranslator); } log.info("Set up translation for locale " + Locale.getDefault() + ", debug.currentFile=" + newTranslator.get("debug.currentFile")); if (translator.compareAndSet(null, newTranslator)) { return newTranslator; } else { return translator.get(); } } private static Locale getUserLocale() { /* * This method MUST NOT use the Prefs class, since is causes a multitude * of classes to be initialized. Therefore this duplicates the functionality * of the Prefs class locally. */ if (System.getProperty("openrocket.debug.prefs") != null) { return null; } return L10N.toLocale(Preferences.userRoot().node("OpenRocket").get("locale", null)); } }