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