Merge pull request #3988 from FortressNebula/addon-support-for-lang-merger

Add support for other mod ids in LangMerger
This commit is contained in:
simibubi 2022-12-07 17:04:35 +01:00 committed by GitHub
commit 1c22fd8165
Failed to generate hash of commit
3 changed files with 57 additions and 18 deletions

View file

@ -9,7 +9,9 @@ import com.simibubi.create.foundation.ponder.PonderLocalization;
import com.simibubi.create.foundation.utility.FilesHelper; import com.simibubi.create.foundation.utility.FilesHelper;
import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Lang;
public enum AllLangPartials { import java.util.List;
public enum AllLangPartials implements ILangPartial {
ADVANCEMENTS("Advancements", AllAdvancements::provideLangEntries), ADVANCEMENTS("Advancements", AllAdvancements::provideLangEntries),
INTERFACE("UI & Messages"), INTERFACE("UI & Messages"),
@ -24,7 +26,7 @@ public enum AllLangPartials {
private AllLangPartials(String display) { private AllLangPartials(String display) {
this.display = display; this.display = display;
this.provider = this::fromResource; this.provider = getDefault();
} }
private AllLangPartials(String display, Supplier<JsonElement> customProvider) { private AllLangPartials(String display, Supplier<JsonElement> customProvider) {
@ -32,21 +34,19 @@ public enum AllLangPartials {
this.provider = customProvider; this.provider = customProvider;
} }
@Override
public String getDisplay() { public String getDisplay() {
return display; return display;
} }
@Override
public String getFileName() {
return Lang.asId(name());
}
@Override
public JsonElement provide() { public JsonElement provide() {
return provider.get(); return provider.get();
} }
private JsonElement fromResource() {
String fileName = Lang.asId(name());
String filepath = "assets/" + Create.ID + "/lang/default/" + fileName + ".json";
JsonElement element = FilesHelper.loadJsonResource(filepath);
if (element == null)
throw new IllegalStateException(String.format("Could not find default lang file: %s", filepath));
return element;
}
} }

View file

@ -0,0 +1,29 @@
package com.simibubi.create.foundation.data;
import com.google.common.base.Supplier;
import com.google.gson.JsonElement;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.FilesHelper;
import java.util.List;
public interface ILangPartial {
String getDisplay();
String getFileName();
default String getModID() { return Create.ID; }
JsonElement provide();
private JsonElement fromResource() {
String fileName = getFileName();
String filepath = "assets/" + getModID() + "/lang/default/" + fileName + ".json";
JsonElement element = FilesHelper.loadJsonResource(filepath);
if (element == null)
throw new IllegalStateException(String.format("Could not find default lang file: %s", filepath));
return element;
}
default Supplier<JsonElement> getDefault() { return this::fromResource; }
}

View file

@ -39,6 +39,9 @@ public class LangMerger implements DataProvider {
static final String CATEGORY_HEADER = "\t\"_\": \"->------------------------] %s [------------------------<-\","; static final String CATEGORY_HEADER = "\t\"_\": \"->------------------------] %s [------------------------<-\",";
private DataGenerator gen; private DataGenerator gen;
private final String modid;
private final String displayName;
private final ILangPartial[] langPartials;
private List<Object> mergedLangData; private List<Object> mergedLangData;
private Map<String, List<Object>> populatedLangData; private Map<String, List<Object>> populatedLangData;
@ -48,7 +51,14 @@ public class LangMerger implements DataProvider {
private List<String> langIgnore; private List<String> langIgnore;
public LangMerger(DataGenerator gen) { public LangMerger(DataGenerator gen) {
this(gen, Create.ID, "Create", AllLangPartials.values());
}
public <T extends ILangPartial> LangMerger(DataGenerator gen, String modid, String displayName, T[] langPartials) {
this.gen = gen; this.gen = gen;
this.modid = modid;
this.displayName = displayName;
this.langPartials = langPartials;
this.mergedLangData = new ArrayList<>(); this.mergedLangData = new ArrayList<>();
this.langIgnore = new ArrayList<>(); this.langIgnore = new ArrayList<>();
this.allLocalizedEntries = new HashMap<>(); this.allLocalizedEntries = new HashMap<>();
@ -60,7 +70,7 @@ public class LangMerger implements DataProvider {
private void populateLangIgnore() { private void populateLangIgnore() {
// Key prefixes added here will NOT be transferred to lang templates // Key prefixes added here will NOT be transferred to lang templates
langIgnore.add("create.ponder.debug_"); // Ponder debug scene text langIgnore.add("create.ponder.debug_"); // Ponder debug scene text
langIgnore.add("create.gui.chromatic_projector"); langIgnore.add("create.gui.chromatic_projector");
} }
private boolean shouldIgnore(String key) { private boolean shouldIgnore(String key) {
@ -78,7 +88,7 @@ public class LangMerger implements DataProvider {
@Override @Override
public void run(HashCache cache) throws IOException { public void run(HashCache cache) throws IOException {
Path path = this.gen.getOutputFolder() Path path = this.gen.getOutputFolder()
.resolve("assets/" + Create.ID + "/lang/" + "en_us.json"); .resolve("assets/" + modid + "/lang/" + "en_us.json");
for (Pair<String, JsonElement> pair : getAllLocalizationFiles()) { for (Pair<String, JsonElement> pair : getAllLocalizationFiles()) {
if (!pair.getRight() if (!pair.getRight()
@ -112,7 +122,7 @@ public class LangMerger implements DataProvider {
for (Entry<String, List<Object>> localization : populatedLangData.entrySet()) { for (Entry<String, List<Object>> localization : populatedLangData.entrySet()) {
String key = localization.getKey(); String key = localization.getKey();
Path populatedLangPath = this.gen.getOutputFolder() Path populatedLangPath = this.gen.getOutputFolder()
.resolve("assets/" + Create.ID + "/lang/unfinished/" + key); .resolve("assets/" + modid + "/lang/unfinished/" + key);
save(cache, localization.getValue(), missingTranslationTally.get(key) save(cache, localization.getValue(), missingTranslationTally.get(key)
.intValue(), populatedLangPath, "Populating " + key + " with missing entries..."); .intValue(), populatedLangPath, "Populating " + key + " with missing entries...");
} }
@ -180,7 +190,7 @@ public class LangMerger implements DataProvider {
// Always put tooltips and ponder scenes in their own paragraphs // Always put tooltips and ponder scenes in their own paragraphs
if (key.endsWith(".tooltip")) if (key.endsWith(".tooltip"))
return true; return true;
if (key.startsWith("create.ponder") && key.endsWith(PonderScene.TITLE_KEY)) if (key.startsWith(modid + ".ponder") && key.endsWith(PonderScene.TITLE_KEY))
return true; return true;
key = key.replaceFirst("\\.", ""); key = key.replaceFirst("\\.", "");
@ -198,7 +208,7 @@ public class LangMerger implements DataProvider {
private List<Pair<String, JsonElement>> getAllLocalizationFiles() { private List<Pair<String, JsonElement>> getAllLocalizationFiles() {
ArrayList<Pair<String, JsonElement>> list = new ArrayList<>(); ArrayList<Pair<String, JsonElement>> list = new ArrayList<>();
String filepath = "assets/" + Create.ID + "/lang/"; String filepath = "assets/" + modid + "/lang/";
try (InputStream resourceStream = ClassLoader.getSystemResourceAsStream(filepath)) { try (InputStream resourceStream = ClassLoader.getSystemResourceAsStream(filepath)) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resourceStream)); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resourceStream));
while (true) { while (true) {
@ -219,7 +229,7 @@ public class LangMerger implements DataProvider {
} }
private void collectEntries() { private void collectEntries() {
for (AllLangPartials partial : AllLangPartials.values()) for (ILangPartial partial : langPartials)
addAll(partial.getDisplay(), partial.provide() addAll(partial.getDisplay(), partial.provide()
.getAsJsonObject()); .getAsJsonObject());
} }
@ -250,7 +260,7 @@ public class LangMerger implements DataProvider {
if (missingKeys != -1) if (missingKeys != -1)
builder.append("\t\"_\": \"Missing Localizations: " + missingKeys + "\",\n"); builder.append("\t\"_\": \"Missing Localizations: " + missingKeys + "\",\n");
data.forEach(builder::append); data.forEach(builder::append);
builder.append("\t\"_\": \"Thank you for translating Create!\"\n\n"); builder.append("\t\"_\": \"Thank you for translating ").append(displayName).append("!\"\n\n");
builder.append("}"); builder.append("}");
return builder.toString(); return builder.toString();
} }