/* * Copyright 2016 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.launcher.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Comparator; import java.util.Locale; import java.util.List; import java.util.TreeMap; import java.util.ArrayList; import java.util.Collections; public final class Languages { public static final Locale DEFAULT_LOCALE = Locale.ENGLISH; public static final List<Locale> SUPPORTED_LOCALES; public static final TreeMap<Locale, String> SETTINGS_LABEL_KEYS; static { final Locale czech = new Locale("cs"); final Locale spanish = new Locale("es"); final Locale french = new Locale("fr"); final Locale galician = new Locale("gl"); final Locale italian = new Locale("it"); final Locale lithuanian = new Locale("lt"); final Locale polish = new Locale("pl"); final Locale russian = new Locale("ru"); final Locale turkish = new Locale("tr"); final Locale ukrainian = new Locale("uk"); final List<Locale> supportedLocales = new ArrayList<>(); supportedLocales.add(Locale.GERMAN); supportedLocales.add(Locale.ENGLISH); supportedLocales.add(spanish); supportedLocales.add(french); supportedLocales.add(galician); supportedLocales.add(italian); supportedLocales.add(Locale.JAPANESE); supportedLocales.add(lithuanian); supportedLocales.add(polish); supportedLocales.add(russian); supportedLocales.add(turkish); supportedLocales.add(ukrainian); supportedLocales.add(czech); Comparator comparator = (Object o1, Object o2) -> o1.toString().compareTo(o2.toString()); final TreeMap<Locale, String> settingsLabelKey = new TreeMap<>(comparator); settingsLabelKey.put(Locale.GERMAN, "settings_language_de"); settingsLabelKey.put(Locale.ENGLISH, "settings_language_en"); settingsLabelKey.put(spanish, "settings_language_es"); settingsLabelKey.put(french, "settings_language_fr"); settingsLabelKey.put(galician, "settings_language_gl"); settingsLabelKey.put(italian, "settings_language_it"); settingsLabelKey.put(Locale.JAPANESE, "settings_language_ja"); settingsLabelKey.put(lithuanian, "settings_language_lt"); settingsLabelKey.put(polish, "settings_language_pl"); settingsLabelKey.put(russian, "settings_language_ru"); settingsLabelKey.put(turkish, "settings_language_tr"); settingsLabelKey.put(ukrainian, "settings_language_uk"); settingsLabelKey.put(czech, "settings_language_cs"); Collections.sort(supportedLocales,(o1, o2) -> o1.toString().compareTo(o2.toString())); SUPPORTED_LOCALES = supportedLocales; SETTINGS_LABEL_KEYS = settingsLabelKey; } private static Locale currentLocale = DEFAULT_LOCALE; private static final Logger logger = LoggerFactory.getLogger(Languages.class); private Languages() { } public static void init(String localeString) { for (Locale locale : SUPPORTED_LOCALES) { if (locale.toString().equals(localeString)) { currentLocale = locale; break; } } } public static void init() { final Locale defaultLocale = Locale.getDefault(); for (Locale locale : SUPPORTED_LOCALES) { if (locale.getLanguage().equals(defaultLocale.getLanguage())) { if (logger.isDebugEnabled() && !locale.equals(currentLocale)) { logger.debug("An appropriate locale has been found '{}'. Change the current locale from '{}' to '{}'.", defaultLocale, currentLocale, locale); } currentLocale = locale; break; } } } public static void update(Locale newLocale) { if (SUPPORTED_LOCALES.contains(newLocale)) { currentLocale = newLocale; } else { logger.warn("Unsupported locale '{}'.", newLocale); } } public static Locale getCurrentLocale() { return currentLocale; } }