From 9ec89a80d364315b3e14ab8c9de85e949f4335c0 Mon Sep 17 00:00:00 2001 From: Eugenuss Date: Sun, 30 Aug 2020 09:10:27 +0300 Subject: [PATCH] Added fallback language support to localizer --- .../client/localization/Localizer.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) 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) {