From d7fa9e08f3f86b6bac74be47fec2c9af4056c9aa Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 19 Oct 2020 13:24:44 +0100 Subject: [PATCH] Fix various translation issues --- .../listeners/BukkitConnectionListener.java | 9 +++-- .../listeners/BungeeConnectionListener.java | 4 +- .../common/dependencies/Dependency.java | 16 ++++---- .../common/locale/TranslationManager.java | 38 +++++++++++++++++-- .../luckperms/nukkit/NukkitSenderFactory.java | 5 ++- .../listeners/NukkitConnectionListener.java | 4 +- .../listeners/SpongeConnectionListener.java | 6 +-- .../velocity/VelocitySenderFactory.java | 5 ++- 8 files changed, 60 insertions(+), 27 deletions(-) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java index 4e67fa927..13c228c04 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/listeners/BukkitConnectionListener.java @@ -48,6 +48,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.util.Collections; import java.util.HashSet; +import java.util.Locale; import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -128,7 +129,7 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme // deny the connection this.deniedAsyncLogin.add(e.getUniqueId()); - Component reason = GlobalTranslator.render(Message.LOADING_DATABASE_ERROR.build(), TranslationManager.DEFAULT_LOCALE); + Component reason = GlobalTranslator.render(Message.LOADING_DATABASE_ERROR.build(), Locale.getDefault()); e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, LegacyComponentSerializer.legacySection().serialize(reason)); this.plugin.getEventDispatcher().dispatchPlayerLoginProcess(e.getUniqueId(), e.getName(), null); } @@ -177,7 +178,7 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme if (this.detectedCraftBukkitOfflineMode) { printCraftBukkitOfflineModeError(); - Component reason = GlobalTranslator.render(Message.LOADING_STATE_ERROR_CB_OFFLINE_MODE.build(), TranslationManager.parseLocale(player.getLocale(), TranslationManager.DEFAULT_LOCALE)); + Component reason = GlobalTranslator.render(Message.LOADING_STATE_ERROR_CB_OFFLINE_MODE.build(), TranslationManager.parseLocale(player.getLocale(), Locale.getDefault())); e.disallow(PlayerLoginEvent.Result.KICK_OTHER, LegacyComponentSerializer.legacySection().serialize(reason)); return; } @@ -188,7 +189,7 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme " - denying login."); } - Component reason = GlobalTranslator.render(Message.LOADING_STATE_ERROR.build(), TranslationManager.parseLocale(player.getLocale(), TranslationManager.DEFAULT_LOCALE)); + Component reason = GlobalTranslator.render(Message.LOADING_STATE_ERROR.build(), TranslationManager.parseLocale(player.getLocale(), Locale.getDefault())); e.disallow(PlayerLoginEvent.Result.KICK_OTHER, LegacyComponentSerializer.legacySection().serialize(reason)); return; } @@ -207,7 +208,7 @@ public class BukkitConnectionListener extends AbstractConnectionListener impleme player.getUniqueId() + " - " + player.getName() + " - denying login."); t.printStackTrace(); - Component reason = GlobalTranslator.render(Message.LOADING_SETUP_ERROR.build(), TranslationManager.parseLocale(player.getLocale(), TranslationManager.DEFAULT_LOCALE)); + Component reason = GlobalTranslator.render(Message.LOADING_SETUP_ERROR.build(), TranslationManager.parseLocale(player.getLocale(), Locale.getDefault())); e.disallow(PlayerLoginEvent.Result.KICK_OTHER, LegacyComponentSerializer.legacySection().serialize(reason)); return; } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java index c476d653a..38467c802 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeeConnectionListener.java @@ -28,7 +28,6 @@ package me.lucko.luckperms.bungee.listeners; import me.lucko.luckperms.bungee.LPBungeePlugin; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.locale.Message; -import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.util.AbstractConnectionListener; @@ -44,6 +43,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; +import java.util.Locale; import java.util.concurrent.TimeUnit; public class BungeeConnectionListener extends AbstractConnectionListener implements Listener { @@ -100,7 +100,7 @@ public class BungeeConnectionListener extends AbstractConnectionListener impleme // there was some error loading if (this.plugin.getConfiguration().get(ConfigKeys.CANCEL_FAILED_LOGINS)) { // cancel the login attempt - Component reason = GlobalTranslator.render(Message.LOADING_DATABASE_ERROR.build(), TranslationManager.DEFAULT_LOCALE); + Component reason = GlobalTranslator.render(Message.LOADING_DATABASE_ERROR.build(), Locale.getDefault()); e.setCancelReason(BungeeComponentSerializer.get().serialize(reason)); e.setCancelled(true); } diff --git a/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java b/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java index 74fd2ee96..321cabc1b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java +++ b/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java @@ -70,29 +70,29 @@ public enum Dependency { ADVENTURE_PLATFORM( "me{}lucko", "adventure-platform-api", - "4.0.0", - "SgUP+9qpF0QogfbR7NOmXJ9zoi3gyMAAh4igc4SivO4=", + "4.0.1", + "ie3rz49jg5HU04mWe/f6lXjHt6L+S2SQp/x6YFbhxsc=", Relocation.of("adventure", "net{}kyori{}adventure") ), ADVENTURE_PLATFORM_BUKKIT( "me{}lucko", "adventure-platform-bukkit", - "4.0.0", - "St2dvhkBLX4Wr+yZeRbICh/hlw0uhA6cfN/0Ua6YGw4=", + "4.0.1", + "dVbYfUJqmde8jeuTvknCL9hbzqxybal00TELTzQgLbk=", Relocation.of("adventure", "net{}kyori{}adventure") ), ADVENTURE_PLATFORM_BUNGEECORD( "me{}lucko", "adventure-platform-bungeecord", - "4.0.0", - "CNvYc3//7OqEz2615Omuq0rRpORvDiy1kEJuzi0lc4Q=", + "4.0.1", + "4phi0TxNKVj5Lko63nlkrd5snIJcaU+cXUfAWsbCX1U=", Relocation.of("adventure", "net{}kyori{}adventure") ), ADVENTURE_PLATFORM_SPONGEAPI( "me{}lucko", "adventure-platform-spongeapi", - "4.0.0", - "qVFz5oHdpiHI+KLMKSigpmu+T5nYZ25BmGYC6Imcx9A=", + "4.0.1", + "6fjWuZMeJ6633RKuZh6sIlMyVIzryQoewONeei2nB+4=", Relocation.of("adventure", "net{}kyori{}adventure") ), EVENT( diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/TranslationManager.java b/common/src/main/java/me/lucko/luckperms/common/locale/TranslationManager.java index 02b56df7a..09dc74522 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/TranslationManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/TranslationManager.java @@ -25,6 +25,8 @@ package me.lucko.luckperms.common.locale; +import com.google.common.collect.Maps; + import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.kyori.adventure.key.Key; @@ -33,12 +35,17 @@ import net.kyori.adventure.translation.TranslationRegistry; import net.kyori.adventure.translation.Translator; import net.kyori.adventure.util.UTF8ResourceBundleControl; +import java.io.BufferedReader; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -105,28 +112,51 @@ public class TranslationManager { translationFiles = Collections.emptyList(); } + Map loaded = new HashMap<>(); for (Path translationFile : translationFiles) { try { - loadCustomTranslationFile(translationFile); + Map.Entry result = loadCustomTranslationFile(translationFile); + if (result != null) { + loaded.put(result.getKey(), result.getValue()); + } } catch (Exception e) { + this.plugin.getLogger().warn("Error loading locale file: " + translationFile.getFileName().toString()); e.printStackTrace(); } } + + // try registering the locale without a country code - if we don't already have a registration for that + loaded.forEach((locale, bundle) -> { + Locale localeWithoutCountry = new Locale(locale.getLanguage()); + if (!locale.equals(localeWithoutCountry) && this.installed.add(localeWithoutCountry)) { + this.registry.registerAll(localeWithoutCountry, bundle, false); + } + }); } - private void loadCustomTranslationFile(Path translationFile) { + private Map.Entry loadCustomTranslationFile(Path translationFile) { String fileName = translationFile.getFileName().toString(); String localeString = fileName.substring(0, fileName.length() - ".properties".length()); Locale locale = parseLocale(localeString, null); if (locale == null) { this.plugin.getLogger().warn("Unknown locale '" + localeString + "' - unable to register."); - return; + return null; } - this.registry.registerAll(locale, translationFile, true); + PropertyResourceBundle bundle; + try (BufferedReader reader = Files.newBufferedReader(translationFile, StandardCharsets.UTF_8)) { + bundle = new PropertyResourceBundle(reader); + } catch(IOException e) { + this.plugin.getLogger().warn("Error loading locale file: " + localeString); + e.printStackTrace(); + return null; + } + + this.registry.registerAll(locale, bundle, false); this.plugin.getLogger().info("Registered additional translations for " + locale.toString()); this.installed.add(locale); + return Maps.immutableEntry(locale, bundle); } public static Locale parseLocale(String locale, Locale defaultLocale) { diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java index f9fe2ae49..dc72b2bd8 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java @@ -25,7 +25,6 @@ package me.lucko.luckperms.nukkit; -import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.sender.SenderFactory; @@ -64,9 +63,11 @@ public class NukkitSenderFactory extends SenderFactory