001    package cpw.mods.fml.common.registry;
002    
003    import java.util.HashMap;
004    import java.util.Map;
005    import java.util.Properties;
006    
007    import net.minecraft.src.Block;
008    import net.minecraft.src.Item;
009    import net.minecraft.src.ItemStack;
010    import net.minecraft.src.StringTranslate;
011    
012    public class LanguageRegistry
013    {
014        private static final LanguageRegistry INSTANCE = new LanguageRegistry();
015    
016        private Map<String,Properties> modLanguageData=new HashMap<String,Properties>();
017    
018        public static LanguageRegistry instance()
019        {
020            return INSTANCE;
021        }
022    
023        public void addStringLocalization(String key, String value)
024        {
025            addStringLocalization(key, "en_US", value);
026        }
027        public void addStringLocalization(String key, String lang, String value)
028        {
029            Properties langPack=modLanguageData.get(lang);
030            if (langPack==null) {
031                langPack=new Properties();
032                modLanguageData.put(lang, langPack);
033            }
034            langPack.put(key,value);
035        }
036    
037        public static void reloadLanguageTable()
038        {
039            // reload language table by forcing lang to null and reloading the properties file
040            String lang = StringTranslate.getInstance().getCurrentLanguage();
041            StringTranslate.getInstance().currentLanguage = null;
042            StringTranslate.getInstance().setLanguage(lang);
043        }
044    
045    
046        public void addNameForObject(Object objectToName, String lang, String name)
047        {
048            String objectName;
049            if (objectToName instanceof Item) {
050                objectName=((Item)objectToName).getItemName();
051            } else if (objectToName instanceof Block) {
052                objectName=((Block)objectToName).getBlockName();
053            } else if (objectToName instanceof ItemStack) {
054                objectName=((ItemStack)objectToName).getItem().getItemNameIS((ItemStack)objectToName);
055            } else {
056                throw new IllegalArgumentException(String.format("Illegal object for naming %s",objectToName));
057            }
058            objectName+=".name";
059            addStringLocalization(objectName, lang, name);
060        }
061        
062        public static void addName(Object objectToName, String name)
063        {
064            instance().addNameForObject(objectToName, "en_US", name);
065        }
066    
067        public void loadLanguageTable(Properties languagePack, String lang)
068        {
069            Properties usPack=modLanguageData.get("en_US");
070            if (usPack!=null) {
071                languagePack.putAll(usPack);
072            }
073            Properties langPack=modLanguageData.get(lang);
074            if (langPack==null) {
075                return;
076            }
077            languagePack.putAll(langPack);
078        }
079    }