Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
3753d87dba | |||
e3370a9ff5 | |||
53f6d95ef7 | |||
f77f98d19d | |||
7e7702b7df | |||
ead065acab | |||
56872f1309 | |||
ff8756dc1a |
@ -1,6 +1,6 @@
|
|||||||
Have you ever wanted to play a mod pack in a language that is not english but some mods don't have a translation?
|
Have you ever tried playing a mod pack in a language other than English, only to find out half of your mods had no translations?
|
||||||
|
|
||||||
Globalization allows you to avoid that by automatically generating missing translations using libjf-translate.
|
Globalization allows you to avoid that problem by automatically generating missing translations using libjf-translate.
|
||||||
|
|
||||||
To set the mod up, simply install it, configure it to target the correct language, then restart the game.
|
To set the mod up, simply install it, configure it to target the correct language, then restart the game.
|
||||||
|
|
||||||
|
@ -1,15 +1,40 @@
|
|||||||
import io.gitlab.jfronny.scripts.*
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("jfmod") version "1.3-SNAPSHOT"
|
id("jfmod") version "1.6-SNAPSHOT"
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects { group = "io.gitlab.jfronny" }
|
||||||
|
base.archivesName = "globalization"
|
||||||
|
|
||||||
|
jfMod {
|
||||||
|
minecraftVersion = "1.21"
|
||||||
|
yarn("build.1")
|
||||||
|
loaderVersion = "0.15.11"
|
||||||
|
libJfVersion = "3.16.0"
|
||||||
|
fabricApiVersion = "0.100.1+1.21"
|
||||||
|
|
||||||
|
modrinth {
|
||||||
|
projectId = "globalization"
|
||||||
|
requiredDependencies.add("libjf")
|
||||||
|
optionalDependencies.add("modmenu")
|
||||||
|
}
|
||||||
|
|
||||||
|
curseforge {
|
||||||
|
projectId = "839010"
|
||||||
|
requiredDependencies.add("libjf")
|
||||||
|
optionalDependencies.add("modmenu")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${prop("libjf_version")}")
|
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v2")
|
||||||
modImplementation("io.gitlab.jfronny.libjf:libjf-translate-v1:${prop("libjf_version")}")
|
modImplementation("io.gitlab.jfronny.libjf:libjf-translate-v1")
|
||||||
|
|
||||||
// Dev env
|
// Dev env
|
||||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${prop("libjf_version")}")
|
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny")
|
||||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${prop("libjf_version")}")
|
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil")
|
||||||
modLocalRuntime("com.terraformersmc:modmenu:5.0.2")
|
modLocalRuntime("com.terraformersmc:modmenu:11.0.0-beta.1")
|
||||||
|
// for modmenu
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-resource-loader-v0")
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-screen-api-v1")
|
||||||
|
modLocalRuntime("net.fabricmc.fabric-api:fabric-key-binding-api-v1")
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
# https://fabricmc.net/develop/
|
|
||||||
minecraft_version=1.19.3
|
|
||||||
yarn_mappings=build.5
|
|
||||||
loader_version=0.14.12
|
|
||||||
|
|
||||||
maven_group=io.gitlab.jfronny
|
|
||||||
archives_base_name=globalization
|
|
||||||
|
|
||||||
modrinth_id=globalization
|
|
||||||
modrinth_required_dependencies=libjf
|
|
||||||
modrinth_optional_dependencies=modmenu
|
|
||||||
|
|
||||||
libjf_version=3.5.0
|
|
||||||
fabric_version=0.70.0+1.19.3
|
|
@ -2,35 +2,35 @@ package io.gitlab.jfronny.globalization.mixin;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import io.gitlab.jfronny.globalization.GlobalizationMap;
|
import io.gitlab.jfronny.globalization.GlobalizationMap;
|
||||||
import net.minecraft.client.resource.language.LanguageDefinition;
|
|
||||||
import net.minecraft.client.resource.language.TranslationStorage;
|
import net.minecraft.client.resource.language.TranslationStorage;
|
||||||
import net.minecraft.resource.ResourceManager;
|
import net.minecraft.resource.ResourceManager;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.*;
|
import org.spongepowered.asm.mixin.injection.*;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Mixin(TranslationStorage.class)
|
@Mixin(TranslationStorage.class)
|
||||||
public class TranslationStorageMixin {
|
public class TranslationStorageMixin {
|
||||||
@ModifyVariable(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE_ASSIGN", target = "Lcom/google/common/collect/Maps;newHashMap()Ljava/util/HashMap;"), index = 2)
|
@ModifyVariable(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Z)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE_ASSIGN", target = "Lcom/google/common/collect/Maps;newHashMap()Ljava/util/HashMap;", remap = false), index = 3)
|
||||||
private static Map<String, String> globalization$createCustomMap(Map<String, String> original) {
|
private static Map<String, String> globalization$createCustomMap(Map<String, String> original) {
|
||||||
if (!original.isEmpty()) throw new IllegalStateException("Non-empty original");
|
if (!original.isEmpty()) throw new IllegalStateException("Non-empty original");
|
||||||
return new GlobalizationMap();
|
return new GlobalizationMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resource/language/LanguageDefinition;isRightToLeft()Z"), locals = LocalCapture.CAPTURE_FAILHARD)
|
@Inject(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Z)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE", target = "Ljava/lang/String;format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"), locals = LocalCapture.CAPTURE_FAILHARD)
|
||||||
private static void globalization$forkCustomMap(ResourceManager resourceManager, List<LanguageDefinition> definitions, CallbackInfoReturnable<TranslationStorage> cir, Map<String, String> map) {
|
private static void globalization$forkCustomMap(ResourceManager manager, List<String> definitions, boolean leftToRight, CallbackInfoReturnable<String> cir, Map<String, String> map) {
|
||||||
globalization$getMap(map).fork();
|
globalization$getMap(map).fork();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableMap;copyOf(Ljava/util/Map;)Lcom/google/common/collect/ImmutableMap;"))
|
@Redirect(method = "load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Z)Lnet/minecraft/client/resource/language/TranslationStorage;", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableMap;copyOf(Ljava/util/Map;)Lcom/google/common/collect/ImmutableMap;", remap = false))
|
||||||
private static ImmutableMap<String, String> globalization$generateMissing(Map<String, String> source) {
|
private static ImmutableMap<String, String> globalization$generateMissing(Map<String, String> source) {
|
||||||
return ImmutableMap.copyOf(globalization$getMap(source).generateMissing());
|
return ImmutableMap.copyOf(globalization$getMap(source).generateMissing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
private static GlobalizationMap globalization$getMap(Map<String, String> map) {
|
private static GlobalizationMap globalization$getMap(Map<String, String> map) {
|
||||||
return (GlobalizationMap) map;
|
return (GlobalizationMap) map;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package io.gitlab.jfronny.globalization;
|
package io.gitlab.jfronny.globalization;
|
||||||
|
|
||||||
import io.gitlab.jfronny.commons.log.Logger;
|
import io.gitlab.jfronny.commons.logger.SystemLoggerPlus;
|
||||||
|
|
||||||
public class Globalization {
|
public class Globalization {
|
||||||
public static final Logger LOG = Logger.forName("globalization");
|
public static final SystemLoggerPlus LOG = SystemLoggerPlus.forName("globalization");
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package io.gitlab.jfronny.globalization;
|
package io.gitlab.jfronny.globalization;
|
||||||
|
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.Entry;
|
import io.gitlab.jfronny.libjf.config.api.v2.Entry;
|
||||||
import io.gitlab.jfronny.libjf.config.api.v1.JfConfig;
|
import io.gitlab.jfronny.libjf.config.api.v2.JfConfig;
|
||||||
|
|
||||||
@JfConfig(referencedConfigs = "libjf-translate-v1")
|
@JfConfig(referencedConfigs = "libjf-translate-v1")
|
||||||
public class GlobalizationConfig {
|
public class GlobalizationConfig {
|
||||||
|
@ -13,7 +13,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class GlobalizationMap extends AbstractMap<String, String> {
|
public class GlobalizationMap extends AbstractMap<String, String> {
|
||||||
private static final Path targetPath = FabricLoader.getInstance().getConfigDir().resolve("globalization");
|
private static final Path targetPath = FabricLoader.getInstance().getConfigDir().resolve("globalization");
|
||||||
private List<Map<String, String>> pools = new LinkedList<>();
|
private final List<Map<String, String>> pools = new LinkedList<>();
|
||||||
|
|
||||||
public void fork() {
|
public void fork() {
|
||||||
if (pools.isEmpty() || !getCurrentPool().isEmpty()) pools.add(new LinkedHashMap<>());
|
if (pools.isEmpty() || !getCurrentPool().isEmpty()) pools.add(new LinkedHashMap<>());
|
||||||
@ -125,7 +125,7 @@ public class GlobalizationMap extends AbstractMap<String, String> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return pools.isEmpty() || (pools.size() == 1 && pools.get(0).isEmpty());
|
return pools.isEmpty() || (pools.size() == 1 && pools.getFirst().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user