001 package net.minecraft.util; 002 003 import cpw.mods.fml.common.registry.LanguageRegistry; 004 import cpw.mods.fml.relauncher.Side; 005 import cpw.mods.fml.relauncher.SideOnly; 006 import java.io.BufferedReader; 007 import java.io.IOException; 008 import java.io.InputStreamReader; 009 import java.util.Enumeration; 010 import java.util.IllegalFormatException; 011 import java.util.Properties; 012 import java.util.TreeMap; 013 014 public class StringTranslate 015 { 016 /** Is the private singleton instance of StringTranslate. */ 017 private static StringTranslate instance = new StringTranslate("en_US"); 018 019 /** 020 * Contains all key/value pairs to be translated - is loaded from '/lang/en_US.lang' when the StringTranslate is 021 * created. 022 */ 023 public Properties translateTable = new Properties(); 024 private TreeMap languageList; 025 public String currentLanguage; 026 private boolean isUnicode; 027 028 public StringTranslate(String par1Str) 029 { 030 this.loadLanguageList(); 031 this.setLanguage(par1Str); 032 } 033 034 /** 035 * Return the StringTranslate singleton instance 036 */ 037 public static StringTranslate getInstance() 038 { 039 return instance; 040 } 041 042 private void loadLanguageList() 043 { 044 TreeMap var1 = new TreeMap(); 045 046 try 047 { 048 BufferedReader var2 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/languages.txt"), "UTF-8")); 049 050 for (String var3 = var2.readLine(); var3 != null; var3 = var2.readLine()) 051 { 052 String[] var4 = var3.split("="); 053 054 if (var4 != null && var4.length == 2) 055 { 056 var1.put(var4[0], var4[1]); 057 } 058 } 059 } 060 catch (IOException var5) 061 { 062 var5.printStackTrace(); 063 return; 064 } 065 066 this.languageList = var1; 067 this.languageList.put("en_US", "English (US)"); 068 } 069 070 public TreeMap getLanguageList() 071 { 072 return this.languageList; 073 } 074 075 private void loadLanguage(Properties par1Properties, String par2Str) throws IOException 076 { 077 BufferedReader var3 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/" + par2Str + ".lang"), "UTF-8")); 078 079 for (String var4 = var3.readLine(); var4 != null; var4 = var3.readLine()) 080 { 081 var4 = var4.trim(); 082 083 if (!var4.startsWith("#")) 084 { 085 String[] var5 = var4.split("="); 086 087 if (var5 != null && var5.length == 2) 088 { 089 par1Properties.setProperty(var5[0], var5[1]); 090 } 091 } 092 } 093 LanguageRegistry.instance().loadLanguageTable(par1Properties, par2Str); 094 } 095 096 public void setLanguage(String par1Str) 097 { 098 if (!par1Str.equals(this.currentLanguage)) 099 { 100 Properties var2 = new Properties(); 101 102 try 103 { 104 this.loadLanguage(var2, "en_US"); 105 } 106 catch (IOException var8) 107 { 108 ; 109 } 110 111 this.isUnicode = false; 112 113 if (!"en_US".equals(par1Str)) 114 { 115 try 116 { 117 this.loadLanguage(var2, par1Str); 118 Enumeration var3 = var2.propertyNames(); 119 120 while (var3.hasMoreElements() && !this.isUnicode) 121 { 122 Object var4 = var3.nextElement(); 123 Object var5 = var2.get(var4); 124 125 if (var5 != null) 126 { 127 String var6 = var5.toString(); 128 129 for (int var7 = 0; var7 < var6.length(); ++var7) 130 { 131 if (var6.charAt(var7) >= 256) 132 { 133 this.isUnicode = true; 134 break; 135 } 136 } 137 } 138 } 139 } 140 catch (IOException var9) 141 { 142 var9.printStackTrace(); 143 return; 144 } 145 } 146 147 this.currentLanguage = par1Str; 148 this.translateTable = var2; 149 } 150 } 151 152 public String getCurrentLanguage() 153 { 154 return this.currentLanguage; 155 } 156 157 @SideOnly(Side.CLIENT) 158 public boolean isUnicode() 159 { 160 return this.isUnicode; 161 } 162 163 /** 164 * Translate a key to current language. 165 */ 166 public String translateKey(String par1Str) 167 { 168 return this.translateTable.getProperty(par1Str, par1Str); 169 } 170 171 /** 172 * Translate a key to current language applying String.format() 173 */ 174 public String translateKeyFormat(String par1Str, Object ... par2ArrayOfObj) 175 { 176 String var3 = this.translateTable.getProperty(par1Str, par1Str); 177 178 try 179 { 180 return String.format(var3, par2ArrayOfObj); 181 } 182 catch (IllegalFormatException var5) 183 { 184 return "Format error: " + var3; 185 } 186 } 187 188 /** 189 * Translate a key with a extra '.name' at end added, is used by blocks and items. 190 */ 191 public String translateNamedKey(String par1Str) 192 { 193 return this.translateTable.getProperty(par1Str + ".name", ""); 194 } 195 196 @SideOnly(Side.CLIENT) 197 public static boolean isBidirectional(String par0Str) 198 { 199 return "ar_SA".equals(par0Str) || "he_IL".equals(par0Str); 200 } 201 }