aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2024-02-28 14:04:43 +0900
committerGitHub <noreply@github.com>2024-02-27 23:04:43 -0600
commit32c93da1d788e23672733c7c4db89c66632d8ba4 (patch)
tree82d908ebcd7a4d19ec924fe31f29bbb80d8d861a /src/main/java/gregtech/api
parent8117f9fb1ddc6b30f459483420ce269973ecb53e (diff)
downloadGT5-Unofficial-32c93da1d788e23672733c7c4db89c66632d8ba4.tar.gz
GT5-Unofficial-32c93da1d788e23672733c7c4db89c66632d8ba4.tar.bz2
GT5-Unofficial-32c93da1d788e23672733c7c4db89c66632d8ba4.zip
Add locale code support for lang manager (#2511)
* Add locale code support for lang manager * Deprecate a method with aWriteIntoLangFile
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java9
-rw-r--r--src/main/java/gregtech/api/items/GT_Generic_Item.java11
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaBase_Item.java2
-rw-r--r--src/main/java/gregtech/api/items/GT_Tool_Item.java6
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java3
-rw-r--r--src/main/java/gregtech/api/util/GT_Assemblyline_Server.java16
-rw-r--r--src/main/java/gregtech/api/util/GT_LanguageManager.java164
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java2
8 files changed, 105 insertions, 108 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index 043cd0b763..2e39cd2181 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -481,8 +481,7 @@ public class GregTech_API {
return new gregtech.api.items.GT_Generic_Item(
aUnlocalized,
aEnglish,
- "Doesn't work as intended, this is a Bug",
- false);
+ "Doesn't work as intended, this is a Bug");
}
/**
@@ -528,8 +527,7 @@ public class GregTech_API {
return new gregtech.api.items.GT_Generic_Item(
aUnlocalized,
aEnglish,
- "Doesn't work as intended, this is a Bug",
- false);
+ "Doesn't work as intended, this is a Bug");
}
/**
@@ -552,8 +550,7 @@ public class GregTech_API {
return new gregtech.api.items.GT_Generic_Item(
aUnlocalized,
aEnglish,
- "Doesn't work as intended, this is a Bug",
- false);
+ "Doesn't work as intended, this is a Bug");
}
/**
diff --git a/src/main/java/gregtech/api/items/GT_Generic_Item.java b/src/main/java/gregtech/api/items/GT_Generic_Item.java
index 4410eccc26..a1e01c92c7 100644
--- a/src/main/java/gregtech/api/items/GT_Generic_Item.java
+++ b/src/main/java/gregtech/api/items/GT_Generic_Item.java
@@ -40,16 +40,11 @@ public class GT_Generic_Item extends Item implements IProjectileItem {
protected IIcon mIcon;
public GT_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip) {
- this(aUnlocalized, aEnglish, aEnglishTooltip, true);
- }
-
- public GT_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip,
- boolean aWriteToolTipIntoLangFile) {
super();
mName = "gt." + aUnlocalized;
GT_LanguageManager.addStringLocalization(mName + ".name", aEnglish);
- if (GT_Utility.isStringValid(aEnglishTooltip)) GT_LanguageManager
- .addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip, aWriteToolTipIntoLangFile);
+ if (GT_Utility.isStringValid(aEnglishTooltip))
+ GT_LanguageManager.addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip);
else mTooltip = null;
setCreativeTab(GregTech_API.TAB_GREGTECH);
GameRegistry.registerItem(this, mName, GregTech.ID);
@@ -154,7 +149,7 @@ public class GT_Generic_Item extends Item implements IProjectileItem {
}
public String transItem(String aKey, String aEnglish) {
- return GT_LanguageManager.addStringLocalization("Item_DESCRIPTION_Index_" + aKey, aEnglish, false);
+ return GT_LanguageManager.addStringLocalization("Item_DESCRIPTION_Index_" + aKey, aEnglish);
}
public static class GT_Item_Dispense extends BehaviorProjectileDispense {
diff --git a/src/main/java/gregtech/api/items/GT_MetaBase_Item.java b/src/main/java/gregtech/api/items/GT_MetaBase_Item.java
index 8a65fbc841..481c0b5a08 100644
--- a/src/main/java/gregtech/api/items/GT_MetaBase_Item.java
+++ b/src/main/java/gregtech/api/items/GT_MetaBase_Item.java
@@ -46,7 +46,7 @@ public abstract class GT_MetaBase_Item extends GT_Generic_Item
* @param aUnlocalized The Unlocalized Name of this Item.
*/
public GT_MetaBase_Item(String aUnlocalized) {
- super(aUnlocalized, "Generated Item", null, false);
+ super(aUnlocalized, "Generated Item", null);
setHasSubtypes(true);
setMaxDamage(0);
}
diff --git a/src/main/java/gregtech/api/items/GT_Tool_Item.java b/src/main/java/gregtech/api/items/GT_Tool_Item.java
index be38896685..9f78bdc3fc 100644
--- a/src/main/java/gregtech/api/items/GT_Tool_Item.java
+++ b/src/main/java/gregtech/api/items/GT_Tool_Item.java
@@ -31,11 +31,7 @@ public class GT_Tool_Item extends GT_Generic_Item {
public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage,
boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID, int aToolQuality, float aToolStrength) {
- super(
- aUnlocalized,
- aEnglish,
- aTooltip,
- aTooltip != null && !aTooltip.equals("Doesn't work as intended, this is a Bug"));
+ super(aUnlocalized, aEnglish, aTooltip);
setMaxDamage(aMaxDamage);
setMaxStackSize(1);
setNoRepair();
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
index a5e30fb76c..3392d1ab41 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java
@@ -147,8 +147,7 @@ public class MultiTileEntityRegistry {
return null;
}
- GT_LanguageManager
- .addStringLocalization(mNameInternal + "." + aClassContainer.mID + ".name", aLocalised, false);
+ GT_LanguageManager.addStringLocalization(mNameInternal + "." + aClassContainer.mID + ".name", aLocalised);
mRegistry.put(aClassContainer.mID, aClassContainer);
mLastRegisteredID = aClassContainer.mID;
mRegistrations.add(aClassContainer);
diff --git a/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java b/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java
index 1881ab015a..4c0348683a 100644
--- a/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java
+++ b/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java
@@ -1,6 +1,5 @@
package gregtech.api.util;
-import java.io.File;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -22,24 +21,13 @@ public class GT_Assemblyline_Server {
private static HashMap<String, Property> internal = new HashMap<>();
public static void fillMap(FMLPreInitializationEvent aEvent) {
-
- String s = aEvent.getModConfigurationDirectory()
- .getAbsolutePath();
- s = s.substring(
- 0,
- aEvent.getModConfigurationDirectory()
- .getAbsolutePath()
- .length() - 6);
- s = s + "GregTech.lang";
- File f = new File(s);
- s = "";
- Configuration conf = new Configuration(f);
+ Configuration conf = GT_LanguageManager.sEnglishFile;
ConfigCategory cat = conf.getCategory("languagefile");
internal.putAll(cat.getValues());
for (Map.Entry<String, Property> entry : internal.entrySet()) {
try {
- s = entry.getValue()
+ String s = entry.getValue()
.getString()
.replaceAll("%", "");
diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java
index 2ef251c599..f2c5e2a2d4 100644
--- a/src/main/java/gregtech/api/util/GT_LanguageManager.java
+++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java
@@ -19,12 +19,31 @@ import gregtech.api.GregTech_API;
public class GT_LanguageManager {
- public static final HashMap<String, String> TEMPMAP = new HashMap<>(), BUFFERMAP = new HashMap<>(),
- LANGMAP = new HashMap<>();
+ /**
+ * Buffer to reduce memory allocation when injecting data to LanguageRegistry.
+ */
+ private static final HashMap<String, String> TEMPMAP = new HashMap<>();
+ /**
+ * Buffer used when something is trying to add new lang entry while config file is not set up yet.
+ */
+ public static final Map<String, String> BUFFERMAP = new HashMap<>();
+ /**
+ * Map containing all the translation data coming into this class.
+ */
+ private static final Map<String, String> LANGMAP = new HashMap<>();
+ /**
+ * Config file handler bound to GregTech.lang or GregTech_(locale_name).lang. Even though it says English file,
+ * it's not necessarily English, but on system it's always treated as English (as in, "default" language.)
+ */
public static Configuration sEnglishFile;
- public static String sLanguage = "en_US";
- public static boolean sUseEnglishFile = false;
+ /**
+ * If placeholder like %material should be used for writing lang entries to file.
+ */
public static boolean i18nPlaceholder = true;
+ /**
+ * If there's any lang entry that is not found on lang file and waiting to be written.
+ */
+ private static boolean hasUnsavedEntry = false;
// TODO: convert to enum
public static String FACE_ANY = "gt.lang.face.any", FACE_BOTTOM = "gt.lang.face.bottom",
@@ -33,7 +52,10 @@ public class GT_LanguageManager {
public static String[] FACES = { FACE_BOTTOM, FACE_TOP, FACE_LEFT, FACE_FRONT, FACE_RIGHT, FACE_BACK, FACE_NONE };
- private static Map<String, String> stringTranslateLanguageList = null;
+ /**
+ * Map referencing private field of StringTranslate, used by StatCollector. Used to inject lang entries there.
+ */
+ private static final Map<String, String> stringTranslateLanguageList;
static {
try {
@@ -45,88 +67,87 @@ public class GT_LanguageManager {
stringTranslateLanguageList = (Map<String, String>) fieldStringTranslateLanguageList
.get(fieldStringTranslateInstance.get(null));
} catch (Exception e) {
- e.printStackTrace();
+ throw new RuntimeException(e);
}
}
- public static String addStringLocalization(String aKey, String aEnglish) {
- return addStringLocalization(aKey, aEnglish, true);
+ /**
+ * @deprecated Parameter aWriteIntoLangFile is no longer used,
+ * use {@link #addStringLocalization(String, String)} or consider migrating to MC lang system instead.
+ */
+ @Deprecated
+ public static synchronized String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) {
+ return addStringLocalization(aKey, aEnglish);
}
- public static synchronized String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) {
- if (aKey == null) return E;
- if (aWriteIntoLangFile && (!LANGMAP.containsKey(aKey) || (sEnglishFile != null && !BUFFERMAP.isEmpty()))) {
- aEnglish = writeToLangFile(aKey, aEnglish);
- if (!LANGMAP.containsKey(aKey)) {
- LANGMAP.put(aKey, aEnglish);
- addToMCLangList(aKey, aEnglish);
+ /**
+ * If you newly use this method, please consider using MC lang system instead.
+ */
+ public static synchronized String addStringLocalization(String aKey, String aEnglish) {
+ String trimmedKey = aKey != null ? aKey.trim() : "";
+ if (trimmedKey.isEmpty()) return E; // RIP cascading class loading, don't use GT_Utility here
+ if (sEnglishFile == null) {
+ // Lang file is not set up yet
+ BUFFERMAP.put(trimmedKey, aEnglish);
+ return aEnglish;
+ }
+ if (!BUFFERMAP.isEmpty()) {
+ // Lang file is now set up, resolve all the buffers
+ // This won't be visited twice
+ for (Entry<String, String> tEntry : BUFFERMAP.entrySet()) {
+ writeToLangFile(tEntry.getKey(), tEntry.getValue());
}
+ BUFFERMAP.clear();
}
- TEMPMAP.put(aKey.trim(), aEnglish);
- LanguageRegistry.instance()
- .injectLanguage(sLanguage, TEMPMAP);
- TEMPMAP.clear();
- if (sUseEnglishFile && !aWriteIntoLangFile) {
- if (!LANGMAP.containsKey(aKey)) {
- Property tProperty = sEnglishFile.get("LanguageFile", aKey, aEnglish);
- aEnglish = tProperty.getString();
- LANGMAP.put(aKey, aEnglish);
- addToMCLangList(aKey, aEnglish);
- } else aEnglish = LANGMAP.get(aKey);
+
+ if (!LANGMAP.containsKey(trimmedKey)) {
+ String translation = writeToLangFile(trimmedKey, aEnglish);
+ LANGMAP.put(trimmedKey, translation);
+ addToMCLangList(trimmedKey, translation);
+ TEMPMAP.put(trimmedKey, translation);
+ LanguageRegistry.instance()
+ // If we use the actual user configured locale here, switching lang to others while running game
+ // turns everything into unlocalized string. So we make it "default" and call it a day.
+ .injectLanguage("en_US", TEMPMAP);
+ TEMPMAP.clear();
+ return translation;
}
- return aEnglish;
+ return LANGMAP.get(trimmedKey);
}
- private static synchronized String writeToLangFile(String aKey, String aEnglish) {
- if (aKey == null) return E;
- if (sEnglishFile == null) {
- BUFFERMAP.put(aKey.trim(), aEnglish);
- } else {
- if (!BUFFERMAP.isEmpty()) {
- for (Entry<String, String> tEntry : BUFFERMAP.entrySet()) {
- Property tProperty = sEnglishFile.get("LanguageFile", tEntry.getKey(), tEntry.getValue());
- if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sEnglishFile.save();
- }
- BUFFERMAP.clear();
- }
- Property tProperty = sEnglishFile.get("LanguageFile", aKey.trim(), aEnglish);
- if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sEnglishFile.save();
- if (sEnglishFile.get("EnableLangFile", "UseThisFileAsLanguageFile", false)
- .getBoolean(false)) {
- aEnglish = tProperty.getString();
- sUseEnglishFile = true;
+ private static synchronized String writeToLangFile(String trimmedKey, String aEnglish) {
+ Property tProperty = sEnglishFile.get("LanguageFile", trimmedKey, aEnglish);
+ if (hasUnsavedEntry && GregTech_API.sPostloadFinished) {
+ sEnglishFile.save();
+ hasUnsavedEntry = false;
+ }
+ if (!tProperty.wasRead()) {
+ if (GregTech_API.sPostloadFinished) {
+ sEnglishFile.save();
+ } else {
+ hasUnsavedEntry = true;
}
}
- return aEnglish;
+ return tProperty.getString();
}
public static String getTranslation(String aKey) {
- if (aKey == null) return E;
- String tTrimmedKey = aKey.trim(), rTranslation;
- if (sUseEnglishFile) {
- rTranslation = LanguageRegistry.instance()
- .getStringLocalization(tTrimmedKey);
+ String tTrimmedKey = aKey != null ? aKey.trim() : "";
+ if (tTrimmedKey.isEmpty()) return E;
+
+ if (StatCollector.canTranslate(tTrimmedKey)) {
+ return StatCollector.translateToLocal(tTrimmedKey);
+ }
+ String anotherKeyToTry;
+ if (tTrimmedKey.endsWith(".name")) {
+ anotherKeyToTry = tTrimmedKey.substring(0, tTrimmedKey.length() - 5);
} else {
- rTranslation = StatCollector.translateToLocal(tTrimmedKey);
+ anotherKeyToTry = tTrimmedKey + ".name";
}
- if (GT_Utility.isStringInvalid(rTranslation)) {
- rTranslation = StatCollector.translateToLocal(tTrimmedKey);
- if (GT_Utility.isStringInvalid(rTranslation) || tTrimmedKey.equals(rTranslation)) {
- if (aKey.endsWith(".name")) {
- String trimmedKeyNoName = tTrimmedKey.substring(0, tTrimmedKey.length() - 5);
- rTranslation = StatCollector.translateToLocal(trimmedKeyNoName);
- if (GT_Utility.isStringInvalid(rTranslation) || trimmedKeyNoName.equals(rTranslation)) {
- return aKey;
- }
- } else {
- rTranslation = StatCollector.translateToLocal(tTrimmedKey + ".name");
- if (GT_Utility.isStringInvalid(rTranslation) || (tTrimmedKey + ".name").equals(rTranslation)) {
- return aKey;
- }
- }
- }
+ if (StatCollector.canTranslate(anotherKeyToTry)) {
+ return StatCollector.translateToLocal(anotherKeyToTry);
}
- return rTranslation;
+ return tTrimmedKey;
}
public static String getTranslation(String aKey, String aSeperator) {
@@ -140,6 +161,7 @@ public class GT_LanguageManager {
return rTranslation;
}
+ @SuppressWarnings("unused")
public static String getTranslateableItemStackName(ItemStack aStack) {
if (GT_Utility.isStackInvalid(aStack)) return "null";
NBTTagCompound tNBT = aStack.getTagCompound();
@@ -550,9 +572,9 @@ public class GT_LanguageManager {
addStringLocalization(FACE_NONE, "None");
}
- private static void addToMCLangList(String aKey, String aEnglish) {
+ private static void addToMCLangList(String aKey, String translation) {
if (stringTranslateLanguageList != null) {
- stringTranslateLanguageList.put(aKey, aEnglish);
+ stringTranslateLanguageList.put(aKey, translation);
}
}
}
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
index 64010efb99..4f2d13dd04 100644
--- a/src/main/java/gregtech/api/util/GT_Utility.java
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -3866,7 +3866,7 @@ public class GT_Utility {
}
public static String trans(String aKey, String aEnglish) {
- return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish, false);
+ return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish);
}
public static String getTrans(String aKey) {