From e7170ddef9e4331e4ceb4f134d4969f37d24993d Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 22 May 2020 01:19:08 -0300 Subject: [PATCH] added translation support for extensions --- src/main/java/carpet/CarpetExtension.java | 4 ++ src/main/java/carpet/utils/Translations.java | 51 +++++++++++++++----- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/carpet/CarpetExtension.java b/src/main/java/carpet/CarpetExtension.java index 7bb705cd..499c6c9e 100644 --- a/src/main/java/carpet/CarpetExtension.java +++ b/src/main/java/carpet/CarpetExtension.java @@ -6,6 +6,8 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; +import java.util.Map; + public interface CarpetExtension { /** @@ -51,4 +53,6 @@ public interface CarpetExtension default String version() {return null;} default void registerLoggers() {} + + default Map canHasTranslations(String lang) { return null;} } diff --git a/src/main/java/carpet/utils/Translations.java b/src/main/java/carpet/utils/Translations.java index 081d656b..b27be4b1 100644 --- a/src/main/java/carpet/utils/Translations.java +++ b/src/main/java/carpet/utils/Translations.java @@ -1,5 +1,7 @@ package carpet.utils; +import carpet.CarpetExtension; +import carpet.CarpetServer; import carpet.CarpetSettings; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -8,8 +10,8 @@ import net.minecraft.server.command.ServerCommandSource; import org.apache.commons.io.IOUtils; import java.io.IOException; -import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -37,6 +39,22 @@ public class Translations return translationMap != null && translationMap.containsKey(key); } + public static Map getTranslationFromResourcePath(String path) + { + String dataJSON; + try + { + dataJSON = IOUtils.toString( + Objects.requireNonNull(Translations.class.getClassLoader().getResourceAsStream(String.format("assets/carpet/lang/%s.json", CarpetSettings.language))), + StandardCharsets.UTF_8); + } catch (NullPointerException | IOException e) { + return null; + } + Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); + return gson.fromJson(dataJSON, new TypeToken>() {}.getType()); + } + + public static void updateLanguage(ServerCommandSource source) { if (CarpetSettings.language.equalsIgnoreCase("none")) @@ -44,23 +62,30 @@ public class Translations translationMap = null; return; } - String langJs; - try + Map translations = new HashMap<>(); + Map trans = getTranslationFromResourcePath(String.format("assets/carpet/lang/%s.json", CarpetSettings.language)); + if (trans != null) trans.forEach(translations::put); + + for (CarpetExtension ext : CarpetServer.extensions) { - langJs = IOUtils.toString( - Objects.requireNonNull(Translations.class.getClassLoader().getResourceAsStream(String.format("assets/carpet/lang/%s.json", CarpetSettings.language))), - StandardCharsets.UTF_8); - } catch (NullPointerException | IOException e) { - Messenger.m(source, "r Failed to update language"); + Map extMappings = ext.canHasTranslations(CarpetSettings.language); + if (extMappings != null) + { + extMappings.forEach((key, value) -> + { + if (!translations.containsKey(key)) translations.put(key, value); + }); + } + } + translations.entrySet().removeIf(e -> e.getKey().startsWith("//")); + if (translations.isEmpty()) + { + translationMap = null; return; } - Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); - Type type = new TypeToken>() {}.getType(); - translationMap = gson.fromJson(langJs, type); - translationMap.entrySet().removeIf(e -> e.getKey().startsWith("//")); + translationMap = translations; } - public static boolean isValidLanguage(String newValue) { // will put some validations for availble languages at some point