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.File;
import java.io.FileReader;
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;
private TreeMap field_94521_d = new TreeMap();
public String currentLanguage;
private boolean isUnicode;
public StringTranslate(String par1Str)
{
this.loadLanguageList();
this.setLanguage(par1Str, false);
}
/**
* Return the StringTranslate singleton instance
*/
public static StringTranslate getInstance()
{
return instance;
}
private void loadLanguageList()
{
TreeMap treemap = new TreeMap();
try
{
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/languages.txt"), "UTF-8"));
for (String s = bufferedreader.readLine(); s != null; s = bufferedreader.readLine())
{
String[] astring = s.trim().split("=");
if (astring != null && astring.length == 2)
{
treemap.put(astring[0], astring[1]);
}
}
}
catch (IOException ioexception)
{
ioexception.printStackTrace();
return;
}
this.languageList = treemap;
this.languageList.put("en_US", "English (US)");
}
public TreeMap getLanguageList()
{
return this.languageList;
}
private void loadLanguage(Properties par1Properties, String par2Str) throws IOException
{
BufferedReader bufferedreader = null;
if (this.field_94521_d.containsKey(par2Str))
{
bufferedreader = new BufferedReader(new FileReader((File)this.field_94521_d.get(par2Str)));
}
else
{
bufferedreader = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/" + par2Str + ".lang"), "UTF-8"));
}
for (String s1 = bufferedreader.readLine(); s1 != null; s1 = bufferedreader.readLine())
{
s1 = s1.trim();
if (!s1.startsWith("#"))
{
String[] astring = s1.split("=");
if (astring != null && astring.length == 2)
{
par1Properties.setProperty(astring[0], astring[1]);
}
}
}
LanguageRegistry.instance().loadLanguageTable(par1Properties, par2Str);
}
public synchronized void setLanguage(String par1Str, boolean par2)
{
if (par2 || !par1Str.equals(this.currentLanguage))
{
Properties properties = new Properties();
try
{
this.loadLanguage(properties, "en_US");
}
catch (IOException ioexception)
{
;
}
this.isUnicode = false;
if (!"en_US".equals(par1Str))
{
try
{
this.loadLanguage(properties, par1Str);
Enumeration enumeration = properties.propertyNames();
while (enumeration.hasMoreElements() && !this.isUnicode)
{
Object object = enumeration.nextElement();
Object object1 = properties.get(object);
if (object1 != null)
{
String s1 = object1.toString();
for (int i = 0; i < s1.length(); ++i)
{
if (s1.charAt(i) >= 256)
{
this.isUnicode = true;
break;
}
}
}
}
}
catch (IOException ioexception1)
{
ioexception1.printStackTrace();
return;
}
}
this.currentLanguage = par1Str;
this.translateTable = properties;
}
}
/**
* Translate a key to current language.
*/
public synchronized String translateKey(String par1Str)
{
return this.translateTable.getProperty(par1Str, par1Str);
}
/**
* Translate a key to current language applying String.format()
*/
public synchronized String translateKeyFormat(String par1Str, Object ... par2ArrayOfObj)
{
String s1 = this.translateTable.getProperty(par1Str, par1Str);
try
{
return String.format(s1, par2ArrayOfObj);
}
catch (IllegalFormatException illegalformatexception)
{
return "Format error: " + s1;
}
}
public String getCurrentLanguage()
{
return this.currentLanguage;
}
@SideOnly(Side.CLIENT)
public boolean isUnicode()
{
return this.isUnicode;
}
public synchronized boolean containsTranslateKey(String par1Str)
{
return this.translateTable.containsKey(par1Str);
}
/**
* Translate a key with a extra '.name' at end added, is used by blocks and items.
*/
public synchronized 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);
}
@SideOnly(Side.CLIENT)
public synchronized void func_94519_a(String par1Str, File par2File)
{
int i = par1Str.indexOf(46);
if (i > 0)
{
par1Str = par1Str.substring(0, i);
}
this.field_94521_d.put(par1Str, par2File);
if (par1Str.contains(this.currentLanguage))
{
this.setLanguage(this.currentLanguage, true);
}
}
}