/// <summary> /// Remove a RegisterText from being registered /// </summary> /// <param name="text">RegisterText to UnRegister</param> public static bool UnregisterTranslatedText(AbstractTranslatedText text) { if (!CheckExists()) { return(false); } LoggingLevel log = instance.GetLoggingLevel(); LoggingLevel.Debug.Log(string.Format("LanguageManager: IsRegistered set to False for [{0}]", text.name), log, text); Dictionary <string, List <AbstractTranslatedText> > texts = instance.registerTexts; if (texts.ContainsKey(text.FieldName)) { texts[text.FieldName].Remove(text); LoggingLevel.Info.Log(string.Format("LanguageManager: Removed registered text [{0}]", text.name), log, text); if (texts[text.FieldName].Count.Equals(0)) { LoggingLevel.Debug.Log(string.Format("LanguageManager: Removed key [{0}] from registered Texts", text.FieldName), log, text); texts.Remove(text.FieldName); } return(true); } LoggingLevel.Debug.Log(string.Format("LanguageManager: [{0}] was not Registered", text.name), log, text); return(false); }
/// <summary> /// Registers a TextField based on FieldName /// </summary> /// <param name="text">The TranslatedText-Object to register</param> /// <param name="setValue">Whether to update the Text-Value after registration</param> public static void RegisterTranslatedText(AbstractTranslatedText text, bool setValue = true) { if (!CheckExists()) { return; } if (string.IsNullOrEmpty(text.FieldName)) { LoggingLevel.Error.LogAlways(string.Format("LanguageManager: Please set a FieldName before registering TranslatedText [{0}]", text.gameObject.name)); return; } Dictionary <string, List <AbstractTranslatedText> > texts = instance.registerTexts; LoggingLevel log = instance.GetLoggingLevel(); if (!texts.ContainsKey(text.FieldName)) { texts.Add(text.FieldName, new List <AbstractTranslatedText> { text }); LoggingLevel.Info.Log(string.Format("LanguageManager: Registered new key [{0}] from TranslatedText [{1}]", text.FieldName, text.name), log, text); } else if (!texts[text.FieldName].Contains(text)) { texts[text.FieldName].Add(text); LoggingLevel.Info.Log(string.Format("LanguageManager: Registered new TranslatedText [{0}]", text.name), log, text); } if (setValue) { SetTextValue(text); } LoggingLevel.Debug.Log(string.Format("LanguageManager: Set IsRegistered for TranslatedText [{0}]", text.name), log, text); }
/// <summary> /// Refreshes a RegisterText-Object. /// This is the same as calling Refresh() on the object /// </summary> public static void RefreshTranslatedText(AbstractTranslatedText text) { if (!CheckExists()) { return; } text.Refresh(); LoggingLevel.Info.Log(string.Format("LanguageManager: Refreshed TranslatedText {0}", text.name), instance.GetLoggingLevel(), text); }
/// <summary> /// Whether a TranslatedText is Registered /// </summary> /// <param name="text">Text to Check</param> /// <returns>True if Text is Registered</returns> internal bool IsRegistered(AbstractTranslatedText text) { foreach (List <AbstractTranslatedText> abstractTranslatedTexts in registerTexts.Values) { if (abstractTranslatedTexts.Contains(text)) { return(true); } } return(false); }
/// <summary> /// Set value for text /// </summary> /// <param name="text">Texts to set</param> /// <param name="language">Language to use</param> public static void SetTextValue(AbstractTranslatedText text, Language language) { if (!CheckLoaded()) { return; } LoggingLevel log = instance.GetLoggingLevel(); LoggingLevel.Development.Log(string.Format("LanguageManager: Setting value for [{0}] using Language [{1}]", text.name, language), log, text); text.SetText(GetTranslation(text.FieldName, language)); LoggingLevel.Info.Log(string.Format("LanguageManager: Set [{0}] to [{1}]", text.name, text.GetText()), log, text); }
/// <summary> /// Set value for text /// </summary> /// <param name="text">Texts to set</param> public static void SetTextValue(AbstractTranslatedText text) { if (!CheckLoaded()) { return; } LoggingLevel log = instance.GetLoggingLevel(); LoggingLevel.Debug.Log(string.Format("LanguageManager: Using Language [{0}] and Key [{1}] to set value for [{2}]", text.UseCustomLanguage ? text.CustomLanguage : instance.currentLanguage, text.FieldName, text.name), log, text); text.SetText(GetTranslation(text.FieldName, text.UseCustomLanguage ? text.CustomLanguage : instance.currentLanguage)); LoggingLevel.Info.Log(string.Format("LanguageManager: Set [{0}] to [{1}]", text.name, text.GetText()), log, text); }
/// <summary> /// Refreshes ALL RegisterText-Objects, including non-registered ones /// <para> /// Is the same as calling RegisterText.RefreshAll() /// </para> /// </summary> public static void RefreshALLTranslatedTexts() { LoggingLevel.Info.Log("TranslatedText: Refreshing ALL TranslatedTexts", instance.GetLoggingLevel(), instance); AbstractTranslatedText.RefreshAll(); }
public override void OnInspectorGUI() { GUIStyle boldFoldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold }; serializedObject.Update(); // Grab target LanguageManager myTarget = (LanguageManager)target; // Space above first line GUILayout.Space(SPACING_SIZE); AddHeader("Auto-Loading"); myTarget.SetSerializedField("loadOnAwake", EditorGUILayout.Toggle("Load On Awake", myTarget.LoadOnAwake)); // Header AddHeader("Preferred Language"); // Toggle for usage of Preferred Language myTarget.SetSerializedField("usePreferredLanguage", EditorGUILayout.ToggleLeft("Use a preferred Language", myTarget.UsePreferredLanguage)); // Toogle for usage of saved language myTarget.SetSerializedField("useSavedLanguage", EditorGUILayout.ToggleLeft("Use saved language settings", myTarget.UseSavedLanguage)); // Dropdown shown only if toggle = true if (myTarget.UsePreferredLanguage) { EditorGUI.indentLevel++; myTarget.SetSerializedField("preferredLanguage", (Language)Enum.GetValues(typeof(Language)).GetValue(EditorGUILayout.Popup("Language:", Array.IndexOf(Enum.GetNames(typeof(Language)), myTarget.PreferredLanguage.ToString()), Enum.GetNames(typeof(Language)), EditorStyles.popup))); EditorGUILayout.BeginHorizontal(); GUILayout.Space(EditorGUI.indentLevel * INDENT_SIZE); if (GUILayout.Button("Set as Current", EditorStyles.miniButtonRight)) { if (LanguageManager.Exists) // Game is Running { LanguageManager.SetLanguage(myTarget.PreferredLanguage); } else // Game is NOT running { myTarget.SetSerializedField("currentLanguage", myTarget.PreferredLanguage); } } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel--; } GUILayout.Space(SPACING_SIZE); // Header AddHeader("Translation-File (CSV)"); EditorGUI.indentLevel++; bool changed = GUI.changed; csvSettingsFoldout = EditorGUILayout.Foldout(csvSettingsFoldout, "CSV Settings"); // Skip GUI.changed for Foldout GUI.changed = changed; if (csvSettingsFoldout) { EditorGUI.indentLevel++; Dictionary <string, string> newLines = new Dictionary <string, string> { { "Environment_NewLine", Environment.NewLine }, { "\\n", "\n" }, { "\\r\\n", "\r\n" }, { ";", ";" } }; if (newLines.Values.Contains(myTarget.NewLineStr)) { myTarget.SetSerializedField("newLineStr", newLines.Values.ToList()[EditorGUILayout.Popup("NewLine", newLines.Values.ToList().IndexOf(myTarget.NewLineStr), newLines.Keys.ToArray())]); } else { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("NewLine"); EditorGUILayout.LabelField(myTarget.NewLineStr); EditorGUILayout.EndHorizontal(); } char[] delimiter = { ',', '.', ';', ':', '|', '^', '#', }; List <string> delStrings = new List <string>(); foreach (char c in delimiter) { delStrings.Add(c.ToString()); } if (delStrings.Contains(myTarget.Delimiter.ToString())) { myTarget.SetSerializedField("delimiter", delimiter.ToList()[EditorGUILayout.Popup("Delimiter", delimiter.ToList().IndexOf(myTarget.Delimiter), delStrings.ToArray())]); } else { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Delimiter"); EditorGUILayout.LabelField(myTarget.Delimiter.ToString()); EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; } EditorGUI.indentLevel--; // Toggle for usage of Remote (Downloaded & Cached) Language-File myTarget.SetSerializedField("useRemoteLanguageFile", EditorGUILayout.ToggleLeft("Use a remote Language-File", myTarget.UseRemoteLanguageFile)); // TextField (for URL) shown only if toggle = true; if (myTarget.UseRemoteLanguageFile) { EditorGUI.indentLevel++; EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("URL for Language-File:"); EditorGUILayout.LabelField("Staging:"); myTarget.SetSerializedField("stagingLanguageURL", EditorGUILayout.TextField(myTarget.StagingLanguageUrl)); EditorGUILayout.LabelField("Live:"); myTarget.SetSerializedField("liveLanguageURL", EditorGUILayout.TextField(myTarget.LiveLanguageUrl)); myTarget.SetSerializedField("appendApplicationVersion", EditorGUILayout.Toggle("Append Version Number", myTarget.AppendApplicationVersion)); EditorGUILayout.EndVertical(); myTarget.SetSerializedField("userName", EditorGUILayout.TextField("Custom Username: "******"password", EditorGUILayout.PasswordField("Custom Password: "******"domain", EditorGUILayout.TextField("Custom Domain: ", myTarget.Domain)); } else { myTarget.SetSerializedField("password", null); myTarget.SetSerializedField("domain", null); } myTarget.SetSerializedField("wifiDownloadOnly", EditorGUILayout.Toggle("Download on WIFI only", myTarget.WIFIDownloadOnly)); myTarget.SetSerializedField("languageMap", (TextAsset)EditorGUILayout.ObjectField("FirstBoot-File:", myTarget.LanguageMap, typeof(TextAsset), false)); EditorGUI.indentLevel--; } else // ObjectField (for TextAsset) shown if toggle = false { GUILayout.Space(SPACING_SIZE); myTarget.SetSerializedField("languageMap", (TextAsset)EditorGUILayout.ObjectField("Language-File:", myTarget.LanguageMap, typeof(TextAsset), false)); } GUILayout.Space(SPACING_SIZE); // Header AddHeader("Language"); EditorGUILayout.BeginHorizontal(); // Current Language in Manager EditorGUILayout.LabelField("Current Language:"); int indent = EditorGUI.indentLevel; EditorGUI.indentLevel = -4; // Don't ask why EditorGUILayout.LabelField(myTarget.GetSerializedField <Language>("currentLanguage").ToString()); EditorGUI.indentLevel = indent; EditorGUILayout.EndHorizontal(); // FallbackLanguage myTarget.SetSerializedField("fallbackLanguage", (Language)Enum.GetValues(typeof(Language)).GetValue(EditorGUILayout.Popup("Fallback Language:", Array.IndexOf(Enum.GetNames(typeof(Language)), myTarget.FallbackLanguage.ToString()), Enum.GetNames(typeof(Language)), EditorStyles.popup))); GUILayout.Space(SPACING_SIZE); changed = GUI.changed; EditorGUI.indentLevel++; debugFoldout = EditorGUILayout.Foldout(debugFoldout, "Debug", boldFoldout); EditorGUI.indentLevel--; // Skip foldout for GUI.changed GUI.changed = changed; if (debugFoldout) { bool LogMethods = myTarget.GetSerializedField <bool>("logMethods"); LogMethods = EditorGUILayout.Toggle("Log Methods", LogMethods); myTarget.SetSerializedField("logMethods", LogMethods); if (LogMethods) { myTarget.SetSerializedField("logLevel", (LoggingLevel)Enum.GetValues(typeof(LoggingLevel)).GetValue(EditorGUILayout.Popup("Logging-Level:", Array.IndexOf(Enum.GetNames(typeof(LoggingLevel)), myTarget.GetSerializedField <LoggingLevel>("logLevel").ToString()), Enum.GetNames(typeof(LoggingLevel)), EditorStyles.popup))); } } // GAME IS RUNNING if (LanguageManager.Exists) { GUILayout.Space(SPACING_SIZE); if (ResourceLoader.UserHasSavedLanguage) { EditorGUILayout.BeginHorizontal(); // User-Saved Language EditorGUILayout.LabelField("User-Saved Language:"); EditorGUILayout.LabelField(ResourceLoader.UserSavedLanguage.ToString()); EditorGUILayout.EndHorizontal(); // Clear-Button if (GUILayout.Button("Clear Saved Language", EditorStyles.miniButtonRight)) { ResourceLoader.ClearSavedLanguage(); } GUILayout.Space(SPACING_SIZE); } // Header AddHeader("TranslatedTexts"); // Button for updating Registered Texts if (GUILayout.Button("Update Registered TranslatedTexts", EditorStyles.toolbarButton)) { LanguageManager.RefreshRegisteredTranslatedTexts(); } // Button for updating ALL Texts if (GUILayout.Button("Update All TranslatedTexts", EditorStyles.toolbarButton)) { AbstractTranslatedText.RefreshAll(); } } if (GUI.changed && !Application.isPlaying) { EditorUtility.SetDirty((LanguageManager)target); EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene()); } }
/// <summary> /// Getter method to retrieve a <see cref="AbstractTranslatedText"/> /// Override if the inheritance class does not inherit <see cref="AbstractTranslatedText"/> /// </summary> protected virtual void GetAbstractTranslatedText() { textComponent = (AbstractTranslatedText)target; }
public override void OnInspectorGUI() { if (boldFoldout == null) { if (EditorStyles.foldout == null) { return; // Fix for NullRef on first frame when entering play-mode } boldFoldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold }; } // Grab target AbstractTranslatedText myTarget = (AbstractTranslatedText)target; // Space above first line GUILayout.Space(SPACING_SIZE); // Fields string newVal = EditorGUILayout.TextField("Translation Key", myTarget.FieldName); if (!string.Equals(newVal, myTarget.FieldName)) { myTarget.SetSerializedField("fieldName", newVal); GUI.changed = true; } bool autoRegister = EditorGUILayout.Toggle("Auto-Register", myTarget.AutoRegister); if (autoRegister != myTarget.AutoRegister) { myTarget.SetSerializedField("autoRegister", autoRegister); GUI.changed = true; } bool useCustomLang = EditorGUILayout.ToggleLeft("Use Custom Language", myTarget.UseCustomLanguage); if (!useCustomLang.Equals(myTarget.UseCustomLanguage)) { if (!LanguageManager.Exists) // Game is running. Use setter with Refresh() { myTarget.UseCustomLanguage = useCustomLang; } else { myTarget.SetSerializedField("useCustomLanguage", useCustomLang); // Game is NOT running. Use setter without Refresh() } GUI.changed = true; } // Only show CustomLanguage is UseCustomLanguage is true if (myTarget.UseCustomLanguage) { EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); Language customLang = (Language)Enum.GetValues(typeof(Language)).GetValue(EditorGUILayout.Popup("Custom Language:", Array.IndexOf(Enum.GetNames(typeof(Language)), myTarget.CustomLanguage.ToString()), Enum.GetNames(typeof(Language)), EditorStyles.popup)); if (!customLang.Equals(myTarget.CustomLanguage)) { if (LanguageManager.Exists)// Game is running. Use setter with Refresh() { myTarget.CustomLanguage = customLang; } else { myTarget.SetSerializedField("customLanguage", customLang); // Game is NOT running. Use setter without Refresh() } GUI.changed = true; } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel--; } AbstractTranslatedText.SpecialTextSettings textSetting = (AbstractTranslatedText.SpecialTextSettings)EditorGUILayout.EnumPopup("Special Text Setting", myTarget.TextSetting); if (textSetting != myTarget.TextSetting) { myTarget.SetSerializedField("specialTextSettings", textSetting); GUI.changed = true; } bool lineBreak = EditorGUILayout.Toggle("Ignore Line Breaks", myTarget.IgnoreLineBreak); if (lineBreak != myTarget.IgnoreLineBreak) { myTarget.SetSerializedField("ignoreLineBreaks", lineBreak); GUI.changed = true; } GUILayout.Space(SPACING_SIZE); bool changed = GUI.changed; EditorGUI.indentLevel++; DrawTextDisplayInspector(); debugFoldout = EditorGUILayout.Foldout(debugFoldout, "Debug", boldFoldout); EditorGUI.indentLevel--; // Skip foldout for GUI.changed GUI.changed = changed; if (debugFoldout) { bool log = myTarget.GetSerializedField <bool>("logMethods"); bool newLog = EditorGUILayout.Toggle("Log Methods", log); if (log != newLog) { myTarget.SetSerializedField("logMethods", newLog); GUI.changed = true; } if (newLog) { LoggingLevel logging = myTarget.GetSerializedField <LoggingLevel>("logLevel"); LoggingLevel newLogging = (LoggingLevel)Enum.GetValues(typeof(LoggingLevel)).GetValue(EditorGUILayout.Popup("Logging-Level:", Array.IndexOf(Enum.GetNames(typeof(LoggingLevel)), logging.ToString()), Enum.GetNames(typeof(LoggingLevel)), EditorStyles.popup)); if (!logging.Equals(newLogging)) { myTarget.SetSerializedField("logLevel", newLogging); GUI.changed = true; } } } // GAME IS RUNNING if (LanguageManager.Exists) { GUILayout.Space(SPACING_SIZE); FontStyle currStyle = EditorStyles.label.fontStyle; int currSize = EditorStyles.label.fontSize; EditorStyles.label.fontStyle = FontStyle.Bold; EditorStyles.label.fontSize = 12; EditorGUILayout.LabelField("Runtime", GUILayout.Height(20)); EditorStyles.label.fontStyle = currStyle; EditorStyles.label.fontSize = currSize; if (!myTarget.IsRegistered.Equals(EditorGUILayout.Toggle("Registered", myTarget.IsRegistered))) { if (myTarget.IsRegistered) { LanguageManager.UnregisterTranslatedText(myTarget); } else { LanguageManager.RegisterTranslatedText(myTarget); } } if (GUILayout.Button("Refresh", EditorStyles.toolbarButton)) { myTarget.Refresh(); } if (GUILayout.Button("Refresh All", EditorStyles.toolbarButton)) { AbstractTranslatedText.RefreshAll(); } } if (GUI.changed && !Application.isPlaying) { EditorUtility.SetDirty((AbstractTranslatedText)target); EditorSceneManager.MarkSceneDirty(UnityEngine.SceneManagement.SceneManager.GetActiveScene()); } }