From 9b6f6f147969615945b574756a11fe7fc7cc5b3b Mon Sep 17 00:00:00 2001 From: Gegy Date: Mon, 30 Oct 2023 06:06:28 +0100 Subject: [PATCH] Make translation targets match languages more broadly --- .../translation/PlayerChatMessageMixin.java | 15 +++++++-- .../translation/TranslatableLanguage.java | 31 +++++++++---------- .../extras/translation/TranslationBundle.java | 2 +- .../translation/TranslationService.java | 12 +++---- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/lovetropics/extras/mixin/translation/PlayerChatMessageMixin.java b/src/main/java/com/lovetropics/extras/mixin/translation/PlayerChatMessageMixin.java index cc592652..1b0df8b3 100644 --- a/src/main/java/com/lovetropics/extras/mixin/translation/PlayerChatMessageMixin.java +++ b/src/main/java/com/lovetropics/extras/mixin/translation/PlayerChatMessageMixin.java @@ -1,10 +1,12 @@ package com.lovetropics.extras.mixin.translation; import com.lovetropics.extras.translation.TranslatableChatMessage; +import com.lovetropics.extras.translation.TranslatableLanguage; import com.lovetropics.extras.translation.TranslationBundle; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.PlayerChatMessage; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -17,7 +19,7 @@ public abstract class PlayerChatMessageMixin implements TranslatableChatMessage public abstract String signedContent(); @Unique - private final Map ltextras$translations = new Object2ObjectOpenHashMap<>(); + private final Map ltextras$translations = new Object2ObjectOpenHashMap<>(); @Override public void ltextras$addTranslations(final TranslationBundle bundle) { @@ -27,7 +29,7 @@ public abstract class PlayerChatMessageMixin implements TranslatableChatMessage @Override public PlayerChatMessage ltextras$translate(final String language) { final PlayerChatMessage self = (PlayerChatMessage) (Object) this; - final String translation = ltextras$translations.get(language); + final String translation = lTExtras$getTranslationFor(language); if (translation != null && !translation.equals(signedContent())) { return self.withUnsignedContent(Component.literal(translation)); } @@ -36,7 +38,14 @@ public abstract class PlayerChatMessageMixin implements TranslatableChatMessage @Override public boolean ltextras$hasTranslationFor(final String language) { - final String translation = ltextras$translations.get(language); + final String translation = lTExtras$getTranslationFor(language); return translation != null && !translation.equals(signedContent()); } + + @Unique + @Nullable + private String lTExtras$getTranslationFor(final String language) { + final TranslatableLanguage languageType = TranslatableLanguage.byKey(language); + return languageType != null ? ltextras$translations.get(languageType) : null; + } } diff --git a/src/main/java/com/lovetropics/extras/translation/TranslatableLanguage.java b/src/main/java/com/lovetropics/extras/translation/TranslatableLanguage.java index 5200905c..71d9d5f2 100644 --- a/src/main/java/com/lovetropics/extras/translation/TranslatableLanguage.java +++ b/src/main/java/com/lovetropics/extras/translation/TranslatableLanguage.java @@ -1,23 +1,22 @@ package com.lovetropics.extras.translation; -import net.minecraft.util.StringRepresentable; +import javax.annotation.Nullable; -public enum TranslatableLanguage implements StringRepresentable { - ENGLISH("en_us"), - SPANISH("es_es"), - FRENCH("fr_fr"), +public enum TranslatableLanguage { + ENGLISH, + SPANISH, + FRENCH, ; - public static final EnumCodec CODEC = StringRepresentable.fromEnum(TranslatableLanguage::values); - - private final String key; - - TranslatableLanguage(final String key) { - this.key = key; - } - - @Override - public String getSerializedName() { - return key; + @Nullable + public static TranslatableLanguage byKey(final String key) { + if (key.startsWith("en_")) { + return ENGLISH; + } else if (key.startsWith("es_")) { + return SPANISH; + } else if (key.startsWith("fr_")) { + return FRENCH; + } + return null; } } diff --git a/src/main/java/com/lovetropics/extras/translation/TranslationBundle.java b/src/main/java/com/lovetropics/extras/translation/TranslationBundle.java index 2e1f4b60..43937d6a 100644 --- a/src/main/java/com/lovetropics/extras/translation/TranslationBundle.java +++ b/src/main/java/com/lovetropics/extras/translation/TranslationBundle.java @@ -2,6 +2,6 @@ import java.util.Map; -public record TranslationBundle(Map stringsByLanguage) { +public record TranslationBundle(Map stringsByLanguage) { public static final TranslationBundle EMPTY = new TranslationBundle(Map.of()); } diff --git a/src/main/java/com/lovetropics/extras/translation/TranslationService.java b/src/main/java/com/lovetropics/extras/translation/TranslationService.java index 7941fca8..189872f3 100644 --- a/src/main/java/com/lovetropics/extras/translation/TranslationService.java +++ b/src/main/java/com/lovetropics/extras/translation/TranslationService.java @@ -37,9 +37,9 @@ private boolean isDisabled() { } public CompletableFuture translate(final String language, final String text) { - final TranslatableLanguage languageType = TranslatableLanguage.CODEC.byName(language); + final TranslatableLanguage languageType = TranslatableLanguage.byKey(language); if (languageType == null || isDisabled()) { - return CompletableFuture.completedFuture(new TranslationBundle(Map.of(language, text))); + return CompletableFuture.completedFuture(TranslationBundle.EMPTY); } return switch (languageType) { case ENGLISH -> @@ -58,15 +58,15 @@ public CompletableFuture translate(final String language, fin } private static TranslationBundle createBundle(@Nullable final String english, @Nullable final String spanish, @Nullable final String french) { - final ImmutableMap.Builder stringsByLanguage = ImmutableMap.builderWithExpectedSize(3); + final ImmutableMap.Builder stringsByLanguage = ImmutableMap.builderWithExpectedSize(3); if (english != null) { - stringsByLanguage.put(TranslatableLanguage.ENGLISH.getSerializedName(), english); + stringsByLanguage.put(TranslatableLanguage.ENGLISH, english); } if (spanish != null) { - stringsByLanguage.put(TranslatableLanguage.SPANISH.getSerializedName(), spanish); + stringsByLanguage.put(TranslatableLanguage.SPANISH, spanish); } if (french != null) { - stringsByLanguage.put(TranslatableLanguage.FRENCH.getSerializedName(), french); + stringsByLanguage.put(TranslatableLanguage.FRENCH, french); } return new TranslationBundle(stringsByLanguage.build()); }