package net.minecraft.util; import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Enumeration; import java.util.IllegalFormatException; import java.util.Properties; import java.util.TreeMap; public class StringTranslate { /** Is the private singleton instance of StringTranslate. */ private static StringTranslate instance = new StringTranslate("en_US"); /** * Contains all key/value pairs to be translated - is loaded from '/lang/en_US.lang' when the StringTranslate is * created. */ public Properties translateTable = new Properties(); private TreeMap languageList; public String currentLanguage; private boolean isUnicode; public StringTranslate(String par1Str) { this.loadLanguageList(); this.setLanguage(par1Str); } /** * Return the StringTranslate singleton instance */ public static StringTranslate getInstance() { return instance; } private void loadLanguageList() { TreeMap var1 = new TreeMap(); try { BufferedReader var2 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/languages.txt"), "UTF-8")); for (String var3 = var2.readLine(); var3 != null; var3 = var2.readLine()) { String[] var4 = var3.split("="); if (var4 != null && var4.length == 2) { var1.put(var4[0], var4[1]); } } } catch (IOException var5) { var5.printStackTrace(); return; } this.languageList = var1; this.languageList.put("en_US", "English (US)"); } public TreeMap getLanguageList() { return this.languageList; } private void loadLanguage(Properties par1Properties, String par2Str) throws IOException { BufferedReader var3 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/" + par2Str + ".lang"), "UTF-8")); for (String var4 = var3.readLine(); var4 != null; var4 = var3.readLine()) { var4 = var4.trim(); if (!var4.startsWith("#")) { String[] var5 = var4.split("="); if (var5 != null && var5.length == 2) { par1Properties.setProperty(var5[0], var5[1]); } } } LanguageRegistry.instance().loadLanguageTable(par1Properties, par2Str); } public void setLanguage(String par1Str) { if (!par1Str.equals(this.currentLanguage)) { Properties var2 = new Properties(); try { this.loadLanguage(var2, "en_US"); } catch (IOException var8) { ; } this.isUnicode = false; if (!"en_US".equals(par1Str)) { try { this.loadLanguage(var2, par1Str); Enumeration var3 = var2.propertyNames(); while (var3.hasMoreElements() && !this.isUnicode) { Object var4 = var3.nextElement(); Object var5 = var2.get(var4); if (var5 != null) { String var6 = var5.toString(); for (int var7 = 0; var7 < var6.length(); ++var7) { if (var6.charAt(var7) >= 256) { this.isUnicode = true; break; } } } } } catch (IOException var9) { var9.printStackTrace(); return; } } this.currentLanguage = par1Str; this.translateTable = var2; } } public String getCurrentLanguage() { return this.currentLanguage; } @SideOnly(Side.CLIENT) public boolean isUnicode() { return this.isUnicode; } /** * Translate a key to current language. */ public String translateKey(String par1Str) { return this.translateTable.getProperty(par1Str, par1Str); } /** * Translate a key to current language applying String.format() */ public String translateKeyFormat(String par1Str, Object ... par2ArrayOfObj) { String var3 = this.translateTable.getProperty(par1Str, par1Str); try { return String.format(var3, par2ArrayOfObj); } catch (IllegalFormatException var5) { return "Format error: " + var3; } } /** * Translate a key with a extra '.name' at end added, is used by blocks and items. */ public String translateNamedKey(String par1Str) { return this.translateTable.getProperty(par1Str + ".name", ""); } @SideOnly(Side.CLIENT) public static boolean isBidirectional(String par0Str) { return "ar_SA".equals(par0Str) || "he_IL".equals(par0Str); } }