diff options
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_LanguageManager.java')
-rw-r--r-- | src/main/java/gregtech/api/util/GT_LanguageManager.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java new file mode 100644 index 0000000000..b419b7100f --- /dev/null +++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java @@ -0,0 +1,95 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GT_Values.E; +import gregtech.api.GregTech_API; + +import java.util.HashMap; +import java.util.Map.Entry; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import cpw.mods.fml.common.registry.LanguageRegistry; + +public class GT_LanguageManager { + public static Configuration sEnglishFile; + + public static final HashMap<String, String> TEMPMAP = new HashMap<String, String>(), BUFFERMAP = new HashMap<String, String>(); + + public static String addStringLocalization(String aKey, String aEnglish) { + return addStringLocalization(aKey, aEnglish, true); + } + + public static String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) { + if (aKey == null) return E; + if (aWriteIntoLangFile) aEnglish = writeToLangFile(aKey, aEnglish); + TEMPMAP.put(aKey.trim(), aEnglish); + LanguageRegistry.instance().injectLanguage("en_US", TEMPMAP); + TEMPMAP.clear(); + return aEnglish; + } + + 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(); + } + return aEnglish; + } + + public static String getTranslation(String aKey) { + if (aKey == null) return E; + String tTrimmedKey = aKey.trim(), rTranslation = LanguageRegistry.instance().getStringLocalization(tTrimmedKey); + if (GT_Utility.isStringInvalid(rTranslation)) { + rTranslation = StatCollector.translateToLocal(tTrimmedKey); + if (GT_Utility.isStringInvalid(rTranslation) || tTrimmedKey.equals(rTranslation)) { + if (aKey.endsWith(".name")) { + rTranslation = StatCollector.translateToLocal(tTrimmedKey.substring(0, tTrimmedKey.length() - 5)); + if (GT_Utility.isStringInvalid(rTranslation) || tTrimmedKey.substring(0, tTrimmedKey.length() - 5).equals(rTranslation)) { + return aKey; + } + } else { + rTranslation = StatCollector.translateToLocal(tTrimmedKey + ".name"); + if (GT_Utility.isStringInvalid(rTranslation) || (tTrimmedKey + ".name").equals(rTranslation)) { + return aKey; + } + } + } + } + return rTranslation; + } + + public static String getTranslation(String aKey, String aSeperator) { + if (aKey == null) return E; + String rTranslation = E; + for (String tString : aKey.split(aSeperator)) { + rTranslation += getTranslation(tString); + } + return rTranslation; + } + + public static String getTranslateableItemStackName(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) return "null"; + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT != null && tNBT.hasKey("display")) { + String tName = tNBT.getCompoundTag("display").getString("Name"); + if (GT_Utility.isStringValid(tName)) { + return tName; + } + } + return aStack.getUnlocalizedName() + ".name"; + } +}
\ No newline at end of file |