-- read namespace from global env
local AddonName, _ = ...
local _G = _G
local Grichelde = _G.Grichelde

local L = LibStub('AceLocale-3.0'):NewLocale(AddonName, 'deDE')
if not L then return end

local cYellow    = Grichelde.F.cYellow
local cGray      = Grichelde.F.cGray
local cHyperlink = Grichelde.F.cHyperlink
local cPrefix    = Grichelde.F.cPrefix

-- system messages
L.AddonName = "Grichelde"
L.AddonNamePlusVersion = "%s v%s"
L.AddonLoaded = "%s unterst\195\188tzt Euch jetzt bei euren Sprachschwierigkeiten."
L.AddonUnloaded = "%s erwartet geduldig Euch weiter unterst\195\188tzen zu d\195\188rfen."
L.Upgrade_ToVersion = "Hebe Databank auf Version %s an."
L.Upgrade_Successful = "Upgrade erfolgreich."
L.Upgrade_Error = "Upgrade fehlgeschlagen!"
L.Downgrade_Detected = "Downgrade erkannt, %s kann sich m\195\182glichweise fehlerhaft verhalten!"

-- debug
L.Debug_Options = "Optionen"
L.Debug_Mappings = "Ersetzungen"
L.Debug_Mappings_Hint = "Der Inhalt der Textbox dient nur zur Fehlersuche und kann herauskopiert werden. Es werden keine Werte aus dieser Textbox eingelesen oder anderweitig verwertet."
L.Debug_Mappings_Found = "%d Ersetzungen gefunden"
L.Debug_Profile = "Profil"

-- errors
L.Error_InvalidCommand = "Ung\195\188ltiger Befehl"
L.Error_InvalidChannel = "Ung\195\188ltiger Kanal"
L.Error_InvalidWhisperTarget = "Ung\195\188ltiger Fl\195\188sterziel"
L.Error_UnsupportedChannel = "Nicht unterst\195\188tzter Kanal"

-- profiles
L.Profiles_Available = "Verf\195\188gbare Profile:"
L.Profiles_Created = "Neues Profil %s angelegt."
L.Profiles_Loaded = "Profil %s geladen."
L.Profiles_Activated = "Profil %s aktiviert."
L.Profiles_Deactivated = "Profil %s deaktiviert."
L.Profiles_Refreshed = "Profil %s aktualisiert."
L.Profiles_Deleted = "Profil %s gel\195\182scht."
L.Profiles_Copied = "Einstellungen von Profil %s \195\188bernommen."
L.Profiles_Reset = "Profil %s zur\195\188ckgesetzt."
L.Profiles_Invalid = "Ung\195\188ltiges Profil %s!"
L.Profiles_DeleteError = "Das aktive Profil kann nicht gel\195\182scht werden!"
L.Profiles_AlreadyExistsError = "Das Profil %s existiert bereits!"

-- minimap
L.Minimap_Tooltip_Enabled = "%s"
L.Minimap_Tooltip_Disabled = "%s " .. cGray("(inaktiv)")
L.Minimap_Tooltip_Options_Left = "Linksklick"
L.Minimap_Tooltip_Options_Right = "\195\150ffnet oder schlie\195\159t die Einstellungen."
L.Minimap_Tooltip_Mappings_Left = "Rechtsklick"
L.Minimap_Tooltip_Mappings_Right = "Aktiviert oder Deaktivert jegliche Ersetzungen."

-- options
L.Options_Title = "%s Einstellungen"
L.Options_Enabled_Name = "Aktiv"
L.Options_Enabled_Desc = "Aktiviert %s"
L.Options_Minimap_Button_Name = "Zeige Minimap-Knopf"
L.Options_Minimap_Button_Desc = "Zeigt oder versteckt den Knopf an der Miniaturkarte"

L.Options_Channels_Group_Name = "Kan\195\164le"
L.Options_Channels_Group_Desc = "%s ist in folgenden Kan\195\164len aktiv."
L.Options_Channels_Header = "Eine Ersetzung wird nur in den unten markierten Kan\195\164len durchgef\195\188hrt:"

L.Options_Channel_Say_Name = "Sagen"
L.Options_Channel_Say_Desc = "Aktiviert %s im Kanal \"Sagen\"."
L.Options_Channel_Emote_Name = "Emote"
L.Options_Channel_Emote_Desc = "Aktiviert %s im Kanal \"Emote\"."
L.Options_Channel_Yell_Name = "Schreien"
L.Options_Channel_Yell_Desc = "Aktiviert %s im Kanal \"Schreien\"."
L.Options_Channel_Party_Name = "Gruppe"
L.Options_Channel_Party_Desc = "Aktiviert %s im Kanal \"Gruppe\"."
L.Options_Channel_PartyLeader_Name = "Gruppenanf\195\188hrer"
L.Options_Channel_PartyLeader_Desc = "Aktiviert %s im Kanal \"Gruppenanf\195\188hrer\"."
L.Options_Channel_Guild_Name = "Gilde"
L.Options_Channel_Guild_Desc = "Aktiviert %s im Kanal \"Gilde\"."
L.Options_Channel_Officer_Name = "Offiziere"
L.Options_Channel_Officer_Desc = "Aktiviert %s im Kanal \"Offiziere\"."
L.Options_Channel_Raid_Name = "Schlachtzug"
L.Options_Channel_Raid_Desc = "Aktiviert %s im Kanal \"Schlachtzug\"."
L.Options_Channel_RaidLeader_Name = "Schlachtzugsanf\195\188hrer"
L.Options_Channel_RaidLeader_Desc = "Aktiviert %s im Kanal \"Schlachtzugsanf\195\188hrer\"."
L.Options_Channel_RaidWarning_Name = "Schlachtzugswarnung"
L.Options_Channel_RaidWarning_Desc = "Aktiviert %s im Kanal \"Schlachtzugswarnung."
L.Options_Channel_Instance_Name = "Instanz"
L.Options_Channel_Instance_Desc = "Aktiviert %s im Kanal \"Instanz\"."
L.Options_Channel_Battleground_Name = "Schlachtfeld"
L.Options_Channel_Battleground_Desc = "Aktiviert %s im Kanal \"Schlachtfeld\"."
L.Options_Channel_Whisper_Name = "Fl\195\188stern"
L.Options_Channel_Whisper_Desc = "Aktiviert %s im Kanal \"Fl\195\188stern\"."

L.Options_Replacements_Group_Name = "Ersetzungen"
L.Options_Replacements_Group_Desc = "Diese Vorkommen werden in den aktivierten Kan\195\164len ersetzt."
L.Options_Replacements_Add_Name = "Hinzu"
L.Options_Replacements_Add_Desc = "F\195\188gt eine neue Zuordnung hinzu."
L.Options_Replacements_DeleteAll_Name = "Alle L\195\182schen"
L.Options_Replacements_DeleteAll_Desc = "L\195\182scht alle Zuweisungen."
L.Options_Replacements_DeleteAll_ConfirmText="Wirklich ALLE Zuweisungen l\195\182schen?"
L.Options_Replacements_Header = "Die Vorkommen links vom Pfeil \"=>\" werden in den aktivierten Kan\195\164len gesucht und durch den Text rechts vom Pfeil ersetzt."

L.Options_Mapping_Group_Name = "%s => %s"
L.Options_Mapping_Group_Desc = "Dieses Vorkommen wird in den aktivierten Kan\195\164len ersetzt."
L.Options_Mapping_EmptyMapping = "(keine)"
L.Options_Mapping_MoveUp_Name = "^"
L.Options_Mapping_MoveUp_Desc = "nach oben verschieben"
L.Options_Mapping_MoveDown_Name = "v"
L.Options_Mapping_MoveDown_Desc = "nach unten verschieben"
L.Options_Mapping_MatchWhen_Name = "wann:"
L.Options_Mapping_MatchWhen_Desc = "F\195\188hrt die Ersetzung nur durch, wenn der Suchtext |nirgendwo vorkommt (<immer>), |nwenn der Suchtext <als ganzes Wort> \195\188bereinstimmt, |n<nur am Anfang eines Worts>, |noder <nur am Ende eines Worts>, |noder <nur am Anfang oder Ende eines Worts> aber nicht dazwischen, |noder nur in der Wortmitte aber <nie am Anfang und Ende eines Worts>."
L.Options_Mapping_MatchWhen_Select1 = "nie (deaktivert)"
L.Options_Mapping_MatchWhen_Select2 = "immer"
L.Options_Mapping_MatchWhen_Select3 = "als ganzes Wort"
L.Options_Mapping_MatchWhen_Select4 = "nur am Anfang eines Worts"
L.Options_Mapping_MatchWhen_Select5 = "nur am Ende eines Worts"
L.Options_Mapping_MatchWhen_Select6 = "nur am Anfang oder Ende eines Worts"
L.Options_Mapping_MatchWhen_Select7 = "nie am Anfang und Ende eines Worts"
L.Options_Mapping_SearchText_Name = "Suchtext:"
L.Options_Mapping_SearchText_Desc = "Dieser Text wird in der Chateingabe gesucht."
L.Options_Mapping_ReplaceText_Name = "Ersetzung:"
L.Options_Mapping_ReplaceText_Desc = "Jeder Suchtreffer wird mit diesem Text ersetzt."
L.Options_Mapping_ExactCase_Name = "Exakte Gro\195\159- und Kleinschreibung"
L.Options_Mapping_ExactCase_Desc = "Wenn gesetzt, muss die Gro\195\159- und Kleinschreibung des Suchtextes exakt \195\188berein stimmen. Anderfalls wird die Gro\195\159schreibung jedes Zeichens bei der Ersetzung \195\188bernommen."
L.Options_Mapping_Consolidate_Name = "Zusammenfassen aufeinanderfolgender Treffer"
L.Options_Mapping_Consolidate_Desc = "Wenn durch die Ersetzung die Zeichenfolge mehrfach hintereinander steht,|nfasse sie zu einem Vorkommen zusammen."
L.Options_Mapping_StopOnMatch_Name = "Anhalten nach Treffer"
L.Options_Mapping_StopOnMatch_Desc = "F\195\188hrt keine nachfolgenden Ersetzungen mehr durch, wenn dieser Eintrag ein Suchtreffer war."
L.Options_Mapping_Delete_Name = "L\195\182schen"
L.Options_Mapping_Delete_Desc = "L\195\182scht diese Zuweisung."
L.Options_Mapping_Delete_ConfirmText="Diese Zuweisung l\195\182schen?"

L.Options_Help_Group_Name = "Hilfe"
L.Options_Help_Group_Desc = "Hilfstellungen zu den Suchmustern und zur Ersetzungslogik."
L.Options_Help_Disclaimer = cYellow("Haftungsausschlu\195\159:") .. " Das Addon wird im reinen Ist-Zustand zur Verf\195\188gung gestellt, ohne Garantie auf Funktion und Fehlerfreiheit (f\195\188r mehr Details siehe GPL 3 Lizenzdokument). "
                            .. "Ferner \195\188bernimmt der Autor keinerlei Haftung oder Gew\195\164hrleistung f\195\188r durch das Addon oder dessen Nutzung entstandene Fehler oder Sch\195\164den, "
                            .. "insb. den Verlust von Spielfortschritt oder Daten aufgrund von Abst\195\188rzen des WoW-Clients."
L.Options_Help_Tab_Info_Name = "Info"
L.Options_Help_Tab_Info_Desc = "\195\156ber dieses Addon."
L.Options_Help_Tab_Basics_Name = "Grundlagen"
L.Options_Help_Tab_Basics_Desc = "Erl\195\164utert die Grundlagen des Addons"
L.Options_Help_Tab_Expert_Name = "Experte"
L.Options_Help_Tab_Expert_Desc = "Beleuchtet die Besonderheiten bei der Textsuche."
L.Options_Help_Tab_Examples_Name = "Beispiele"
L.Options_Help_Tab_Examples_Desc = "Beispiele f\195\188r bestimmte Szenarien."

L.Options_Help_Info = cYellow("\195\156ber dieses Addon")
                        .. "|n%s ersetzt beliebige, selbstdefinierte Zeichenfolgen durch andere selbstdefinierte Zeichenfolgen, die ihr eingebt. Die Ersetzung findet vor dem Versenden an andere Spieler oder Kanäle statt. "
                        .. "Es \195\164ndert nicht den Text den andere Spieler im Chat geschrieben haben, nur eure eigenen Eingaben. Es soll den individuellen Sprachfehler eures Charakters simulieren und dadurch die Immersion erh\195\182hen."
                        .. "|n|nNat\195\188rlich kann man es auch f\195\188r andere Dinge zweckentfremden (Trollifizierer, Abk\195\188rzungen, Kosenamen, etc.). Eine ausf\195\188hrliche Beschreibung aller Optionen, der Funktionsweise und viele Beispiele befinden sich auf den nachfolgenden Reitern."
                        .. "|n|n" .. cYellow("Kontakt")
                        .. "|nBitte Fehler und Erfahrungsberichte direkt als Kommentar auf der Projektwebseite bei " .. cPrefix("CurseForge") .. " (" .. cHyperlink("https://www.curseforge.com/wow/addons/grichelde") .. ") einmelden. "
                        .. "Ihr k\195\182nnt auch gern Screenshots der Fehlermeldungen und eurer Zuweisungen anh\195\164ngen. Ein \195\156bersichtsfenster aller Mappings kann mit dem Kommando " .. cPrefix("\"/gri mappings\"") .. " aufgerufen und herauskopiert werden. "
                        .. "|nIch freue mich \195\188ber euere Erfahrungsberichte und Fehlerreports."
                        .. "|n|n" .. cYellow("Dank")
                        .. "|nMein Dank geht an meine lieben Beta-Tester " .. cPrefix("Chamera") .. ", " .. cPrefix("Tabenoca") .. " und " .. cPrefix("Nordraka") .. ", und besondereren Dank an " .. cPrefix("Shinue") .. " f\195\188r die Inspiration und lustigen Momente."
L.Options_Help_Basics = cYellow("Reihenfolge")
                        .. "|nEs sind unbegrenzt viele Textersetzung m\195\182glich, und sie werden in der Reihenfolge der definierten Zuordnungen abgearbeitet, von oben nach unten. "
                        .. "Ersetzungen sind transitiv, d.h. nachfolgende Zuordnungen beziehen sich nicht auf den Originaltext, sondern das Resultat der vorherigen Ersetzung. "
                        .. "|nMit der Zuordnung " .. cPrefix("\"a\" => \"b\"") .. " und " .. cPrefix("\"b\" => \"c\"") .. " wird bei Eingabe von " .. cPrefix("\"a\" => \"c\"") .. "."
                        .. "|n|n" .. cYellow("Exakte Gro\195\159- und Kleinschreibung")
                        .. "|nBei exakter Gro\195\159- und Kleinschreibung muss die Schreibweise genau \195\188berstimmen, sonst wird diese Zuordnung \195\188bersprungen. "
                        .. "Wird die Gro\195\159- und Kleinschreibung ignoriert, wird die Gro\195\159schreibung jedes Zeichens bei der Ersetzung \195\188bernommen. "
                        .. "|nMit der Zuordnung " .. cPrefix("\"aBcDeF\" => \"uvWXYz\"") .. " wird aus " .. cPrefix("\"abcdef\" => \"uvwxyz\"") .. ", "
                        .."aus " .. cPrefix("\"ABCDEF\" => \"UVWXYZ\"") .. " und aus " .. cPrefix("\"AbCdEf\" => \"UvWxYz\"") .. "."
                        .. "|n|n" .. cYellow("Zusammenfassen aufeinanderfolgender Treffer")
                        .. "|nDas Zusammenfassen aufeinanderfolgender Treffer vermeidet unsch\195\182ne Wiederholungen, die durch die Ersetzung entstehen k\195\182nnen. "
                        .. "Die Zusammenfassung wird erst nach der Ersetzung vorgenommen, d.h. am vollst\195\164ndig ersetzten Text f\195\188r alle Zuordnungen. "
                        .. "|nMit der Zuordnung " .. cPrefix("\"s\" => \"sch\"") .. " wird aus " .. cPrefix("\"Tasse\" => \"Tasche\"") .. " statt " .. cPrefix("\"Taschsche\"") .. ", "
                        .. "aber aus " .. cPrefix("\"schmeissen\" => \"schchmeischen\"") .. ". Solche Randbedingungen beseitigt in der Regel eine weitere Zuordnung: " .. cPrefix("\"schch\" => \"sch\"") .. "."
                        .. "|n|n" .. cYellow("Anhalten nach Treffer")
                        .. "|nAlle nachfolgenden Ersetzungen mehr \195\188bersprungen, wenn die aktuelle Zuordnung zutreffend ist. Wenn bei der aktuelle Zuordnung kein Treffer vorliegt, werden die restlichen Zuordnung ganz normal weiter abgearbeitet."
L.Options_Help_Expert = cYellow("verk\195\188rzende/verl\195\163ngernde Ersetzungen")
                        .. "|nIst der Ersetzungstext k\195\188rzer als der eigentliche Suchtext, werden die \195\188bersch\195\188\195\159igen Zeichen des Suchtreffers entfernt. "
                        .. "Ist der Ersetzungstext l\195\163nger, werden die \195\188brigen Zeichen nach dem Treffer hinten drangehangen. Dabei wird die Gro\195\159- und Kleinschreibung des letzten Zeichens ber\195\188cksichtigt, "
                        .. "ebenso wie die Gro\195\159- und Kleinschreibung des nachfolgenden Zeichens. Gro\195\159geschriebene Abk\195\188rzungen und Ausdr\195\188cke bleiben so einheitlich. "
                        .. "|nMit der Zuordnung " .. cPrefix("\"Kr\195\164uter\" => \"Gr\195\188nzeugs\"") .. " wird aus " .. cPrefix("\"KR\195\132UTER\" => \"GR\195\156NZEUGS\"") .. " statt " .. cPrefix("\"GR\195\156NZEUgs\"") .. " "
                        .. "unter Beibehaltung von absichtlicher Gro\195\159schreibung wie " .. cPrefix("\"Kr\195\132utERGarten\" => \"Gr\195\156nzEUGSgarten\"") .. " statt " .. cPrefix("\"Gr\195\188nzeugsGarten\"") .. "."
                        .. "|n|n" .. cYellow("Standby")
                        .. "|nErsetzungen k\195\182nnen auch nur bei Bedarf durchgef\195\188hrt werden, selbst wenn das Addon oder ein Kanal deaktivert wurde. "
                        .. "Vor der Eingabe in der Chatbox schreibt man " .. cPrefix("/gri").. " oder " .. cPrefix("/grichelde").. " und optional noch den Zielkanal "
                        .. "z.B. " .. cPrefix("\"/gri /g Hallo Leute\"") .. " und alle aktiven Zuordnungen werden ersetzt, selbst wenn der Gildenkanal oder das Addon nicht aktiv sind."
                        .. "|n|n" .. cYellow("Regul\195\164re Ausdr\195\188cke")
                        .. "|nRegEx sind sehr m\195\163chtige Such- und Ersetzunsgmuster die h\195\163ufig in der Programmierung verwendet werden. Generell werden RegEx in den Suchtexten \195\188bernommen, "
                        .. "aber Lua unterst\195\188tzt nicht den vollst\195\163ndigen Umfang von PCRE. Trotzdem funktionieren viele Muster wie Anker bei Zeilenanfang " .. cPrefix("\"^\"") .. " oder Zeilenende " .. cPrefix("\"$\"")
                        .. ", Gruppen " .. cPrefix("\"(Hallo) (Welt)\"") .. "Zeichenklassen wie Zahlen " .. cPrefix("\"%d\"") .. " oder (negierte) Auswahlen " .. cPrefix("\"[^%p]\"") .. ". "
                        .. "Auf Gruppen kann im Ersetzungtext mit %<Nummer> zugegriffen werden" .. cPrefix("\"%2 %1\"") .. "."
                        .. "|nIm Beispiel-Reiter gibt es einige Ersetzungen, welche mit regul\195\164ren Ausdr\195\188cke umgesetzt wurden."

L.Options_Help_Examples_Note = cYellow("Hinweis:") .. " Dieses Addon bef\195\188rwortet nicht und beabsichtig nicht Personen mit (Fremd-)Sprachproblemen |nzu verletztem oder herabzuw\195\188rdigen. Die Verantwortung f\195\188r den Einsatz des Addons obliegt dem Benutzer. |nBitte verwendet die Funktion respektvoll und zur\195\188ckhaltend gegen\195\188ber anderen Mitspielern."
L.Options_Help_Examples_Header = cYellow("Beispiel")
L.Options_Help_Examples_Text = "Bitte ein Beispiel aus der Auswahlbox ausw\195\164hlen."
L.Options_Help_Examples_Import_Name = "Importieren"
L.Options_Help_Examples_Import_Desc = "Importiert das ausgew\195\164hlte Beispiel in ein neues Profil %s."
L.Options_Help_Examples_Import_ConfirmText = "Wird das Beispiel %s in das neue Profil %s importieren."

L.Options_Help_Examples = {
    {
        name = "fehlender Unterkiefer",
        desc = cYellow("S und P werden durch Zisch- und Klacklaute ersetzt."),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "s",
                replaceText = "ch",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "t",
                replaceText = "ck",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "p",
                replaceText = "b",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Trollifizierung",
        desc = cYellow("L\195\164\195\159t euch fast wie Vol'jin klingen."),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "(%w)(%p?)$",
                replaceText = "%1, maan%2",
                exactCase = false,
                consolidate = false,
                matchWhen = 5,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "ir(r?)",
                replaceText = "ia",
                exactCase = false,
                consolidate = false,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "ch",
                replaceText = "ck",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_13 = {
                order = 13,
                searchText = "g",
                replaceText = "ch",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_14 = {
                order = 14,
                searchText = "qu",
                replaceText = "kw",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_15 = {
                order = 15,
                searchText = "t",
                replaceText = "d",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_16 = {
                order = 16,
                searchText = "er",
                replaceText = "a",
                exactCase = false,
                consolidate = false,
                matchWhen = 5,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Jar Jar Binks",
        desc = cYellow("L\195\164\195\159t euch sprechen wie ein ungeschickter Gungan"),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "ver",
                replaceText = "va",
                exactCase = false,
                consolidate = false,
                matchWhen = 4,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "en",
                replaceText = "'n",
                exactCase = false,
                consolidate = false,
                matchWhen = 5,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "er",
                replaceText = "a",
                exactCase = false,
                consolidate = false,
                matchWhen = 5,
                stopOnMatch = false,
            },
            replacement_13 = {
                order = 13,
                searchText = "(%w?)ich",
                replaceText = "%1ichse",
                exactCase = false,
                consolidate = false,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_14 = {
                order = 14,
                searchText = "(d?m?)ir",
                replaceText = "%1ichse",
                exactCase = false,
                consolidate = false,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_15 = {
                order = 15,
                searchText = "du",
                replaceText = "du da",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_16 = {
                order = 16,
                searchText = "er",
                replaceText = "erse",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_17 = {
                order = 17,
                searchText = "sie",
                replaceText = "sie da",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_18 = {
                order = 18,
                searchText = "wir",
                replaceText = "wirse",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_19= {
                order = 19,
                searchText = "ihr",
                replaceText = "ihrse",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_20 = {
                order = 20,
                searchText = "nicht",
                replaceText = "nich",
                exactCase = false,
                consolidate = false,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_21 = {
                order = 21,
                searchText = "die",
                replaceText = "de",
                exactCase = false,
                consolidate = false,
                matchWhen = 3,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Altmodisch",
        desc = cYellow("Benutzt eine antiquiertere Schreibweise."),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "ei",
                replaceText = "ey",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "eu",
                replaceText = "oy",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "\195\159",
                replaceText = "sz",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Abk\195\188rzungen",
        desc = cYellow("Viel sagen, wenig tippen."),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "gz",
                replaceText = "Herzlichen Gl\195\188ckwunsch",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "gn8",
                replaceText = "Gute Nacht",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "afk",
                replaceText = "Bin mal kurz weg. (AFK)",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_13 = {
                order = 13,
                searchText = "MC",
                replaceText = "Geschmolzener Kern",
                exactCase = false,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Eigen-, Kose- und Ortsnamen",
        desc = cYellow("Ersetzt Spielernamen, NPCs oder Orte durch andere Ausdr\195\188cke."),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "Sylvanas",
                replaceText = "die rachs\195\188chtige Bansheek\195\182nigin",
                exactCase = true,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "R\195\188tzkn\195\188bbel",
                replaceText = "R\195\188tzi",
                exactCase = true,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "Unterstadt",
                replaceText = "Undercity",
                exactCase = true,
                consolidate = true,
                matchWhen = 3,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Lispeln",
        desc = cYellow("Aussprache von S und Z wird zu einem Zischlaut"),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "sch",
                replaceText = "ch",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_11 = {
                order = 11,
                searchText = "s",
                replaceText = "fs",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_12 = {
                order = 12,
                searchText = "z",
                replaceText = "ts",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
            replacement_13 = {
                order = 13,
                searchText = "chs",
                replaceText = "x",
                exactCase = false,
                consolidate = true,
                matchWhen = 2,
                stopOnMatch = false,
            },
        }
    }, {
        name = "Stottern",
        desc = cYellow("Wiederholt Vokale am Satzanfang"),
        replacements = {
            replacement_10 = {
                order = 10,
                searchText = "^([^aeiouy]-)([aeiouy])",
                replaceText = "%1%2-%1%2-%1%2",
                exactCase = false,
                consolidate = true,
                matchWhen = 4,
                stopOnMatch = false,
            },
        }
    },
}

L.IgnorePattern_Star = "Stern"
L.IgnorePattern_Circle = "Kreis"
L.IgnorePattern_Diamond = "Diamant"
L.IgnorePattern_Triangle = "Dreieck"
L.IgnorePattern_Moon = "Mond"
L.IgnorePattern_Square = "Quadrat"
L.IgnorePattern_Cross = "Kreuz"
L.IgnorePattern_Skull = "Totenkopf"