package net.minecraft.client.resources;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import net.minecraft.client.resources.data.IMetadataSerializer;
import net.minecraft.client.resources.data.LanguageMetadataSection;
import net.minecraft.util.StringTranslate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SideOnly(Side.CLIENT)
public class LanguageManager implements IResourceManagerReloadListener
{
private static final Logger logger = LogManager.getLogger();
private final IMetadataSerializer theMetadataSerializer;
private String currentLanguage;
protected static final Locale currentLocale = new Locale();
private Map languageMap = Maps.newHashMap();
private static final String __OBFID = "CL_00001096";
public LanguageManager(IMetadataSerializer p_i1304_1_, String p_i1304_2_)
{
this.theMetadataSerializer = p_i1304_1_;
this.currentLanguage = p_i1304_2_;
I18n.setLocale(currentLocale);
}
public void parseLanguageMetadata(List p_135043_1_)
{
this.languageMap.clear();
Iterator iterator = p_135043_1_.iterator();
while (iterator.hasNext())
{
IResourcePack iresourcepack = (IResourcePack)iterator.next();
try
{
LanguageMetadataSection languagemetadatasection = (LanguageMetadataSection)iresourcepack.getPackMetadata(this.theMetadataSerializer, "language");
if (languagemetadatasection != null)
{
Iterator iterator1 = languagemetadatasection.getLanguages().iterator();
while (iterator1.hasNext())
{
Language language = (Language)iterator1.next();
if (!this.languageMap.containsKey(language.getLanguageCode()))
{
this.languageMap.put(language.getLanguageCode(), language);
}
}
}
}
catch (RuntimeException runtimeexception)
{
logger.warn("Unable to parse metadata section of resourcepack: " + iresourcepack.getPackName(), runtimeexception);
}
catch (IOException ioexception)
{
logger.warn("Unable to parse metadata section of resourcepack: " + iresourcepack.getPackName(), ioexception);
}
}
}
public void onResourceManagerReload(IResourceManager p_110549_1_)
{
ArrayList arraylist = Lists.newArrayList(new String[] {"en_US"});
if (!"en_US".equals(this.currentLanguage))
{
arraylist.add(this.currentLanguage);
}
currentLocale.loadLocaleDataFiles(p_110549_1_, arraylist);
LanguageRegistry.instance().mergeLanguageTable(currentLocale.field_135032_a, this.currentLanguage);
StringTranslate.replaceWith(currentLocale.field_135032_a);
}
public boolean isCurrentLocaleUnicode()
{
return currentLocale.isUnicode();
}
public boolean isCurrentLanguageBidirectional()
{
return this.getCurrentLanguage() != null && this.getCurrentLanguage().isBidirectional();
}
public void setCurrentLanguage(Language p_135045_1_)
{
this.currentLanguage = p_135045_1_.getLanguageCode();
}
public Language getCurrentLanguage()
{
return this.languageMap.containsKey(this.currentLanguage) ? (Language)this.languageMap.get(this.currentLanguage) : (Language)this.languageMap.get("en_US");
}
public SortedSet getLanguages()
{
return Sets.newTreeSet(this.languageMap.values());
}
}