StationObscurum/Assets/Packages/Heat - Complete Modern UI/Scripts/Localization/LocalizationLanguageEditor.cs
2024-02-01 22:45:59 -05:00

233 lines
10 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
namespace Michsky.UI.Heat
{
[CustomEditor(typeof(LocalizationLanguage))]
[System.Serializable]
public class LocalizationLanguageEditor : Editor
{
private LocalizationLanguage lTarget;
private GUISkin customSkin;
private LocalizationLanguage.TableList tempTable;
private void OnEnable()
{
lTarget = (LocalizationLanguage)target;
if (EditorGUIUtility.isProSkin == true) { customSkin = HeatUIEditorHandler.GetDarkEditor(customSkin); }
else { customSkin = HeatUIEditorHandler.GetLightEditor(customSkin); }
}
public override void OnInspectorGUI()
{
if (customSkin == null)
{
EditorGUILayout.HelpBox("Editor variables are missing. You can manually fix this by deleting " +
"Heat UI > Resources folder and then re-import the package. \n\nIf you're still seeing this " +
"dialog even after the re-import, contact me with this ID: " + UIManager.buildID, MessageType.Error);
return;
}
// Info Header
HeatUIEditorHandler.DrawHeader(customSkin, "Content Header", 8);
var localizationSettings = serializedObject.FindProperty("localizationSettings");
var languageID = serializedObject.FindProperty("languageID");
var languageName = serializedObject.FindProperty("languageName");
var localizedName = serializedObject.FindProperty("localizedName");
var tableList = serializedObject.FindProperty("tableList");
GUI.enabled = false;
HeatUIEditorHandler.DrawProperty(languageID, customSkin, "Language ID");
HeatUIEditorHandler.DrawProperty(languageName, customSkin, "Language Name");
HeatUIEditorHandler.DrawProperty(localizedName, customSkin, "Localized Name");
GUI.enabled = true;
// Settings Header
HeatUIEditorHandler.DrawHeader(customSkin, "Options Header", 14);
HeatUIEditorHandler.DrawPropertyCW(localizationSettings, customSkin, "Localization Settings", 130);
if (localizationSettings != null && GUILayout.Button("Show Localization Settings", customSkin.button))
{
Selection.activeObject = localizationSettings.objectReferenceValue;
}
// Content Header
HeatUIEditorHandler.DrawHeader(customSkin, "Tables Header", 14);
GUILayout.BeginHorizontal();
if (GUILayout.Button("Import Table", customSkin.button)) { Import(); return; }
if (GUILayout.Button("Export Table(s)", customSkin.button)) { Export(); return; }
GUILayout.EndHorizontal();
GUI.enabled = false;
EditorGUILayout.PropertyField(tableList, new GUIContent("Table List (Debug Only)"), true);
serializedObject.ApplyModifiedProperties();
}
void Import()
{
string path = EditorUtility.OpenFilePanel("Select a file to import", "", "");
if (path.Length != 0)
{
string tempKey = null;
bool checkForValue = false;
bool processNewEntry = false;
LocalizationTable targetTable = null;
List<LocalizationLanguage.TableContent> keysToBeAdded = new List<LocalizationLanguage.TableContent>();
foreach (string option in File.ReadLines(path))
{
if (option.Contains("[LanguageID] "))
{
string tempLangID = option.Replace("[LanguageID] ", "");
checkForValue = false;
if (tempLangID != lTarget.languageID)
{
Debug.LogError("The language ID does not match with the language asset.");
break;
}
}
if (option.Contains("[TableID] "))
{
string tempTableID = option.Replace("[TableID] ", "");
checkForValue = false;
for (int i = 0; i < lTarget.tableList.Count; i++)
{
if (lTarget.tableList[i].table.tableID == tempTableID)
{
targetTable = lTarget.tableList[i].table;
tempTable = lTarget.tableList[i];
break;
}
}
}
else if (option.Contains("[StringKey] "))
{
tempKey = option.Replace("[StringKey] ", "");
checkForValue = false;
processNewEntry = false;
}
else if (option.Contains("[Value] "))
{
if (tempTable == null)
{
Debug.LogError("Can't find the given table ID.");
break;
}
processNewEntry = true;
for (int i = 0; i < tempTable.tableContent.Count; i++)
{
if (tempTable.tableContent[i].key == tempKey)
{
processNewEntry = false;
string tempValue = option.Replace("[Value] ", "");
tempTable.tableContent[i].value = tempValue;
continue;
}
}
if (processNewEntry)
{
LocalizationLanguage.TableContent tempEntry = new LocalizationLanguage.TableContent();
tempEntry.key = tempKey;
tempEntry.value = option.Replace("[Value] ", "");
keysToBeAdded.Add(tempEntry);
}
checkForValue = true;
}
else if (checkForValue == true && !option.Contains("[Value] ") && !string.IsNullOrEmpty(option))
{
if (tempTable == null)
{
Debug.LogError("Can't find the given table ID.");
break;
}
if (processNewEntry) { keysToBeAdded[keysToBeAdded.Count - 1].value = keysToBeAdded[keysToBeAdded.Count - 1].value + "\n" + option; }
else
{
for (int i = 0; i < tempTable.tableContent.Count; i++)
{
if (tempTable.tableContent[i].key == tempKey)
{
tempTable.tableContent[i].value = tempTable.tableContent[i].value + "\n" + option;
break;
}
}
}
}
}
if (!string.IsNullOrEmpty(tempKey) && tempTable != null)
{
for (int i = 0; i < keysToBeAdded.Count; i++)
{
LocalizationTable.TableContent newTableEntry = new LocalizationTable.TableContent();
newTableEntry.key = keysToBeAdded[i].key;
targetTable.tableContent.Add(newTableEntry);
for (int x = 0; x < lTarget.localizationSettings.languages.Count; x++)
{
foreach (LocalizationLanguage.TableList list in lTarget.localizationSettings.languages[x].localizationLanguage.tableList)
{
if (list.table.tableID == tempTable.table.tableID)
{
list.tableContent.Add(keysToBeAdded[i]);
break;
}
}
EditorUtility.SetDirty(lTarget.localizationSettings.languages[x].localizationLanguage);
}
}
Debug.Log(keysToBeAdded.Count.ToString() + " new localization entries has been added.");
Debug.Log(tempTable.table.tableID + " (table) has been successfully imported to " + lTarget.languageID);
EditorUtility.SetDirty(lTarget);
}
}
}
void Export()
{
for (int i = 0; i < lTarget.tableList.Count; i++)
{
string path = EditorUtility.SaveFilePanel("Export: " + lTarget.tableList[i].table.tableID, "", "Exported_" + lTarget.tableList[i].table.tableID + "(" + lTarget.languageID + ")", "txt");
if (path.Length != 0)
{
TextWriter tw = new StreamWriter(path, false);
tw.WriteLine("[LanguageID] " + lTarget.languageID);
tw.WriteLine("[TableID] " + lTarget.tableList[i].table.tableID);
tw.WriteLine("\n------------------------------");
for (int x = 0; x < lTarget.tableList[i].table.tableContent.Count; x++)
{
tw.WriteLine("\n[StringKey] " + lTarget.tableList[i].table.tableContent[x].key);
tw.Write("[Value] " + lTarget.tableList[i].tableContent[x].value + "\n");
}
tw.Close();
Debug.Log(lTarget.tableList[i].table.tableID + " has been exported to: " + path);
}
}
}
}
}
#endif