using UnityEngine; using System.Collections; using System.IO; public class LocalizationManager : MonoBehaviour { //Connections //Attributes private static string DefaultLanguage = "Deutsch"; private static bool DoDebug = false; //Stats private static Hashtable DefaultTable; private static Hashtable TextTable; private static bool HasLoadedLanguage = false; //------------------------------------------------------------------------------------------------------------------- void Awake() { //Load Default Language LoadLanguage("Default"); } //******************************************************************************************************************* public static bool LoadLanguage(string fileName) { HasLoadedLanguage = true; bool IsDefaultLanguage = fileName == "Default"; //Get full Path string LanguageToLoad = IsDefaultLanguage ? DefaultLanguage : fileName; string FullPath = "Localization/" + LanguageToLoad + ""; //Load File TextAsset Data = (TextAsset)Resources.Load(FullPath, typeof(TextAsset)); //Did it load? if (Data != null) { //Clear Table if (IsDefaultLanguage) { if (DefaultTable == null) { DefaultTable = new Hashtable(); } else { return false; } } else { if (TextTable != null) { TextTable.Clear(); } TextTable = new Hashtable(); } //Read File //Prepare Values StringReader Reader = new StringReader(Data.text); string Key = null; string Value = null; string Line; bool EndOfListReached = false; while (!EndOfListReached) { //Get Line Line = Reader.ReadLine(); //Line available? > Get Entries if (Line != null) { //What is the Line? if (Line.StartsWith("id \"")) { //ID Key = Line.Substring(4, Line.Length - 5); } else if (Line.StartsWith("str \"")) { //String Value = Line.Substring(5, Line.Length - 6); } } else { //Done! if (Line == null) { EndOfListReached = true; } } //Save Entries if possible //Are ID and String set? if (Key != null && Value != null) { //CleanUp String Value = Value.Replace("\\n", "\n"); //Add Entry if (IsDefaultLanguage) { DefaultTable.Add(Key, Value); } else { TextTable.Add(Key, Value); } //Reset Key = Value = null; } } //Stop Reading Reader.Close(); return true; } else if (LanguageToLoad != DefaultLanguage) { Debug.Log("Sy: Chosen language could not be found. Loading default language."); LoadLanguage(DefaultLanguage); return false; } else { Debug.Log("Sy: Chosen language and default language could not be found."); HasLoadedLanguage = false; return false; } } //********************************************************************************************************************************** public static string GetText(string key) { string ReturnedValue = "[Localization not ready]"; //Debug? if (DoDebug) { return "DebugLocalization"; } //Ready? if (HasLoadedLanguage) { ReturnedValue = "[Text not found]"; bool KeyLoaded = false; //Try to load key if (TextTable != null) { if (TextTable.ContainsKey(key)) { string Result = (string)TextTable[key]; if (Result.Length > 0) { KeyLoaded = true; ReturnedValue = Result; } } } //Load Default if it didn't work if (!KeyLoaded) { if (DefaultTable.ContainsKey(key)) { string Result = (string)DefaultTable[key]; if (Result.Length > 0) { KeyLoaded = true; ReturnedValue = Result; } } } } return ReturnedValue; } //********************************************************************************************************************************** }