From f15783164183d2b11d9b271687b603563b4b9f9e Mon Sep 17 00:00:00 2001 From: ineanto Date: Sun, 16 Jul 2023 16:36:50 +0200 Subject: [PATCH] feat wip: item lore translation --- src/main/java/xyz/atnrch/nicko/i18n/I18N.java | 37 +++++++++------ .../java/xyz/atnrch/nicko/i18n/I18NDict.java | 30 ++++++++---- .../atnrch/nicko/i18n/LocaleFileManager.java | 12 +++++ src/main/resources/fr.yml | 10 ++-- .../atnrch/nicko/test/i18n/I18NLoreTest.java | 46 +++++++++++++++++++ 5 files changed, 110 insertions(+), 25 deletions(-) create mode 100644 src/test/java/xyz/atnrch/nicko/test/i18n/I18NLoreTest.java diff --git a/src/main/java/xyz/atnrch/nicko/i18n/I18N.java b/src/main/java/xyz/atnrch/nicko/i18n/I18N.java index 0f742fc..466af0a 100644 --- a/src/main/java/xyz/atnrch/nicko/i18n/I18N.java +++ b/src/main/java/xyz/atnrch/nicko/i18n/I18N.java @@ -22,10 +22,15 @@ public class I18N { this.playerLocale = getPlayerLocale(); } + public I18N(Locale locale) { + this.player = null; + this.playerLocale = locale; + } + public List translateItem(String key, Object... arguments) { final ArrayList lines = new ArrayList<>(); final String itemNameKey = readString(key + ".name"); - final List itemLoreKey = readString(key + ".lore"); + final ArrayList itemLoreKey = readList(key + ".lore"); try { // Item Name formatter.applyPattern(itemNameKey); @@ -59,29 +64,35 @@ public class I18N { } private String readString(String key) { - String string; + YamlConfig yamlFile; if (playerLocale == Locale.CUSTOM) { - string = instance.getLocaleFileManager().getString(key); + yamlFile = instance.getLocaleFileManager().getYamlFile(); } else { final InputStream resource = instance.getResource(playerLocale.getCode() + ".yml"); - final YamlConfig yamlConfig = YamlConfig.load(resource); - string = yamlConfig.getString(key); + yamlFile = YamlConfig.load(resource); } - - return string; + return yamlFile.getString(key); } - private List readList(String key) { - String string; + private ArrayList readList(String key) { + final ArrayList lines = new ArrayList<>(); + YamlConfig yamlFile; if (playerLocale == Locale.CUSTOM) { - string = instance.getLocaleFileManager().getString(key); + yamlFile = instance.getLocaleFileManager().getYamlFile(); } else { final InputStream resource = instance.getResource(playerLocale.getCode() + ".yml"); - final YamlConfig yamlConfig = YamlConfig.load(resource); - string = yamlConfig.getString(key); + yamlFile = YamlConfig.load(resource); } - return string; + // 9 is a magic number + for (int i = 0; i < yamlFile.getInt(key + ".length"); i++) { + final String line = yamlFile.getString(key + ".content[" + i + "]"); + System.out.println("line = " + line); + if (line != null && !line.equals("{" + i + "}")) { + lines.add(line); + } + } + return lines; } private Locale getPlayerLocale() { diff --git a/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java b/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java index 79489f0..cc4317e 100644 --- a/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java +++ b/src/main/java/xyz/atnrch/nicko/i18n/I18NDict.java @@ -1,6 +1,17 @@ package xyz.atnrch.nicko.i18n; public class I18NDict { + public static class Error { + public static final String GENERIC = "error.generic"; + public static final String PERMISSION = "error.permission"; + public static final String CACHE = "error.cache"; + public static final String MOJANG_NAME = "error.mojang_name"; + public static final String MOJANG_SKIN = "error.mojang_skin"; + public static final String INVALID_USERNAME = "error.invalid_username"; + public static final String SQL_ERROR = "error.sql"; + public static final String JSON_ERROR = "error.json"; + } + public static class Event { private static final String EVENT_KEY = "event."; @@ -49,14 +60,15 @@ public class I18NDict { } } - public static class Error { - public static final String GENERIC = "error.generic"; - public static final String PERMISSION = "error.permission"; - public static final String CACHE = "error.cache"; - public static final String MOJANG_NAME = "error.mojang_name"; - public static final String MOJANG_SKIN = "error.mojang_skin"; - public static final String INVALID_USERNAME = "error.invalid_username"; - public static final String SQL_ERROR = "error.sql"; - public static final String JSON_ERROR = "error.json"; + public static class GUI { + private static final String GUI_KEY = "gui."; + + public static final String EXIT = GUI_KEY + "exit"; + + public static class Home { + private static final String HOME_KEY = GUI_KEY + "home."; + + public static final String ADMIN = HOME_KEY + "admin"; + } } } diff --git a/src/main/java/xyz/atnrch/nicko/i18n/LocaleFileManager.java b/src/main/java/xyz/atnrch/nicko/i18n/LocaleFileManager.java index b345f88..f2ffba8 100644 --- a/src/main/java/xyz/atnrch/nicko/i18n/LocaleFileManager.java +++ b/src/main/java/xyz/atnrch/nicko/i18n/LocaleFileManager.java @@ -10,6 +10,7 @@ import java.nio.file.Files; public class LocaleFileManager { private final File folder = new File(NickoBukkit.getInstance().getDataFolder() + "/lang/"); private final File file = new File(folder, "lang.yml"); + private YamlConfig yamlFile; public String getString(String key) { if (!file.exists()) return key; @@ -39,4 +40,15 @@ public class LocaleFileManager { return false; } } + + public YamlConfig getYamlFile() { + if (yamlFile == null) { + try (BufferedInputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath()))) { + yamlFile = YamlConfig.load(inputStream); + } catch (IOException ignored) { + return null; + } + } + return yamlFile; + } } diff --git a/src/main/resources/fr.yml b/src/main/resources/fr.yml index 7aa0f01..ff0bc85 100644 --- a/src/main/resources/fr.yml +++ b/src/main/resources/fr.yml @@ -29,13 +29,17 @@ gui: exit: "Quitter" home: admin: - name: "Panel d'administration" + name: "Panel d''administration" lore: - - "Configurez et gérez Nicko." + length: 1 + content: + - "Configurez et gérez Nicko." settings: name: "Paramètres" lore: - - "Configurez votre expérience." + length: 1 + content: + "Configurez votre expérience." change_name: name: "Changer le §6pseudo" change_skin: diff --git a/src/test/java/xyz/atnrch/nicko/test/i18n/I18NLoreTest.java b/src/test/java/xyz/atnrch/nicko/test/i18n/I18NLoreTest.java new file mode 100644 index 0000000..2c17db5 --- /dev/null +++ b/src/test/java/xyz/atnrch/nicko/test/i18n/I18NLoreTest.java @@ -0,0 +1,46 @@ +package xyz.atnrch.nicko.test.i18n; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import xyz.atnrch.nicko.NickoBukkit; +import xyz.atnrch.nicko.config.Configuration; +import xyz.atnrch.nicko.config.DataSourceConfiguration; +import xyz.atnrch.nicko.i18n.I18N; +import xyz.atnrch.nicko.i18n.I18NDict; +import xyz.atnrch.nicko.i18n.Locale; + +import java.util.List; + +public class I18NLoreTest { + private static NickoBukkit plugin; + private static PlayerMock player; + + @BeforeAll + public static void setup() { + final Configuration config = new Configuration( + DataSourceConfiguration.SQL_EMPTY, + DataSourceConfiguration.REDIS_EMPTY, + "", + false); + final ServerMock server = MockBukkit.mock(); + plugin = MockBukkit.load(NickoBukkit.class, config); + } + + @Test + @DisplayName("Translate Item Lore") + public void translateItemLore() { + final I18N i18n = new I18N(Locale.FRENCH); + List strings = i18n.translateItem(I18NDict.GUI.Home.ADMIN); + System.out.println("strings = " + strings); + } + + @AfterAll + public static void shutdown() { + MockBukkit.unmock(); + } +}