diff --git a/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java b/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java index dc8a97e..47e02b1 100644 --- a/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java +++ b/src/main/java/ru/windcorp/progressia/client/localization/Localizer.java @@ -4,12 +4,14 @@ import java.lang.ref.WeakReference; import java.util.*; public class Localizer { - private static final Localizer INSTANCE = new Localizer("assets/languages/"); + private static final Localizer INSTANCE = new Localizer("assets/languages/", "en-US"); private String language; + private String fallBackLanguage; private final String langFolder; private Map data; + private Map fallBackData; private final Map langList; private final Collection> listeners = @@ -21,22 +23,44 @@ public class Localizer { this.langList = new Parser(langFolder + "lang_list.txt").parse(); } + public Localizer(String langFolder, String fallBackLanguage) { + this(langFolder); + this.setFallBackLanguage(fallBackLanguage); + } + + public synchronized void setFallBackLanguage(String language) { + if (langList.containsKey(language)) { + this.fallBackLanguage = language; + fallBackData = new Parser(langFolder + this.fallBackLanguage + ".lang").parse(); + } + } + public synchronized void setLanguage(String language) { if (langList.containsKey(language)) { this.language = language; - data = new Parser(langFolder + language + ".lang").parse(); + data = new Parser(langFolder + this.language + ".lang").parse(); pokeListeners(language); } else { throw new RuntimeException("Language not found: " + language); } } + public synchronized String getFallBackLanguage() { + return fallBackLanguage; + } + public synchronized String getLanguage() { return language; } public synchronized String getValue(String key) { - return data.getOrDefault(key, key); + if (data.containsKey(key)) { + return data.get(key); + } else if (fallBackData.containsKey(key)) { + return fallBackData.get(key); + } else { + return key; + } } private void pokeListeners(String newLanguage) {