package cpw.mods.fml.common.registry;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import com.google.common.base.Charsets;
import cpw.mods.fml.common.FMLLog;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StringTranslate;
public class LanguageRegistry
{
private static final LanguageRegistry INSTANCE = new LanguageRegistry();
private Map<String,Properties> modLanguageData=new HashMap<String,Properties>();
public static LanguageRegistry instance()
{
return INSTANCE;
}
public String getStringLocalization(String key)
{
return getStringLocalization(key, StringTranslate.getInstance().getCurrentLanguage());
}
public String getStringLocalization(String key, String lang)
{
String localizedString = "";
Properties langPack = modLanguageData.get(lang);
if (langPack != null) {
if (langPack.getProperty(key) != null) {
localizedString = langPack.getProperty(key);
}
}
return localizedString;
}
public void addStringLocalization(String key, String value)
{
addStringLocalization(key, "en_US", value);
}
public void addStringLocalization(String key, String lang, String value)
{
Properties langPack=modLanguageData.get(lang);
if (langPack==null) {
langPack=new Properties();
modLanguageData.put(lang, langPack);
}
langPack.put(key,value);
}
public void addStringLocalization(Properties langPackAdditions) {
addStringLocalization(langPackAdditions, "en_US");
}
public void addStringLocalization(Properties langPackAdditions, String lang) {
Properties langPack = modLanguageData.get(lang);
if (langPack == null) {
langPack = new Properties();
modLanguageData.put(lang, langPack);
}
if (langPackAdditions != null) {
langPack.putAll(langPackAdditions);
}
}
public static void reloadLanguageTable()
{
// reload language table by forcing lang to null and reloading the properties file
String lang = StringTranslate.getInstance().getCurrentLanguage();
StringTranslate.getInstance().currentLanguage = null;
StringTranslate.getInstance().setLanguage(lang);
}
public void addNameForObject(Object objectToName, String lang, String name)
{
String objectName;
if (objectToName instanceof Item) {
objectName=((Item)objectToName).getItemName();
} else if (objectToName instanceof Block) {
objectName=((Block)objectToName).getBlockName();
} else if (objectToName instanceof ItemStack) {
objectName=((ItemStack)objectToName).getItem().getItemNameIS((ItemStack)objectToName);
} else {
throw new IllegalArgumentException(String.format("Illegal object for naming %s",objectToName));
}
objectName+=".name";
addStringLocalization(objectName, lang, name);
}
public static void addName(Object objectToName, String name)
{
instance().addNameForObject(objectToName, "en_US", name);
}
public void loadLanguageTable(Properties languagePack, String lang)
{
Properties usPack=modLanguageData.get("en_US");
if (usPack!=null) {
languagePack.putAll(usPack);
}
Properties langPack=modLanguageData.get(lang);
if (langPack==null) {
return;
}
languagePack.putAll(langPack);
}
public void loadLocalization(String localizationFile, String lang, boolean isXML)
{
loadLocalization(this.getClass().getResource(localizationFile), lang, isXML);
}
public void loadLocalization(URL localizationFile, String lang, boolean isXML)
{
InputStream langStream = null;
Properties langPack = new Properties();
try {
langStream = localizationFile.openStream();
if (isXML) {
langPack.loadFromXML(langStream);
}
else {
langPack.load(new InputStreamReader(langStream,Charsets.UTF_8));
}
addStringLocalization(langPack, lang);
}
catch (IOException e) {
FMLLog.getLogger().severe("Unable to load localization from file: " + localizationFile);
e.printStackTrace();
}
finally {
try {
if (langStream != null) {
langStream.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
}