From 5ec69179319048d05411a3c74df1c3a9a4cd9482 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Wed, 4 Nov 2026 11:40:13 +0100 Subject: [PATCH 1/5] [localization] fix selected lang not updating properly in 1.1-1.5 --- .../impl/mixin/client/LanguageMixin.java | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java index a177fd653..1a08bec93 100644 --- a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java +++ b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java @@ -51,19 +51,6 @@ public class LanguageMixin { } } - @Inject( - method = "loadLanguage", - at = @At( - value = "HEAD" - ) - ) - private void osl$localization$setLanguage(CallbackInfo ci) { - // each ServerPlayerEntity also holds an instance of this class - if ((Language) (Object) this == INSTANCE) { - Localization.getLanguageManager().setSelectedLanguage(this.currentCode); - } - } - @Inject( method = "loadLanguage", at = @At( @@ -105,6 +92,7 @@ public class LanguageMixin { // each ServerPlayerEntity also holds an instance of this class if ((Language) (Object) this == INSTANCE) { Localization.getLocale().setLastUpdateTime(); + Localization.getLanguageManager().setSelectedLanguage(this.currentCode); } } } From ec0990cb26d589f77c5788f0f03547655957d9fa Mon Sep 17 00:00:00 2001 From: Space Walker Date: Wed, 4 Nov 2026 11:40:31 +0100 Subject: [PATCH 2/5] [localization] fix incorrect last update time for locale --- .../osl/localization/impl/mixin/client/LanguageMixin.java | 8 +++++++- .../osl/localization/impl/mixin/client/LocaleMixin.java | 3 +-- .../osl/localization/impl/mixin/client/LocaleMixin.java | 3 +-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java index 1a08bec93..f41aa5483 100644 --- a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java +++ b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java @@ -2,9 +2,12 @@ import java.util.Properties; +import org.objectweb.asm.Opcodes; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -85,7 +88,10 @@ public class LanguageMixin { @Inject( method = "loadLanguage", at = @At( - value = "TAIL" + value = "FIELD", + target = "Lnet/minecraft/locale/Language;currentCode:Ljava/lang/String;", + opcode = Opcodes.PUTFIELD, + shift = Shift.AFTER ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { diff --git a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java index 8b19c5da6..74145bf90 100644 --- a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java +++ b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java @@ -83,8 +83,7 @@ private void load(List resources) { } @Inject( method = "load(Lnet/minecraft/client/resource/manager/ResourceManager;Ljava/util/List;)V", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/resource/manager/ResourceManager;getResources(Lnet/minecraft/resource/Identifier;)Ljava/util/List;" + value = "TAIL" ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { diff --git a/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java b/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java index 8d66e8a06..3cb2bbeea 100644 --- a/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java +++ b/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java @@ -65,8 +65,7 @@ private void load(List resources) { } @Inject( method = "load(Lnet/minecraft/resource/manager/ResourceManager;Ljava/util/List;)V", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/resource/manager/ResourceManager;getResources(Lnet/minecraft/resource/Identifier;)Ljava/util/List;" + value = "TAIL" ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { From 24f8c4facf5878267530b47672223e71a08353f0 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Wed, 4 Nov 2026 13:43:02 +0100 Subject: [PATCH 3/5] [localization] fix languages not read as UTF-8 --- .../java/net/ornithemc/osl/localization/impl/Locale.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java index d33b84897..c656cf1dd 100644 --- a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java +++ b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -185,7 +186,7 @@ public void loadFromResource(NamespacedIdentifier location, InputStream resource } public void loadFromLang(InputStream is) throws IOException { - try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { line = line.trim(); @@ -202,7 +203,7 @@ public void loadFromLang(InputStream is) throws IOException { } public void loadFromJson(InputStream is) throws IOException { - try (JsonReader reader = JsonReader.json(new InputStreamReader(is))) { + try (JsonReader reader = JsonReader.json(new InputStreamReader(is, StandardCharsets.UTF_8))) { reader.beginObject(); while (reader.hasNext()) { this.set(reader.nextName() , reader.nextString()); From 853701020b96fdc82d7eefaa7638edb093a84194 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Wed, 4 Nov 2026 22:34:34 +0100 Subject: [PATCH 4/5] [localization] fix mod translations not loading pre-b1.4 --- .../net/ornithemc/osl/localization/impl/LanguageReloader.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java b/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java index d8ba66ad2..9a531cdf3 100644 --- a/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java +++ b/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java @@ -1,5 +1,6 @@ package net.ornithemc.osl.localization.impl; +import net.minecraft.locale.Language; import net.ornithemc.osl.resource.loader.api.client.ClientResourceLoaderEvents; import net.ornithemc.osl.resource.loader.api.client.resource.reload.AssetsReloaders; import net.ornithemc.osl.resource.loader.api.resource.manager.ResourceManager; @@ -18,6 +19,7 @@ public static void init() { @Override public void resourcesReloaded(ResourceManager resourceManager) { + Language.getInstance();// ensure it's loaded Localization.getLanguageManager().reloadLocale(resourceManager); } } From 6ecc32f0ff9851d5b27ab03f740c37ab75c27ac9 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Thu, 5 Nov 2026 14:50:51 +0100 Subject: [PATCH 5/5] [localization] fix translations loading twice in 1.10- if language code is already lowercase --- .../osl/localization/impl/mixin/client/LocaleMixin.java | 8 +++++--- .../java/net/ornithemc/osl/localization/impl/Locale.java | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java index 74145bf90..7e88f0f36 100644 --- a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java +++ b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java @@ -56,14 +56,16 @@ private void load(List resources) { } ) private void osl$localization$loadExtraTranslations(ResourceManager resourceManager, List languageCodes, CallbackInfo ci, @Local(ordinal = 0) String languageCode, @Local(ordinal = 2) String namespace) { + String languageCodeLowercase = languageCode.toLowerCase(java.util.Locale.ROOT); + String pathFormat = "lang/%s%s"; String[] paths; - if (ResourcePacks.getSupportedFormat() < 3) { + if (ResourcePacks.getSupportedFormat() < 3 && !languageCode.equals(languageCodeLowercase)) { paths = new String[] { String.format(pathFormat, languageCode, ".json"), - String.format(pathFormat, languageCode.toLowerCase(java.util.Locale.ROOT), ".lang"), - String.format(pathFormat, languageCode.toLowerCase(java.util.Locale.ROOT), ".json") + String.format(pathFormat, languageCodeLowercase, ".lang"), + String.format(pathFormat, languageCodeLowercase, ".json") }; } else { paths = new String[] { diff --git a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java index c656cf1dd..407cea6a5 100644 --- a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java +++ b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java @@ -111,12 +111,12 @@ public void reload(ResourceManager resourceManager, List languages) { } public void loadLanguage(ResourceManager resourceManager, String language) { + String languageLowercase = language.toLowerCase(java.util.Locale.ROOT); + String pathFormat = "lang/%s%s"; String[] paths; - if (ResourcePacks.getSupportedFormat() < 3) { - String languageLowercase = language.toLowerCase(java.util.Locale.ROOT); - + if (ResourcePacks.getSupportedFormat() < 3 && !language.equals(languageLowercase)) { paths = new String[] { String.format(pathFormat, language, ".lang"), String.format(pathFormat, language, ".json"),