001package cpw.mods.fml.common.registry; 002 003import java.io.IOException; 004import java.io.InputStream; 005import java.io.InputStreamReader; 006import java.net.URL; 007import java.util.HashMap; 008import java.util.Map; 009import java.util.Properties; 010import java.util.logging.Level; 011 012import com.google.common.base.Charsets; 013 014import cpw.mods.fml.common.FMLLog; 015 016import net.minecraft.block.Block; 017import net.minecraft.item.Item; 018import net.minecraft.item.ItemStack; 019import net.minecraft.util.StringTranslate; 020 021public class LanguageRegistry 022{ 023 private static final LanguageRegistry INSTANCE = new LanguageRegistry(); 024 025 private Map<String,Properties> modLanguageData=new HashMap<String,Properties>(); 026 027 public static LanguageRegistry instance() 028 { 029 return INSTANCE; 030 } 031 032 public String getStringLocalization(String key) 033 { 034 return getStringLocalization(key, StringTranslate.getInstance().getCurrentLanguage()); 035 } 036 037 public String getStringLocalization(String key, String lang) 038 { 039 String localizedString = ""; 040 Properties langPack = modLanguageData.get(lang); 041 042 if (langPack != null) { 043 if (langPack.getProperty(key) != null) { 044 localizedString = langPack.getProperty(key); 045 } 046 } 047 048 return localizedString; 049 } 050 051 public void addStringLocalization(String key, String value) 052 { 053 addStringLocalization(key, "en_US", value); 054 } 055 public void addStringLocalization(String key, String lang, String value) 056 { 057 Properties langPack=modLanguageData.get(lang); 058 if (langPack==null) { 059 langPack=new Properties(); 060 modLanguageData.put(lang, langPack); 061 } 062 langPack.put(key,value); 063 } 064 065 public void addStringLocalization(Properties langPackAdditions) { 066 addStringLocalization(langPackAdditions, "en_US"); 067 } 068 069 public void addStringLocalization(Properties langPackAdditions, String lang) { 070 Properties langPack = modLanguageData.get(lang); 071 if (langPack == null) { 072 langPack = new Properties(); 073 modLanguageData.put(lang, langPack); 074 } 075 if (langPackAdditions != null) { 076 langPack.putAll(langPackAdditions); 077 } 078 } 079 080 public static void reloadLanguageTable() 081 { 082 // reload language table by forcing lang to null and reloading the properties file 083 String lang = StringTranslate.getInstance().getCurrentLanguage(); 084 StringTranslate.getInstance().currentLanguage = null; 085 StringTranslate.getInstance().setLanguage(lang); 086 } 087 088 089 public void addNameForObject(Object objectToName, String lang, String name) 090 { 091 String objectName; 092 if (objectToName instanceof Item) { 093 objectName=((Item)objectToName).getItemName(); 094 } else if (objectToName instanceof Block) { 095 objectName=((Block)objectToName).getBlockName(); 096 } else if (objectToName instanceof ItemStack) { 097 objectName=((ItemStack)objectToName).getItem().getItemNameIS((ItemStack)objectToName); 098 } else { 099 throw new IllegalArgumentException(String.format("Illegal object for naming %s",objectToName)); 100 } 101 objectName+=".name"; 102 addStringLocalization(objectName, lang, name); 103 } 104 105 public static void addName(Object objectToName, String name) 106 { 107 instance().addNameForObject(objectToName, "en_US", name); 108 } 109 110 public void loadLanguageTable(Properties languagePack, String lang) 111 { 112 Properties usPack=modLanguageData.get("en_US"); 113 if (usPack!=null) { 114 languagePack.putAll(usPack); 115 } 116 Properties langPack=modLanguageData.get(lang); 117 if (langPack==null) { 118 return; 119 } 120 languagePack.putAll(langPack); 121 } 122 123 public void loadLocalization(String localizationFile, String lang, boolean isXML) 124 { 125 loadLocalization(this.getClass().getResource(localizationFile), lang, isXML); 126 } 127 128 public void loadLocalization(URL localizationFile, String lang, boolean isXML) 129 { 130 InputStream langStream = null; 131 Properties langPack = new Properties(); 132 133 try { 134 langStream = localizationFile.openStream(); 135 136 if (isXML) { 137 langPack.loadFromXML(langStream); 138 } 139 else { 140 langPack.load(new InputStreamReader(langStream,Charsets.UTF_8)); 141 } 142 143 addStringLocalization(langPack, lang); 144 } 145 catch (IOException e) { 146 FMLLog.log(Level.SEVERE, e, "Unable to load localization from file %s", localizationFile); 147 } 148 finally { 149 try { 150 if (langStream != null) { 151 langStream.close(); 152 } 153 } 154 catch (IOException ex) { 155 // HUSH 156 } 157 } 158 } 159}