Decompiled source of Ordem e Atlyss a Braziliant PTBR Translation v3.0.2

Localyssation.dll

Decompiled 7 hours ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Localyssation.Exporter;
using Localyssation.LangAdjutable;
using Localyssation.LanguageModule;
using Localyssation.Patches;
using Localyssation.Patches.ReplaceFont;
using Localyssation.Patches.ReplaceText;
using Localyssation.Util;
using Microsoft.CodeAnalysis;
using Mirror;
using MonoMod.Utils;
using Nessie.ATLYSS.EasySettings;
using Nessie.ATLYSS.EasySettings.UIElements;
using Newtonsoft.Json;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using YamlDotNet.Core;
using YamlDotNet.Serialization;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Localyssation
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("org.sallys-workshop.localyssation", "Localyssation", "2.4.4")]
	public class Localyssation : BaseUnityPlugin
	{
		private delegate string TextEditTagFunc(string str, string arg, int fontSize);

		public static Localyssation instance;

		internal static Assembly assembly;

		internal static string dllPath;

		internal static ManualLogSource logger;

		internal static bool settingsTabReady = false;

		internal static bool languagesLoaded = false;

		internal static bool settingsTabSetup = false;

		public const string GET_STRING_DEFAULT_VALUE_ARG_UNSPECIFIED = "SAME_AS_KEY";

		private static readonly Dictionary<string, TextEditTagFunc> textEditTags = new Dictionary<string, TextEditTagFunc>
		{
			{
				"firstupper",
				delegate(string str, string arg, int fontSize)
				{
					if (str.Length > 0)
					{
						string text = str[0].ToString();
						str = str.Remove(0, 1);
						str = str.Insert(0, text.ToUpper());
					}
					return str;
				}
			},
			{
				"firstlower",
				delegate(string str, string arg, int fontSize)
				{
					if (str.Length > 0)
					{
						string text = str[0].ToString();
						str = str.Remove(0, 1);
						str = str.Insert(0, text.ToLower());
					}
					return str;
				}
			},
			{
				"scale",
				delegate(string str, string arg, int fontSize)
				{
					if (fontSize > 0)
					{
						try
						{
							float num = float.Parse(arg, CultureInfo.InvariantCulture);
							str = $"<size={Math.Round((float)fontSize * num)}>{str}</size>";
						}
						catch
						{
						}
					}
					else
					{
						str = "<scalefallback=" + arg + ">" + str + "</scalefallback>";
					}
					return str;
				}
			},
			{
				"scalefallback",
				delegate(string str, string arg, int fontSize)
				{
					if (fontSize > 0)
					{
						try
						{
							float num = float.Parse(arg, CultureInfo.InvariantCulture);
							str = $"<size={Math.Round((float)fontSize * num)}>{str}</size>";
						}
						catch
						{
						}
					}
					return str;
				}
			}
		};

		private static readonly List<string> defaultAppliedTextEditTags = new List<string> { "firstupper", "firstlower", "scale" };

		public static bool ShowTranslation { get; private set; } = true;

		public event Action<Language> OnLanguageChanged;

		internal void CallOnLanguageChanged(Language newLanguage)
		{
			this.OnLanguageChanged?.Invoke(newLanguage);
		}

		private void Awake()
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			instance = this;
			logger = ((BaseUnityPlugin)this).Logger;
			assembly = Assembly.GetExecutingAssembly();
			dllPath = new Uri(assembly.CodeBase).LocalPath;
			LanguageManager.Init();
			FontManager.LoadFontBundlesFromFileSystem();
			LocalyssationConfig.Init(((BaseUnityPlugin)this).Config);
			if (LocalyssationConfig.TranslatorMode && LocalyssationConfig.LogVanillaFonts)
			{
				FontHelper.DetectVanillaFonts();
			}
			SettingsGUI.Init();
			Harmony val = new Harmony("org.sallys-workshop.localyssation");
			val.PatchAll();
			val.PatchAll(typeof(GameLoadPatches));
			FRUtil.PatchAll(val);
			RTUtil.PatchAll(val);
			SettingsGUI.Init();
			OnSceneLoaded.Init();
			LangAdjustables.Init();
		}

		private void Update()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			if (LocalyssationConfig.TranslatorMode)
			{
				if (Input.GetKeyDown(LocalyssationConfig.ReloadLanguageKeybind))
				{
					LanguageManager.CurrentLanguage.LoadFromFileSystem(forceOverwrite: true);
					CallOnLanguageChanged(LanguageManager.CurrentLanguage);
					RTReplacer.RefreshQuestInfo();
					RTReplacer.RefreshQuestTrack();
				}
				if (Input.GetKeyDown(LocalyssationConfig.ReloadFontBundlesKeybind))
				{
					FontManager.LoadFontBundlesFromFileSystem();
					CallOnLanguageChanged(LanguageManager.CurrentLanguage);
				}
				if (Input.GetKeyDown(LocalyssationConfig.SwitchTranslationKeybind))
				{
					ShowTranslation = !ShowTranslation;
					CallOnLanguageChanged(LanguageManager.CurrentLanguage);
				}
				if (Input.GetKeyDown(LocalyssationConfig.ShowTranslationKey))
				{
					LocalyssationConfig.ShowTranslationKeyEnabled = !LocalyssationConfig.ShowTranslationKeyEnabled;
					CallOnLanguageChanged(LanguageManager.CurrentLanguage);
					RTReplacer.RefreshQuestInfo();
					RTReplacer.RefreshQuestTrack();
				}
			}
		}

		public static string GetStringRaw(string key, string defaultValue = "SAME_AS_KEY")
		{
			if (ShowTranslation && LanguageManager.CurrentLanguage.TryGetString(key, out var value))
			{
				return value;
			}
			if (LanguageManager.DefaultLanguage.TryGetString(key, out value))
			{
				return value;
			}
			return (defaultValue == "SAME_AS_KEY") ? key : defaultValue;
		}

		public static string ApplyTextEditTags(string str, int fontSize = -1, List<string> appliedTextEditTags = null)
		{
			if (appliedTextEditTags == null)
			{
				appliedTextEditTags = defaultAppliedTextEditTags;
			}
			string text = str;
			foreach (KeyValuePair<string, TextEditTagFunc> textEditTag in textEditTags)
			{
				if (!appliedTextEditTags.Contains(textEditTag.Key))
				{
					continue;
				}
				while (true)
				{
					if (text == null)
					{
						return "";
					}
					string text2 = "<" + textEditTag.Key;
					int num = text.IndexOf(text2);
					if (num == -1)
					{
						break;
					}
					int num2 = text.IndexOf(">", num + text2.Length);
					if (num2 == -1)
					{
						break;
					}
					string text3 = "</" + textEditTag.Key + ">";
					int num3 = text.IndexOf(text3, num2 + 1);
					if (num3 == -1)
					{
						break;
					}
					string text4 = text.Substring(num + 1, num2 - 1);
					string arg = "";
					if (text4.Contains("="))
					{
						string[] array = text4.Split('=');
						if (array.Length == 2)
						{
							arg = array[1];
						}
					}
					string text5 = "";
					if (num2 + 1 <= num3 - 1)
					{
						text5 = text.Substring(num2 + 1, num3 - num2 - 1);
					}
					string value = textEditTag.Value(text5, arg, fontSize);
					text = text.Remove(num3, text3.Length).Remove(num, num2 - num + 1);
					text = text.Remove(num, text5.Length).Insert(num, value);
				}
			}
			return text;
		}

		public static string GetString(string key, string defaultValue = "SAME_AS_KEY", int fontSize = -1)
		{
			if (LocalyssationConfig.ShowTranslationKeyEnabled)
			{
				return key;
			}
			return ApplyTextEditTags(GetStringRaw(key, defaultValue), fontSize);
		}

		public static string GetString(TranslationKey translationKey, string defaultValue = "SAME_AS_KEY", int fontSize = -1)
		{
			if (LocalyssationConfig.ShowTranslationKeyEnabled)
			{
				return translationKey.ToString();
			}
			return ApplyTextEditTags(GetStringRaw(translationKey.ToString(), defaultValue), fontSize);
		}

		public static string Format(TranslationKey formatKey, params object[] args)
		{
			return string.Format(GetString(formatKey), args.Select((object x) => (x is TranslationKey translationKey) ? translationKey.Localize() : x).ToArray());
		}

		public static string GetDefaultString(string key)
		{
			if (!LanguageManager.DefaultLanguage.TryGetString(key, out var value))
			{
				return "";
			}
			return value;
		}

		public static void LogDebug(object data)
		{
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "org.sallys-workshop.localyssation";

		public const string PLUGIN_NAME = "Localyssation";

		public const string PLUGIN_VERSION = "2.4.4";

		public const string ATLYSS_VERSION = "12026.a3";
	}
	internal static class I18nKeys
	{
		internal static class CharacterCreation
		{
			public static readonly string HEADER = Create("CHARACTER_CREATION_HEADER", "Character Creation");

			public static readonly string HEADER_RACE_NAME = Create("CHARACTER_CREATION_HEADER_RACE_NAME", "Race Select");

			public static readonly string RACE_DESCRIPTOR_HEADER_INITIAL_SKILL = Create("CHARACTER_CREATION_RACE_DESCRIPTOR_HEADER_INITIAL_SKILL", "Initial Skill");

			public static readonly string BUTTON_SET_TO_DEFAULTS = Create("CHARACTER_CREATION_BUTTON_SET_TO_DEFAULTS", "Defaults");

			public static readonly string CHARACTER_NAME_PLACEHOLDER_TEXT = Create("CHARACTER_CREATION_CHARACTER_NAME_PLACEHOLDER_TEXT", "Enter Name...");

			public static readonly string BUTTON_CREATE_CHARACTER = Create("CHARACTER_CREATION_BUTTON_CREATE_CHARACTER", "Create Character");

			public static readonly string BUTTON_RETURN = Create("CHARACTER_CREATION_BUTTON_RETURN", "Return");

			public static readonly string CUSTOMIZER_HEADER_COLOR = Create("CHARACTER_CREATION_CUSTOMIZER_HEADER_COLOR", "Color");

			public static readonly string CUSTOMIZER_COLOR_BODY_HEADER = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_BODY_HEADER", "Body");

			public static readonly string CUSTOMIZER_COLOR_BODY_TEXTURE = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_BODY_TEXTURE", "Texture");

			public static readonly string CUSTOMIZER_COLOR_HAIR_HEADER = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_HAIR_HEADER", "Hair");

			public static readonly string CUSTOMIZER_COLOR_HAIR_LOCK_COLOR = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_HAIR_LOCK_COLOR", "Lock Color");

			public static readonly string CUSTOMIZER_COLOR_HUE = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_HUE", "Hue");

			public static readonly string CUSTOMIZER_COLOR_BRIGHTNESS = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_BRIGHTNESS", "Brightness");

			public static readonly string CUSTOMIZER_COLOR_CONTRAST = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_CONTRAST", "Contrast");

			public static readonly string CUSTOMIZER_COLOR_SATURATION = Create("CHARACTER_CREATION_CUSTOMIZER_COLOR_SATURATION", "Saturation");

			public static readonly string CUSTOMIZER_HEADER_HEAD = Create("CHARACTER_CREATION_CUSTOMIZER_HEADER_HEAD", "Head");

			public static readonly string CUSTOMIZER_HEAD_HEAD_WIDTH = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_HEAD_WIDTH", "Head Width");

			public static readonly string CUSTOMIZER_HEAD_HEAD_MOD = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_HEAD_MOD", "Modify");

			public static readonly string CUSTOMIZER_HEAD_VOICE_PITCH = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_VOICE_PITCH", "Voice Pitch");

			public static readonly string CUSTOMIZER_HEAD_HAIR_STYLE = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_HAIR_STYLE", "Hair");

			public static readonly string CUSTOMIZER_HEAD_EARS = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_EARS", "Ears");

			public static readonly string CUSTOMIZER_HEAD_EYES = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_EYES", "Eyes");

			public static readonly string CUSTOMIZER_HEAD_MOUTH = Create("CHARACTER_CREATION_CUSTOMIZER_HEAD_MOUTH", "Mouth");

			public static readonly string CUSTOMIZER_HEADER_BODY = Create("CHARACTER_CREATION_CUSTOMIZER_HEADER_BODY", "Body");

			public static readonly string CUSTOMIZER_BODY_HEIGHT = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_HEIGHT", "Height");

			public static readonly string CUSTOMIZER_BODY_WIDTH = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_WIDTH", "Width");

			public static readonly string CUSTOMIZER_BODY_CHEST = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_CHEST", "Chest");

			public static readonly string CUSTOMIZER_BODY_ARMS = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_ARMS", "Arms");

			public static readonly string CUSTOMIZER_BODY_BELLY = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_BELLY", "Belly");

			public static readonly string CUSTOMIZER_BODY_BOTTOM = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_BOTTOM", "Bottom");

			public static readonly string CUSTOMIZER_BODY_TAIL = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_TAIL", "Tail");

			public static readonly string CUSTOMIZER_BODY_TOGGLE_LEFT_HANDED = Create("CHARACTER_CREATION_CUSTOMIZER_BODY_TOGGLE_LEFT_HANDED", "Mirror Body");

			public static readonly string CUSTOMIZER_HEADER_TRAIT = Create("CHARACTER_CREATION_CUSTOMIZER_HEADER_TRAIT", "Trait");

			public static readonly string CUSTOMIZER_TRAIT_EQUIPMENT = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_EQUIPMENT", "Equipment");

			public static readonly string CUSTOMIZER_TRAIT_WEAPON_LOADOUT = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_WEAPON_LOADOUT", "Weapon");

			public static readonly string CUSTOMIZER_TRAIT_GEAR_DYE = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_GEAR_DYE", "Dye");

			public static readonly string CUSTOMIZER_TRAIT_ATTRIBUTES = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_ATTRIBUTES", "Attributes");

			public static readonly string CUSTOMIZER_TRAIT_UNSPENT_POINTS = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_UNSPENT_POINTS", "Unspent Points");

			public static readonly string CUSTOMIZER_TRAIT_RESET_ATTRIBUTE_POINTS = Create("CHARACTER_CREATION_CUSTOMIZER_TRAIT_RESET_ATTRIBUTE_POINTS", "Reset Points");

			public static readonly string CUSTOMIZER_TAB_BODY_TEXTURE = Create("CHARACTER_CREATION_CUSTOMIZER_TAB_BODY_TEXTURE", "Body & Texture");

			public static readonly string CUSTOMIZER_TAB_HEAD_FACE = Create("CHARACTER_CREATION_CUSTOMIZER_TAB_HEAD_FACE", "Head & Face");

			public static readonly string CUSTOMIZER_TAB_TRAITS_EQUIPMENT = Create("CHARACTER_CREATION_CUSTOMIZER_TAB_TRAITS_EQUIPMENT", "Traits & Equipment");

			public static readonly string CUSTOMIZER_TAB_SKIN_BODY = Create("CHARACTER_CREATION_CUSTOMIZER_TAB_SKIN_BODY", "Skin & Body");

			public static readonly string CUSTOMIZER_TAB_EXTRA_MISC = Create("CHARACTER_CREATION_CUSTOMIZER_TAB_EXTRA_MISC", "Extra / Misc");

			public static readonly string WEAPON_KATARS_DEXTERITY = Create("CHARACTER_CREATION_WEAPON_KATARS_DEXTERITY", "Katars (Dexterity)");

			public static readonly string WEAPON_HAMMER_STRENGTH = Create("CHARACTER_CREATION_WEAPON_HAMMER_STRENGTH", "Hammer (Strength)");

			public static readonly string WEAPON_SWORD_STRENGTH = Create("CHARACTER_CREATION_WEAPON_SWORD_STRENGTH", "Sword (Strength)");

			public static readonly string WEAPON_POLEARM_DEXTERITY = Create("CHARACTER_CREATION_WEAPON_POLEARM_DEXTERITY", "Polearm (Dexterity)");

			public static readonly string WEAPON_SCYTHE_DEXTERITY = Create("CHARACTER_CREATION_WEAPON_SCYTHE_DEXTERITY", "Scythe (Dexterity)");

			public static readonly string WEAPON_BOW_DEXTERITY = Create("CHARACTER_CREATION_WEAPON_BOW_DEXTERITY", "Bow (Dexterity)");

			public static readonly string WEAPON_CROSSBOW_DEXTERITY = Create("CHARACTER_CREATION_WEAPON_CROSSBOW_DEXTERITY", "Crossbow (Dexterity)");

			public static readonly string WEAPON_STAFF_MIND = Create("CHARACTER_CREATION_WEAPON_STAFF_MIND", "Staff (Mind)");

			public static readonly string WEAPON_WAND_MIND = Create("CHARACTER_CREATION_WEAPON_WAND_MIND", "Wand (Mind)");

			public static readonly string WEAPON_TOME_MIND = Create("CHARACTER_CREATION_WEAPON_TOME_MIND", "Tome (Mind)");

			public static readonly string WEAPON_SHIELD_STRENGTH = Create("CHARACTER_CREATION_WEAPON_SHIELD_STRENGTH", "Shield (Strength)");

			internal static void Init()
			{
			}
		}

		internal static class CharacterSelect
		{
			public static readonly string HEADER = Create("CHARACTER_SELECT_HEADER", "Character Select");

			public static readonly string HEADER_GAME_MODE_SINGLEPLAYER = Create("CHARACTER_SELECT_HEADER_GAME_MODE_SINGLEPLAYER", "Singleplayer");

			public static readonly string HEADER_GAME_MODE_HOST_MULTIPLAYER_PUBLIC = Create("CHARACTER_SELECT_HEADER_GAME_MODE_HOST_MULTIPLAYER_PUBLIC", "Host Game (Public)");

			public static readonly string HEADER_GAME_MODE_HOST_MULTIPLAYER_FRIENDS = Create("CHARACTER_SELECT_HEADER_GAME_MODE_HOST_MULTIPLAYER_FRIENDS", "Host Game (Friends)");

			public static readonly string HEADER_GAME_MODE_HOST_MULTIPLAYER_PRIVATE = Create("CHARACTER_SELECT_HEADER_GAME_MODE_HOST_MULTIPLAYER_PRIVATE", "Host Game (Private)");

			public static readonly string HEADER_GAME_MODE_JOIN_MULTIPLAYER = Create("CHARACTER_SELECT_HEADER_GAME_MODE_JOIN_MULTIPLAYER", "Join Game");

			public static readonly string HEADER_GAME_MODE_LOBBY_QUERY = Create("CHARACTER_SELECT_HEADER_GAME_MODE_LOBBY_QUERY", "Lobby Connect");

			public static readonly string BUTTON_CREATE_CHARACTER = Create("CHARACTER_SELECT_BUTTON_CREATE_CHARACTER", "Create Character");

			public static readonly string BUTTON_DELETE_CHARACTER = Create("CHARACTER_SELECT_BUTTON_DELETE_CHARACTER", "Delete Character");

			public static readonly string BUTTON_SELECT_CHARACTER = Create("CHARACTER_SELECT_BUTTON_SELECT_CHARACTER", "Select Character");

			public static readonly string BUTTON_RETURN = Create("CHARACTER_SELECT_BUTTON_RETURN", "Return");

			public static readonly string DATA_ENTRY_EMPTY_SLOT = Create("CHARACTER_SELECT_DATA_ENTRY_EMPTY_SLOT", "Empty Slot");

			public static readonly string FILE_NUMBER_FORMAT = Create("CHARACTER_SELECT_FILE_NUMBER_FORMAT", "File {0}");

			public static readonly string FORMAT_DATA_ENTRY_INFO = Create("FORMAT_CHARACTER_SELECT_DATA_ENTRY_INFO", "Lv-{0} {1} {2}");

			public static readonly string CHARACTER_DELETE_PROMPT_TEXT = Create("CHARACTER_SELECT_CHARACTER_DELETE_PROMPT_TEXT", "Type in the character's name to confirm.");

			public static readonly string CHARACTER_DELETE_PROMPT_PLACEHOLDER_TEXT = Create("CHARACTER_SELECT_CHARACTER_DELETE_PROMPT_PLACEHOLDER_TEXT", "Enter Nickname...");

			public static readonly string CHARACTER_DELETE_BUTTON_CONFIRM = Create("CHARACTER_SELECT_CHARACTER_DELETE_BUTTON_CONFIRM", "Delete Character");

			public static readonly string CHARACTER_DELETE_BUTTON_RETURN = Create("CHARACTER_SELECT_CHARACTER_DELETE_BUTTON_RETURN", "Return");

			public static readonly string CHARACTER_DELETE_PROMPT_WARNING = Create("CHARACTER_SELECT_CHARACTER_DELETE_PROMPT_WARNING", "Enter the correct character name to delete.");

			public static readonly string PAGE_COUNTER_FORMAT = Create("CHARACTER_SELECT_PAGE_COUNTER_FORMAT", "Page ( {0} / 15 )");

			internal static void Init()
			{
			}
		}

		public static class ChatBehaviour
		{
			public static readonly TranslationKey DISABLE_GLOBAL_CHANNEL_MESSAGE = Create("DISABLE_GLOBAL_CHANNEL_MESSAGE", "<color=yellow>Disabled #Global Chat Channel.</color>");

			public static readonly TranslationKey ENABLE_GLOBAL_CHANNEL_MESSAGE = Create("ENABLE_GLOBAL_CHANNEL_MESSAGE", "<color=yellow>Enabled #Global Chat Channel.</color>");

			public static readonly TranslationKey DISABLE_PARTY_CHANNEL_MESSAGE = Create("DISABLE_PARTY_CHANNEL_MESSAGE", "<color=yellow>Disabled #Party Chat Channel.</color>");

			public static readonly TranslationKey ENABLE_PARTY_CHANNEL_MESSAGE = Create("ENABLE_PARTY_CHANNEL_MESSAGE", "<color=yellow>Enabled #Party Chat Channel.</color>");

			public static readonly TranslationKey DISABLE_ROOM_CHANNEL_MESSAGE = Create("DISABLE_ROOM_CHANNEL_MESSAGE", "<color=yellow>Disabled #Room Chat Channel.</color>");

			public static readonly TranslationKey ENABLE_ROOM_CHANNEL_MESSAGE = Create("ENABLE_ROOM_CHANNEL_MESSAGE", "<color=yellow>Enabled #Room Chat Channel.</color>");

			public static readonly TranslationKey DISABLE_PARTY_CHANNEL_MESSAGE_HEX = Create("DISABLE_PARTY_CHANNEL_MESSAGE_HEX", "<color=#B2EC5D>Disabled #Party Chat Channel.</color>");

			public static readonly TranslationKey ENABLE_PARTY_CHANNEL_MESSAGE_HEX = Create("ENABLE_PARTY_CHANNEL_MESSAGE_HEX", "<color=#B2EC5D>Enabled #Party Chat Channel.</color>");

			public static readonly TranslationKey DISABLE_ZONE_CHANNEL_MESSAGE = Create("DISABLE_ZONE_CHANNEL_MESSAGE", "<color=#FF8A90>Disabled #Zone Chat Channel.</color>");

			public static readonly TranslationKey ENABLE_ZONE_CHANNEL_MESSAGE = Create("ENABLE_ZONE_CHANNEL_MESSAGE", "<color=#FF8A90>Enabled #Zone Chat Channel.</color>");

			public static readonly TranslationKey CHANNEL_SWTICH_MESSAGE_FORMAT = Create("CHANNEL_SWTICH_MESSAGE_FORMAT", "{0} Entered #{1}.");

			public static readonly TranslationKey GLOBAL_CHANNEL_DISABLED = Create("GLOBAL_CHANNEL_DISABLED", "Global chat is disabled.");

			public static readonly TranslationKey PARTY_CHANNEL_DISABLED = Create("PARTY_CHANNEL_DISABLED", "Party chat is disabled.");

			public static readonly TranslationKey ZONE_CHANNEL_DISABLED = Create("ZONE_CHANNEL_DISABLED", "Zone chat is disabled.");

			public static readonly TranslationKey ROOM_CHANNEL_DISABLED = Create("ROOM_CHANNEL_DISABLED", "#Room chat is disabled.");

			public static readonly TranslationKey MUST_BE_IN_PARTY_HINT = Create("MUST_BE_IN_PARTY_HINT", "You must be in a party to send party chat messages.");

			public static readonly TranslationKey STREAM_MODE_ENABLED_HINT = Create("STREAM_MODE_ENABLED_HINT", "Stream Mode is enabled in this lobby.");

			public static readonly TranslationKey ENTER_A_ROOM_HINT = Create("ENTER_A_ROOM_HINT", "Enter a room to send messages to a room channel.");

			public static readonly TranslationKey CHAT_INPUT_PLACEHOLDER = Create("CHAT_INPUT_PLACEHOLDER", "Enter text... (/g, /p, /z)");

			public static readonly TranslationKey CHAT_GLOBAL_PROMPT = Create("CHAT_GLOBAL_PROMPT", "#Global Chat... (>/g, /p, /z)");

			public static readonly TranslationKey CHAT_PARTY_PROMPT = Create("CHAT_PARTY_PROMPT", "#Party Chat... (/g, >/p, /z)");

			public static readonly TranslationKey CHAT_ZONE_PROMPT = Create("CHAT_ZONE_PROMPT", "#Zone Chat... (/g, /p, >/z)");

			private static TranslationKey Create(string key, string english)
			{
				return I18nKeys.Create("CHAT_BEHAVIOUR_" + key, english);
			}

			public static void Init()
			{
			}
		}

		internal static class ChatMessage
		{
			public static readonly TranslationKey RECIEVE_DUNGEON_KEY = Create("RECIEVE_DUNGEON_KEY", "You received a dungeon key.");

			public static readonly TranslationKey DUNGEON_KEY_DISSIPATES = Create("DUNGEON_KEY_DISSIPATES", "A dungeon key dissipates...");

			public static readonly TranslationKey UNMUTE_PLAYER_FORMAT = Create("UNMUTE_PLAYER_FORMAT", "Unmuted {0}.");

			public static readonly TranslationKey MUTE_PLAYER_FORMAT = Create("MUTE_PLAYER_FORMAT", "Muted {0}.");

			internal static void Init()
			{
			}

			private static TranslationKey Create(string key, string defaultValue)
			{
				return I18nKeys.Create("CHAT_MESSAGE_" + key, defaultValue);
			}
		}

		public static class DeathPrompt
		{
			public static readonly TranslationKey USER_TIER_PROMPT_FORMAT = Create("USER_TIER_PROMPT_FORMAT", "Use Tear (x{0})");

			public static readonly TranslationKey DEATH_PROMPT_HEADER = Create("DEATH_PROMPT_HEADER", "You died.");

			public static readonly TranslationKey DEATH_PROMPT_RELEASE_SOUL_BUTTON = Create("DEATH_PROMPT_RELEASE_SOUL_BUTTON", "Release Soul");

			internal static void Init()
			{
			}
		}

		internal static class Enchanter
		{
			public static readonly TranslationKey HEADER = create("HEADER", "- Item Enchant -");

			public static readonly TranslationKey BUTTON_CLEAR_SELECTION = create("BUTTON_CLEAR_SELECTION", "Clear Selection");

			public static readonly string[] BUTTON_TRANSMUTE = ((IEnumerable<DamageType>)(object)new DamageType[3]
			{
				(DamageType)1,
				default(DamageType),
				(DamageType)2
			}).SelectMany((DamageType type) => new bool[2] { true, false }.Select((bool free) => generateTransmuteButton(type, free))).ToArray();

			public static readonly TranslationKey BUTTON_ENCHANT_REROLL = create("BUTTON_ENCHANT_REROLL", "Re-roll Enchant");

			public static readonly TranslationKey BUTTON_ENCHANT_ENCHANT = create("BUTTON_ENCHANT_ENCHANT", "Enchant Item");

			public static readonly TranslationKey BUTTON_ENCHANT_UNABLE = create("BUTTON_ENCHANT_UNABLE", "Cannot enchant");

			public static readonly TranslationKey STATUS_NO_ENCHANT = create("STATUS_NO_ENCHANT", "No enchantment applied on this item");

			public static readonly TranslationKey STATUS_UNABLE_TO_ENCHANT = create("STATUS_UNABLE_TO_ENCHANT", "Item cannot be enchanted");

			public static readonly TranslationKey BUTTON_ENCHANT_INSERT_ITEM = create("BUTTON_ENCHANT_INSERT_ITEM", "Insert item to enchant");

			public static readonly TranslationKey STATUS_CURRENT_ENCHANTMENT = create("STATUS_CURRENT_ENCHANTMENT", "Current enchantment: ");

			public static readonly TranslationKey GET_NEW_ENCHANTMENT_FORMAT = create("GET_NEW_ENCHANTMENT_FORMAT", "You got the {0} enchantment!");

			public static readonly TranslationKey TRANSMUTE_TO_STRENGTH_FORMAT = create("TRANSMUTE_TO_STRENGTH_FORMAT", "Your {0} now scales off Strength!");

			public static readonly TranslationKey TRANSMUTE_TO_DEXTERITY_FORMAT = create("TRANSMUTE_TO_DEXTERITY_FORMAT", "Your {0} now scales off Dexterity!");

			public static readonly TranslationKey TRANSMUTE_TO_MIND_FORMAT = create("TRANSMUTE_TO_MIND_FORMAT", "Your {0} now scales off Mind!");

			public static readonly TranslationKey NOT_ENOUGH_TRANSMUTE_STONES_STRENGTH = create("NOT_ENOUGH_TRANSMUTE_STONES_STRENGTH", "Not enough Might Stones");

			public static readonly TranslationKey NOT_ENOUGH_TRANSMUTE_STONES_DEXTERITY = create("NOT_ENOUGH_TRANSMUTE_STONES_DEXTERITY", "Not enough Agility Stones");

			public static readonly TranslationKey NOT_ENOUGH_TRANSMUTE_STONES_MIND = create("NOT_ENOUGH_TRANSMUTE_STONES_MIND", "Not enough Flux Stones");

			public static readonly TranslationKey CANNOT_TRANSMUTE_WEAPON = create("CANNOT_TRANSMUTE_WEAPON", "Cannot Transmute Weapon");

			internal static void Init()
			{
			}

			private static TranslationKey create(string key, string value = "")
			{
				return Create("ENCHANTER_GUI_" + key.ToUpper(), value);
			}

			public unsafe static string TransmuteButtonKey(DamageType type, bool free)
			{
				return "BUTTON_TRANSMUTE_" + ((object)(*(DamageType*)(&type))/*cast due to .constrained prefix*/).ToString().ToUpper() + "_" + (free ? "FREE" : "FORMAT");
			}

			private unsafe static string generateTransmuteButton(DamageType type, bool free)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Invalid comparison between Unknown and I4
				return create(TransmuteButtonKey(type, free), ((int)type == 2 && free) ? "Apply Flux Stone (Free)" : ("Transmute " + ((object)(*(DamageType*)(&type))/*cast due to .constrained prefix*/).ToString() + " " + (free ? "(Free)" : "(x{0})")));
			}
		}

		internal static class Enums
		{
			public static readonly IDictionary<TranslationKey, string> ITEM_RARITY = CreateEnumKeys<ItemRarity>((Func<ItemRarity, TranslationKey>)null, (Func<ItemRarity, string>)null, (IDictionary<ItemRarity, string>)null);

			public static readonly IDictionary<TranslationKey, string> DAMAGE_TYPE = CreateEnumKeys<DamageType>((Func<DamageType, TranslationKey>)null, (Func<DamageType, string>)null, (IDictionary<DamageType, string>)null);

			public static readonly IDictionary<TranslationKey, string> SKILL_CONTROL_TYPE = CreateEnumKeys<SkillControlType>((Func<SkillControlType, TranslationKey>)null, (Func<SkillControlType, string>)null, (IDictionary<SkillControlType, string>)null);

			public static readonly IDictionary<TranslationKey, string> COMBAT_COLLIDER_TYPE = CreateEnumKeys<CombatColliderType>((Func<CombatColliderType, TranslationKey>)null, (Func<CombatColliderType, string>)null, (IDictionary<CombatColliderType, string>)null);

			private static readonly IDictionary<ItemType, string> __ITEM_TYPE_VALUES = new Dictionary<ItemType, string>
			{
				{
					(ItemType)0,
					"Equipment"
				},
				{
					(ItemType)1,
					"Consumables"
				},
				{
					(ItemType)2,
					"Trade Items"
				}
			};

			public static readonly IDictionary<TranslationKey, string> ITEM_TYPE = __ITEM_TYPE_VALUES.ToDictionary((KeyValuePair<ItemType, string> kv) => Create(KeyUtil.GetForAsset(kv.Key).ToString(), kv.Value), (KeyValuePair<ItemType, string> kv) => kv.Value);

			public static readonly IDictionary<TranslationKey, string> ZONE_TYPE = CreateEnumKeys<ZoneType>((Func<ZoneType, TranslationKey>)null, (Func<ZoneType, string>)null, (IDictionary<ZoneType, string>)null);

			public unsafe static readonly IDictionary<TranslationKey, string> SKILL_TOOLTIP_REQUIREMENT = CreateEnumKeys<SkillToolTipRequirement>((Func<SkillToolTipRequirement, TranslationKey>)null, (Func<SkillToolTipRequirement, string>)((SkillToolTipRequirement skillToolTipRequirement) => ((object)(*(SkillToolTipRequirement*)(&skillToolTipRequirement))/*cast due to .constrained prefix*/).ToString().ToLower()), (IDictionary<SkillToolTipRequirement, string>)null);

			public static readonly IDictionary<TranslationKey, string> QUEST_SUB_TYPE = CreateEnumKeys<QuestSubType>((Func<QuestSubType, TranslationKey>)null, (Func<QuestSubType, string>)((QuestSubType questSubType) => ""), (IDictionary<QuestSubType, string>)new Dictionary<QuestSubType, string>
			{
				{
					(QuestSubType)2,
					"Class Tome"
				},
				{
					(QuestSubType)3,
					"Skill Scroll"
				}
			});

			private static readonly IDictionary<ShopTab, string> __SHOP_TABS = new Dictionary<ShopTab, string>
			{
				{
					(ShopTab)0,
					"Equipment"
				},
				{
					(ShopTab)1,
					"Consumables"
				},
				{
					(ShopTab)2,
					"Trade Items"
				},
				{
					(ShopTab)3,
					"Sold Items"
				}
			};

			public static readonly IDictionary<TranslationKey, string> SHOP_TAB = __SHOP_TABS.ToDictionary((KeyValuePair<ShopTab, string> kv) => Create(KeyUtil.GetForAsset(kv.Key).ToString(), kv.Value), (KeyValuePair<ShopTab, string> kv) => kv.Value);

			internal static void Init()
			{
			}

			private static IDictionary<TranslationKey, string> CreateEnumKeys<TEnum>(Func<TEnum, TranslationKey> keyOverride = null, Func<TEnum, string> valueOverride = null, IDictionary<TEnum, string> valueOverrideDict = null) where TEnum : Enum
			{
				if (keyOverride == null)
				{
					keyOverride = defaultGetString;
				}
				if (valueOverride == null)
				{
					valueOverride = (TEnum item) => item.ToString();
				}
				Func<TEnum, string> _valueOverride = valueOverride;
				if (valueOverrideDict != null)
				{
					_valueOverride = (TEnum item) => valueOverrideDict.TryGetValue(item, out var value) ? value : valueOverride(item);
				}
				return Enum.GetValues(typeof(TEnum)).OfType<TEnum>().ToDictionary((TEnum item) => Create(keyOverride(item).ToString(), _valueOverride(item)), _valueOverride);
				static TranslationKey defaultGetString(TEnum item)
				{
					MethodInfo methodInfo = (from m in typeof(KeyUtil).GetMethods()
						where m.Name == "GetForAsset"
						select m).FirstOrDefault(delegate(MethodInfo m)
					{
						ParameterInfo[] parameters = m.GetParameters();
						return parameters.Length == 1 && parameters[0].ParameterType == typeof(TEnum);
					});
					return (TranslationKey)methodInfo.Invoke(null, new object[1] { item });
				}
			}
		}

		internal static class Equipment
		{
			public static readonly string TOOLTIP_GAMBLE_ITEM_NAME = Create("EQUIP_TOOLTIP_GAMBLE_ITEM_NAME", "Mystery Gear");

			public static readonly string TOOLTIP_GAMBLE_ITEM_RARITY = Create("EQUIP_TOOLTIP_GAMBLE_ITEM_RARITY", "[Unknown]");

			public static readonly string TOOLTIP_GAMBLE_ITEM_TYPE = Create("EQUIP_TOOLTIP_GAMBLE_ITEM_TYPE", "???");

			public static readonly string TOOLTIP_GAMBLE_ITEM_DESCRIPTION = Create("EQUIP_TOOLTIP_GAMBLE_ITEM_DESCRIPTION", "You can't really see what this is until you buy it.");

			public static readonly string FORMAT_LEVEL_REQUIREMENT = Create("FORMAT_EQUIP_LEVEL_REQUIREMENT", "Lv-{0}");

			public static readonly string FORMAT_CLASS_REQUIREMENT = Create("FORMAT_EQUIP_CLASS_REQUIREMENT", "Class: {0}");

			public static readonly string FORMAT_WEAPON_CONDITION = Create("FORMAT_EQUIP_WEAPON_CONDITION", "\n<color=lime>- <color=yellow>{0}%</color> chance to apply {1}.</color>");

			public static readonly string TOOLTIP_TYPE_HELM = Create("EQUIP_TOOLTIP_TYPE_HELM", "Helm (Armor)");

			public static readonly string TOOLTIP_TYPE_CHESTPIECE = Create("EQUIP_TOOLTIP_TYPE_CHESTPIECE", "Chestpiece (Armor)");

			public static readonly string TOOLTIP_TYPE_LEGGINGS = Create("EQUIP_TOOLTIP_TYPE_LEGGINGS", "Leggings (Armor)");

			public static readonly string TOOLTIP_TYPE_CAPE = Create("EQUIP_TOOLTIP_TYPE_CAPE", "Cape (Armor)");

			public static readonly string TOOLTIP_TYPE_RING = Create("EQUIP_TOOLTIP_TYPE_RING", "Ring (Armor)");

			public static readonly string TOOLTIP_TYPE_TRINKET = Create("EQUIP_TOOLTIP_TYPE_TRINKET", "Trinket (Armor)");

			public static readonly string FORMAT_TOOLTIP_TYPE_WEAPON = Create("FORMAT_EQUIP_TOOLTIP_TYPE_WEAPON", "{0} (Weapon)");

			public static readonly string TOOLTIP_TYPE_SHIELD = Create("EQUIP_TOOLTIP_TYPE_SHIELD", "Shield (Off Hand)");

			public static readonly string STATS_DAMAGE = Create("EQUIP_TOOLTIP_STATS_DAMAGE", "Damage");

			public static readonly string STATS_BASE_DAMAGE = Create("EQUIP_TOOLTIP_STATS_BASE_DAMAGE", "Base Damage");

			public static readonly string VANITY_DISSIPATE_HELMET = Create("VANITY_DISSIPATE_HELMET", "The Vanity in the Helmet Slot dissipates.");

			public static readonly string VANITY_DISSIPATE_CHEST = Create("VANITY_DISSIPATE_CHEST", "The Vanity in the Chestpiece Slot dissipates.");

			public static readonly string VANITY_DISSIPATE_LEGGINGS = Create("VANITY_DISSIPATE_LEGGINGS", "The Vanity in the Leggings Slot dissipates.");

			public static readonly string VANITY_DISSIPATE_CAPE = Create("VANITY_DISSIPATE_CAPE", "The Vanity in the Cape Slot dissipates.");

			public static readonly string VANITY_DISSIPATE_SHIELD = Create("VANITY_DISSIPATE_SHIELD", "The Vanity in the Shield Slot dissipates.");

			public static readonly string FORMAT_STATS_BLOCK_THRESHOLD = Create("FORMAT_EQUIP_STATS_BLOCK_THRESHOLD", "Block threshold: {0} damage");

			public static readonly string FORMAT_WEAPON_DAMAGE_TYPE = Create("FORMAT_EQUIP_STATS_WEAPON_DAMAGE_TYPE", "{0} Weapon");

			public static readonly string FORMAT_WEAPON_TRANSMUTE_TYPE = Create("FORMAT_EQUIP_STATS_WEAPON_TRASMUTE_TYPE", "Damage Transmute: {0}");

			public static readonly string COMPARE = Create("EQUIP_TOOLTIP_COMPARE", "Compare Gear");

			public static readonly string STAT_DISPLAY_DEFENSE = Create(statDisplayKey("defense"), "Defense");

			public static readonly string STAT_DISPLAY_MAGIC_DEFENSE = Create(statDisplayKey("magicDefense"), "Mgk. Defense");

			public static readonly string STAT_DISPLAY_MAX_HEALTH = Create(statDisplayKey("maxHealth"), "Max Health");

			public static readonly string STAT_DISPLAY_MAX_MANA = Create(statDisplayKey("maxMana"), "Max Mana");

			public static readonly string STAT_DISPLAY_MAX_STAMINA = Create(statDisplayKey("maxStamina"), "Max Stamina");

			public static readonly string STAT_DISPLAY_ATTACK_POWER = Create(statDisplayKey("attackPower"), "Attack Power");

			public static readonly string STAT_DISPLAY_MAGIC_POWER = Create(statDisplayKey("magicPower"), "Mgk. Power");

			public static readonly string STAT_DISPLAY_DEX_POWER = Create(statDisplayKey("dexPower"), "Dex Power");

			public static readonly string STAT_DISPLAY_CRITICAL = Create(statDisplayKey("critical"), "Phys. Critical");

			public static readonly string STAT_DISPLAY_MAGIC_CRITICAL = Create(statDisplayKey("magicCritical"), "Mgk. Critical");

			public static readonly string STAT_DISPLAY_EVASION = Create(statDisplayKey("evasion"), "Evasion");

			public static readonly string STAT_DISPLAY_RESIST_FIRE = Create(statDisplayKey("resistFire"), "Fire Resist");

			public static readonly string STAT_DISPLAY_RESIST_WATER = Create(statDisplayKey("resistWater"), "Water Resist");

			public static readonly string STAT_DISPLAY_RESIST_NATURE = Create(statDisplayKey("resistNature"), "Nature Resist");

			public static readonly string STAT_DISPLAY_RESIST_EARTH = Create(statDisplayKey("resistEarth"), "Earth Resist");

			public static readonly string STAT_DISPLAY_RESIST_HOLY = Create(statDisplayKey("resistHoly"), "Holy Resist");

			public static readonly string STAT_DISPLAY_RESIST_SHADOW = Create(statDisplayKey("resistShadow"), "Shadow Resist");

			internal static void Init()
			{
			}

			public static string statDisplayKey(string stat)
			{
				return "ITEM_STAT_DISPLAY_" + KeyUtil.Normalize(Regex.Replace(stat, "[A-Z]", (Match x) => $"_{x}"));
			}
		}

		internal static class ErrorMessages
		{
			public static readonly TranslationKey QUEST_LOG_FULL = Create("QUEST_LOG_FULL", "Quest Log Full");

			public static readonly TranslationKey QUEST_ALREADY_IN_LOG = Create("ALREADY_ON_THIS_QUEST", "Already on this Quest");

			public static readonly TranslationKey LEVEL_REQUIRED = Create("LEVEL_REQUIRED", "Level Required - ");

			public static readonly TranslationKey UNABLE_TO_UPGRADE_FORMAT = Create("UNABLE_TO_UPGRADE_FORMAT", "Unable to upgrade to {0}. Level Req: {1}");

			internal static void Init()
			{
			}

			private static TranslationKey Create(string key, string english)
			{
				return I18nKeys.Create("ERROR_MESSAGE_" + key, english);
			}
		}

		internal static class Feedback
		{
			public static readonly string DROP_ITEM_FORMAT = Create("DROP_ITEM_FORMAT", "Dropped {0}. (-{1})");

			public static readonly string PICKUP_ITEM_FORMAT = Create("PICKUP_ITEM_FORMAT", "Picked up {0}. (+{1})");

			public static readonly string OBTAINED_ATTRIBUTE_POINTS = Create("OBTAINED_ATTRIBUTE_POINTS", "Obtained Attribute Points. (+{0})");

			public static readonly string CHAT_LEVELED_UP_PEER = Create("CHAT_LEVELED_UP_PEER", "{0} leveled up to {1}.");

			public static readonly string CHAT_LEVELED_UP_LOCAL = Create("CHAT_LEVELED_UP_LOCAL", "<color=yellow>You are now level {0}!</color>");

			public static readonly string CHAT_PROFESSION_LEVELED_UP_PEER = Create("CHAT_PROFESSION_LEVELED_UP_PEER", "{0} leveled {1} to {2}.");

			public static readonly string CHAT_PROFESSION_LEVELED_UP_LOCAL = Create("CHAT_PROFESSION_LEVELED_UP_LOCAL", "<color=yellow>You leveled {0} to {1}!</color>");

			public static readonly string EXPERIENCE_GAINED_FORMAT = Create("EXPERIENCE_GAINED_FORMAT", "Gained {0} experience. (+{1})");

			internal static void Init()
			{
			}

			private static string Create(string key, string defaultString)
			{
				if (!key.StartsWith("FEEDBACK_"))
				{
					key = "FEEDBACK_" + key;
				}
				I18nKeys.Create(key, defaultString);
				return key;
			}
		}

		internal static class HostConsole
		{
			public static readonly string CHARACTER_FILE_SAVED = Create("MESSAGES_CHARACTER_FILE_SAVED", "Character file saved...");

			public static readonly string SETTINGS_PROFILE_SAVED = Create("MESSAGES_SETTINGS_PROFILE_SAVED", "Settings profile saved...");

			internal static void Init()
			{
			}
		}

		internal static class IntroAndTags
		{
			public static readonly string INTRO_DIALOG_LINE_1 = Create("INTRO_DIALOG_LINE_1", "Your time is not over yet, little one...");

			public static readonly string INTRO_DIALOG_LINE_2 = Create("INTRO_DIALOG_LINE_2", "This world is broken, in need of your help.");

			public static readonly string INTRO_DIALOG_LINE_3 = Create("INTRO_DIALOG_LINE_3", "I plea for your soul, and your strength...");

			public static readonly string INTRO_DIALOG_LINE_4 = Create("INTRO_DIALOG_LINE_4", "For centuries, the world was blanketed in a thick, toxic fog, forcing all life to retreat deep underground...");

			public static readonly string INTRO_DIALOG_LINE_5 = Create("INTRO_DIALOG_LINE_5", "After generations of darkness, the fog has finally receded, revealing a world reclaimed by nature—and overrun by ancient, hostile forces.");

			public static readonly string INTRO_DIALOG_LINE_6 = Create("INTRO_DIALOG_LINE_6", "Now, the surface beckons once more.");

			public static readonly string INTRO_DIALOG_LINE_7 = Create("INTRO_DIALOG_LINE_7", "As a Dauntless, you must venture into the wild ruins of ATLYSS, face the dangers that await, and carve out a new path for your people.");

			public static readonly string INTRO_DIALOG_LINE_8 = Create("INTRO_DIALOG_LINE_8", "Your journey begins now...");

			public static readonly string PLAYER_NAMETAG_PREFIX_HOST = Create("PLAYER_NAMETAG_PREFIX_HOST", "[HOST] ");

			public static readonly string PLAYER_NAMETAG_SUFFIX_AFK = Create("PLAYER_NAMETAG_SUFFIX_AFK", " (AFK)");

			public static readonly string WHO_LIST_HOST = Create("WHO_LIST_HOST", "Host");

			public static readonly string GAMEPAD_LAYOUT_HEADER = Create("GAMEPAD_LAYOUT_HEADER", "Gamepad Layout");

			public static readonly string GAMEPAD_LAYOUT_DPAD_UP = Create("GAMEPAD_LAYOUT_DPAD_UP", "Zoom in camera\nItem Quickslot");

			public static readonly string GAMEPAD_LAYOUT_DPAD_DOWN = Create("GAMEPAD_LAYOUT_DPAD_DOWN", "Zoom out camera\nItem Quickslot");

			public static readonly string GAMEPAD_LAYOUT_DPAD_LEFT = Create("GAMEPAD_LAYOUT_DPAD_LEFT", "Recall\nItem Quickslot");

			public static readonly string GAMEPAD_LAYOUT_DPAD_RIGHT = Create("GAMEPAD_LAYOUT_DPAD_RIGHT", "Sit down\nItem Quickslot");

			public static readonly string GAMEPAD_LAYOUT_SOUTH = Create("GAMEPAD_LAYOUT_SOUTH", "Confirm / Jump");

			public static readonly string GAMEPAD_LAYOUT_EAST = Create("GAMEPAD_LAYOUT_EAST", "Cancel / Dash\nSkill Slot");

			public static readonly string GAMEPAD_LAYOUT_WEST = Create("GAMEPAD_LAYOUT_WEST", "Interact\nSkill Slot");

			public static readonly string GAMEPAD_LAYOUT_NORTH = Create("GAMEPAD_LAYOUT_NORTH", "Swap Loadout\nSkill Slot");

			public static readonly string GAMEPAD_LAYOUT_LT = Create("GAMEPAD_LAYOUT_LT", "Block (Hold)\nUI Select -");

			public static readonly string GAMEPAD_LAYOUT_RT = Create("GAMEPAD_LAYOUT_RT", "Attack (Hold)\nUI Select +");

			public static readonly string GAMEPAD_LAYOUT_START = Create("GAMEPAD_LAYOUT_START", "Tab Menu");

			public static readonly string GAMEPAD_LAYOUT_SELECT = Create("GAMEPAD_LAYOUT_SELECT", "Open Chat");

			public static readonly string GAMEPAD_LAYOUT_SHOULDERS = Create("GAMEPAD_LAYOUT_SHOULDERS", "Skill / Item Slot Selection (Hold)\nUI Navigation");

			public static readonly string GAMEPAD_LAYOUT_RIGHT_STICK = Create("GAMEPAD_LAYOUT_RIGHT_STICK", "Reposition Camera\nLock on (Press)");

			public static readonly string GAMEPAD_LAYOUT_LEFT_STICK = Create("GAMEPAD_LAYOUT_LEFT_STICK", "Movement\nSheathe Weapon (Press)");

			public static readonly string TOOLTIP_GENERIC_HELMET = Create("TOOLTIP_GENERIC_HELMET", "Helmet");

			public static readonly string TOOLTIP_GENERIC_CHESTPIECE = Create("TOOLTIP_GENERIC_CHESTPIECE", "Chestpiece");

			public static readonly string TOOLTIP_GENERIC_LEGGINGS = Create("TOOLTIP_GENERIC_LEGGINGS", "Leggings");

			public static readonly string TOOLTIP_GENERIC_CAPE = Create("TOOLTIP_GENERIC_CAPE", "Cape");

			public static readonly string TOOLTIP_GENERIC_RING = Create("TOOLTIP_GENERIC_RING", "Ring");

			public static readonly string TOOLTIP_GENERIC_TRINKET = Create("TOOLTIP_GENERIC_TRINKET", "Trinket");

			public static readonly string TOOLTIP_GENERIC_SHIELD = Create("TOOLTIP_GENERIC_SHIELD", "Shield");

			public static readonly string TOOLTIP_GENERIC_WEAPON = Create("TOOLTIP_GENERIC_WEAPON", "Weapon");

			public static readonly string TOOLTIP_ILLUSION_PREFIX = Create("TOOLTIP_ILLUSION_PREFIX", "Illusion: ");

			internal static void Init()
			{
			}
		}

		internal static class Item
		{
			public static readonly string FORMAT_ITEM_RARITY = Create("FORMAT_ITEM_RARITY", "[{0}]");

			public static readonly string FORMAT_ITEM_TOOLTIP_VENDOR_VALUE_COUNTER = Create("FORMAT_ITEM_TOOLTIP_VENDOR_VALUE_COUNTER", "{0}");

			public static readonly string FORMAT_ITEM_TOOLTIP_VENDOR_VALUE_COUNTER_MULTIPLE = Create("FORMAT_ITEM_TOOLTIP_VENDOR_VALUE_COUNTER_MULTIPLE", "<color=grey>(x{0} each)</color> {1}");

			public static readonly string TOOLTIP_GAMBLE_ITEM_NAME = Create("ITEM_TOOLTIP_GAMBLE_ITEM_NAME", "Mystery Item");

			public static readonly string TOOLTIP_GAMBLE_ITEM_RARITY = Create("ITEM_TOOLTIP_GAMBLE_ITEM_RARITY", "[Unknown]");

			public static readonly string TOOLTIP_GAMBLE_ITEM_DESC = Create("ITEM_TOOLTIP_GAMBLE_ITEM_DESCRIPTION", "You can't really see what this is until you buy it.");

			public static readonly string TOOLTIP_CONSUMABLE_DESCRIPTION_HEALTH_APPLY = Create("ITEM_TOOLTIP_CONSUMABLE_DESCRIPTION_HEALTH_APPLY", "Recovers {0} Health.");

			public static readonly string TOOLTIP_CONSUMABLE_DESCRIPTION_MANA_APPLY = Create("ITEM_TOOLTIP_CONSUMABLE_DESCRIPTION_MANA_APPLY", "Recovers {0} Mana.");

			public static readonly string TOOLTIP_CONSUMABLE_DESCRIPTION_STAMINA_APPLY = Create("ITEM_TOOLTIP_CONSUMABLE_DESCRIPTION_STAMINA_APPLY", "Recovers {0} Stamina.");

			public static readonly string TOOLTIP_CONSUMABLE_DESCRIPTION_EXP_GAIN = Create("ITEM_TOOLTIP_CONSUMABLE_DESCRIPTION_EXP_GAIN", "Gain {0} Experience on use.");

			internal static void Init()
			{
			}
		}

		internal static class Lore
		{
			public static readonly string CROWN = Create("CROWN", "crown");

			public static readonly string CROWN_PLURAL = Create("CROWN_PLURAL", "crowns");

			public static readonly string GAME_LOADING = Create("GAME_LOADING", "Loading...");

			public static readonly string EXP_COUNTER_MAX = Create("EXP_COUNTER_MAX", "MAX");

			public static readonly string COMBAT_ELEMENT_NORMAL_NAME = Create("COMBAT_ELEMENT_NORMAL_NAME", "Normal");

			public static readonly string FORMAT_MAP_ZONE = Create("MAP_ZONE_FORMAT", "- {0} Zone -");

			public static readonly string INTERACT_TELEPORT = Create("INTERACT_TELEPORT", "TELEPORT");

			public static readonly string INTERACT_REEL = Create("INTERACT_REEL", "REEL");

			public static readonly string INTERACT_REVIVE = Create("INTERACT_REVIVE", "REVIVE");

			public static readonly string INTERACT_INTERACT = Create("INTERACT_INTERACT", "INTERACT");

			public static readonly string INTERACT_HOLD = Create("INTERACT_HOLD", "HOLD");

			public static readonly string INTERACT_OPEN = Create("INTERACT_OPEN", "OPEN");

			public static readonly string INTERACT_PICK_UP = Create("INTERACT_PICK_UP", "PICK UP");

			public static readonly string INTERACT_FISH = Create("INTERACT_FISH", "FISH");

			public static readonly string INTERACT_CANCEL = Create("INTERACT_CANCEL", "CANCEL");

			public static readonly string WORLDPORTAL_SELECT_WAYPOINT = Create("WORLDPORTAL_SELECT_WAYPOINT", "- Select Waypoint -");

			public static readonly string WORLDPORTAL_TITLE = Create("WORLDPORTAL_TITLE", "World Portal");

			public static readonly string WORLDPORTAL_TELEPORT = Create("WORLDPORTAL_TELEPORT", "Teleport");

			public static readonly string DUNGEON_PORTAL_ENTER_PARTY = Create("DUNGEON_PORTAL_ENTER_PARTY", "Join Party");

			public static readonly string DUNGEON_PORTAL_ENTER_LEVELED_FORMAT = Create("DUNGEON_PORTAL_ENTER_LEVELED_FORMAT", "Enter Dungeon (LV {0}-{1})");

			internal static void Init()
			{
			}
		}

		internal static class MainMenu
		{
			public static readonly string BUTTON_SINGLEPLAY = Create("MAIN_MENU_BUTTON_SINGLEPLAY", "Singleplayer");

			public static readonly string BUTTON_SINGLEPLAY_TOOLTIP = Create("MAIN_MENU_BUTTON_SINGLEPLAY_TOOLTIP", "Start a Singleplayer Game.");

			public static readonly string BUTTON_MULTIPLAY = Create("MAIN_MENU_BUTTON_MULTIPLAY", "Multiplayer");

			public static readonly string BUTTON_MULTIPLAY_TOOLTIP = Create("MAIN_MENU_BUTTON_MULTIPLAY_TOOLTIP", "Start a Netplay Game.");

			public static readonly string BUTTON_MULTIPLAY_DISABLED_TOOLTIP = Create("MAIN_MENU_BUTTON_MULTIPLAY_DISABLED_TOOLTIP", "Multiplayer is disabled on this demo.");

			public static readonly string BUTTON_SETTINGS = Create("MAIN_MENU_BUTTON_SETTINGS", "Settings");

			public static readonly string BUTTON_SETTINGS_TOOLTIP = Create("MAIN_MENU_BUTTON_SETTINGS_TOOLTIP", "Configure Game Settings.");

			public static readonly string BUTTON_QUIT = Create("MAIN_MENU_BUTTON_QUIT", "Quit");

			public static readonly string BUTTON_QUIT_TOOLTIP = Create("MAIN_MENU_BUTTON_QUIT_TOOLTIP", "End The Application.");

			public static readonly string PAGER = Create("MAIN_MENU_PAGER", "Page ( {0} / 15 )");

			public static readonly string BUTTON_JOIN_SERVER = Create("MAIN_MENU_BUTTON_JOIN_SERVER", "Join");

			public static readonly string BUTTON_HOST_SERVER = Create("MAIN_MENU_BUTTON_HOST_SERVER", "Host");

			public static readonly string BUTTON_RETURN = Create("MAIN_MENU_BUTTON_RETURN", "Return");

			internal static void Init()
			{
			}
		}

		internal static class Quest
		{
			public static readonly string FORMAT_REQUIRED_LEVEL = Create("FORMAT_QUEST_REQUIRED_LEVEL", "(lv-{0})");

			public static readonly string MENU_SUMMARY_NO_QUESTS = Create("QUEST_MENU_SUMMARY_NO_QUESTS", "No Quests in Quest Log.");

			public static readonly string MENU_HEADER_UNSELECTED = Create("QUEST_MENU_HEADER_UNSELECTED", "Select a Quest.");

			public static readonly string FORMAT_MENU_CELL_LOG_COUNTER = Create("FORMAT_QUEST_MENU_CELL_QUEST_LOG_COUNTER", "Quest Log: ({0} / {1})");

			public static readonly string FORMAT_MENU_CELL_FINISHED_COUNTER = Create("FORMAT_QUEST_MENU_CELL_FINISHED_QUEST_COUNTER", "Completed Quests: {0}");

			public static readonly string MENU_CELL_REWARD_HEADER = Create("QUEST_MENU_CELL_REWARD_HEADER", "Rewards:");

			public static readonly string MENU_CELL_OBJECTIVE_ITEM_HEADER = Create("QUEST_MENU_CELL_OBJECTIVE_ITEM_HEADER", "Objective Item:");

			public static readonly string FORMAT_MENU_CELL_REWARD_EXP = Create("FORMAT_QUEST_MENU_CELL_REWARD_EXP", "{0} exp");

			public static readonly string FORMAT_MENU_CELL_REWARD_CURRENCY = Create("FORMAT_QUEST_MENU_CELL_REWARD_CURRENCY", "{0} Crowns");

			public static readonly string MENU_CELL_SLOT_EMPTY = Create("QUEST_MENU_CELL_SLOT_EMPTY", "Empty Slot");

			public static readonly string HEADER_QUEST_SELECTION = Create("QUEST_SELECTION_HEADER", "Quest Selection");

			public static readonly string SELECTION_MANAGER_ACCEPT_BUTTON_ACCEPT = Create("QUEST_SELECTION_MANAGER_QUEST_ACCEPT_BUTTON_ACCEPT", "Accept Quest");

			public static readonly string SELECTION_MANAGER_ACCEPT_BUTTON_LOCKED = Create("QUEST_SELECTION_MANAGER_QUEST_ACCEPT_BUTTON_LOCKED", "Quest Locked");

			public static readonly string SELECTION_MANAGER_ACCEPT_BUTTON_INCOMPLETE = Create("QUEST_SELECTION_MANAGER_QUEST_ACCEPT_BUTTON_INCOMPLETE", "Quest Incomplete");

			public static readonly string SELECTION_MANAGER_ACCEPT_BUTTON_TURN_IN = Create("QUEST_SELECTION_MANAGER_QUEST_ACCEPT_BUTTON_TURN_IN", "Complete Quest");

			public static readonly string SELECTION_MANAGER_ACCEPT_BUTTON_UNSELECTED = Create("QUEST_SELECTION_MANAGER_QUEST_ACCEPT_BUTTON_UNSELECTED", "Select a Quest");

			public static readonly string FORMAT_PROGRESS = Create("FORMAT_QUEST_PROGRESS", "{0}: ({1} / {2})");

			public static readonly string FORMAT_PROGRESS_CREEPS_KILLED = Create("FORMAT_QUEST_PROGRESS_CREEPS_KILLED", "{0} slain");

			public static readonly string TYPE_CLASS = Create("QUEST_TYPE_CLASS", "Class");

			public static readonly TranslationKey RETRIEVED_QUEST_OBJECTIVE_ITEM_FORMAT = Create("QUEST_RETRIEVED_QUEST_OBJECTIVE_ITEM_FORMAT", "Retrieved Quest Objective Item: {0}.");

			public static readonly TranslationKey GAME_LOGIC_ACCEPT_QUEST_FORMAT = Create("QUEST_GAME_LOGIC_ACCEPT_QUEST_FORMAT", "Accepted Quest: {0}.");

			internal static void Init()
			{
			}
		}

		internal static class ScriptableStatusCondition
		{
			public static readonly string DURATION_FORMAT = Create("SCRIPTABLE_STATUS_CONDITION_DURATION_FORMAT", "<color=yellow>Lasts for {0} sec</color>.");

			public static readonly string RATE_FORMAT = Create("SCRIPTABLE_STATUS_CONDITION_RATE_FORMAT", "<color=yellow>every {0} sec</color>.");

			internal static void Init()
			{
			}
		}

		internal static class Settings
		{
			internal static class Audio
			{
				public static readonly string HEADER_AUDIO_SETTINGS = Create("SETTINGS_AUDIO_HEADER_AUDIO_SETTINGS", "Audio Settings");

				public static readonly string CELL_MASTER_VOLUME = Create("SETTINGS_AUDIO_CELL_MASTER_VOLUME", "Master Volume");

				public static readonly string CELL_MUTE_APPLICATION = Create("SETTINGS_AUDIO_CELL_MUTE_APPLICATION", "Mute Application");

				public static readonly string CELL_MUTE_MUSIC = Create("SETTINGS_AUDIO_CELL_MUTE_MUSIC", "Mute Music");

				public static readonly string HEADER_AUDIO_CHANNEL_SETTINGS = Create("SETTINGS_AUDIO_HEADER_AUDIO_CHANNEL_SETTINGS", "Audio Channels");

				public static readonly string CELL_GAME_VOLUME = Create("SETTINGS_AUDIO_CELL_GAME_VOLUME", "Game Volume");

				public static readonly string CELL_GUI_VOLUME = Create("SETTINGS_AUDIO_CELL_GUI_VOLUME", "GUI Volume");

				public static readonly string CELL_AMBIENCE_VOLUME = Create("SETTINGS_AUDIO_CELL_AMBIENCE_VOLUME", "Ambience Volume");

				public static readonly string CELL_MUSIC_VOLUME = Create("SETTINGS_AUDIO_CELL_MUSIC_VOLUME", "Music Volume");

				public static readonly string CELL_VOICE_VOLUME = Create("SETTINGS_AUDIO_CELL_VOICE_VOLUME", "Voice Volume");

				internal static void Init()
				{
				}
			}

			internal static class Input
			{
				public static readonly string HEADER_INPUT_SETTINGS = Create("SETTINGS_INPUT_HEADER_INPUT_SETTINGS", "Input Settings");

				public static readonly string CELL_AXIS_TYPE = Create("SETTINGS_INPUT_CELL_AXIS_TYPE", "Analog Stick Axis Type");

				public static readonly string CELL_AXIS_TYPE_OPTION_1 = Create("SETTINGS_INPUT_CELL_AXIS_TYPE_OPTION_1", "WASD (8 Directional)");

				public static readonly string CELL_AXIS_TYPE_OPTION_2 = Create("SETTINGS_INPUT_CELL_AXIS_TYPE_OPTION_2", "Xbox");

				public static readonly string CELL_AXIS_TYPE_OPTION_3 = Create("SETTINGS_INPUT_CELL_AXIS_TYPE_OPTION_3", "Playstation 4");

				public static readonly string GAME_PAD_WIP = Create("SETTINGS_INPUT_GAME_PAD_WIP", "*Gamepad Input is a work in progress.\r\nVarious menu elements are incomplete.");

				public static readonly string HEADER_CAMERA_CONTROL = Create("SETTINGS_INPUT_HEADER_CAMERA_CONTROL", "Camera Control");

				public static readonly string CELL_CAMERA_SENSITIVITY = Create("SETTINGS_INPUT_CELL_CAMERA_SENSITIVITY", "Axis Sensitivity");

				public static readonly string CELL_INVERT_X_CAMERA_AXIS = Create("SETTINGS_INPUT_CELL_INVERT_X_CAMERA_AXIS", "Invert X Axis");

				public static readonly string CELL_INVERT_Y_CAMERA_AXIS = Create("SETTINGS_INPUT_CELL_INVERT_Y_CAMERA_AXIS", "Invert Y Axis");

				public static readonly string CELL_KEYBINDING_RESET_CAMERA = Create("SETTINGS_INPUT_CELL_KEYBINDING_RESET_CAMERA", "Reset Camera");

				public static readonly string HEADER_MOVEMENT = Create("SETTINGS_INPUT_HEADER_MOVEMENT", "Movement");

				public static readonly string CELL_KEYBINDING_UP = Create("SETTINGS_INPUT_CELL_KEYBINDING_UP", "Up");

				public static readonly string CELL_KEYBINDING_DOWN = Create("SETTINGS_INPUT_CELL_KEYBINDING_DOWN", "Down");

				public static readonly string CELL_KEYBINDING_LEFT = Create("SETTINGS_INPUT_CELL_KEYBINDING_LEFT", "Left");

				public static readonly string CELL_KEYBINDING_RIGHT = Create("SETTINGS_INPUT_CELL_KEYBINDING_RIGHT", "Right");

				public static readonly string CELL_KEYBINDING_JUMP = Create("SETTINGS_INPUT_CELL_KEYBINDING_JUMP", "Jump");

				public static readonly string CELL_KEYBINDING_DASH = Create("SETTINGS_INPUT_CELL_KEYBINDING_DASH", "Dash");

				public static readonly string CELL_ANALOG_DIRECTION_MODE = Create("SETTINGS_INPUT_CELL_ANALOG_DIRECTION_MODE", "Detect Analog Stick");

				public static readonly string HEADER_STRAFING = Create("SETTINGS_INPUT_HEADER_STRAFING", "Strafing");

				public static readonly string CELL_KEYBINDING_LOCK_DIRECTION = Create("SETTINGS_INPUT_CELL_KEYBINDING_LOCK_DIRECTION", "Strafe");

				public static readonly string CELL_KEYBINDING_STRAFE_MODE = Create("SETTINGS_INPUT_CELL_KEYBINDING_STRAFE_MODE", "Strafe / Aim Mode");

				public static readonly string CELL_KEYBINDING_STRAFE_MODE_OPTION_1 = Create("SETTINGS_INPUT_CELL_KEYBINDING_STRAFE_MODE_OPTION_1", "Hold Strafe Key");

				public static readonly string CELL_KEYBINDING_STRAFE_MODE_OPTION_2 = Create("SETTINGS_INPUT_CELL_KEYBINDING_STRAFE_MODE_OPTION_2", "Toggle Strafe Key");

				public static readonly string CELL_KEYBINDING_STRAFE_WEAPON = Create("SETTINGS_INPUT_CELL_KEYBINDING_STRAFE_WEAPON", "Strafe While Holding Weapon");

				public static readonly string CELL_STRAFE_WEAPON_MOVE_ATTACK = Create("SETTINGS_INPUT_CELL_STRAFE_WEAPON_MOVE_ATTACK", "Strafe While Attacking + Movement");

				public static readonly string CELL_KEYBINDING_STRAFE_CASTING = Create("SETTINGS_INPUT_CELL_KEYBINDING_STRAFE_CASTING", "Strafe While Casting Offensive Skills");

				public static readonly string HEADER_ACTION = Create("SETTINGS_INPUT_HEADER_ACTION", "Action");

				public static readonly string CELL_KEYBINDING_ATTACK = Create("SETTINGS_INPUT_CELL_KEYBINDING_ATTACK", "Attack");

				public static readonly string CELL_KEYBINDING_CHARGE_ATTACK = Create("SETTINGS_INPUT_CELL_KEYBINDING_CHARGE_ATTACK", "Charge Attack");

				public static readonly string CELL_KEYBINDING_BLOCK = Create("SETTINGS_INPUT_CELL_KEYBINDING_BLOCK", "Block");

				public static readonly string CELL_KEYBINDING_TARGET = Create("SETTINGS_INPUT_CELL_KEYBINDING_TARGET", "Lock On");

				public static readonly string CELL_KEYBINDING_INTERACT = Create("SETTINGS_INPUT_CELL_KEYBINDING_INTERACT", "Interact");

				public static readonly string CELL_KEYBINDING_PVP_FLAG = Create("SETTINGS_INPUT_CELL_KEYBINDING_PVP_FLAG", "PvP Flag Toggle");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_01 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_01", "Skill Slot 1");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_02 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_02", "Skill Slot 2");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_03 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_03", "Skill Slot 3");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_04 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_04", "Skill Slot 4");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_05 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_05", "Skill Slot 5");

				public static readonly string CELL_KEYBINDING_SKILL_SLOT_06 = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILL_SLOT_06", "Skill Slot 6");

				public static readonly string CELL_KEYBINDING_RECALL = Create("SETTINGS_INPUT_CELL_KEYBINDING_RECALL", "Recall");

				public static readonly string CELL_KEYBINDING_QUICKSWAP_WEAPON = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICKSWAP_WEAPON", "Quickswap Weapon");

				public static readonly string CELL_KEYBINDING_SHEATHE_WEAPON = Create("SETTINGS_INPUT_CELL_KEYBINDING_SHEATHE_WEAPON", "Sheathe / Unsheathe Weapon");

				public static readonly string CELL_KEYBINDING_SIT = Create("SETTINGS_INPUT_CELL_KEYBINDING_SIT", "Sit");

				public static readonly string HEADER_CONSUMABLE_SLOTS = Create("SETTINGS_INPUT_HEADER_CONSUMABLE_SLOTS", "Consumable Quick Slots");

				public static readonly string CELL_KEYBINDING_QUICK_SLOT_01 = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICK_SLOT_01", "Quick Slot 1");

				public static readonly string CELL_KEYBINDING_QUICK_SLOT_02 = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICK_SLOT_02", "Quick Slot 2");

				public static readonly string CELL_KEYBINDING_QUICK_SLOT_03 = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICK_SLOT_03", "Quick Slot 3");

				public static readonly string CELL_KEYBINDING_QUICK_SLOT_04 = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICK_SLOT_04", "Quick Slot 4");

				public static readonly string CELL_KEYBINDING_QUICK_SLOT_05 = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUICK_SLOT_05", "Quick Slot 5");

				public static readonly string HEADER_INTERFACE = Create("SETTINGS_INPUT_HEADER_INTERFACE", "Interface");

				public static readonly string CELL_KEYBINDING_HOST_CONSOLE = Create("SETTINGS_INPUT_CELL_KEYBINDING_HOST_CONSOLE", "Host Console");

				public static readonly string CELL_KEYBINDING_LEXICON = Create("SETTINGS_INPUT_CELL_KEYBINDING_LEXICON", "Open Lexicon");

				public static readonly string CELL_KEYBINDING_TAB_MENU = Create("SETTINGS_INPUT_CELL_KEYBINDING_TAB_MENU", "Open Tab Menu");

				public static readonly string CELL_KEYBINDING_STATS_TAB = Create("SETTINGS_INPUT_CELL_KEYBINDING_STATS_TAB", "Stats Tab");

				public static readonly string CELL_KEYBINDING_SKILLS_TAB = Create("SETTINGS_INPUT_CELL_KEYBINDING_SKILLS_TAB", "Skills Tab");

				public static readonly string CELL_KEYBINDING_ITEM_TAB = Create("SETTINGS_INPUT_CELL_KEYBINDING_ITEM_TAB", "Item Tab");

				public static readonly string CELL_KEYBINDING_QUEST_TAB = Create("SETTINGS_INPUT_CELL_KEYBINDING_QUEST_TAB", "Quest Tab");

				public static readonly string CELL_KEYBINDING_WHO_TAB = Create("SETTINGS_INPUT_CELL_KEYBINDING_WHO_TAB", "Who Tab");

				public static readonly string CELL_KEYBINDING_HIDE_UI = Create("SETTINGS_INPUT_CELL_KEYBINDING_HIDE_UI", "Hide Game UI");

				public static readonly string HEADER_RESET_BINDINGS = Create("SETTINGS_INPUT_HEADER_RESET_BINDINGS", "Reset Bindings");

				public static readonly string CELL_RESET_BINDINGS = Create("SETTINGS_INPUT_CELL_RESET_BINDINGS", "Reset Bindings");

				internal static void init()
				{
				}
			}

			public static class Mod
			{
				public static readonly TranslationKey HEADER_GENERAL = CreateSectionHeader("HEADER_GENERAL", "General");

				public static readonly TranslationKey LANGUAGE = Create(ConfigDefinitions.Language);

				public static readonly TranslationKey TRANSLATOR_MODE = Create(ConfigDefinitions.TraslatorMode);

				public static readonly TranslationKey CREATE_DEFAULT_LANGUAGE_FILES = Create(ConfigDefinitions.CreateDefaultLanguageFiles);

				public static readonly TranslationKey SHOW_TRANSLATION_KEY = Create(ConfigDefinitions.ShowTranslationKey);

				public static readonly TranslationKey EXPORT_EXTRA = Create(ConfigDefinitions.ExportExtra);

				public static readonly TranslationKey RELOAD_LANGUAGE_KEYBIND = Create(ConfigDefinitions.ReloadLanguageKeybind);

				public static readonly TranslationKey LOG_VANILLA_FONTS = Create(ConfigDefinitions.LogVanillaFonts);

				public static readonly TranslationKey RELOAD_FONT_BUNDLES_KEYBIND = Create(ConfigDefinitions.ReloadFontBundlesKeybind);

				public static readonly TranslationKey SWITCH_TRANSLATION_KEYBIND = Create(ConfigDefinitions.SwitchTranslationKeybind);

				public static readonly TranslationKey ADD_MISSING_KEYS_TO_CURRENT_LANGUAGE = Create("ADD_MISSING_KEYS_TO_CURRENT_LANGUAGE", "Add Missing Keys to Current Language");

				public static readonly TranslationKey LOG_UNTRANSLATED_STRINGS = Create("LOG_UNTRANSLATED_STRINGS", "Log Untranslated Strings");

				internal static void Init()
				{
				}

				private static TranslationKey CreateSectionHeader(string key, string defaultValue = "")
				{
					return I18nKeys.Create("SETTINGS_MOD_" + key, defaultValue);
				}

				private static TranslationKey Create(string key, string defaultValue = "")
				{
					return I18nKeys.Create("SETTINGS_MOD_CELL_LOCALYSSATION_" + key, defaultValue);
				}

				private static TranslationKey Create(ConfigDefinition configEntry)
				{
					return Create(KeyUtil.Normalize(configEntry.Key), configEntry.Key);
				}
			}

			internal static class Network
			{
				public static readonly string HEADER_GAME_SETTINGS = Create("SETTINGS_NETWORK_HEADER_GAME_SETTINGS", "Game Settings");

				public static readonly string CELL_ENABLE_PVP_ON_MAP_ENTER = Create("SETTINGS_NETWORK_CELL_ENABLE_PVP_ON_MAP_ENTER", "Flag for PvP when available");

				public static readonly string CELL_PERSIST_DISCONNECT_HOTKEY = Create("SETTINGS_NETWORK_CELL_PERSIST_DISCONNECT_HOTKEY", "Persist (Ctrl + F12) disconnect hotkey in-game");

				public static readonly string CELL_ENABLE_UNICODE = Create("SETTINGS_NETWORK_CELL_ENABLE_UNICODE", "(Hosting) Allow Unicode");

				public static readonly string HEADER_NAMETAG_SETTINGS = Create("SETTINGS_NETWORK_HEADER_NAMETAG_SETTINGS", "Nametag Settings");

				public static readonly string CELL_DISPLAY_GLOBAL_NICKNAME_TAGS = Create("SETTINGS_NETWORK_CELL_DISPLAY_GLOBAL_NICKNAME_TAGS", "Display Global Nametags <color=cyan>(@XX)</color>");

				public static readonly string CELL_DISPLAY_LOCAL_NAMETAG = Create("SETTINGS_NETWORK_CELL_DISPLAY_LOCAL_NAMETAG", "Display Local Character Name Tag");

				public static readonly string CELL_DISPLAY_HOST_TAG = Create("SETTINGS_NETWORK_CELL_DISPLAY_HOST_TAG", "Display [HOST] Tag on Host Character");

				public static readonly string HEADER_UI_SETTINGS = Create("SETTINGS_NETWORK_HEADER_UI_SETTINGS", "UI Settings");

				public static readonly string CELL_HIDE_FPS_COUNTER = Create("SETTINGS_NETWORK_CELL_HIDE_FPS_COUNTER", "Hide FPS Counter");

				public static readonly string CELL_HIDE_PING_COUNTER = Create("SETTINGS_NETWORK_CELL_HIDE_PING_COUNTER", "Hide Ping Counter");

				public static readonly string CELL_HIDE_STAT_POINT_COUNTER = Create("SETTINGS_NETWORK_CELL_HIDE_STAT_POINT_COUNTER", "Hide Stat Point Notice Panel");

				public static readonly string CELL_HIDE_SKILL_POINT_COUNTER = Create("SETTINGS_NETWORK_CELL_HIDE_SKILL_POINT_COUNTER", "Hide Skill Point Notice Panel");

				public static readonly string CELL_HIDE_QUEST_TRACKER = Create("SETTINGS_NETWORK_CELL_HIDE_QUEST_TRACKER", "Hide Quest Tracker");

				public static readonly string CELL_HIDE_MINIMAP = Create("SETTINGS_NETWORK_CELL_HIDE_MINIMAP", "Hide Minimap");

				public static readonly string CELL_HIDE_DAMAGE_VALUE_NUMBER_ICONS = Create("SETTINGS_NETWORK_CELL_HIDE_VALUE_NUMBER_ICONS", "Hide Value Number Icons");

				public static readonly string CELL_HIDE_PEER_COUNTER = Create("SETTINGS_NETWORK_CELL_HIDE_PEER_COUNTER", "Hide Player Instance Counter");

				public static readonly string CELL_HIDE_NPC_HEAD_ICONS = Create("SETTINGS_NETWORK_CELL_HIDE_NPC_HEAD_ICONS", "Hide NPC Head Icons");

				public static readonly string CELL_DISPLAY_SKILL_SLOT_COOLDOWN_COUNTERS = Create("SETTINGS_NETWORK_CELL_DISPLAY_SKILL_SLOT_COOLDOWN_COUNTERS", "Display Action Slot Cooldown Counters");

				public static readonly string HEADER_CHATBOX_SETTINGS = Create("SETTINGS_NETWORK_HEADER_CHATBOX_SETTINGS", "Chatbox Settings");

				public static readonly string CELL_DEFAULT_CHANNEL = Create("SETTINGS_NETWORK_CELL_DEFAULT_CHANNEL", "Default #Room Channel");

				public static readonly string CELL_FADE_CHAT_TEXT = Create("SETTINGS_NETWORK_CELL_FADE_CHAT_TEXT", "Fade Chat Text");

				public static readonly string CELL_FADE_GAME_FEED_TEXT = Create("SETTINGS_NETWORK_CELL_FADE_GAME_FEED_TEXT", "Fade Game Feed Text");

				internal static void Init()
				{
				}
			}

			internal static class Video
			{
				public static readonly string HEADER_ACCESSIBILITY_SETTINGS = Create("SETTINGS_VIDEO_HEADER_ACCESSIBILITY_SETTINGS", "Accesibility Settings");

				public static readonly string CELL_PROPORTIONS_TOGGLE = Create("SETTINGS_VIDEO_CELL_PROPORTIONS_TOGGLE", "Limit Player Character Proportions");

				public static readonly string CELL_JIGGLE_BONES_TOGGLE = Create("SETTINGS_VIDEO_CELL_JIGGLE_BONES_TOGGLE", "Disable Suggestive Jiggle Bones");

				public static readonly string CELL_CLEAR_UNDERCLOTHES_TOGGLE = Create("SETTINGS_VIDEO_CELL_CLEAR_UNDERCLOTHES_TOGGLE", "Enable Clear Clothing");

				public static readonly string HEADER_VIDEO_SETTINGS = Create("SETTINGS_VIDEO_HEADER_VIDEO_SETTINGS", "Video Settings");

				public static readonly string CELL_SCREEN_MODE = CreateCell("SCREEN_MODE", "Screen Mode");

				public static readonly TranslationKey[] CELL_SCREEN_MODE_OPTIONS = CreateOptions(CELL_SCREEN_MODE, new string[3] { "Windowed", "Fullscreen", "Fullscreen (Borderless)" });

				public static readonly string CELL_FULLSCREEN_TOGGLE = Create("SETTINGS_VIDEO_CELL_FULLSCREEN_TOGGLE", "Fullscreen Mode");

				public static readonly string CELL_VERTICAL_SYNC = Create("SETTINGS_VIDEO_CELL_VERTICAL_SYNC", "Vertical Sync / Lock 60 FPS");

				public static readonly string CELL_ANISOTROPIC_FILTERING = Create("SETTINGS_VIDEO_CELL_ANISOTROPIC_FILTERING", "Anisotropic Filtering");

				public static readonly string CELL_SCREEN_RESOLUTION = Create("SETTINGS_VIDEO_CELL_SCREEN_RESOLUTION", "Screen Resolution");

				public static readonly string CELL_ANTI_ALIASING = Create("SETTINGS_VIDEO_CELL_ANTI_ALIASING", "Anti Aliasing");

				public static readonly TranslationKey[] CELL_ANTI_ALIASING_OPTIONS = CreateOptions(CELL_ANTI_ALIASING, new string[4] { "Disabled", "2x Multi Sampling", "4x Multi Sampling", "8x Multi Sampling" });

				public static readonly string CELL_TEXTURE_FILTERING = Create("SETTINGS_VIDEO_CELL_TEXTURE_FILTERING", "Texture Filtering");

				public static readonly TranslationKey[] CELL_TEXTURE_FILTERING_OPTIONS = CreateOptions(CELL_TEXTURE_FILTERING, new string[2] { "Bilnear (Smooth)", "Nearest (Crunchy)" });

				public static readonly string CELL_TEXTURE_QUALITY = Create("SETTINGS_VIDEO_CELL_TEXTURE_QUALITY", "Texture Quality");

				public static readonly TranslationKey[] CELL_TEXTURE_QUALITY_OPTIONS = CreateOptions(CELL_TEXTURE_QUALITY, new string[4] { "High", "Medium", "Low", "Very Low" });

				public static readonly string HEADER_CAMERA_SETTINGS = Create("SETTINGS_VIDEO_HEADER_CAMERA_SETTINGS", "Camera Display Settings");

				public static readonly string CELL_FIELD_OF_VIEW = Create("SETTINGS_VIDEO_CELL_FIELD_OF_VIEW", "Field Of View");

				public static readonly string CELL_CAMERA_SMOOTHING = Create("SETTINGS_VIDEO_CELL_CAMERA_SMOOTHING", "Camera Smoothing");

				public static readonly string CELL_CAMERA_HORIZ = Create("SETTINGS_VIDEO_CELL_CAMERA_HORIZ", "Camera X Position");

				public static readonly string CELL_CAMERA_VERT = Create("SETTINGS_VIDEO_CELL_CAMERA_VERT", "Camera Y Position");

				public static readonly string CELL_CAMERA_RENDER_DISTANCE = Create("SETTINGS_VIDEO_CELL_CAMERA_RENDER_DISTANCE", "Render Distance");

				public static readonly TranslationKey[] CELL_CAMERA_RENDER_DISTANCE_OPTIONS = CreateOptions(CELL_CAMERA_RENDER_DISTANCE, new string[4] { "Very Near", "Near", "Far", "Very Far" });

				public static readonly string HEADER_CURSOR_SETTINGS = Create("SETTINGS_VIDEO_HEADER_CURSOR_SETTINGS", "Cursor Settings");

				public static readonly string CELL_CURSOR_GRAPHIC = Create("SETTINGS_VIDEO_CELL_CURSOR_GRAPHIC", "Cursor Graphic");

				public static readonly string CELL_HARDWARE_CURSOR = Create("SETTINGS_VIDEO_CELL_HARDWARE_CURSOR", "Hardware Cursor");

				public static readonly string HEADER_POST_PROCESSING = Create("SETTINGS_VIDEO_HEADER_POST_PROCESSING", "Post Processing");

				public static readonly string CELL_CAMERA_BITCRUSH_SHADER = Create("SETTINGS_VIDEO_CELL_CAMERA_BITCRUSH_SHADER", "Enable Bitcrush Shader");

				public static readonly string CELL_CAMERA_WATER_EFFECT = Create("SETTINGS_VIDEO_CELL_CAMERA_WATER_EFFECT", "Enable Underwater Distortion Shader");

				public static readonly string CELL_CAMERA_SHAKE = Create("SETTINGS_VIDEO_CELL_CAMERA_SHAKE", "Enable Screen Shake");

				public static readonly string CELL_WEAPON_GLOW = Create("SETTINGS_VIDEO_CELL_WEAPON_GLOW", "Disable Weapon Glow Effect");

				public static readonly string CELL_DISABLE_GIB_EFFECT = Create("SETTINGS_VIDEO_CELL_DISABLE_GIB_EFFECT", "Disable Gib Effect");

				private static string CreateCell(string key, string defaultString)
				{
					return Create("SETTINGS_VIDEO_CELL_" + key, defaultString);
				}

				private static TranslationKey[] CreateOptions(string parentKey, string[] defaultStrings)
				{
					return defaultStrings.Select((string value, int index) => Create($"{parentKey}_OPTION_{index + 1}", value)).ToArray();
				}

				internal static void Init()
				{
				}
			}

			public static readonly TranslationKey BUTTON_VIDEO = Create("SETTINGS_TAB_BUTTON_VIDEO", "Display");

			public static readonly TranslationKey BUTTON_AUDIO = Create("SETTINGS_TAB_BUTTON_AUDIO", "Audio");

			public static readonly TranslationKey BUTTON_INPUT = Create("SETTINGS_TAB_BUTTON_INPUT", "Input");

			public static readonly TranslationKey BUTTON_NETWORK = Create("SETTINGS_TAB_BUTTON_NETWORK", "Interface");

			public static readonly TranslationKey BUTTON_MODS = Create("SETTINGS_TAB_BUTTON_MODS", "Mods");

			public static readonly TranslationKey BUTTON_RESET_TO_DEFAULTS = Create("SETTINGS_BUTTON_RESET_TO_DEFAULTS", "Reset to Defaults");

			public static readonly TranslationKey BUTTON_RESET = Create("SETTINGS_BUTTON_RESET", "Reset");

			public static readonly TranslationKey BUTTON_CANCEL = Create("SETTINGS_BUTTON_CANCEL", "Cancel");

			public static readonly TranslationKey BUTTON_APPLY = Create("SETTINGS_BUTTON_APPLY", "Apply");

			internal static void Init()
			{
				Video.Init();
				Audio.Init();
				Input.init();
				Network.Init();
				Mod.Init();
			}
		}

		internal static class Shop
		{
			public static readonly string BUTTON_REROLL = Create("GAMBLING_SHOP_BUTTON_REROLL", "Re-roll Stock");

			public static readonly string BUTTON_SELL_SINGLE = Create("SHOP_BUTTON_SELL_SINGLE", "Sell");

			public static readonly string BUTTON_SELL_QUANTITY = Create("SHOP_BUTTON_SELL_QUANTITY", "Sell Quantity");

			public static readonly string BUTTON_CANCEL_SELL = Create("SHOP_BUTTON_CANCEL_SELL", "Cancel");

			public static readonly string BUTTON_PURCHASE_SINGLE = Create("SHOP_BUTTON_PURCHASE_SINGLE", "Purchase");

			public static readonly string BUTTON_PURCHASE_QUANTITY = Create("SHOP_BUTTON_PURCHASE_QUANTITY", "Purchase Quantity");

			public static readonly string BUTTON_CANCEL_PURCHASE = Create("SHOP_BUTTON_CANCEL_PURCHASE", "Cancel");

			public static readonly string ERROR_VENDOR_DOESNT_BUY = Create("ERROR_VENDOR_DOESNT_BUY", "This vendor doesn't buy items.");

			public static readonly string ERROR_VENDOR_DOESNT_WANT = Create("ERROR_VENDOR_DOESNT_WANT", "This vendor doesn't want this item.");

			public static readonly string ERROR_NO_VALUE = Create("ERROR_NO_VALUE", "No Value");

			internal static void Init()
			{
			}
		}

		internal static class SkillMenu
		{
			public static readonly TranslationKey RANK_SOULBOUND = Create("SKILL_RANK_SOULBOUND", "Soulbound Skill");

			public static readonly TranslationKey RANK = Create("FORMAT_SKILL_RANK", "[Rank {0} / {1}]");

			public static readonly TranslationKey SKILL_POINT_COST_FORMAT = Create("SKILL_POINT_COST_FORMAT", "Point Cost: {0}");

			public static readonly TranslationKey TOOLTIP_DAMAGE_TYPE = Create("FORMAT_SKILL_TOOLTIP_DAMAGE_TYPE", "{0} Skill");

			public static readonly TranslationKey TOOLTIP_ITEM_COST = Create("FORMAT_SKILL_TOOLTIP_ITEM_COST", "{0} {1}");

			public static readonly TranslationKey TOOLTIP_MANA_COST = Create("FORMAT_SKILL_TOOLTIP_MANA_COST", "{0} Mana");

			public static readonly TranslationKey TOOLTIP_HEALTH_COST = Create("FORMAT_SKILL_TOOLTIP_HEALTH_COST", "{0} Health");

			public static readonly TranslationKey TOOLTIP_STAMINA_COST = Create("FORMAT_SKILL_TOOLTIP_STAMINA_COST", "{0} Stamina");

			public static readonly TranslationKey TOOLTIP_CAST_TIME_INSTANT = Create("SKILL_TOOLTIP_CAST_TIME_INSTANT", "Instant Cast");

			public static readonly TranslationKey TOOLTIP_CAST_TIME = Create("FORMAT_SKILL_TOOLTIP_CAST_TIME", "{0} sec Cast");

			public static readonly TranslationKey TOOLTIP_COOLDOWN = Create("FORMAT_SKILL_TOOLTIP_COOLDOWN", "{0} sec Cooldown");

			public static readonly TranslationKey TOOLTIP_PASSIVE = Create("SKILL_TOOLTIP_PASSIVE", "Passive Skill");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_MANACOST = Create("FORMAT_SKILL_TOOLTIP_DESCRIPTOR_MANACOST", "<color=yellow>Costs {0} Mana.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_HEALTHCOST = Create("FORMAT_SKILL_TOOLTIP_DESCRIPTOR_HEALTHCOST", "<color=yellow>Costs {0} Health.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_STAMINACOST = Create("FORMAT_SKILL_TOOLTIP_DESCRIPTOR_STAMINACOST", "<color=yellow>Costs {0} Stamina.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_COOLDOWN = Create("FORMAT_SKILL_TOOLTIP_DESCRIPTOR_COOLDOWN", "<color=yellow>{0} sec cooldown.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_CAST_TIME = Create("FORMAT_SKILL_TOOLTIP_DESCRIPTOR_CAST_TIME", "<color=yellow>{0} sec cast time.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_CAST_TIME_INSTANT = Create("SKILL_TOOLTIP_DESCRIPTOR_CAST_TIME_INSTANT", "<color=yellow>instant cast time.</color>");

			public static readonly TranslationKey TOOLTIP_REQUIEMENT_FORMAT = Create("FORMAT_SKILL_TOOLTIP_REQUIREMENT", " <color=yellow>Requirement a {0} weapon.</color>");

			public static readonly TranslationKey TOOLTIP_REQUIRE_SHIELD = Create("SKILL_TOOLTIP_REQUIREMENT_SHIELD", " <color=yellow>Requires a shield.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_CONDITION_CANCEL_ON_HIT = Create("SKILL_TOOLTIP_DESCRIPTOR_CONDITION_CANCEL_ON_HIT", " <color=yellow>Cancels if hit.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_CONDITION_IS_STACKABLE = Create("SKILL_TOOLTIO_DESCRIPTOR_CONDITION_IS_STACKABLE", " <color=yellow>Stackable.</color>");

			public static readonly TranslationKey TOOLTIP_DESCRIPTOR_CONDITION_CHANCE = Create("SKILL_TOOLTIP_DESCRIPTOR_CONDITION_CHANCE", "\n\n<color=cyan>{0} - ({1}) ({2}% Chance)</color>");

			internal static void Init()
			{
			}
		}

		public static class SteamLobby
		{
			public static readonly TranslationKey LOBBY_HOST_HEADER = Create("LOBBY_HOST_HEADER", "Host Lobby");

			public static readonly TranslationKey LOBBY_HOST_HEADER_STEAM_UNAVAILABLE = Create("LOBBY_HOST_HEADER_STEAM_UNAVAILABLE", "Steam is not Initialized.");

			public static readonly TranslationKey TAG_LOBBY_NAME = Create("TAG_LOBBY_NAME", "Lobby Name");

			public static readonly TranslationKey TAG_LOBBY_PASSWORD = Create("TAG_LOBBY_PASSWORD", "Lobby Password");

			public static readonly TranslationKey TAG_MOTD = Create("TAG_MOTD", "Message Of The Day");

			public static readonly TranslationKey TAG_LOBBY_TYPE = Create("TAG_LOBBY_TYPE", "Lobby Type");

			public static readonly TranslationKey TAG_MAX_PLAYERS = Create("TAG_MAX_PLAYERS", "Max Players");

			public static readonly TranslationKey TAG_STREAM_MODE = Create("TAG_STREAM_MODE", "Stream Mode (Disable Chat)");

			public static readonly TranslationKey TAG_LOBBY_REALM = Create("TAG_LOBBY_REALM", "Lobby Realm");

			public static readonly TranslationKey BUTTON_RETURN = Create("BUTTON_RETURN", "Return");

			public static readonly TranslationKey BUTTON_HOST_LOBBY = Create("BUTTON_HOST_LOBBY", "Host Lobby");

			public static readonly TranslationKey PLACEHOLDER_LOBBY_NAME = Create("PLACEHOLDER_LOBBY_NAME", "Enter text...");

			public static readonly TranslationKey PLACEHOLDER_LOBBY_PASSWORD = Create("PLACEHOLDER_LOBBY_PASSWORD", "Enter Password...");

			public static readonly TranslationKey PLACEHOLDER_MOTD = Create("PLACEHOLDER_MOTD", "Enter Message...");

			public static readonly TranslationKey LOBBY_TYPE_DESCRIPTION_PUBLIC = Create("LOBBY_TYPE_DESCRIPTION_PUBLIC", "Public lobbies will be advertised for anyone to join.");

			public static readonly TranslationKey LOBBY_TYPE_DESCRIPTION_FRIENDS = Create("LOBBY_TYPE_DESCRIPTION_FRIENDS", "Friend lobbies are joinable by invite or from the Steam friends list.");

			public static readonly TranslationKey LOBBY_TYPE_DESCRIPTION_PRIVATE = Create("LOBBY_TYPE_DESCRIPTION_PRIVATE", "Private lobbies are by invitation from Host only.");

			public static readonly TranslationKey CLEARED_HIDDEN_LOBBY_CACHE = Create("CLEARED_HIDDEN_LOBBY_CACHE", "Cleared hidden lobby cache...");

			public static readonly TranslationKey HIDDEN_LOBBY_COUNT_FORMAT = Create("HIDDEN_LOBBY_COUNT_FORMAT", "Hidden Lobbies: {0}");

			public static readonly TranslationKey STEAM_NOT_INITIALIZED = Create("STEAM_NOT_INITIALIZED", "Steam is not initialized.");

			public static readonly TranslationKey SEARCHING_FOR_LOBBIES = Create("SEARCHING_FOR_LOBBIES", "Searching...");

			public static readonly TranslationKey NO_LOBBIES_FOUND = Create("NO_LOBBIES_FOUND", "No lobbies found.");

			public static readonly TranslationKey LOBBY_FOUNDED_COUNT_FORMAT_1 = Create("LOBBY_FOUNDED_COUNT_FORMAT_1", "{0} lobby found.");

			public static readonly TranslationKey LOBBY_FOUNDED_COUNT_FORMAT_PLURAL = Create("LOBBY_FOUNDED_COUNT_FORMAT_PLURAL", "{0} lobbies found.");

			public static readonly TranslationKey LOBBY_FULL = Create("LOBBY_FULL", "Lobby Full");

			public static readonly TranslationKey LOBBY_PASSWORD_LOBBY = Create("LOBBY_PASSWORD_LOBBY", "Password Lobby");

			public static readonly TranslationKey LOBBY_DIFFERENT_VERSION = Create("LOBBY_DIFFERENT_VERSION", "Different Version");

			public static readonly TranslationKey LOBBY_INVALID = Create("LOBBY_INVALID", "Invalid Lobby");

			public static readonly TranslationKey LOBBY_JOIN_FRIEND = Create("LOBBY_JOIN_FRIEND", "Join Lobby (Friend)");

			public static readonly TranslationKey LOBBY_PLAYER_COUNT = Create("LOBBY_PLAYER_COUNT", "Players: ");

			public static readonly TranslationKey UNTITLED_LOBBY = Create("UNTITLED_LOBBY", "Untitled Lobby");

			public static readonly TranslationKey LOBBY_PING_FORMAT = Create("LOBBY_PING_FORMAT", "Ping: {0}ms");

			public static readonly TranslationKey MODDED_LOBBY = Create("MODDED_LOBBY", "Modded Lobby");

			public static readonly TranslationKey JOIN_LOBBY = Create("JOIN_LOBBY", "Join Lobby");

			public static readonly TranslationKey CLEAR_HIDDEN_LOBBY_BUTTON = Create("CLEAR_HIDDEN_LOBBY_BUTTON", "Clear Hidden Lobby Cache");

			public static readonly TranslationKey LOBBY_LIST_FILTER_BASE = Create("LOBBY_LIST_FILTER", "Lobby List Filter");

			public static readonly TranslationKey[] LOBBY_LIST_FILTER = CreateOptions(LOBBY_LIST_FILTER_BASE, new string[3] { "Nearby", "Far", "Worldwide" });

			public static readonly TranslationKey LOBBY_TYPE_BASE = Create("LOBBY_TYPE", "Lobby Type");

			public static readonly TranslationKey[] LOBBY_TYPES = CreateOptions(LOBBY_TYPE_BASE, new string[3] { "Public", "Friends", "Private" });

			public static readonly TranslationKey PLACEHOLDER_LOBBY_NAME_SEARCH = Create("PLACEHOLDER_LOBBY_NAME_SEARCH", "Search Lobby Name...");

			internal static void Init()
			{
			}

			private static TranslationKey Create(string key, string defaultValue = "")
			{
				return I18nKeys.Create("STEAM_LOBBY_" + key, defaultValue);
			}
		}

		internal static class Storage
		{
			public static readonly string HEADER = Create("STORAGE_HEADER_ITEM_STORAGE", "Item Storage");

			internal static void Init()
			{
			}
		}

		internal static class TabMenu
		{
			public static readonly TranslationKey PAGER_FORMAT = Create("PAGER_FORMAT", "Page ( {0} / {1} )");

			public static readonly TranslationKey PAGER_1_PAGE = Create("PAGER_1_PAGE", "Page ( 1 / 1 )");

			public static readonly TranslationKey POINTS_AVAILABLE = Create("TAB_MENU_POINTS_AVAILABLE", "Points Available");

			public static readonly TranslationKey CELL_STATS_HEADER = Create("TAB_MENU_CELL_STATS_HEADER", "Stats");

			public static readonly TranslationKey CELL_STATS_ATTRIBUTE_POINT_COUNTER = Create("TAB_MENU_CELL_STATS_ATTRIBUTE_POINT_COUNTER", "Points");

			public static readonly TranslationKey CELL_STATS_BUTTON_APPLY_ATTRIBUTE_POINTS = Create("TAB_MENU_CELL_STATS_BUTTON_APPLY_ATTRIBUTE_POINTS", "Apply");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_NICK_NAME = Create("TAB_MENU_CELL_STATS_INFO_CELL_NICK_NAME", "Nickname");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_RACE_NAME = Create("TAB_MENU_CELL_STATS_INFO_CELL_RACE_NAME", "Race");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_CLASS_NAME = Create("TAB_MENU_CELL_STATS_INFO_CELL_CLASS_NAME", "Class");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_LEVEL_COUNTER = Create("TAB_MENU_CELL_STATS_INFO_CELL_LEVEL_COUNTER", "Level");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_EXPERIENCE = Create("TAB_MENU_CELL_STATS_INFO_CELL_EXPERIENCE", "Experience");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAX_HEALTH = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAX_HEALTH", "Health");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAX_MANA = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAX_MANA", "Mana");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAX_STAMINA = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAX_STAMINA", "Stamina");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_ATTACK = Create("TAB_MENU_CELL_STATS_INFO_CELL_ATTACK", "Attack Power");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_RANGED_POWER = Create("TAB_MENU_CELL_STATS_INFO_CELL_RANGED_POWER", "Dex Power");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_PHYS_CRITICAL = Create("TAB_MENU_CELL_STATS_INFO_CELL_PHYS_CRITICAL", "Phys. Crit %");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAGIC_POW = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAGIC_POW", "Mgk. Power");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAGIC_CRIT = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAGIC_CRIT", "Mgk. Crit %");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_DEFENSE = Create("TAB_MENU_CELL_STATS_INFO_CELL_DEFENSE", "Defense");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MAGIC_DEF = Create("TAB_MENU_CELL_STATS_INFO_CELL_MAGIC_DEF", "Mgk. Defense");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_EVASION = Create("TAB_MENU_CELL_STATS_INFO_CELL_EVASION", "Evasion %");

			public static readonly TranslationKey CELL_STATS_INFO_CELL_MOVE_SPD = Create("TAB_MENU_CELL_STATS_INFO_CELL_MOVE_SPD", "Mov Spd %");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_BEGIN = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_BEGIN", "<b>Base Stat:</b> <i>");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_END_CRIT = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_END_CRIT", "%</i> (Critical %)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_END_EVASION = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_END_EVASION", "%</i> (Evasion %)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_ATTACK_POW = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_ATTACK_POW", "{0}</i> (Attack Power)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_MP = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_MP", "{0}</i> (Max Mana)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_HP = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_HP", "{0}</i> (Max Health)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_RANGE_POW = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_RANGE_POW", "{0}</i> (Dex Power)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_END_MAGIC_CRIT = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_END_MAGIC_CRIT", "%</i> (Magic Critical %)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAGIC_DEF = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAGIC_DEF", "{0}</i> (Magic Defense)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_DEFENSE = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_DEFENSE", "{0}</i> (Defense)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAGIC_POW = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAGIC_POW", "{0}</i> (Magic Power)");

			public static readonly TranslationKey CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_STAM = Create("TAB_MENU_CELL_STATS_TOOLTIP_BASE_STAT_FORMAT_MAX_STAM", "{0}</i> (Max Stamina)");

			public static readonly TranslationKey CELL_SKILLS_HEADER = Create("TAB_MENU_CELL_SKILLS_HEADER", "Skills");

			public static readonly TranslationKey CELL_SKILLS_SKILL_POINT_COUNTER = Create("TAB_MENU_CELL_SKILLS_SKILL_POINT_COUNTER", "Skill Points");

			public static readonly TranslationKey CELL_SKILLS_CLASS_TAB_TOOLTIP_NOVICE = Create("TAB_MENU_CELL_SKILLS_CLASS_TAB_TOOLTIP_NOVICE", "General Skills");

			public static readonly TranslationKey CELL_SKILLS_CLASS_TAB_TOOLTIP = Create("TAB_MENU_CELL_SKILLS_CLASS_TAB_TOOLTIP", "{0} Skills");

			public static readonly TranslationKey CELL_SKILLS_CLASS_HEADER_NOVICE = Create("TAB_MENU_CELL_SKILLS_CLASS_HEADER_NOVICE", "General Skillbook");

			public static readonly TranslationKey CELL_SKILLS_CLASS_HEADER_FORMAT = Create("TAB_MENU_CELL_SKILLS_CLASS_HEADER", "{0} Skillbook");

			public static readonly TranslationKey CELL_OPTIONS_HEADER = Create("TAB_MENU_CELL_OPTIONS_HEADER", "Options");

			public static readonly TranslationKey CELL_OPTIONS_BUTTON_SETTINGS = Create("TAB_MENU_CELL_OPTIONS_BUTTON_SETTINS", "Settings");

			public static readonly TranslationKey CELL_OPTIONS_BUTTON_SAVE_FILE = Create("TAB_MENU_CELL_OPTIONS_BUTTON_SAVE_FILE", "Save File");

			public static readonly TranslationKey CELL_OPTIONS_BUTTON_INVITE_TO_LOBBY = Create("TAB_MENU_CELL_OPTIONS_BUTTON_INVITE_TO_LOBBY", "Invite to Lobby");

			public static readonly TranslationKey CELL_OPTIONS_BUTTON_HOST_CONSOLE = Create("TAB_MENU_CELL_OPTIONS_BUTTON_HOST_CONSOLE", "Host Console");

			public static readonly TranslationKey CELL_OPTIONS_BUTTON_SAVE_AND_QUIT = Create("TAB_MENU_CELL_OPTIONS_BUTTON_SAVE_AND_QUIT", "Save & Quit");

			public static readonly TranslationKey CELL_OPTIONS_CONFIRM_QUIT_HEADER = Create("TAB_MENU_CELL_OPTIONS_CONFIRM_QUIT_HEADER", "Save and Quit Game?");

			public static readonly TranslationKey CELL_OPTIONS_CONFIRM_QUIT_CONFIRM = Create("TAB_MENU_CELL_OPTIONS_CONFIRM_QUIT_CONFIRM", "Confirm");

			public static readonly TranslationKey CELL_OPTIONS_CONFIRM_QUIT_CANCEL = Create("TAB_MENU_CELL_OPTIONS_CONFIRM_QUIT_CANCEL", "Cancel");

			public static readonly TranslationKey CELL_ITEMS_HEADER = Create("TAB_MENU_CELL_ITEMS_HEADER", "Items");

			public static readonly TranslationKey CELL_ITEMS_EQUIP_TAB_HEADER_EQUIPMENT = Create("TAB_MENU_CELL_ITEMS_EQUIP_TAB_HEADER_EQUIPMENT", "Equipment");

			public static readonly TranslationKey CELL_ITEMS_EQUIP_TAB_HEADER_VANITY = Create("TAB_MENU_CELL_ITEMS_EQUIP_TAB_HEADER_VANITY", "Vanity");

			public static readonly TranslationKey CELL_ITEMS_EQUIP_TAB_HEADER_STAT = Create("TAB_MENU_CELL_ITEMS_EQUIP_TAB_HEADER_STAT", "Stats");

			public static readonly TranslationKey CELL_ITEMS_INVENTORY_TYPE_EQUIPMENT = CreateCellItems("INVENTORY_TYPE_EQUIPMENT", "Equipment");

			public static readonly TranslationKey CELL_ITEMS_INVENTORY_TYPE_CONSUMABLE = CreateCellItems("INVENTORY_TYPE_CONSUMABLE", "Consumables");

			public static readonly TranslationKey CELL_ITEMS_INVENTORY_TYPE_TRADE_ITEM = CreateCellItems("INVENTORY_TYPE_TRADE_TYPE", "Trade Items");

			public static readonly TranslationKey CELL_ITEMS_INVENTORY_SORT_ITEMS = CreateCellItems("INVENTORY_SORT_ITEMS", "Sort Items");

			public static readonly TranslationKey DROP_ITEM_ABANDON_QUEST_FORMAT = Create("TAB_MENU_DROP_ITEM_ABANDON_QUEST_FORMAT", "Abandoned Quest: {0}");

			public static readonly IDictionary<string, TranslationKey> CELL_ITEMS_PROMPT_BUTTONS = new string[7] { "equip", "transmogrify", "remove", "use", "split", "drop", "cancel" }.ToDictionary((string x) => x, (string x) => CreateCellItems("PROMPT_BUTTON_" + x.ToUpper(), char.ToUpper(x[0]) + x.Substring(1)));

			public static readonly TranslationKey CELL_QUESTS_HEADER = Create("TAB_MENU_CELL_QUESTS_HEADER", "Quests");

			public static readonly TranslationKey CELL_QUESTS_BUTTON_ABANDON = Create("TAB_MENU_CELL_QUESTS_BUTTON_ABANDON", "Abandon Quest");

			public static readonly TranslationKey CELL_WHO_HEADER = Create("TAB_MENU_CELL_WHO_HEADER", "Who");

			public static readonly TranslationKey CELL_WHO_BUTTON_INVITE_TO_PARTY = Create("TAB_MENU_CELL_WHO_BUTTON_INVITE_TO_PARTY", "Invite to Party");

			public static readonly TranslationKey CELL_WHO_BUTTON_LEAVE_PARTY = Create("TAB_MENU_CELL_WHO_BUTTON_LEAVE_PARTY", "Leave Party");

			public static readonly TranslationKey CELL_WHO_BUTTON_MUTE_PEER = Create("TAB_MENU_CELL_WHO_BUTTON_MUTE_PEER", "Mute / Unmute");

			public static readonly TranslationKey CELL_WHO_BUTTON_REFRESH_LIST = Create("TAB_MENU_CELL_WHO_BUTTON_REFRESH_LIST", "Refresh");

			internal static void Init()
			{
			}

			private static TranslationKey CreateCellItems(string key, string value = "")
			{
				return Create("TAB_MENU_CELL_ITEMS_" + key, value);
			}
		}

		internal static readonly Dictionary<string, string> TR_KEYS = new Dictionary<string, string>();

		public static void Init()
		{
			CharacterCreation.Init();
			CharacterSelect.Init();
			ChatBehaviour.Init();
			ChatMessage.Init();
			DeathPrompt.Init();
			Enchanter.Init();
			Enums.Init();
			Equipment.Init();
			ErrorMessages.Init();
			Feedback.Init();
			Item.Init();
			Lore.Init();
			MainMenu.Init();
			Quest.Init();
			ScriptableStatusCondition.Init();
			Settings.Init();
			SkillMenu.Init();
			SteamLobby.Init();
			TabMenu.Init();
			Shop.Init();
			IntroAndTags.Init();
		}

		private static TranslationKey Create(string key, string defaultString = "")
		{
			if (string.IsNullOrEmpty(key))
			{
				throw new ArgumentNullException("key is empty");
			}
			if (string.IsNullOrEmpty(defaultString))
			{
				defaultString = key;
			}
			if (TR_KEYS.ContainsKey(key))
			{
				throw new ArgumentException("key `" + key + "` Already Exists!");
			}
			TR_KEYS[key] = defaultString;
			return new TranslationKey(key);
		}

		private static TranslationKey[] CreateOptions(string key, string[] defaultStrings)
		{
			return (from i in Enumerable.Range(0, defaultStrings.Length)
				select Create(new TranslationKey(key).Option[i], defaultStrings[i])).ToArray();
		}

		public static string GetDefaulted(string key)
		{
			if (TR_KEYS.TryGetValue(key, out var value))
			{
				return value;
			}
			return key;
		}
	}
	public static class TSVUtil
	{
		public static string makeTsv(List<List<string>> rows, string delimeter = "\t")
		{
			List<string> list = new List<string>();
			List<string> list2 = null;
			for (int i = 0; i < rows.Count; i++)
			{
				List<string> list3 = rows[i];
				for (int j = 0; j < list3.Count; j++)
				{
					list3[j] = list3[j].Replace("\n", "\\n").Replace("\t", "\\t");
				}
				string text = string.Join(delimeter, list3);
				if (list2 == null)
				{
					list2 = list3;
				}
				else if (list2.Count != list3.Count)
				{
					Localyssation.logger.LogError((object)$"Row {i} has {list3.Count} columns, which does not match header column count (${list2.Count})");
					Localyssation.logger.LogError((object)("Row content: " + text));
					return string.Join(delimeter, list2);
				}
				list.Add(text);
			}
			return string.Join("\n", list);
		}

		public static List<List<string>> parseTsv(string tsv, string delimeter = "\t")
		{
			List<List<string>> list = new List<List<string>>();
			List<string> list2 = null;
			string[] array = tsv.Split(new string[1] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
			for (int i = 0; i < array.Length; i++)
			{
				string text = array[i];
				if (text.EndsWith("\r"))
				{
					text = text.Substring(0, text.Length - 2);
				}
				List<string> list3 = new List<string>(Split(text, delimeter));
				for (int j = 0; j < list3.Count; j++)
				{
					list3[j] = list3[j].Replace("\\n", "\n").Replace("\\t", "\t");
				}
				if (list2 == null)
				{
					list2 = list3;
				}
				else if (list2.Count != list3.Count)
				{
					Localyssation.logger.LogError((object)$"Row {i} has {list3.Count} columns, which does not match header column count (${list2.Count})");
					Localyssation.logger.LogError((object)("Row content: " + text));
					return new List<List<string>> { list2 };
				}
				list.Add(list3);
			}
			return list;
		}

		public static List<Dictionary<string, string>> parseTsvWithHeaders(string tsv, string delimeter = "\t")
		{
			List<List<string>> list = parseTsv(tsv, delimeter);
			List<Dictionary<string, string>> list2 = new List<Dictionary<string, string>>();
			if (list.Count <= 0)
			{
				return list2;
			}
			List<string> headerRow = list[0];
			for (int i = 1; i < list.Count; i++)
			{
				Dictionary<string, string> item = list[i].Select((string x, int y) => new KeyValuePair<string, string>(headerRow[y], x)).ToDictionary((KeyValuePair<string, string> x) => x.Key, (KeyValuePair<string, string> x) => x.Value);
				list2.Add(item);
			}
			return list2;
		}

		public static List<string> Split(string str, string delimeter)
		{
			List<string> list = new List<string>();
			bool flag = delimeter.StartsWith("\\");
			int num = 0;
			int num2 = 0;
			while (true)
			{
				int num3 = str.IndexOf(delimeter, num2);
				if (num3 == -1)
				{
					list.Add(str.Substring(num, str.Length - num));
					break;
				}
				num2 = num3 + delimeter.Length;
				if (!flag || (num3 > 0 && str[num3 - 1] != '\\'))
				{
					list.Add(str.Substring(num, num3 - num));
					num = num2;
				}
				if (num2 >= str.Length)
				{
					list.Add(str.Substring(num, str.Length - num));
					break;
				}
			}
			return list;
		}
	}
}
namespace Localyssation.Util
{
	public static class ConfigDefinitions
	{
		public static readonly ConfigDefinition Language = new ConfigDefinition("General", "Language");

		public static readonly ConfigDefinition TraslatorMode = new ConfigDefinition("Translators", "Translator Mode");

		public static readonly ConfigDefinition CreateDefaultLanguageFiles = new ConfigDefinition("Translators", "Create Default Language Files On Load");

		public static readonly ConfigDefinition ShowTranslationKey = new ConfigDefinition("Translators", "Show Translation Key");

		public static readonly ConfigDefinition ExportExtra = new ConfigDefinition("Translators", "Export Extra Info");

		public static readonly ConfigDefinition ReloadLanguageKeybind = new ConfigDefinition("Translators", "Reload Language Keybind");

		public static readonly ConfigDefinition ReloadFontBundlesKeybind = new ConfigDefinition("Translators", "Reload Font Bundles Keybind");

		public static readonly ConfigDefinition SwitchTranslationKeybind = new ConfigDefinition("Translators", "Switch Translation Keybind");

		public static readonly ConfigDefinition LogVanillaFonts = new ConfigDefinition("Translators", "Log Vanilla Fonts");
	}
	public static class LocalyssationConfig
	{
		private static ConfigFile config;

		private static bool showTranslationKeyEnabled;

		internal static ConfigEntry<string> configLanguage { get; private set; }

		public static string Language => configLanguage.Value;

		internal static ConfigEntry<bool> configTranslatorMode { get; private set; }

		public static bool TranslatorMode => configTranslatorMode.Value;

		internal static ConfigEntry<bool> configCreateDefaultLanguageFiles { get; private set; }

		public static bool CreateDefaultLanguageFiles => configCreateDefaultLanguageFiles.Value;

		internal static ConfigEntry<KeyCode> configShowTranslationKey { get; private set; }

		public static KeyCode ShowTranslationKey => configShowTranslationKey.Value;

		public static bool ShowTranslationKeyEnabled
		{
			get
			{
				return showTranslationKeyEnabled;
			}
			set
			{
				showTranslationKeyEnabled = value;
			}
		}

		internal static ConfigEntry<bool> configExportExtra { get; private set; }

		public static bool ExportExtra => configExportExtra.Value;

		internal static ConfigEntry<KeyCode> configReloadLanguageKeybind { get; private set; }

		public static KeyCode ReloadLanguageKeybind => configReloadLanguageKeybind.Value;

		internal static ConfigEntry<KeyCode> configReloadFontBundlesKeybind { get; private set; }

		public static KeyCode ReloadFontBundlesKeybind => configReloadFontBundlesKeybind.Value;

		internal static ConfigEntry<KeyCode> configSwitchTranslationKeybind { get; private set; }

		public static KeyCode SwitchTranslationKeybind => configSwitchTranslationKeybind.Value;

		internal static ConfigEntry<bool> configLogVanillaFonts { get; private set; }

		public static bool LogVanillaFonts => configLogVanillaFonts.Value;

		public static void Init(ConfigFile _conf