Преглед на файлове

Merge pull request #1134 from PixiEditor/text-nodes

More Text Nodes
Krzysztof Krysiński преди 1 ден
родител
ревизия
40d4f3c50f

+ 56 - 0
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Text/SliceTextNode.cs

@@ -0,0 +1,56 @@
+using PixiEditor.ChangeableDocument.Rendering;
+
+namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+
+[NodeInfo("SliceText")]
+public class SliceTextNode : Node
+{
+    public OutputProperty<string> SlicedText { get; }
+    
+    public InputProperty<bool> UseLength { get; }
+    
+    public InputProperty<string?> Text { get; }
+    
+    public InputProperty<int> Index { get; }
+    
+    public InputProperty<int> Length { get; }
+    
+    public SliceTextNode()
+    {
+        SlicedText = CreateOutput("SlicedText", "TEXT", string.Empty);
+        Text = CreateInput("Text", "TEXT", string.Empty);
+        UseLength = CreateInput("UseLength", "TEXT_SLICE_USE_LENGTH", true);
+        
+        Index = CreateInput("Index", "INDEX_START_AT", 0)
+            .WithRules(x => x.Min(0));
+        
+        Length = CreateInput("Length", "LENGTH", 1)
+            .WithRules(x => x.Min(0));
+    }
+
+    protected override void OnExecute(RenderContext context)
+    {
+        var text = Text.Value;
+
+        if (text == null)
+        {
+            SlicedText.Value = string.Empty;
+            return;
+        }
+
+        var startIndex = Math.Clamp(Index.Value, 0, text.Length);
+
+        if (!UseLength.Value)
+        {
+            SlicedText.Value = text.Substring(startIndex);
+            return;
+        }
+
+        var length = Math.Clamp(Length.Value, 0, text.Length - startIndex);
+        
+        SlicedText.Value = text.Substring(startIndex, length);
+    }
+
+    public override Node CreateCopy() =>
+        new SliceTextNode();
+}

+ 51 - 0
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Text/TextIndexOfNode.cs

@@ -0,0 +1,51 @@
+using PixiEditor.ChangeableDocument.Rendering;
+
+namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+
+[NodeInfo("CharacterPosition")]
+public class TextIndexOfNode : Node
+{
+    public OutputProperty<int> FirstIndex { get; }
+    
+    public OutputProperty<int> LastIndex { get; }
+    
+    public InputProperty<bool> MatchCase { get; }
+    
+    public InputProperty<string?> Text { get; }
+    
+    public InputProperty<string?> SearchText { get; }
+
+    public TextIndexOfNode()
+    {
+        FirstIndex = CreateOutput("FirstIndex", "FIRST_POSITION", -1);
+        LastIndex = CreateOutput("LastIndex", "LAST_POSITION", -1);
+        
+        MatchCase = CreateInput("MatchCase", "MATCH_CASE", false);
+        Text = CreateInput("Text", "TEXT", string.Empty);
+        SearchText = CreateInput("SearchText", "SEARCH_TEXT", string.Empty);
+    }
+
+    protected override void OnExecute(RenderContext context)
+    {
+        var comparisonMode = MatchCase.Value
+            ? StringComparison.InvariantCulture
+            : StringComparison.InvariantCultureIgnoreCase;
+
+        var text = Text.Value;
+        var searchText = SearchText.Value;
+
+        if (string.IsNullOrEmpty(text) || string.IsNullOrEmpty(searchText))
+        {
+            FirstIndex.Value = -1;
+            LastIndex.Value = -1;
+            
+            return;
+        }
+
+        FirstIndex.Value = text.IndexOf(searchText, comparisonMode);
+        LastIndex.Value = text.LastIndexOf(searchText, comparisonMode);
+    }
+
+    public override Node CreateCopy() =>
+        new TextIndexOfNode();
+}

+ 39 - 0
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Text/TextInfoNode.cs

@@ -0,0 +1,39 @@
+using PixiEditor.ChangeableDocument.Rendering;
+
+namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+
+[NodeInfo("TextInfo")]
+public class TextInfoNode : Node
+{
+    public OutputProperty<int> Length { get; }
+    
+    public OutputProperty<int> LineCount { get; }
+    
+    public InputProperty<string> Text { get; }
+
+    public TextInfoNode()
+    {
+        Length = CreateOutput("Length", "TEXT_LENGTH", 0);
+        LineCount = CreateOutput("LineCount", "TEXT_LINE_COUNT", 0);
+        
+        Text = CreateInput("Text", "TEXT", string.Empty);
+    }
+    
+    protected override void OnExecute(RenderContext context)
+    {
+        var text = Text.Value;
+
+        if (string.IsNullOrEmpty(text))
+        {
+            Length.Value = 0;
+            LineCount.Value = 0;
+            return;
+        }
+        
+        Length.Value = text.Length;
+        LineCount.Value = text.AsSpan().Count('\n');
+    }
+
+    public override Node CreateCopy() =>
+        new TextInfoNode();
+}

BIN
src/PixiEditor.UI.Common/Fonts/PixiPerfect.ttf


+ 3 - 0
src/PixiEditor.UI.Common/Fonts/PixiPerfectIcons.axaml

@@ -159,7 +159,9 @@
             <system:String x:Key="icon-select-all">&#xE970;</system:String>
             <system:String x:Key="icon-separate-vector">&#xE91C;</system:String>
             <system:String x:Key="icon-settings">&#xE971;</system:String>
+            <system:String x:Key="icon-shredder">&#xE9CA;</system:String>
             <system:String x:Key="icon-shuffle">&#xE992;</system:String>
+            <system:String x:Key="icon-slice">&#xE9CC;</system:String>
             <system:String x:Key="icon-sliders">&#xE972;</system:String>
             <system:String x:Key="icon-snapping">&#xE9A7;</system:String>
             <system:String x:Key="icon-spline-chart">&#xE9BE;</system:String>
@@ -198,6 +200,7 @@
             <system:String x:Key="icon-upload-cloud">&#xE98E;</system:String>
             <system:String x:Key="icon-user">&#xE97B;</system:String>
             <system:String x:Key="icon-vector-pen">&#xE965;</system:String>
+            <system:String x:Key="icon-whole-word">&#xE9CB;</system:String>
             <system:String x:Key="icon-write">&#xE988;</system:String>
             <system:String x:Key="icon-x-flip">&#xE900;</system:String>
             <system:String x:Key="icon-x-symmetry">&#xE980;</system:String>

+ 3 - 0
src/PixiEditor.UI.Common/Fonts/PixiPerfectIcons.axaml.cs

@@ -155,7 +155,9 @@ public static partial class PixiPerfectIcons
     public const string SelectAll = "\uE970";
     public const string SeparateVector = "\uE91C";
     public const string Settings = "\uE971";
+    public const string Shredder = "\uE9CA";
     public const string Shuffle = "\uE992";
+    public const string Slice = "\uE9CC";
     public const string Sliders = "\uE972";
     public const string Snapping = "\uE9A7";
     public const string SplineChart = "\uE9BE";
@@ -194,6 +196,7 @@ public static partial class PixiPerfectIcons
     public const string UploadCloud = "\uE98E";
     public const string User = "\uE97B";
     public const string VectorPen = "\uE965";
+    public const string WholeWord = "\uE9CB";
     public const string Write = "\uE988";
     public const string XFlip = "\uE900";
     public const string XSymmetry = "\uE980";

Файловите разлики са ограничени, защото са твърде много
+ 2 - 2
src/PixiEditor.UI.Common/Fonts/defs.svg


+ 1144 - 1137
src/PixiEditor/Data/Localization/Languages/en.json

@@ -1,1139 +1,1146 @@
 {
-    "RECENT_FILES": "Recent Files",
-    "OPEN_FILE": "Open file",
-    "NEW_FILE": "New",
-    "RECENT_EMPTY_TEXT": "So much empty space",
-    "LANGUAGE": "Language",
-    "GENERAL": "General",
-    "DISCORD": "Discord",
-    "KEY_BINDINGS": "Key Bindings",
-    "MISC": "Misc",
-    "SHOW_STARTUP_WINDOW": "Show Startup Window",
-    "RECENT_FILE_LENGTH": "Recent file list length",
-    "RECENT_FILE_LENGTH_TOOLTIP": "How many documents are shown under File > Recent. Default: 8",
-    "DEFAULT_NEW_SIZE": "Default new file size",
-    "WIDTH": "Width",
-    "HEIGHT": "Height",
-    "TOOLS": "Tools",
-    "ENABLE_SHARED_TOOLBAR": "Enable shared toolbar",
-    "AUTOMATIC_UPDATES": "Automatic Updates",
-    "CHECK_FOR_UPDATES": "Check updates on startup",
-    "UPDATE_STREAM": "Update stream",
-    "UPDATE_CHANNEL_HELP_TOOLTIP": "Update channels can only be changed in standalone version (downloaded from https://pixieditor.net).\nSteam and Microsoft Store versions handle updates separately.",
-    "DEBUG": "Debug",
-    "ENABLE_DEBUG_MODE": "Enable Debug mode",
-    "OPEN_CRASH_REPORTS_DIR": "Open crash reports directory",
-    "DISCORD_RICH_PRESENCE": "Rich Presence",
-    "ENABLED": "Enabled",
-    "SHOW_IMAGE_NAME": "Show image name",
-    "SHOW_IMAGE_SIZE": "Show image size",
-    "SHOW_LAYER_COUNT": "Show layer count",
-    "FILE": "File",
-    "RECENT": "Recent",
-    "OPEN": "Open",
-    "SAVE_PIXI": "Save (.pixi)",
-    "SAVE_AS_PIXI": "Save as... (.pixi)",
-    "EXPORT_IMG": "Export (.png, .jpg, etc.)",
-    "EDIT": "Edit",
-    "EXIT": "Exit",
-    "PERCENTAGE": "Percentage",
-    "ABSOLUTE": "Absolute",
-    "PRESERVE_ASPECT_RATIO": "Preserve aspect ratio",
-    "ANCHOR_POINT": "Anchor point",
-    "RESIZE_IMAGE": "Resize image",
-    "RESIZE": "Resize",
-    "DOCUMENTATION": "Documentation",
-    "WEBSITE": "Website",
-    "OPEN_WEBSITE": "Open website",
-    "REPOSITORY": "Repository",
-    "OPEN_REPOSITORY": "Open repository",
-    "OPEN_DOCUMENTATION": "Open documentation",
-    "LICENSE": "License",
-    "OPEN_LICENSE": "Open license",
-    "THIRD_PARTY_LICENSES": "Third party licenses",
-    "OPEN_THIRD_PARTY_LICENSES": "Open third party licenses",
-    "APPLY_TRANSFORM": "Apply transform",
-    "INCREASE_TOOL_SIZE": "Increase tool size",
-    "DECREASE_TOOL_SIZE": "Decrease tool size",
-    "UPDATE_READY": "Update is ready to be installed. Do you want to install it now?",
-    "COULD_NOT_UPDATE_WITHOUT_ADMIN": "Couldn't update without admin privileges. Please run PixiEditor as administrator.",
-    "INSUFFICIENT_PERMISSIONS": "Insufficient permissions",
-    "VERSION": "Version {0}",
-    "BUILD_ID": "Build ID: {0}",
-    "OPEN_TEMP_DIR": "Open temp directory",
-    "OPEN_LOCAL_APPDATA_DIR": "Open Local AppData directory",
-    "OPEN_ROAMING_APPDATA_DIR": "Open Roaming AppData directory",
-    "OPEN_INSTALLATION_DIR": "Open installation directory",
-    "DUMP_ALL_COMMANDS": "Dump all commands",
-    "DUMP_ALL_COMMANDS_DESCRIPTIVE": "Dump all commands to a text file",
-    "CRASH": "Crash",
-    "CRASH_APP": "Crash application",
-    "DELETE_USR_PREFS": "Delete user preferences (Roaming AppData)",
-    "DELETE_SHORTCUT_FILE": "Delete shortcut file (Roaming AppData)",
-    "DELETE_EDITOR_DATA": "Delete editor data (Local AppData)",
-    "GENERATE_KEY_BINDINGS_TEMPLATE": "Generate key bindings template",
-    "GENERATE_KEY_BINDINGS_TEMPLATE_DESCRIPTIVE": "Generate key bindings json template",
-    "VALIDATE_SHORTCUT_MAP": "Validate shortcut map",
-    "VALIDATE_SHORTCUT_MAP_DESCRIPTIVE": "Validates shortcut map",
-    "VALIDATION_KEYS_NOTICE_DIALOG": "Empty keys: {0}\nUnknown Commands: {1}",
-    "RESULT": "Result",
-    "CLEAR_RECENT_DOCUMENTS": "Clear recent documents",
-    "CLEAR_RECENTLY_OPENED_DOCUMENTS": "Clear recently opened documents",
-    "OPEN_CMD_DEBUG_WINDOW": "Open command debug window",
-    "PATH_DOES_NOT_EXIST": "{0} does not exist.",
-    "LOCATION_DOES_NOT_EXIST": "Location does not exist.",
-    "FILE_NOT_FOUND": "File not found.",
-    "ARE_YOU_SURE": "Are you sure?",
-    "ARE_YOU_SURE_PATH_FULL_PATH": "Are you sure you want to delete {0}?\nThis data will be lost for all installations.\n(Full Path: {1})",
-    "FAILED_TO_OPEN_FILE": "Failed to open the file",
-    "OLD_FILE_FORMAT": "Old file format",
-    "OLD_FILE_FORMAT_DESCRIPTION": "This .pixi file uses the old format,\n which is no longer supported and can't be opened.",
-    "NOTHING_FOUND": "Nothing found",
-    "EXPORT": "Export",
-    "EXPORT_IMAGE": "Export image",
-    "IMPORT": "Import",
-    "SHORTCUT_TEMPLATES": "Shortcut templates",
-    "RESET_ALL": "Reset all",
-    "LAYER": "Layer",
-    "LAYER_DELETE_ALL_SELECTED": "Delete all selected layers/folders",
-    "LAYER_DELETE_ALL_SELECTED_DESCRIPTIVE": "Delete all selected layers and/or folders",
-    "NEW_FOLDER": "New folder",
-    "CREATE_NEW_FOLDER": "Create new folder",
-    "NEW_LAYER": "New layer",
-    "CREATE_NEW_LAYER": "Create new layer",
-    "NEW_IMAGE": "New image",
-    "CREATE_NEW_IMAGE": "Create new image",
-    "SAVE": "Save",
-    "SAVE_AS": "Save as...",
-    "IMAGE": "Image",
-    "SAVE_IMAGE": "Save image",
-    "SAVE_IMAGE_AS": "Save image as new",
-    "DUPLICATE": "Duplicate",
-    "DUPLICATE_SELECTED_LAYER": "Duplicate selected layer",
-    "CREATE_MASK": "Create mask",
-    "DELETE_MASK": "Delete mask",
-    "TOGGLE_MASK": "Toggle mask",
-    "APPLY_MASK": "Apply mask",
-    "TOGGLE_VISIBILITY": "Toggle visibility",
-    "MOVE_MEMBER_UP": "Move member upwards",
-    "MOVE_MEMBER_UP_DESCRIPTIVE": "Move selected layer or folder upwards",
-    "MOVE_MEMBER_DOWN": "Move member downwards",
-    "MOVE_MEMBER_DOWN_DESCRIPTIVE": "Move selected layer or folder downwards",
-    "MERGE_ALL_SELECTED_LAYERS": "Merge all selected layers",
-    "MERGE_WITH_ABOVE": "Merge selected layer with above",
-    "MERGE_WITH_ABOVE_DESCRIPTIVE": "Merge selected layer with the one above it",
-    "MERGE_WITH_BELOW": "Merge selected layer with below",
-    "MERGE_WITH_BELOW_DESCRIPTIVE": "Merge selected layer with the one below it",
-    "ADD_REFERENCE_LAYER": "Add Reference Layer",
-    "DELETE_REFERENCE_LAYER": "Delete reference layer",
-    "TRANSFORM_REFERENCE_LAYER": "Transform reference layer",
-    "TOGGLE_REFERENCE_LAYER_POS": "Toggle reference layer position",
-    "TOGGLE_REFERENCE_LAYER_POS_DESCRIPTIVE": "Toggle reference layer between topmost or most below",
-    "RESET_REFERENCE_LAYER_POS": "Reset reference layer position",
-    "CLIP_CANVAS": "Clip Canvas",
-    "FLIP_IMG_VERTICALLY": "Flip Image Vertically",
-    "FLIP_IMG_HORIZONTALLY": "Flip Image Horizontally",
-    "FLIP_LAYERS_VERTICALLY": "Flip Selected Layers Vertically",
-    "FLIP_LAYERS_HORIZONTALLY": "Flip Selected Layers Horizontally",
-    "ROT_IMG_90": "Rotate Image 90 degrees",
-    "ROT_IMG_180": "Rotate Image 180 degrees",
-    "ROT_IMG_-90": "Rotate Image -90 degrees",
-    "ROT_LAYERS_90": "Rotate Selected Layers 90 degrees",
-    "ROT_LAYERS_180": "Rotate Selected Layers 180 degrees",
-    "ROT_LAYERS_-90": "Rotate Selected Layers -90 degrees",
-    "TOGGLE_VERT_SYMMETRY_AXIS": "Toggle vertical symmetry axis",
-    "TOGGLE_HOR_SYMMETRY_AXIS": "Toggle horizontal symmetry axis",
-    "DELETE_SELECTED": "Delete selected",
-    "DELETE_SELECTED_DESCRIPTIVE": "Delete selected element (layer, pixels, etc.)",
-    "RESIZE_DOCUMENT": "Resize document",
-    "RESIZE_CANVAS": "Resize canvas",
-    "CENTER_CONTENT": "Center content",
-    "CUT": "Cut",
-    "CUT_DESCRIPTIVE": "Cut selected area/layers",
-    "PASTE": "Paste",
-    "PASTE_DESCRIPTIVE": "Paste clipboard contents",
-    "PASTE_AS_NEW_LAYER": "Paste as new layer",
-    "PASTE_AS_NEW_LAYER_DESCRIPTIVE": "Paste from clipboard as new layer",
-    "PASTE_REFERENCE_LAYER": "Paste reference layer",
-    "PASTE_REFERENCE_LAYER_DESCRIPTIVE": "Paste clipboard contents as reference layer",
-    "PASTE_COLOR": "Paste color",
-    "PASTE_COLOR_DESCRIPTIVE": "Paste color from clipboard",
-    "PASTE_COLOR_SECONDARY": "Paste color as secondary",
-    "PASTE_COLOR_SECONDARY_DESCRIPTIVE": "Paste color from clipboard as secondary color",
-    "CLIPBOARD": "Clipboard",
-    "COPY": "Copy",
-    "COPY_DESCRIPTIVE": "Copy to clipboard",
-    "COPY_COLOR_HEX": "Copy primary color (HEX)",
-    "COPY_COLOR_HEX_DESCRIPTIVE": "Copy primary color as HEX code",
-    "COPY_COLOR_RGB": "Copy primary color (RGB)",
-    "COPY_COLOR_RGB_DESCRIPTIVE": "Copy primary color as RGB code",
-    "COPY_COLOR_SECONDARY_HEX": "Copy secondary color (HEX)",
-    "COPY_COLOR_SECONDARY_HEX_DESCRIPTIVE": "Copy secondary color as HEX code",
-    "COPY_COLOR_SECONDARY_RGB": "Copy secondary color (RGB)",
-    "COPY_COLOR_SECONDARY_RGB_DESCRIPTIVE": "Copy secondary color as RGB code",
-    "PALETTE_COLORS": "Palette Colors",
-    "REPLACE_SECONDARY_BY_PRIMARY": "Replace secondary color by primary",
-    "REPLACE_PRIMARY_BY_SECONDARY": "Replace primary color by secondary",
-    "REPLACE_PRIMARY_BY_SECONDARY_DESCRIPTIVE": "Replace the primary color by the secondary color",
-    "OPEN_PALETTE_BROWSER": "Open palette browser",
-    "OVERWRITE_PALETTE_CONSENT": "Palette '{0}' already exists, do you want to overwrite it?",
-    "PALETTE_EXISTS": "Palette already exists",
-    "REPLACE_PALETTE_CONSENT": "Replace current palette with selected one?",
-    "REPLACE_PALETTE": "Replace current palette",
-    "SELECT_COLOR_1": "Select color 1",
-    "SELECT_COLOR_2": "Select color 2",
-    "SELECT_COLOR_3": "Select color 3",
-    "SELECT_COLOR_4": "Select color 4",
-    "SELECT_COLOR_5": "Select color 5",
-    "SELECT_COLOR_6": "Select color 6",
-    "SELECT_COLOR_7": "Select color 7",
-    "SELECT_COLOR_8": "Select color 8",
-    "SELECT_COLOR_9": "Select color 9",
-    "SELECT_COLOR_10": "Select color 10",
-    "SELECT_TOOL": "Select {0} Tool",
-    "SELECT_COLOR_1_DESCRIPTIVE": "Select the first color in the palette",
-    "SELECT_COLOR_2_DESCRIPTIVE": "Select the second color in the palette",
-    "SELECT_COLOR_3_DESCRIPTIVE": "Select the third color in the palette",
-    "SELECT_COLOR_4_DESCRIPTIVE": "Select the fourth color in the palette",
-    "SELECT_COLOR_5_DESCRIPTIVE": "Select the fifth color in the palette",
-    "SELECT_COLOR_6_DESCRIPTIVE": "Select the sixth color in the palette",
-    "SELECT_COLOR_7_DESCRIPTIVE": "Select the seventh color in the palette",
-    "SELECT_COLOR_8_DESCRIPTIVE": "Select the eighth color in the palette",
-    "SELECT_COLOR_9_DESCRIPTIVE": "Select the ninth color in the palette",
-    "SELECT_COLOR_10_DESCRIPTIVE": "Select the tenth color in the palette",
-    "SWAP_COLORS": "Swap colors",
-    "SWAP_COLORS_DESCRIPTIVE": "Swap primary and secondary colors",
-    "SEARCH": "Search",
-    "COMMAND_SEARCH": "Command search",
-    "OPEN_COMMAND_SEARCH": "Open command search window",
-    "SELECT": "Select",
-    "DESELECT": "Deselect",
-    "INVERT": "Invert",
-    "SELECTION": "Selection",
-    "SELECT_ALL": "Select all",
-    "SELECT_ALL_DESCRIPTIVE": "Select everything",
-    "CLEAR_SELECTION": "Clear selection",
-    "INVERT_SELECTION": "Invert selection",
-    "INVERT_SELECTION_DESCRIPTIVE": "Invert the selection",
-    "TRANSFORM_SELECTED_AREA": "Transform selected area",
-    "NUDGE_SELECTED_LEFT": "Nudge selected object left",
-    "NUDGE_SELECTED_RIGHT": "Nudge selected object right",
-    "NUDGE_SELECTED_UP": "Nudge selected object up",
-    "NUDGE_SELECTED_DOWN": "Nudge selected object down",
-    "MASK_FROM_SELECTION": "New mask from selection",
-    "MASK_FROM_SELECTION_DESCRIPTIVE": "Selection to new mask",
-    "ADD_SELECTION_TO_MASK": "Add selection to mask",
-    "SUBTRACT_SELECTION_FROM_MASK": "Subtract selection from mask",
-    "INTERSECT_SELECTION_MASK": "Intersect selection with mask",
-    "SELECTION_TO_MASK": "Selection to mask",
-    "TO_NEW_MASK": "to new mask",
-    "ADD_TO_MASK": "add to mask",
-    "SUBTRACT_FROM_MASK": "subtract from mask",
-    "INTERSECT_WITH_MASK": "intersect with mask",
-    "STYLUS": "Stylus",
-    "TOGGLE_PEN_MODE": "Toggle pen mode",
-    "UNDO": "Undo",
-    "UNDO_DESCRIPTIVE": "Undo last action",
-    "REDO": "Redo",
-    "REDO_DESCRIPTIVE": "Redo last action",
-    "WINDOWS": "Windows",
-    "TOGGLE_GRIDLINES": "Toggle gridlines",
-    "GRIDLINES_SIZE": "Grid Size",
-    "ZOOM_IN": "Zoom in",
-    "ZOOM_OUT": "Zoom out",
-    "NEW_WINDOW_FOR_IMG": "New window for current image",
-    "CENTER_ACTIVE_VIEWPORT": "Center active viewport",
-    "FLIP_VIEWPORT_HORIZONTALLY": "Flip viewport horizontally",
-    "FLIP_VIEWPORT_VERTICALLY": "Flip viewport vertically",
-    "SETTINGS": "Settings",
-    "OPEN_SETTINGS": "Open settings",
-    "OPEN_SETTINGS_DESCRIPTIVE": "Open settings window",
-    "OPEN_STARTUP_WINDOW": "Open startup window",
-    "OPEN_SHORTCUT_WINDOW": "Open shortcuts window",
-    "OPEN_ABOUT_WINDOW": "Open about window",
-    "OPEN_PREVIEW_WINDOW": "Open preview window",
-    "ERROR": "Error",
-    "INTERNAL_ERROR": "Internal error",
-    "ERROR_SAVE_LOCATION": "Couldn't save the file to the specified location",
-    "ERROR_WHILE_SAVING": "An internal error occured while saving. Please try again.",
-    "UNKNOWN_ERROR_SAVING": "An error occured while saving.",
-    "FAILED_ASSOCIATE_LOSPEC": "Failed to associate Lospec Palette protocol.",
-    "REDDIT": "Reddit",
-    "GITHUB": "GitHub",
-    "YOUTUBE": "YouTube",
-    "DONATE": "Donate",
-    "YES": "Yes",
-    "NO": "No",
-    "CANCEL": "Cancel",
-    "UNNAMED": "Unnamed",
-    "OPEN_COMMAND_DEBUG_WINDOW": "Open command debug window",
-    "DELETE": "Delete",
-    "USER_PREFS": "User preferences (Roaming)",
-    "SHORTCUT_FILE": "Shortcut file (Roaming)",
-    "EDITOR_DATA": "Editor data (Local)",
-    "MOVE_VIEWPORT_TOOLTIP": "Moves viewport. ({0})",
-    "MOVE_VIEWPORT_ACTION_DISPLAY": "Click and move to pan the viewport",
-    "MOVE_TOOL_TOOLTIP": "Select and transform layers ({0}).",
-    "MOVE_TOOL_ACTION_DISPLAY": "Hold mouse to move selected pixels. Hold Ctrl to move all layers.",
-    "PEN_TOOL_TOOLTIP": "Pen. ({0})",
-    "PEN_TOOL_ACTION_DISPLAY": "Click and move to draw.",
-    "PIXEL_PERFECT_SETTING": "Pixel perfect",
-    "RECTANGLE_TOOL_TOOLTIP": "Draws rectangle on canvas ({0}). Hold Shift to draw a square.",
-    "RECTANGLE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to draw a rectangle. Hold Shift to draw a square.",
-    "RECTANGLE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to draw a square.",
-    "KEEP_ORIGINAL_IMAGE_SETTING": "Keep original image",
-    "ROTATE_VIEWPORT_TOOLTIP": "Rotates viewport. ({0})",
-    "ROTATE_VIEWPORT_ACTION_DISPLAY": "Click and move to rotate the viewport",
-    "SELECT_TOOL_TOOLTIP": "Selects area. ({0})",
-    "SELECT_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to select an area. Hold Shift to add to existing selection. Hold Ctrl to subtract from it.",
-    "SELECT_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to add to the current selection.",
-    "SELECT_TOOL_ACTION_DISPLAY_CTRL": "Click and move to subtract from the current selection.",
-    "ZOOM_TOOL_TOOLTIP": "Zooms viewport ({0}). Click to zoom in, hold alt and click to zoom out.",
-    "ZOOM_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to zoom. Click to zoom in, hold ctrl and click to zoom out.",
-    "ZOOM_TOOL_ACTION_DISPLAY_CTRL": "Click and move to zoom. Click to zoom out, release ctrl and click to zoom in.",
-    "BRIGHTNESS_TOOL_TOOLTIP": "Makes pixels brighter or darker ({0}). Hold Ctrl to make pixels darker.",
-    "BRIGHTNESS_TOOL_ACTION_DISPLAY_DEFAULT": "Draw on pixels to make them brighter. Hold Ctrl to darken.",
-    "BRIGHTNESS_TOOL_ACTION_DISPLAY_CTRL": "Draw on pixels to make them darker. Release Ctrl to brighten.",
-    "COLOR_PICKER_TOOLTIP": "Picks the primary color from the canvas. ({0})",
-    "COLOR_PICKER_ACTION_DISPLAY_DEFAULT": "Click to pick colors. Hold Ctrl to hide the canvas. Hold Shift to hide the reference layer",
-    "ELLIPSE_TOOL_TOOLTIP": "Draws an ellipse on canvas ({0}). Hold Shift to draw a circle.",
-    "ELLIPSE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move mouse to draw an ellipse. Hold Shift to draw a circle.",
-    "ELLIPSE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move mouse to draw a circle.",
-    "ERASER_TOOL_TOOLTIP": "Erases color from pixel. ({0})",
-    "ERASER_TOOL_ACTION_DISPLAY": "Click and move to erase.",
-    "FLOOD_FILL_TOOL_TOOLTIP": "Fills area with color. ({0})",
-    "FLOOD_FILL_TOOL_ACTION_DISPLAY_DEFAULT": "Press on an area to fill it. Hold down Ctrl to consider all layers.",
-    "FLOOD_FILL_TOOL_ACTION_DISPLAY_CTRL": "Press on an area to fill it. Release Ctrl to only consider the current layers.",
-    "LASSO_TOOL_TOOLTIP": "Lasso. ({0})",
-    "LASSO_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to select pixels inside of the lasso. Hold Shift to add to existing selection. Hold Ctrl to subtract from it.",
-    "LASSO_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to add pixels inside of the lasso to the selection.",
-    "LASSO_TOOL_ACTION_DISPLAY_CTRL": "Click and move to subtract pixels inside of the lasso from the selection.",
-    "LINE_TOOL_TOOLTIP": "Draws line on canvas ({0}). Hold Shift to enable snapping.",
-    "LINE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to draw a line. Hold Shift to enable snapping.",
-    "LINE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move mouse to draw a line with snapping enabled.",
-    "MAGIC_WAND_TOOL_TOOLTIP": "Magic Wand ({0}). Flood's the selection",
-    "MAGIC_WAND_ACTION_DISPLAY": "Click to flood the selection.",
-    "PEN_TOOL": "Pen",
-    "BRIGHTNESS_TOOL": "Brightness",
-    "COLOR_PICKER_TOOL": "Color Picker",
-    "ELLIPSE_TOOL": "Ellipse",
-    "ERASER_TOOL": "Eraser",
-    "FLOOD_FILL_TOOL": "Flood Fill",
-    "LASSO_TOOL": "Lasso",
-    "LINE_TOOL": "Line",
-    "MAGIC_WAND_TOOL": "Magic Wand",
-    "MOVE_TOOL": "Move",
-    "MOVE_VIEWPORT_TOOL": "Move Viewport",
-    "RECTANGLE_TOOL": "Rectangle",
-    "ROTATE_VIEWPORT_TOOL": "Rotate Viewport",
-    "SELECT_TOOL_NAME": "Select",
-    "ZOOM_TOOL": "Zoom",
-    "SHAPE_LABEL": "Shape",
-    "MODE_LABEL": "Mode",
-    "SCOPE_LABEL": "Scope",
-    "FILL_SHAPE_LABEL": "Fill shape",
-    "FILL_COLOR_LABEL": "Fill color",
-    "TOOL_SIZE_LABEL": "Tool size",
-    "STRENGTH_LABEL": "Strength",
-    "NEW": "New",
-    "ADD": "Add",
-    "SUBTRACT": "Subtract",
-    "INTERSECT": "Intersect",
-    "RECTANGLE": "Rectangle",
-    "CIRCLE": "Circle",
-    "ABOUT": "About",
-    "MINIMIZE": "Minimize",
-    "RESTORE": "Restore",
-    "MAXIMIZE": "Maximize",
-    "CLOSE": "Close",
-    "EXPORT_SIZE_HINT": "If you want to share the image, try {0}% for the best clarity",
-    "CREATE": "Create",
-    "BASE_LAYER_NAME": "Base layer",
-    "ENABLE_MASK": "Enable mask",
-    "SELECTED_AREA_EMPTY": "Selected area is empty",
-    "NOTHING_TO_COPY": "Nothing to copy",
-    "REFERENCE_LAYER_PATH": "Reference layer path",
-    "FLIP": "Flip",
-    "ROTATION": "Rotation",
-    "ROT_IMG_90_D": "Rotate Image 90°",
-    "ROT_IMG_180_D": "Rotate Image 180°",
-    "ROT_IMG_-90_D": "Rotate Image -90°",
-    "ROT_LAYERS_90_D": "Rotate Selected Layers 90°",
-    "ROT_LAYERS_180_D": "Rotate Selected Layers 180°",
-    "ROT_LAYERS_-90_D": "Rotate Selected Layers -90°",
-    "UNNAMED_PALETTE": "Unnamed Palette",
-    "CLICK_SELECT_PRIMARY": "Click to select as main color.",
-    "PEN_MODE": "Pen mode",
-    "VIEW": "View",
-    "HORIZONTAL_LINE_SYMMETRY": "Horizontal line symmetry",
-    "VERTICAL_LINE_SYMMETRY": "Vertical line symmetry",
-    "COLOR_PICKER_TITLE": "Color Picker",
-    "COLOR_SLIDERS_TITLE": "Color Sliders",
-    "PALETTE_TITLE": "Palette",
-    "SWATCHES_TITLE": "Swatches",
-    "LAYERS_TITLE": "Layers",
-    "PREVIEW_TITLE": "Preview",
-    "NORMAL_BLEND_MODE": "Normal",
-    "ERASE_BLEND_MODE": "Erase",
-    "DARKEN_BLEND_MODE": "Darken",
-    "MULTIPLY_BLEND_MODE": "Multiply",
-    "COLOR_BURN_BLEND_MODE": "Color burn",
-    "LIGHTEN_BLEND_MODE": "Lighten",
-    "SCREEN_BLEND_MODE": "Screen",
-    "COLOR_DODGE_BLEND_MODE": "Color dodge",
-    "OVERLAY_BLEND_MODE": "Overlay",
-    "SOFT_LIGHT_BLEND_MODE": "Soft light",
-    "HARD_LIGHT_BLEND_MODE": "Hard light",
-    "DIFFERENCE_BLEND_MODE": "Difference",
-    "EXCLUSION_BLEND_MODE": "Exclusion",
-    "HUE_BLEND_MODE": "Hue",
-    "SATURATION_BLEND_MODE": "Saturation",
-    "LUMINOSITY_BLEND_MODE": "Luminosity",
-    "COLOR_BLEND_MODE": "Color",
-    "NOT_SUPPORTED_BLEND_MODE": "Not supported",
-    "RESTART": "Restart",
-    "SORT_BY": "Sort by",
-    "NAME": "Name",
-    "COLORS": "Colors",
-    "DEFAULT": "Default",
-    "ALPHABETICAL": "Alphabetical",
-    "COLOR_COUNT": "Color count",
-    "ANY": "Any",
-    "MAX": "Max",
-    "MIN": "Min",
-    "EXACT": "Exact",
-    "ASCENDING": "Ascending",
-    "DESCENDING": "Descending",
-    "NAME_IS_TOO_LONG": "The name is too long",
-    "STOP_IT_TEXT1": "That's enough. Tidy up your file names.",
-    "STOP_IT_TEXT2": "Can you stop copying these names please?",
-    "REPLACER_TOOLTIP": "Right click on palette color and choose 'Replace' or drop it here.",
-    "CLICK_TO_CHOOSE_COLOR": "Click to choose the color",
-    "REPLACE_COLOR": "Replace color",
-    "PALETTE_COLOR_TOOLTIP": "Click to select as main color. Drag and drop onto another palette color to swap them.",
-    "ADD_FROM_SWATCHES": "Add from swatches",
-    "ADD_COLOR_TO_PALETTE": "Add color to palette",
-    "USE_IN_CURRENT_IMAGE": "Use in current image",
-    "ADD_TO_FAVORITES": "Add to favorites",
-    "BROWSE_PALETTES": "Browse palettes",
-    "LOAD_PALETTE": "Load palette",
-    "SAVE_PALETTE": "Save palette",
-    "FAVORITES": "Favorites",
-    "ADD_FROM_CURRENT_PALETTE": "Add from current palette",
-    "OPEN_PALETTES_DIR_TOOLTIP": "Open palettes directory in explorer",
-    "BROWSE_ON_LOSPEC_TOOLTIP": "Browse palettes on Lospec",
-    "IMPORT_FROM_FILE_TOOLTIP": "Import from file",
-    "TOP_LEFT": "Top left",
-    "TOP_CENTER": "Top center",
-    "TOP_RIGHT": "Top right",
-    "MIDDLE_LEFT": "Middle left",
-    "MIDDLE_CENTER": "Middle center",
-    "MIDDLE_RIGHT": "Middle right",
-    "BOTTOM_LEFT": "Bottom left",
-    "BOTTOM_CENTER": "Bottom center",
-    "BOTTOM_RIGHT": "Bottom right",
-    "CLIP_TO_BELOW": "Clip to member below",
-    "MOVE_UPWARDS": "Move upwards",
-    "MOVE_DOWNWARDS": "Move downwards",
-    "MERGE_SELECTED": "Merge selected",
-    "LOCK_TRANSPARENCY": "Lock transparency",
-    "COULD_NOT_LOAD_PALETTE": "Couldn't fetch palettes",
-    "NO_PALETTES_FOUND": "No palettes found.",
-    "LOSPEC_LINK_TEXT": "I heard you can find some here: lospec.com/palette-list",
-    "PALETTE_BROWSER": "Palette Browser",
-    "DELETE_PALETTE_CONFIRMATION": "Are you sure you want to delete this palette? This cannot be undone.",
-    "SHORTCUTS_IMPORTED": "Shortcuts from {0} were imported successfully.",
-    "SHORTCUT_PROVIDER_DETECTED": "We've detected, that you have {0} installed. Do you want to import shortcuts from it?",
-    "IMPORT_INSTALLATION_OPTION1": "Import from installation",
-    "IMPORT_INSTALLATION_OPTION2": "Use defaults",
-    "IMPORT_FROM_TEMPLATE": "Import from template",
-    "SHORTCUTS_IMPORTED_SUCCESS": "Shortcuts were imported successfully.",
-    "WARNING_RESET_SHORTCUTS_DEFAULT": "Are you sure you want to reset all shortcuts to their default value?",
-    "SUCCESS": "Success",
-    "WARNING": "Warning",
-    "ERROR_IMPORTING_IMAGE": "An error occured while importing the image.",
-    "SHORTCUTS_CORRUPTED_TITLE": "Corrupted shortcuts file",
-    "SHORTCUTS_CORRUPTED": "Shortcuts file was corrupted, resetting to default.",
-    "FAILED_DOWNLOAD_PALETTE": "Failed to download palette",
-    "FILE_INCORRECT_FORMAT": "The file was not in a correct format",
-    "INVALID_FILE": "Invalid file",
-    "SHORTCUTS_FILE_INCORRECT_FORMAT": "Shortcuts file was not in a correct format",
-    "UNSUPPORTED_FILE_FORMAT": "This file format is unsupported",
-    "ALREADY_ASSIGNED": "Already assigned",
-    "REPLACE": "Replace",
-    "SWAP": "Swap",
-    "SHORTCUT_ALREADY_ASSIGNED_SWAP": "This shortcut is already assigned to '{0}'\nDo you want to replace the existing shortcut or swap the two?",
-    "SHORTCUT_ALREADY_ASSIGNED_OVERWRITE": "This shortcut is already assigned to '{0}'\nDo you want to replace the existing shortcut?",
-    "UNSAVED_CHANGES": "Unsaved changes",
-    "DOCUMENT_MODIFIED_SAVE": "The document has been modified. Do you want to save changes?",
-    "PROJECT_MAINTAINERS": "Project Maintainers",
-    "OTHER_AWESOME_CONTRIBUTORS": "And other awesome contributors",
-    "HELP": "Help",
-    "STOP_IT_TEXT3": "No, really, stop it.",
-    "STOP_IT_TEXT4": "Don't you have anything better to do?",
-    "LINEAR_DODGE_BLEND_MODE": "Linear dodge (Add)",
-    "PRESS_ANY_KEY": "Press any key",
-    "NONE_SHORTCUT": "None",
-    "REFERENCE": "Reference",
-    "PUT_REFERENCE_LAYER_ABOVE": "Put reference layer above",
-    "PUT_REFERENCE_LAYER_BELOW": "Put reference layer below",
-    "TOGGLE_VERTICAL_SYMMETRY": "Toggle vertical symmetry",
-    "TOGGLE_HORIZONTAL_SYMMETRY": "Toggle horizontal symmetry",
-    "RESET_VIEWPORT": "Reset viewport",
-    "MOVE_TOOL_ACTION_DISPLAY_TRANSFORMING": "Click and hold mouse to move pixels in selected layers.",
-    "CTRL_KEY": "Ctrl",
-    "SHIFT_KEY": "Shift",
-    "ALT_KEY": "Alt",
-    "RENAME": "Rename",
-    "PIXEL_UNIT": "px",
-    "OPEN_LOCALIZATION_DEBUG_WINDOW": "Open Localization Debug Window",
-    "FORCE_OTHER_FLOW_DIRECTION": "Force other flow direction",
-    "API_KEY": "API Key",
-    "LOCALIZATION_VIEW_TYPE": "Localization View Type",
-    "LOAD_LANGUAGE_FROM_FILE": "Load language from file",
-    "LOG_IN": "Log in",
-    "SYNC": "Sync",
-    "NOT_LOGGED_IN": "Not logged in",
-    "POE_EDITOR_ERROR": "POEditor Error: {0} {1}",
-    "HTTP_ERROR_MESSAGE": "HTTP Error: {0} {1}",
-    "LOGGED_IN": "Logged in",
-    "SYNCED_SUCCESSFULLY": "Synced successfully",
-    "EXCEPTION_ERROR": "Exception: {0}",
-    "DROP_PALETTE": "Drop palette here",
-    "SECURITY_ERROR": "Security error",
-    "SECURITY_ERROR_MSG": "No rights to write to the specified location.",
-    "IO_ERROR": "IO error",
-    "IO_ERROR_MSG": "Error while writing to disk.",
-    "COULD_NOT_SAVE_PALETTE": "There was an error while saving the palette.",
-    "NO_COLORS_TO_SAVE": "There are no colors to save.",
-    "CANVAS": "Canvas",
-    "SINGLE_LAYER": "Single Layer",
-    "CHOOSE": "Choose",
-    "REMOVE": "Remove",
-    "FILE_FORMAT_NOT_ASEPRITE_KEYS": "File is not a \".aseprite-keys\" file",
-    "FILE_HAS_INVALID_SHORTCUT": "The file contains an invalid shortcut",
-    "FILE_EXTENSION_NOT_SUPPORTED": "The file type '{0}' is not supported",
-    "ERROR_READING_FILE": "Error while reading the file",
-    "DISCARD_PALETTE": "Discard palette",
-    "DISCARD_PALETTE_CONFIRMATION": "Are you sure you want to discard current palette? This cannot be undone.",
-    "IMPORT_AS_NEW_LAYER": "Import as new layer",
-    "PASTE_AS_PRIMARY_COLOR": "Paste as primary color",
-    "IMPORT_AS_NEW_FILE": "Import as new file",
-    "IMPORT_PALETTE_FILE": "Import palette file",
-    "IMPORT_MULTIPLE_PALETTE_COLORS": "Import colors into palette",
-    "IMPORT_SINGLE_PALETTE_COLOR": "Import color into palette",
-    "IMPORT_AS_REFERENCE_LAYER": "Import as reference layer",
-    "NAVIGATOR_PICK_ACTION_DISPLAY": "Right-click to pick color, Shift-right-click to copy color to clipboard",
-    "OPEN_FILE_FROM_CLIPBOARD": "Open from clipboard",
-    "OPEN_FILE_FROM_CLIPBOARD_DESCRIPTIVE": "Open from clipboard",
-    "OPEN_LOCALIZATION_DATA": "Do you want to open the LocalizationData.json?\nThe updated date has been put in the clipboard.\nNote that changes wont be applied until a restart",
-    "DOWNLOADING_LANGUAGE_FAILED": "Downloading language failed.\nAPI Key might have been overused.",
-    "LOCALIZATION_DATA_NOT_FOUND": "Localization data path not found",
-    "APPLY": "Apply",
-    "UPDATE_SOURCE": "Update source",
-    "COPY_TO_CLIPBOARD": "Copy to clipboard",
-    "LANGUAGE_FILE_NOT_FOUND": "Language file not found.\nLooking for {0}",
-    "PROJECT_ROOT_NOT_FOUND": "PixiEditor Project root not found.\nLooking for PixiEditor.csproj",
-    "LOCALIZATION_FOLDER_NOT_FOUND": "Localization folder not found.\nLooking for /Data/Localization",
-    "SELECT_A_LANGUAGE": "Select a language",
-    "DONE": "Done",
-    "SOURCE_UNSET_OR_MISSING": "Source missing/unset",
-    "SOURCE_NEWER": "Source newer",
-    "SOURCE_UP_TO_DATE": "Source is up to date",
-    "SOURCE_OLDER": "Cloud newer",
-    "COLOR_PICKER_ACTION_DISPLAY_REFERENCE_ONLY": "Click to pick colors from the reference layer.",
-    "COLOR_PICKER_ACTION_DISPLAY_CANVAS_ONLY": "Click to pick colors from the canvas.",
-    "LOCALIZATION_DEBUG_WINDOW_TITLE": "Localization Debug Window",
-    "SHORTCUTS_TITLE": "Shortcuts",
-    "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_SHEAR_PERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Hold Alt and drag a side handle to shear. Drag outside handles to rotate.",
-    "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_SHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Hold Alt and drag a side handle to shear. Drag outside handles to rotate.",
-    "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_NOSHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Drag outside handles to rotate.",
-    "TRANSFORM_ACTION_DISPLAY_SCALE_NOROTATE_NOSHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally.",
-    "LOCAL_PALETTE_SOURCE_NAME": "Local",
-    "ERROR_FORBIDDEN_UNIQUE_NAME": "Extension unique name cannot start with 'pixieditor'.",
-    "ERROR_MISSING_METADATA": "Extension metadata key '{0}' is missing.",
-    "ERROR_NO_CLASS_ENTRY": "Extension class entry is missing on path '{0}'.",
-    "ERROR_NO_ENTRY_ASSEMBLY": "Extension entry assembly is missing on path '{0}'.",
-    "ERROR_MISSING_ADDITIONAL_CONTENT": "Your current setup doesn't allow loading this extension. Perhaps you don't own it or don't have it installed. You can purchase it here '{0}'.",
-    "BUY_SUPPORTER_PACK": "Buy Supporter Pack",
-    "NEWS": "News",
-    "DISABLE_NEWS_PANEL": "Disable News panel in startup window",
-    "FAILED_FETCH_NEWS": "Failed to fetch news",
-    "CROP_TO_SELECTION": "Crop to selection",
-    "CROP_TO_SELECTION_DESCRIPTIVE": "Crop image to selection",
-    "SHOW_CONTEXT_MENU": "Show context menu",
-    "ERASE": "Erase",
-    "USE_SECONDARY_COLOR": "Use secondary color",
-    "RIGHT_CLICK_MODE": "Right click mode",
-    "ADD_PRIMARY_COLOR_TO_PALETTE": "Add primary color to palette",
-    "ADD_PRIMARY_COLOR_TO_PALETTE_DESCRIPTIVE": "Add primary color to current palette",
-    "EXPORT_SAVE_TITLE": "Choose a location to save the image",
-    "BROWSE_DIRECTORY": "Browse Directory",
-    "CRASH_NOT_ALL_DOCUMENTS_RECOVERED_TITLE": "Not all documents were recovered",
-    "CRASH_NOT_ALL_DOCUMENTS_RECOVERED": "Could not recover all documents. Git gud at saving your work.",
-    "SEND": "Send report",
-    "OPEN_DOCKABLE_MENU": "Open Tab",
-    "TIMELINE_TITLE": "Timeline",
-    "EXPORT_IMAGE_HEADER": "Image",
-    "EXPORT_ANIMATION_HEADER": "Animation",
-    "EXPORT_SPRITESHEET_HEADER": "Spritesheet",
-    "PIXI_FILE": "PixiEditor Files",
-    "PNG_FILE": "PNG Images",
-    "JPEG_FILE": "JPEG Images",
-    "WEBP_FILE": "WebP Images",
-    "GIF_FILE": "GIFs",
-    "BMP_FILE": "BMP Images",
-    "IMAGE_FILES": "Image Files",
-    "VIDEO_FILES": "Video Files",
-    "OPEN_TYPE_FONT": "OpenType Fonts",
-    "TRUE_TYPE_FONT": "TrueType Fonts",
-    "SVG_FILE": "Scalable Vector Graphics",
-    "MP4_FILE": "MP4 Videos",
-    "COLUMNS": "Columns",
-    "ROWS": "Rows",
-    "BACKGROUND": "Background",
-    "OPACITY": "Opacity",
-    "IS_VISIBLE": "Is visible",
-    "BLEND_MODE": "Blend mode",
-    "MASK": "Mask",
-    "MASK_IS_VISIBLE": "Mask is visible",
-    "OUTPUT": "Output",
-    "INPUT": "Input",
-    "NODE_GRAPH_TITLE": "Graph View",
-    "CONTENT": "Content",
-    "RADIUS": "Radius",
-    "STROKE_COLOR": "Stroke color",
-    "STROKE_WIDTH": "Stroke width",
-    "FILL_COLOR": "Fill color",
-    "TOP": "Top",
-    "BOTTOM": "Bottom",
-    "CHANNELS_DOCK_TITLE": "Channels",
-    "RED": "Red",
-    "GREEN": "Green",
-    "BLUE": "Blue",
-    "ALPHA": "Alpha",
-    "COLOR": "Color",
-    "COORDINATE": "Coordinate",
-    "VECTOR": "Vector",
-    "MATRIX": "Matrix",
-    "TRANSFORMED": "Transformed",
-    "GRAYSCALE": "Grayscale",
-    "CLAMP": "Clamp",
-    "SIZE": "Size",
-    "NOISE": "Noise",
-    "SCALE": "Scale",
-    "SEED": "Seed",
-    "KERNEL": "Kernel",
-    "KERNEL_VIEW_SUM": "Sum:",
-    "KERNEL_VIEW_SUM_TOOLTIP": "The sum of all values. You likely want to aim for a value of 1 or 0",
-    "GAIN": "Gain",
-    "BIAS": "Bias",
-    "TILE_MODE": "Tile Mode",
-    "ON_ALPHA": "On Alpha",
-    "OUTPUT_NODE": "Output",
-    "NOISE_NODE": "Noise",
-    "ELLIPSE_NODE": "Ellipse",
-    "LINE_NODE": "Line",
-    "LINE_START": "Start",
-    "LINE_END": "End",
-    "RECTANGLE_NODE": "Rectangle",
-    "CREATE_IMAGE_NODE": "Create Image",
-    "FOLDER_NODE": "Folder",
-    "IMAGE_LAYER_NODE": "Image Layer",
-    "KERNEL_FILTER_NODE": "Kernel Filter",
-    "MATH_NODE": "Math",
-    "COLOR_MATRIX_TRANSFORM_FILTER_NODE": "Matrix Transform Filter",
-    "MERGE_NODE": "Merge",
-    "MODIFY_IMAGE_LEFT_NODE": "Begin Modify Image",
-    "MODIFY_IMAGE_RIGHT_NODE": "End Modify Image",
-    "COMBINE_CHANNELS_NODE": "Combine Channels",
-    "COMBINE_COLOR_NODE": "Combine Color",
-    "COMBINE_VECD_NODE": "Combine Vector",
-    "COMBINE_VECI_NODE": "Combine Integer Vector",
-    "SEPARATE_CHANNELS_NODE": "Separate Channels",
-    "SEPARATE_VECD_NODE": "Separate Vector",
-    "SEPARATE_VECI_NODE": "Separate Integer Vector",
-    "SEPARATE_COLOR_NODE": "Separate Color",
-    "TIME_NODE": "Time",
-    "FILTERS": "Filters",
-    "PREVIOUS": "Previous",
-    "FILL": "Fill",
-    "MATH_MODE": "Math Mode",
-    "NOISE_TYPE": "Noise Type",
-    "OCTAVES": "Octaves",
-    "ACTIVE_FRAME": "Active Frame",
-    "NORMALIZED_TIME": "Normalized Time",
-    "WITHOUT_FILTERS": "Without filters",
-    "RAW_LAYER_OUTPUT": "Raw",
-    "EXAMPLE_FILES": "Example Files",
-    "PROCEDURAL_GENERATION": "Procedural Animation",
-    "POND_EXAMPLE": "Pond",
-    "TREE_EXAMPLE": "Windy Tree",
-    "OUTLINE_EXAMPLE": "Automatic Outline",
-    "BETA_ANIMATIONS": "Animations",
-    "SLIME_EXAMPLE": "Animated Slime",
-    "APPLY_FILTER_NODE": "Apply Filter",
-    "FILTER": "Filter",
-    "LERP_NODE": "Lerp",
-    "GRAYSCALE_FILTER_NODE": "Grayscale Filter",
-    "FROM": "From",
-    "TO": "To",
-    "TIME": "Time",
-    "WARMING_UP": "Warming up",
-    "RENDERING_FRAME": "Generating Frame {0}/{1}",
-    "RENDERING_VIDEO": "Rendering Video",
-    "FINISHED": "Finished",
-    "GENERATING_SPRITE_SHEET": "Generating Sprite Sheet",
-    "RENDERING_IMAGE": "Rendering Image",
-    "PROGRESS_POPUP_TITLE": "Progress",
-    "POINTS": "Points",
-    "MIN_DISTANCE": "Min. Distance",
-    "MAX_POINTS": "Max. Points",
-    "DISTRIBUTE_POINTS": "Distribute points",
-    "REMOVE_CLOSE_POINTS": "Remove close points",
-    "RASTERIZE_SHAPE": "Rasterize Shape",
-    "MODE": "Mode",
-    "Factor": "Factor",
-    "NORMALIZE": "Normalize",
-    "WEIGHT_FACTOR": "Weight",
-    "STARS_EXAMPLE": "Stars",
-    "ADD_EMPTY_FRAME": "Add empty frame",
-    "DUPLICATE_FRAME": "Duplicate frame",
-    "DELETE_FRAME": "Remove frame",
-    "DEFAULT_MEMBER_NAME": "New Element",
-    "NO_PARSER_FOUND": "No file parser found for extension '{0}'",
-    "SELECT_FILE_FORMAT": "Select file format",
-    "SELECT_FILE_FORMAT_DESCRIPTION": "Multiple file types of the same format are supported. Please select the one you want to use.",
-    "NEW_PALETTE_FILE": "palette",
-    "ISLAND_EXAMPLE": "Islands",
-    "ONION_FRAMES_COUNT": "Onion frames",
-    "ONION_OPACITY": "Onion opacity",
-    "TOGGLE_ONION_SKINNING": "Toggle onion skinning",
-    "CHANGE_ACTIVE_FRAME_PREVIOUS": "Change active frame to previous",
-    "CHANGE_ACTIVE_FRAME_NEXT": "Change active frame to next",
-    "TOGGLE_ANIMATION": "Toggle animation",
-    "NEW_FROM_CLIPBOARD": "New from clipboard",
-    "OFFSET": "Offset",
-    "SHAPE": "Shape",
-    "STRUCTURE": "Structure",
-    "NUMBERS": "Numbers",
-    "OPERATIONS": "Operations",
-    "GENERATION": "Generation",
-    "NUMBER": "Number",
-    "ANIMATION": "Animation",
-    "SAMPLE_IMAGE": "Sample Image",
-    "POSITION": "Position",
-    "MATH_ADD": "Add",
-    "MATH_SUBTRACT": "Subtract",
-    "MULTIPLY": "Multiply",
-    "DIVIDE": "Divide",
-    "SIN": "Sin",
-    "COS": "Cos",
-    "TAN": "Tan",
-    "GREATER_THAN": "Greater than",
-    "LESS_THAN": "Less than",
-    "LESS_THAN_OR_EQUAL": "Less than or equal",
-    "COMPARE": "Compare",
-    "MATH_POWER": "Power",
-    "LOGARITHM": "Logarithm",
-    "NATURAL_LOGARITHM": "Natural logarithm",
-    "ROOT": "Root",
-    "INVERSE_ROOT": "Inverse root",
-    "FRACTION": "Fraction",
-    "NEGATE": "Negate",
-    "FLOOR": "Floor",
-    "CEIL": "Ceil",
-    "ROUND": "Round",
-    "MODULO": "Modulo",
-    "STEP": "Step",
-    "SMOOTH_STEP": "Smoothstep",
-    "PIXEL_ART_TOOLSET": "Pixel Art",
-    "VECTOR_TOOLSET": "Vector",
-    "VECTOR_LAYER": "Vector Layer",
-    "STROKE_COLOR_LABEL": "Stroke",
-    "SYNC_WITH_PRIMARY_COLOR_LABEL": "Sync with primary color",
-    "RASTERIZE": "Rasterize",
-    "RASTERIZE_ACTIVE_LAYER": "Rasterize active layer",
-    "RASTERIZE_ACTIVE_LAYER_DESCRIPTIVE": "Convert/Rasterize the active layer into a image (raster) layer.",
-    "NEW_ELLIPSE_LAYER_NAME": "Ellipse",
-    "NEW_RECTANGLE_LAYER_NAME": "Rectangle",
-    "NEW_LINE_LAYER_NAME": "Line",
-    "RENDER_OUTPUT": "Render Output",
-    "PAINT_TOOLSET": "Painting",
-    "HARDNESS_SETTING": "Hardness",
-    "SPACING_SETTING": "Spacing",
-    "ANTI_ALIASING_SETTING": "Anti-aliasing",
-    "TOLERANCE_LABEL": "Tolerance",
-    "TOGGLE_SNAPPING": "Toggle snapping",
-    "HIGH_RES_PREVIEW": "High Resolution Preview",
-    "LOW_RES_PREVIEW": "Document Resolution Preview",
-    "TOGGLE_HIGH_RES_PREVIEW": "Toggle high resolution preview",
-    "FACTOR": "Factor",
-    "PATH_TOOL": "Path",
-    "PATH_TOOL_TOOLTIP": "Create vector paths and curves ({0}).",
-    "PATH_TOOL_ACTION_DISPLAY": "Click to add a point.",
-    "PATH_TOOL_ACTION_DISPLAY_CTRL": "Click on existing point and drag to make it a curve. Tap on a control point to select it.",
-    "PATH_TOOL_ACTION_DISPLAY_SHIFT": "Click to create a new layer.",
-    "PATH_TOOL_ACTION_DISPLAY_CTRL_SHIFT": "Tap on a control point to add it to the selection.",
-    "PATH_TOOL_ACTION_DISPLAY_ALT": "Click on a control point and move to adjust only one side of the curve.",
-    "DEFAULT_PATH_LAYER_NAME": "Path",
-    "DELETE_NODES": "Delete nodes",
-    "DELETE_NODES_DESCRIPTIVE": "Delete selected nodes",
-    "DELETE_CELS": "Delete cels",
-    "DELETE_CELS_DESCRIPTIVE": "Delete selected cels",
-    "COPY_COLOR_TO_CLIPBOARD": "Copy color to clipboard",
-    "VIEWPORT_ROTATION": "Viewport rotation",
-    "NEXT_TOOL_SET": "Next tool set",
-    "PREVIOUS_TOOL_SET": "Previous tool set",
-    "FILL_MODE": "Fill mode",
-    "USE_LINEAR_SRGB_PROCESSING": "Use linear sRGB for processing colors",
-    "USE_LINEAR_SRGB_PROCESSING_DESC": "Convert document using sRGB blending mode to linear sRGB for processing colors. This will affect the colors of the document, but will make blending more accurate.",
-    "FILL_TYPE_WINDING": "Winding",
-    "FILL_TYPE_EVEN_ODD": "Even Odd",
-    "FILL_TYPE_INVERSE_WINDING": "Inverse Winding",
-    "FILL_TYPE_INVERSE_EVEN_ODD": "Inverse Even Odd",
-    "STROKE_CAP": "Stroke Cap",
-    "STROKE_JOIN": "Stroke Join",
-    "COPY_VISIBLE": "Copy visible",
-    "COPY_VISIBLE_DESCRIPTIVE": "Copy visible pixels",
-    "COLOR_SAMPLE_MODE": "Sample mode",
-    "CREATE_CEL": "Create cel",
-    "CREATE_CEL_DESCRIPTIVE": "Create a new cel",
-    "DUPLICATE_CEL": "Duplicate cel",
-    "DUPLICATE_CEL_DESCRIPTIVE": "Duplicate cel in the current frame",
-    "RENDER_PREVIEW": "Render preview",
-    "OUTPUT_NAME": "Output name",
-    "CUSTOM_OUTPUT_NODE": "Custom Output",
-    "TOGGLE_HUD": "Toggle HUD",
-    "OPEN_TIMELINE": "Open timeline",
-    "OPEN_NODE_GRAPH": "Open node graph",
-    "TOGGLE_PLAY": "Play/Pause animation",
-    "COPY_NODES": "Copy nodes",
-    "COPY_NODES_DESCRIPTIVE": "Copy selected nodes",
-    "PASTE_NODES": "Paste nodes",
-    "PASTE_NODES_DESCRIPTIVE": "Paste copied nodes",
-    "COPY_CELS": "Copy cels",
-    "COPY_CELS_DESCRIPTIVE": "Copy selected cels",
-    "TOGGLE_ONION_SKINNING_DESCRIPTIVE": "Toggle onion skinning",
-    "VALUE": "Value",
-    "TARGET": "Target",
-    "EPSILON": "Epsilon",
-    "PRESERVE_ALPHA": "Preserve alpha",
-    "BLUR_FILTER_NODE": "Gaussian Blur Filter",
-    "LENGTH": "Length",
-    "GREATER_THAN_OR_EQUAL": "Greater than or equal",
-    "COLOR_NODE": "Color",
-    "CONVERT_TO_CURVE": "Convert to curve",
-    "CONVERT_TO_CURVE_DESCRIPTIVE": "Convert selected vector layer to a curve/path",
-    "FONT_FILES": "Font Files",
-    "UNIT_PT": "pt",
-    "FONT_LABEL": "Family",
-    "FONT_SIZE_LABEL": "Size",
-    "SPACING_LABEL": "Spacing",
-    "TEXT_TOOL": "Text",
-    "MISSING_FONT": "Missing font",
-    "TEXT_LAYER_NAME": "Text",
-    "TEXT_TOOL_TOOLTIP": "Create text ({0}).",
-    "BOLD_TOOLTIP": "Bold",
-    "ITALIC_TOOLTIP": "Italic",
-    "CUSTOM_FONT": "Custom font",
-    "DUMP_GPU_DIAGNOSTICS": "Dump GPU diagnostics",
-    "USE_SRGB_PROCESSING": "Use sRGB for processing colors",
-    "USE_SRGB_PROCESSING_DESC": "Convert document using linear sRGB to sRGB for processing colors. This will affect the colors of the document.",
-    "TEXT_NODE": "Text",
-    "TEXT_LABEL": "Text",
-    "TEXT_ON_PATH_NODE": "Text on Path",
-    "HIGH_DPI_RENDERING": "High DPI Rendering",
-    "THICKNESS": "Thickness",
-    "TYPE": "Type",
-    "EFFECTS": "Effects",
-    "OUTLINE_NODE": "Outline",
-    "POSTERIZATION_NODE": "Posterize",
-    "RGB_POSTERIZATION_MODE": "RGB",
-    "LUMINANCE_POSTERIZATION_MODE": "Luminance",
-    "LEVELS": "Levels",
-    "SHADER_CODE": "Shader Code",
-    "SHADER_NODE": "Shader",
-    "FAILED_TO_OPEN_EDITABLE_STRING_TITLE": "Failed to open file",
-    "FAILED_TO_OPEN_EDITABLE_STRING_MESSAGE": "Failed to edit this string in external editor. Reason: {0}",
-    "STRING_EDIT_IN_DEFAULT_APP": "Edit in default app",
-    "STRING_OPEN_IN_FOLDER": "Open in folder",
-    "DISCO_BALL_EXAMPLE": "Disco Ball",
-    "COLOR_SPACE": "Color Space",
-    "PHOTO_EXAMPLES": "Photo",
-    "MASK_EXAMPLE": "Mask",
-    "SHADOW_NODE": "Shadow Filter",
-    "INPUT_MATRIX": "Input Matrix",
-    "OUTPUT_MATRIX": "Output Matrix",
-    "CENTER": "Center",
-    "CANVAS_POSITION": "Canvas Position",
-    "CENTER_POSITION": "Center Position",
-    "TILE_MODE_X": "Tile Mode X",
-    "TILE_MODE_Y": "Tile Mode Y",
-    "TILE_NODE": "Tile",
-    "SKEW": "Skew",
-    "OFFSET_NODE": "Offset",
-    "SKEW_NODE": "Skew",
-    "SCALE_NODE": "Scale",
-    "ROTATE_NODE": "Rotate",
-    "TRANSFORM_NODE": "Transform",
-    "UNIT": "Unit",
-    "ANGLE": "Angle",
-    "DOCUMENT_INFO_NODE": "Document Info",
-    "MASK_NODE": "Mask",
-    "SEPIA_FILTER_NODE": "Sepia Filter",
-    "INTENSITY": "Intensity",
-    "INVERT_FILTER_NODE": "Invert Filter",
-    "COLOR_ADJUSTMENTS_FILTER": "Color Adjustments Filter",
-    "ADJUST_BRIGHTNESS": "Adjust Brightness",
-    "ADJUST_CONTRAST": "Adjust Contrast",
-    "ADJUST_SATURATION": "Adjust Saturation",
-    "ADJUST_TEMPERATURE": "Adjust Temperature",
-    "ADJUST_TINT": "Adjust Tint",
-    "ADJUST_HUE": "Adjust Hue",
-    "HUE_VALUE": "Hue",
-    "SATURATION_VALUE": "Saturation",
-    "BRIGHTNESS_VALUE": "Brightness",
-    "CONTRAST_VALUE": "Contrast",
-    "TEMPERATURE_VALUE": "Temperature",
-    "TINT_VALUE": "Tint",
-    "UNEXPECTED_SHUTDOWN": "Unexpected shutdown",
-    "UNEXPECTED_SHUTDOWN_MSG": "PixiEditor was unexpectedly shut down. We've loaded latest autosave of your files.",
-    "OK": "OK",
-    "OPEN_AUTOSAVES": "Browse Autosaves",
-    "AUTOSAVE_SETTINGS_HEADER": "Autosave",
-    "AUTOSAVE_SETTINGS_SAVE_STATE": "Reopen last files on startup",
-    "AUTOSAVE_SETTINGS_PERIOD": "Autosave period",
-    "AUTOSAVE_ENABLED": "Autosave enabled",
-    "MINUTE_UNIVERSAL": "min",
-    "AUTOSAVE_SETTINGS_SAVE_USER_FILE": "Autosave to selected file",
-    "LOAD_LAZY_FILE_MESSAGE": "To improve startup time, PixiEditor didn't load this file. Click the button below to load it.",
-    "EASING_NODE": "Easing",
-    "EASING_TYPE": "Easing Type",
-    "OPEN_DIRECTORY_ON_EXPORT": "Open directory on export",
-    "ERROR_LOOP_DETECTED_MESSAGE": "Moving this layer will create a loop. Fix it in the Node Graph.",
-    "LINEAR_EASING_TYPE": "Linear",
-    "IN_SINE_EASING_TYPE": "In Sine",
-    "OUT_SINE_EASING_TYPE": "Out Sine",
-    "IN_OUT_SINE_EASING_TYPE": "In Out Sine",
-    "IN_QUAD_EASING_TYPE": "In Quad",
-    "OUT_QUAD_EASING_TYPE": "Out Quad",
-    "IN_OUT_QUAD_EASING_TYPE": "In Out Quad",
-    "IN_CUBIC_EASING_TYPE": "In Cubic",
-    "OUT_CUBIC_EASING_TYPE": "Out Cubic",
-    "IN_OUT_CUBIC_EASING_TYPE": "In Out Cubic",
-    "IN_QUART_EASING_TYPE": "In Quart",
-    "OUT_QUART_EASING_TYPE": "Out Quart",
-    "IN_OUT_QUART_EASING_TYPE": "In Out Quart",
-    "IN_QUINT_EASING_TYPE": "In Quint",
-    "OUT_QUINT_EASING_TYPE": "Out Quint",
-    "IN_OUT_QUINT_EASING_TYPE": "In Out Quint",
-    "IN_EXPO_EASING_TYPE": "In Expo",
-    "OUT_EXPO_EASING_TYPE": "Out Expo",
-    "IN_OUT_EXPO_EASING_TYPE": "In Out Expo",
-    "IN_CIRC_EASING_TYPE": "In Circ",
-    "OUT_CIRC_EASING_TYPE": "Out Circ",
-    "IN_OUT_CIRC_EASING_TYPE": "In Out Circ",
-    "IN_BACK_EASING_TYPE": "In Back",
-    "OUT_BACK_EASING_TYPE": "Out Back",
-    "IN_OUT_BACK_EASING_TYPE": "In Out Back",
-    "IN_ELASTIC_EASING_TYPE": "In Elastic",
-    "OUT_ELASTIC_EASING_TYPE": "Out Elastic",
-    "IN_OUT_ELASTIC_EASING_TYPE": "In Out Elastic",
-    "IN_BOUNCE_EASING_TYPE": "In Bounce",
-    "OUT_BOUNCE_EASING_TYPE": "Out Bounce",
-    "IN_OUT_BOUNCE_EASING_TYPE": "In Out Bounce",
-    "R_G_B_COMBINE_SEPARATE_COLOR_MODE": "RGB",
-    "H_S_V_COMBINE_SEPARATE_COLOR_MODE": "HSV",
-    "H_S_L_COMBINE_SEPARATE_COLOR_MODE": "HSL",
-    "COLOR_MANAGED_COLOR_SAMPLE_MODE": "Color Managed",
-    "RAW_COLOR_SAMPLE_MODE": "Raw",
-    "FRACTAL_PERLIN_NOISE_TYPE": "Perlin",
-    "TURBULENCE_PERLIN_NOISE_TYPE": "Turbulence",
-    "VORONOI_NOISE_TYPE": "Voronoi",
-    "VORONOI_FEATURE": "Feature",
-    "F1_VORONOI_FEATURE": "F1",
-    "F2_VORONOI_FEATURE": "F2",
-    "F2_MINUS_F1_VORONOI_FEATURE": "F2-F1",
-    "RANDOMNESS": "Randomness",
-    "ANGLE_OFFSET": "Angle Offset",
-    "INHERIT_COLOR_SPACE_TYPE": "Inherit",
-    "SRGB_COLOR_SPACE_TYPE": "sRGB",
-    "LINEAR_SRGB_COLOR_SPACE_TYPE": "Linear sRGB",
-    "SIMPLE_OUTLINE_TYPE": "Simple",
-    "GAUSSIAN_OUTLINE_TYPE": "Gaussian",
-    "PIXEL_PERFECT_OUTLINE_TYPE": "Pixel Perfect",
-    "DEGREES_ROTATION_TYPE": "Degrees",
-    "RADIANS_ROTATION_TYPE": "Radians",
-    "WEIGHTED_GRAYSCALE_MODE": "Weighted",
-    "AVERAGE_GRAYSCALE_MODE": "Average",
-    "CUSTOM_GRAYSCALE_MODE": "Custom",
-    "CLAMP_TILE_MODE": "Clamp",
-    "REPEAT_TILE_MODE": "Repeat",
-    "MIRROR_TILE_MODE": "Mirror",
-    "DECAL_TILE_MODE": "Decal",
-    "ERR_UNKNOWN_FILE_FORMAT": "Unknown file format",
-    "ERR_EXPORT_SIZE_INVALID": "Invalid export size. Values must be greater than 0.",
-    "ERR_UNKNOWN_IMG_FORMAT": "Unknown image format '{0}'.",
-    "ERR_FAILED_GENERATE_SPRITE_SHEET": "Failed generating sprite sheet",
-    "ERR_NO_RENDERER": "Animation renderer not found.",
-    "ERR_RENDERING_FAILED": "Rendering failed",
-    "ENABLE_ANALYTICS": "Send anonymous analytics",
-    "ANALYTICS_INFO": "We collect anonymous usage data to improve PixiEditor. No personal data is collected.",
-    "LANGUAGE_INFO": "All translations are community-driven. Join our Discord server for more information.",
-    "UP_TO_DATE_UNKNOWN": "Couldn't check for updates",
-    "UP_TO_DATE": "PixiEditor is up to date",
-    "UPDATE_AVAILABLE": "Update {0} is available",
-    "UPDATE_FAILED_DOWNLOAD": "Failed to download the update",
-    "UPDATE_READY_TO_INSTALL": "Update is ready. Switch to {0}?",
-    "SWITCH_TO_NEW_VERSION": "Switch",
-    "DOWNLOAD_UPDATE": "Download",
-    "DOWNLOADING_UPDATE": "Downloading update...",
-    "CHECKING_FOR_UPDATES": "Checking for updates...",
-    "PAINT_SHAPE_SETTING": "Brush shape",
-    "BOOL_OPERATION_NODE": "Boolean Operation",
-    "FIRST_SHAPE": "First shape",
-    "SECOND_SHAPE": "Second shape",
-    "OPERATION": "Operation",
-    "UNION_VECTOR_PATH_OP": "Union",
-    "DIFFERENCE_VECTOR_PATH_OP": "Difference",
-    "INTERSECT_VECTOR_PATH_OP": "Intersect",
-    "XOR_VECTOR_PATH_OP": "XOR",
-    "REVERSE_DIFFERENCE_VECTOR_PATH_OP": "Reverse Difference",
-    "NO_DOCUMENT_OPEN": "Nothing's here",
-    "EMPTY_DOCUMENT_ACTION_BTN": "Start creating",
-    "ONBOARDING_TITLE": "Welcome to",
-    "ONBOARDING_DESCRIPTION": "Let's set up your workspace!",
-    "ONBOARDING_SKIP_BTN": "Skip",
-    "ONBOARDING_ACTION_BTN": "Let's begin",
-    "ONB_SELECT_PRIMARY_TOOLSET": "Select Your Primary Toolset",
-    "ONB_NEXT_BTN": "Next",
-    "ONB_FINISH_BTN": "Finish",
-    "ONB_BACK_BTN": "Previous",
-    "ONB_ANALYTICS": "Anonymous Analytics",
-    "ONB_ALL_SET": "You are all set!",
-    "ONB_ALL_SET_BTN": "Start creating",
-    "ANALYTICS_INFO_DETAILED": "PixiEditor collects anonymous usage data to improve the app. The data does not contain any personal information. Among other things, PixiEditor tracks the following:\n- Which and how the tools are used\n- How long you've used the app for\n- Which commands are used\n- Performance data\n\n You can opt out of analytics at any time in the settings.",
-    "PRIVACY_POLICY": "Privacy Policy",
-    "ONB_SHORTCUTS": "Select Your Shortcuts",
-    "GRAPH_STATE_UNABLE_TO_CREATE_MEMBER": "Current Node Graph setup disallows creation of a new layer next to the selected one.",
-    "PRIMARY_TOOLSET": "Primary Toolset",
-    "OPEN_ONBOARDING_WINDOW": "Open onboarding window",
-    "USER_NOT_FOUND": "Please enter the email you used to purchase the Founder's Edition.",
-    "SESSION_NOT_VALID": "Session is not valid, please log in again",
-    "SESSION_NOT_FOUND": "Session not found, try logging in again",
-    "INTERNAL_SERVER_ERROR": "There was an internal server error. Please try again later.",
-    "TOO_MANY_REQUESTS": "Too many requests. Try again in {0} seconds.",
-    "SESSION_EXPIRED": "Session expired. Please log in again.",
-    "CONNECTION_ERROR": "Connection error. Please check your internet connection.",
-    "FAIL_LOAD_USER_DATA": "Failed to load saved user data",
-    "LOGOUT": "Logout",
-    "LOGGED_IN_AS": "Hello",
-    "EMAIL_SENT": "Email sent! Check your inbox.",
-    "RESEND_ACTIVATION": "Resend",
-    "INVALID_TOKEN": "Session is invalid or expired. Please log in again.",
-    "ENTER_EMAIL": "Enter your email",
-    "LOGIN_LINK": "Send Login Link",
-    "LOGIN_LINK_INFO": "We'll email you a secure link to log in. No password needed.",
-    "ACCOUNT_WINDOW_TITLE": "Account",
-    "CONNECTION_TIMEOUT": "Connection timed out. Please try again.",
-    "OPEN_ACCOUNT_WINDOW": "Manage Account",
-    "AUTO_SCALE_BACKGROUND": "Auto scale background",
-    "UPDATES": "Updates",
-    "SCENE": "Scene",
-    "CUSTOM_BACKGROUND_SCALE": "Custom background scale",
-    "PRIMARY_BG_COLOR": "Primary background color",
-    "SECONDARY_BG_COLOR": "Secondary background color",
-    "RESET": "Reset",
-    "INSTALL": "Install",
-    "OWNED_PRODUCTS": "Owned Content",
-    "INSTALLING": "Installing",
-    "INSTALLED": "Installed",
-    "ACCOUNT_PROVIDER_INFO": "Account handled by",
-    "UPDATE": "Update",
-    "AUTOSAVE_OPEN_FOLDER": "Open autosave folder",
-    "AUTOSAVE_OPEN_FOLDER_DESCRIPTIVE": "Open the folder where autosaves are stored",
-    "AUTOSAVE_TOGGLE_DESCRIPTIVE": "Enable/disable autosave",
-    "FOUNDERS_BUNDLE": "Founder's Bundle",
-    "FOUNDERS_BUNDLE_SUBTEXT": "Support PixiEditor and boost your productivity!",
-    "BECOME_A_FOUNDER": "Become a Founder",
-    "LOGIN": "Login",
-    "NOT_FOUNDER_YET": "Not a Founder yet?",
-    "ERROR_GRAPH": "Graph setup produced an error. Fix it in the node graph",
-    "COLOR_MATRIX_FILTER_NODE": "Color Matrix Filter",
-    "WORKSPACE": "Workspace",
-    "IS_DEFAULT_EXPORT": "Is Default Export",
-    "EXPORT_OUTPUT": "Export Output",
-    "RENDER_OUTPUT_SIZE": "Render Output Size",
-    "RENDER_OUTPUT_CENTER": "Render Output Center",
-    "COLOR_PICKER": "Color Picker",
-    "UNAUTHORIZED_ACCESS": "Unauthorized access",
-    "SEPARATE_SHAPES": "Separate Shapes",
-    "SEPARATE_SHAPES_DESCRIPTIVE": "Separate shapes from current vector into individual layers",
-    "TEXT": "Text",
-    "EXTRACT_SELECTED_TEXT": "Extract selected text",
-    "EXTRACT_SELECTED_TEXT_DESCRIPTIVE": "Extract selected text into new layer.",
-    "EXTRACT_SELECTED_CHARACTERS": "Extract selected characters",
-    "EXTRACT_SELECTED_CHARACTERS_DESCRIPTIVE": "Extract individual characters from selection into new layers.",
-    "STEP_START": "Step back to closest cel",
-    "STEP_END": "Step forward to closest cel",
-    "STEP_FORWARD": "Step forward one frame",
-    "STEP_BACK": "Step back one frame",
-    "ANIMATION_QUALITY_PRESET": "Quality Preset",
-    "VERY_LOW_QUALITY_PRESET": "Very Low",
-    "LOW_QUALITY_PRESET": "Low",
-    "MEDIUM_QUALITY_PRESET": "Medium",
-    "HIGH_QUALITY_PRESET": "High",
-    "VERY_HIGH_QUALITY_PRESET": "Very High",
-    "EXPORT_FRAMES": "Export Frames",
-    "NORMALIZE_OFFSET": "Normalize Offset",
-    "TANGENT": "Tangent",
-    "EVALUATE_PATH_NODE": "Evaluate Path",
-    "OLD_MIN": "Old Min",
-    "OLD_MAX": "Old Max",
-    "NEW_MIN": "New Min",
-    "NEW_MAX": "New Max",
-    "REMAP_NODE": "Remap",
-    "TEXT_TOOL_ACTION_DISPLAY": "Click on the canvas to add a new text (drag while clicking to set the size). Click on existing text to edit it.",
-    "PASTE_CELS": "Paste cels",
-    "PASTE_CELS_DESCRIPTIVE": "Paste cels from clipboard into the current frame",
-    "SCALE_X": "Scale X",
-    "SCALE_Y": "Scale Y",
-    "TRANSLATE_X": "Translate X",
-    "TRANSLATE_Y": "Translate Y",
-    "SKEW_X": "Skew X",
-    "SKEW_Y": "Skew Y",
-    "PERSPECTIVE_0": "Perspective 0",
-    "PERSPECTIVE_1": "Perspective 1",
-    "PERSPECTIVE_2": "Perspective 2",
-    "COMPOSE_MATRIX": "Compose Matrix",
-    "DECOMPOSE_MATRIX": "Decompose Matrix",
-    "NORMALIZE_COORDINATES": "Normalize Coordinates",
-    "TRANSFORMED_POSITION": "Transformed Position",
-    "ACCOUNT_PROVIDER_NOT_AVAILABLE": "This build of PixiEditor does not support accounts. Use the official build from pixieditor.net to manage your account.",
-    "STEAM_OFFLINE": "Cannot validate the account. Steam is offline. Make sure Steam client is running and you are logged in.",
-    "ERROR_GPU_RESOURCES_CREATION": "Failed to create resources: Try updating your GPU drivers or try setting different rendering api in settings. \nError: '{0}'",
-    "ERROR_SAVING_PREFERENCES_DESC": "Failed to save preferences with error: '{0}'. Please check if you have write permissions to the PixiEditor data folder.",
-    "ERROR_SAVING_PREFERENCES": "Failed to save preferences",
-    "PREFERRED_RENDERER": "Preferred Render Api",
-    "PERFORMANCE": "Performance",
-    "DISABLE_PREVIEWS": "Disable Previews",
-    "MAX_BILINEAR_CANVAS_SIZE": "Max Bilinear Canvas Size",
-    "MAX_BILINEAR_CANVAS_SIZE_DESC": "Maximum canvas size for bilinear filtering. Set to 0 to disable bilinear filtering. Bilinear filtering improves the quality of the canvas, but can cause performance issues on large canvases.",
-    "INVERT_MASK": "Invert mask",
-    "TOGGLE_TINTING_SELECTION": "Toggle selection tinting",
-    "TOGGLE_TINTING_SELECTION_DESCRIPTIVE": "Toggle selection tinting",
-    "TINT_SELECTION": "Selection tinting",
-    "PAINT_BRUSH_SHAPE_CIRCLE": "Circle",
-    "PAINT_BRUSH_SHAPE_SQUARE": "Square",
-    "BRIGHTNESS_MODE_DEFAULT": "Default",
-    "BRIGHTNESS_MODE_REPEAT": "Repeat",
-    "ROUND_STROKE_CAP": "Round",
-    "BUTT_STROKE_CAP": "Butt",
-    "SQUARE_STROKE_CAP": "Square",
-    "ROUND_STROKE_JOIN": "Round",
-    "MITER_STROKE_JOIN": "Miter",
-    "BEVEL_STROKE_JOIN": "Bevel",
-    "TOGGLE_FULLSCREEN": "Toggle Fullscreen",
-    "TOGGLE_FULLSCREEN_DESCRIPTIVE": "Enter or Exit Fullscreen Mode"
+  "RECENT_FILES": "Recent Files",
+  "OPEN_FILE": "Open file",
+  "NEW_FILE": "New",
+  "RECENT_EMPTY_TEXT": "So much empty space",
+  "LANGUAGE": "Language",
+  "GENERAL": "General",
+  "DISCORD": "Discord",
+  "KEY_BINDINGS": "Key Bindings",
+  "MISC": "Misc",
+  "SHOW_STARTUP_WINDOW": "Show Startup Window",
+  "RECENT_FILE_LENGTH": "Recent file list length",
+  "RECENT_FILE_LENGTH_TOOLTIP": "How many documents are shown under File > Recent. Default: 8",
+  "DEFAULT_NEW_SIZE": "Default new file size",
+  "WIDTH": "Width",
+  "HEIGHT": "Height",
+  "TOOLS": "Tools",
+  "ENABLE_SHARED_TOOLBAR": "Enable shared toolbar",
+  "AUTOMATIC_UPDATES": "Automatic Updates",
+  "CHECK_FOR_UPDATES": "Check updates on startup",
+  "UPDATE_STREAM": "Update stream",
+  "UPDATE_CHANNEL_HELP_TOOLTIP": "Update channels can only be changed in standalone version (downloaded from https://pixieditor.net).\nSteam and Microsoft Store versions handle updates separately.",
+  "DEBUG": "Debug",
+  "ENABLE_DEBUG_MODE": "Enable Debug mode",
+  "OPEN_CRASH_REPORTS_DIR": "Open crash reports directory",
+  "DISCORD_RICH_PRESENCE": "Rich Presence",
+  "ENABLED": "Enabled",
+  "SHOW_IMAGE_NAME": "Show image name",
+  "SHOW_IMAGE_SIZE": "Show image size",
+  "SHOW_LAYER_COUNT": "Show layer count",
+  "FILE": "File",
+  "RECENT": "Recent",
+  "OPEN": "Open",
+  "SAVE_PIXI": "Save (.pixi)",
+  "SAVE_AS_PIXI": "Save as... (.pixi)",
+  "EXPORT_IMG": "Export (.png, .jpg, etc.)",
+  "EDIT": "Edit",
+  "EXIT": "Exit",
+  "PERCENTAGE": "Percentage",
+  "ABSOLUTE": "Absolute",
+  "PRESERVE_ASPECT_RATIO": "Preserve aspect ratio",
+  "ANCHOR_POINT": "Anchor point",
+  "RESIZE_IMAGE": "Resize image",
+  "RESIZE": "Resize",
+  "DOCUMENTATION": "Documentation",
+  "WEBSITE": "Website",
+  "OPEN_WEBSITE": "Open website",
+  "REPOSITORY": "Repository",
+  "OPEN_REPOSITORY": "Open repository",
+  "OPEN_DOCUMENTATION": "Open documentation",
+  "LICENSE": "License",
+  "OPEN_LICENSE": "Open license",
+  "THIRD_PARTY_LICENSES": "Third party licenses",
+  "OPEN_THIRD_PARTY_LICENSES": "Open third party licenses",
+  "APPLY_TRANSFORM": "Apply transform",
+  "INCREASE_TOOL_SIZE": "Increase tool size",
+  "DECREASE_TOOL_SIZE": "Decrease tool size",
+  "UPDATE_READY": "Update is ready to be installed. Do you want to install it now?",
+  "COULD_NOT_UPDATE_WITHOUT_ADMIN": "Couldn't update without admin privileges. Please run PixiEditor as administrator.",
+  "INSUFFICIENT_PERMISSIONS": "Insufficient permissions",
+  "VERSION": "Version {0}",
+  "BUILD_ID": "Build ID: {0}",
+  "OPEN_TEMP_DIR": "Open temp directory",
+  "OPEN_LOCAL_APPDATA_DIR": "Open Local AppData directory",
+  "OPEN_ROAMING_APPDATA_DIR": "Open Roaming AppData directory",
+  "OPEN_INSTALLATION_DIR": "Open installation directory",
+  "DUMP_ALL_COMMANDS": "Dump all commands",
+  "DUMP_ALL_COMMANDS_DESCRIPTIVE": "Dump all commands to a text file",
+  "CRASH": "Crash",
+  "CRASH_APP": "Crash application",
+  "DELETE_USR_PREFS": "Delete user preferences (Roaming AppData)",
+  "DELETE_SHORTCUT_FILE": "Delete shortcut file (Roaming AppData)",
+  "DELETE_EDITOR_DATA": "Delete editor data (Local AppData)",
+  "GENERATE_KEY_BINDINGS_TEMPLATE": "Generate key bindings template",
+  "GENERATE_KEY_BINDINGS_TEMPLATE_DESCRIPTIVE": "Generate key bindings json template",
+  "VALIDATE_SHORTCUT_MAP": "Validate shortcut map",
+  "VALIDATE_SHORTCUT_MAP_DESCRIPTIVE": "Validates shortcut map",
+  "VALIDATION_KEYS_NOTICE_DIALOG": "Empty keys: {0}\nUnknown Commands: {1}",
+  "RESULT": "Result",
+  "CLEAR_RECENT_DOCUMENTS": "Clear recent documents",
+  "CLEAR_RECENTLY_OPENED_DOCUMENTS": "Clear recently opened documents",
+  "OPEN_CMD_DEBUG_WINDOW": "Open command debug window",
+  "PATH_DOES_NOT_EXIST": "{0} does not exist.",
+  "LOCATION_DOES_NOT_EXIST": "Location does not exist.",
+  "FILE_NOT_FOUND": "File not found.",
+  "ARE_YOU_SURE": "Are you sure?",
+  "ARE_YOU_SURE_PATH_FULL_PATH": "Are you sure you want to delete {0}?\nThis data will be lost for all installations.\n(Full Path: {1})",
+  "FAILED_TO_OPEN_FILE": "Failed to open the file",
+  "OLD_FILE_FORMAT": "Old file format",
+  "OLD_FILE_FORMAT_DESCRIPTION": "This .pixi file uses the old format,\n which is no longer supported and can't be opened.",
+  "NOTHING_FOUND": "Nothing found",
+  "EXPORT": "Export",
+  "EXPORT_IMAGE": "Export image",
+  "IMPORT": "Import",
+  "SHORTCUT_TEMPLATES": "Shortcut templates",
+  "RESET_ALL": "Reset all",
+  "LAYER": "Layer",
+  "LAYER_DELETE_ALL_SELECTED": "Delete all selected layers/folders",
+  "LAYER_DELETE_ALL_SELECTED_DESCRIPTIVE": "Delete all selected layers and/or folders",
+  "NEW_FOLDER": "New folder",
+  "CREATE_NEW_FOLDER": "Create new folder",
+  "NEW_LAYER": "New layer",
+  "CREATE_NEW_LAYER": "Create new layer",
+  "NEW_IMAGE": "New image",
+  "CREATE_NEW_IMAGE": "Create new image",
+  "SAVE": "Save",
+  "SAVE_AS": "Save as...",
+  "IMAGE": "Image",
+  "SAVE_IMAGE": "Save image",
+  "SAVE_IMAGE_AS": "Save image as new",
+  "DUPLICATE": "Duplicate",
+  "DUPLICATE_SELECTED_LAYER": "Duplicate selected layer",
+  "CREATE_MASK": "Create mask",
+  "DELETE_MASK": "Delete mask",
+  "TOGGLE_MASK": "Toggle mask",
+  "APPLY_MASK": "Apply mask",
+  "TOGGLE_VISIBILITY": "Toggle visibility",
+  "MOVE_MEMBER_UP": "Move member upwards",
+  "MOVE_MEMBER_UP_DESCRIPTIVE": "Move selected layer or folder upwards",
+  "MOVE_MEMBER_DOWN": "Move member downwards",
+  "MOVE_MEMBER_DOWN_DESCRIPTIVE": "Move selected layer or folder downwards",
+  "MERGE_ALL_SELECTED_LAYERS": "Merge all selected layers",
+  "MERGE_WITH_ABOVE": "Merge selected layer with above",
+  "MERGE_WITH_ABOVE_DESCRIPTIVE": "Merge selected layer with the one above it",
+  "MERGE_WITH_BELOW": "Merge selected layer with below",
+  "MERGE_WITH_BELOW_DESCRIPTIVE": "Merge selected layer with the one below it",
+  "ADD_REFERENCE_LAYER": "Add Reference Layer",
+  "DELETE_REFERENCE_LAYER": "Delete reference layer",
+  "TRANSFORM_REFERENCE_LAYER": "Transform reference layer",
+  "TOGGLE_REFERENCE_LAYER_POS": "Toggle reference layer position",
+  "TOGGLE_REFERENCE_LAYER_POS_DESCRIPTIVE": "Toggle reference layer between topmost or most below",
+  "RESET_REFERENCE_LAYER_POS": "Reset reference layer position",
+  "CLIP_CANVAS": "Clip Canvas",
+  "FLIP_IMG_VERTICALLY": "Flip Image Vertically",
+  "FLIP_IMG_HORIZONTALLY": "Flip Image Horizontally",
+  "FLIP_LAYERS_VERTICALLY": "Flip Selected Layers Vertically",
+  "FLIP_LAYERS_HORIZONTALLY": "Flip Selected Layers Horizontally",
+  "ROT_IMG_90": "Rotate Image 90 degrees",
+  "ROT_IMG_180": "Rotate Image 180 degrees",
+  "ROT_IMG_-90": "Rotate Image -90 degrees",
+  "ROT_LAYERS_90": "Rotate Selected Layers 90 degrees",
+  "ROT_LAYERS_180": "Rotate Selected Layers 180 degrees",
+  "ROT_LAYERS_-90": "Rotate Selected Layers -90 degrees",
+  "TOGGLE_VERT_SYMMETRY_AXIS": "Toggle vertical symmetry axis",
+  "TOGGLE_HOR_SYMMETRY_AXIS": "Toggle horizontal symmetry axis",
+  "DELETE_SELECTED": "Delete selected",
+  "DELETE_SELECTED_DESCRIPTIVE": "Delete selected element (layer, pixels, etc.)",
+  "RESIZE_DOCUMENT": "Resize document",
+  "RESIZE_CANVAS": "Resize canvas",
+  "CENTER_CONTENT": "Center content",
+  "CUT": "Cut",
+  "CUT_DESCRIPTIVE": "Cut selected area/layers",
+  "PASTE": "Paste",
+  "PASTE_DESCRIPTIVE": "Paste clipboard contents",
+  "PASTE_AS_NEW_LAYER": "Paste as new layer",
+  "PASTE_AS_NEW_LAYER_DESCRIPTIVE": "Paste from clipboard as new layer",
+  "PASTE_REFERENCE_LAYER": "Paste reference layer",
+  "PASTE_REFERENCE_LAYER_DESCRIPTIVE": "Paste clipboard contents as reference layer",
+  "PASTE_COLOR": "Paste color",
+  "PASTE_COLOR_DESCRIPTIVE": "Paste color from clipboard",
+  "PASTE_COLOR_SECONDARY": "Paste color as secondary",
+  "PASTE_COLOR_SECONDARY_DESCRIPTIVE": "Paste color from clipboard as secondary color",
+  "CLIPBOARD": "Clipboard",
+  "COPY": "Copy",
+  "COPY_DESCRIPTIVE": "Copy to clipboard",
+  "COPY_COLOR_HEX": "Copy primary color (HEX)",
+  "COPY_COLOR_HEX_DESCRIPTIVE": "Copy primary color as HEX code",
+  "COPY_COLOR_RGB": "Copy primary color (RGB)",
+  "COPY_COLOR_RGB_DESCRIPTIVE": "Copy primary color as RGB code",
+  "COPY_COLOR_SECONDARY_HEX": "Copy secondary color (HEX)",
+  "COPY_COLOR_SECONDARY_HEX_DESCRIPTIVE": "Copy secondary color as HEX code",
+  "COPY_COLOR_SECONDARY_RGB": "Copy secondary color (RGB)",
+  "COPY_COLOR_SECONDARY_RGB_DESCRIPTIVE": "Copy secondary color as RGB code",
+  "PALETTE_COLORS": "Palette Colors",
+  "REPLACE_SECONDARY_BY_PRIMARY": "Replace secondary color by primary",
+  "REPLACE_PRIMARY_BY_SECONDARY": "Replace primary color by secondary",
+  "REPLACE_PRIMARY_BY_SECONDARY_DESCRIPTIVE": "Replace the primary color by the secondary color",
+  "OPEN_PALETTE_BROWSER": "Open palette browser",
+  "OVERWRITE_PALETTE_CONSENT": "Palette '{0}' already exists, do you want to overwrite it?",
+  "PALETTE_EXISTS": "Palette already exists",
+  "REPLACE_PALETTE_CONSENT": "Replace current palette with selected one?",
+  "REPLACE_PALETTE": "Replace current palette",
+  "SELECT_COLOR_1": "Select color 1",
+  "SELECT_COLOR_2": "Select color 2",
+  "SELECT_COLOR_3": "Select color 3",
+  "SELECT_COLOR_4": "Select color 4",
+  "SELECT_COLOR_5": "Select color 5",
+  "SELECT_COLOR_6": "Select color 6",
+  "SELECT_COLOR_7": "Select color 7",
+  "SELECT_COLOR_8": "Select color 8",
+  "SELECT_COLOR_9": "Select color 9",
+  "SELECT_COLOR_10": "Select color 10",
+  "SELECT_TOOL": "Select {0} Tool",
+  "SELECT_COLOR_1_DESCRIPTIVE": "Select the first color in the palette",
+  "SELECT_COLOR_2_DESCRIPTIVE": "Select the second color in the palette",
+  "SELECT_COLOR_3_DESCRIPTIVE": "Select the third color in the palette",
+  "SELECT_COLOR_4_DESCRIPTIVE": "Select the fourth color in the palette",
+  "SELECT_COLOR_5_DESCRIPTIVE": "Select the fifth color in the palette",
+  "SELECT_COLOR_6_DESCRIPTIVE": "Select the sixth color in the palette",
+  "SELECT_COLOR_7_DESCRIPTIVE": "Select the seventh color in the palette",
+  "SELECT_COLOR_8_DESCRIPTIVE": "Select the eighth color in the palette",
+  "SELECT_COLOR_9_DESCRIPTIVE": "Select the ninth color in the palette",
+  "SELECT_COLOR_10_DESCRIPTIVE": "Select the tenth color in the palette",
+  "SWAP_COLORS": "Swap colors",
+  "SWAP_COLORS_DESCRIPTIVE": "Swap primary and secondary colors",
+  "SEARCH": "Search",
+  "COMMAND_SEARCH": "Command search",
+  "OPEN_COMMAND_SEARCH": "Open command search window",
+  "SELECT": "Select",
+  "DESELECT": "Deselect",
+  "INVERT": "Invert",
+  "SELECTION": "Selection",
+  "SELECT_ALL": "Select all",
+  "SELECT_ALL_DESCRIPTIVE": "Select everything",
+  "CLEAR_SELECTION": "Clear selection",
+  "INVERT_SELECTION": "Invert selection",
+  "INVERT_SELECTION_DESCRIPTIVE": "Invert the selection",
+  "TRANSFORM_SELECTED_AREA": "Transform selected area",
+  "NUDGE_SELECTED_LEFT": "Nudge selected object left",
+  "NUDGE_SELECTED_RIGHT": "Nudge selected object right",
+  "NUDGE_SELECTED_UP": "Nudge selected object up",
+  "NUDGE_SELECTED_DOWN": "Nudge selected object down",
+  "MASK_FROM_SELECTION": "New mask from selection",
+  "MASK_FROM_SELECTION_DESCRIPTIVE": "Selection to new mask",
+  "ADD_SELECTION_TO_MASK": "Add selection to mask",
+  "SUBTRACT_SELECTION_FROM_MASK": "Subtract selection from mask",
+  "INTERSECT_SELECTION_MASK": "Intersect selection with mask",
+  "SELECTION_TO_MASK": "Selection to mask",
+  "TO_NEW_MASK": "to new mask",
+  "ADD_TO_MASK": "add to mask",
+  "SUBTRACT_FROM_MASK": "subtract from mask",
+  "INTERSECT_WITH_MASK": "intersect with mask",
+  "STYLUS": "Stylus",
+  "TOGGLE_PEN_MODE": "Toggle pen mode",
+  "UNDO": "Undo",
+  "UNDO_DESCRIPTIVE": "Undo last action",
+  "REDO": "Redo",
+  "REDO_DESCRIPTIVE": "Redo last action",
+  "WINDOWS": "Windows",
+  "TOGGLE_GRIDLINES": "Toggle gridlines",
+  "GRIDLINES_SIZE": "Grid Size",
+  "ZOOM_IN": "Zoom in",
+  "ZOOM_OUT": "Zoom out",
+  "NEW_WINDOW_FOR_IMG": "New window for current image",
+  "CENTER_ACTIVE_VIEWPORT": "Center active viewport",
+  "FLIP_VIEWPORT_HORIZONTALLY": "Flip viewport horizontally",
+  "FLIP_VIEWPORT_VERTICALLY": "Flip viewport vertically",
+  "SETTINGS": "Settings",
+  "OPEN_SETTINGS": "Open settings",
+  "OPEN_SETTINGS_DESCRIPTIVE": "Open settings window",
+  "OPEN_STARTUP_WINDOW": "Open startup window",
+  "OPEN_SHORTCUT_WINDOW": "Open shortcuts window",
+  "OPEN_ABOUT_WINDOW": "Open about window",
+  "OPEN_PREVIEW_WINDOW": "Open preview window",
+  "ERROR": "Error",
+  "INTERNAL_ERROR": "Internal error",
+  "ERROR_SAVE_LOCATION": "Couldn't save the file to the specified location",
+  "ERROR_WHILE_SAVING": "An internal error occured while saving. Please try again.",
+  "UNKNOWN_ERROR_SAVING": "An error occured while saving.",
+  "FAILED_ASSOCIATE_LOSPEC": "Failed to associate Lospec Palette protocol.",
+  "REDDIT": "Reddit",
+  "GITHUB": "GitHub",
+  "YOUTUBE": "YouTube",
+  "DONATE": "Donate",
+  "YES": "Yes",
+  "NO": "No",
+  "CANCEL": "Cancel",
+  "UNNAMED": "Unnamed",
+  "OPEN_COMMAND_DEBUG_WINDOW": "Open command debug window",
+  "DELETE": "Delete",
+  "USER_PREFS": "User preferences (Roaming)",
+  "SHORTCUT_FILE": "Shortcut file (Roaming)",
+  "EDITOR_DATA": "Editor data (Local)",
+  "MOVE_VIEWPORT_TOOLTIP": "Moves viewport. ({0})",
+  "MOVE_VIEWPORT_ACTION_DISPLAY": "Click and move to pan the viewport",
+  "MOVE_TOOL_TOOLTIP": "Select and transform layers ({0}).",
+  "MOVE_TOOL_ACTION_DISPLAY": "Hold mouse to move selected pixels. Hold Ctrl to move all layers.",
+  "PEN_TOOL_TOOLTIP": "Pen. ({0})",
+  "PEN_TOOL_ACTION_DISPLAY": "Click and move to draw.",
+  "PIXEL_PERFECT_SETTING": "Pixel perfect",
+  "RECTANGLE_TOOL_TOOLTIP": "Draws rectangle on canvas ({0}). Hold Shift to draw a square.",
+  "RECTANGLE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to draw a rectangle. Hold Shift to draw a square.",
+  "RECTANGLE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to draw a square.",
+  "KEEP_ORIGINAL_IMAGE_SETTING": "Keep original image",
+  "ROTATE_VIEWPORT_TOOLTIP": "Rotates viewport. ({0})",
+  "ROTATE_VIEWPORT_ACTION_DISPLAY": "Click and move to rotate the viewport",
+  "SELECT_TOOL_TOOLTIP": "Selects area. ({0})",
+  "SELECT_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to select an area. Hold Shift to add to existing selection. Hold Ctrl to subtract from it.",
+  "SELECT_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to add to the current selection.",
+  "SELECT_TOOL_ACTION_DISPLAY_CTRL": "Click and move to subtract from the current selection.",
+  "ZOOM_TOOL_TOOLTIP": "Zooms viewport ({0}). Click to zoom in, hold alt and click to zoom out.",
+  "ZOOM_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to zoom. Click to zoom in, hold ctrl and click to zoom out.",
+  "ZOOM_TOOL_ACTION_DISPLAY_CTRL": "Click and move to zoom. Click to zoom out, release ctrl and click to zoom in.",
+  "BRIGHTNESS_TOOL_TOOLTIP": "Makes pixels brighter or darker ({0}). Hold Ctrl to make pixels darker.",
+  "BRIGHTNESS_TOOL_ACTION_DISPLAY_DEFAULT": "Draw on pixels to make them brighter. Hold Ctrl to darken.",
+  "BRIGHTNESS_TOOL_ACTION_DISPLAY_CTRL": "Draw on pixels to make them darker. Release Ctrl to brighten.",
+  "COLOR_PICKER_TOOLTIP": "Picks the primary color from the canvas. ({0})",
+  "COLOR_PICKER_ACTION_DISPLAY_DEFAULT": "Click to pick colors. Hold Ctrl to hide the canvas. Hold Shift to hide the reference layer",
+  "ELLIPSE_TOOL_TOOLTIP": "Draws an ellipse on canvas ({0}). Hold Shift to draw a circle.",
+  "ELLIPSE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move mouse to draw an ellipse. Hold Shift to draw a circle.",
+  "ELLIPSE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move mouse to draw a circle.",
+  "ERASER_TOOL_TOOLTIP": "Erases color from pixel. ({0})",
+  "ERASER_TOOL_ACTION_DISPLAY": "Click and move to erase.",
+  "FLOOD_FILL_TOOL_TOOLTIP": "Fills area with color. ({0})",
+  "FLOOD_FILL_TOOL_ACTION_DISPLAY_DEFAULT": "Press on an area to fill it. Hold down Ctrl to consider all layers.",
+  "FLOOD_FILL_TOOL_ACTION_DISPLAY_CTRL": "Press on an area to fill it. Release Ctrl to only consider the current layers.",
+  "LASSO_TOOL_TOOLTIP": "Lasso. ({0})",
+  "LASSO_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to select pixels inside of the lasso. Hold Shift to add to existing selection. Hold Ctrl to subtract from it.",
+  "LASSO_TOOL_ACTION_DISPLAY_SHIFT": "Click and move to add pixels inside of the lasso to the selection.",
+  "LASSO_TOOL_ACTION_DISPLAY_CTRL": "Click and move to subtract pixels inside of the lasso from the selection.",
+  "LINE_TOOL_TOOLTIP": "Draws line on canvas ({0}). Hold Shift to enable snapping.",
+  "LINE_TOOL_ACTION_DISPLAY_DEFAULT": "Click and move to draw a line. Hold Shift to enable snapping.",
+  "LINE_TOOL_ACTION_DISPLAY_SHIFT": "Click and move mouse to draw a line with snapping enabled.",
+  "MAGIC_WAND_TOOL_TOOLTIP": "Magic Wand ({0}). Flood's the selection",
+  "MAGIC_WAND_ACTION_DISPLAY": "Click to flood the selection.",
+  "PEN_TOOL": "Pen",
+  "BRIGHTNESS_TOOL": "Brightness",
+  "COLOR_PICKER_TOOL": "Color Picker",
+  "ELLIPSE_TOOL": "Ellipse",
+  "ERASER_TOOL": "Eraser",
+  "FLOOD_FILL_TOOL": "Flood Fill",
+  "LASSO_TOOL": "Lasso",
+  "LINE_TOOL": "Line",
+  "MAGIC_WAND_TOOL": "Magic Wand",
+  "MOVE_TOOL": "Move",
+  "MOVE_VIEWPORT_TOOL": "Move Viewport",
+  "RECTANGLE_TOOL": "Rectangle",
+  "ROTATE_VIEWPORT_TOOL": "Rotate Viewport",
+  "SELECT_TOOL_NAME": "Select",
+  "ZOOM_TOOL": "Zoom",
+  "SHAPE_LABEL": "Shape",
+  "MODE_LABEL": "Mode",
+  "SCOPE_LABEL": "Scope",
+  "FILL_SHAPE_LABEL": "Fill shape",
+  "FILL_COLOR_LABEL": "Fill color",
+  "TOOL_SIZE_LABEL": "Tool size",
+  "STRENGTH_LABEL": "Strength",
+  "NEW": "New",
+  "ADD": "Add",
+  "SUBTRACT": "Subtract",
+  "INTERSECT": "Intersect",
+  "RECTANGLE": "Rectangle",
+  "CIRCLE": "Circle",
+  "ABOUT": "About",
+  "MINIMIZE": "Minimize",
+  "RESTORE": "Restore",
+  "MAXIMIZE": "Maximize",
+  "CLOSE": "Close",
+  "EXPORT_SIZE_HINT": "If you want to share the image, try {0}% for the best clarity",
+  "CREATE": "Create",
+  "BASE_LAYER_NAME": "Base layer",
+  "ENABLE_MASK": "Enable mask",
+  "SELECTED_AREA_EMPTY": "Selected area is empty",
+  "NOTHING_TO_COPY": "Nothing to copy",
+  "REFERENCE_LAYER_PATH": "Reference layer path",
+  "FLIP": "Flip",
+  "ROTATION": "Rotation",
+  "ROT_IMG_90_D": "Rotate Image 90°",
+  "ROT_IMG_180_D": "Rotate Image 180°",
+  "ROT_IMG_-90_D": "Rotate Image -90°",
+  "ROT_LAYERS_90_D": "Rotate Selected Layers 90°",
+  "ROT_LAYERS_180_D": "Rotate Selected Layers 180°",
+  "ROT_LAYERS_-90_D": "Rotate Selected Layers -90°",
+  "UNNAMED_PALETTE": "Unnamed Palette",
+  "CLICK_SELECT_PRIMARY": "Click to select as main color.",
+  "PEN_MODE": "Pen mode",
+  "VIEW": "View",
+  "HORIZONTAL_LINE_SYMMETRY": "Horizontal line symmetry",
+  "VERTICAL_LINE_SYMMETRY": "Vertical line symmetry",
+  "COLOR_PICKER_TITLE": "Color Picker",
+  "COLOR_SLIDERS_TITLE": "Color Sliders",
+  "PALETTE_TITLE": "Palette",
+  "SWATCHES_TITLE": "Swatches",
+  "LAYERS_TITLE": "Layers",
+  "PREVIEW_TITLE": "Preview",
+  "NORMAL_BLEND_MODE": "Normal",
+  "ERASE_BLEND_MODE": "Erase",
+  "DARKEN_BLEND_MODE": "Darken",
+  "MULTIPLY_BLEND_MODE": "Multiply",
+  "COLOR_BURN_BLEND_MODE": "Color burn",
+  "LIGHTEN_BLEND_MODE": "Lighten",
+  "SCREEN_BLEND_MODE": "Screen",
+  "COLOR_DODGE_BLEND_MODE": "Color dodge",
+  "OVERLAY_BLEND_MODE": "Overlay",
+  "SOFT_LIGHT_BLEND_MODE": "Soft light",
+  "HARD_LIGHT_BLEND_MODE": "Hard light",
+  "DIFFERENCE_BLEND_MODE": "Difference",
+  "EXCLUSION_BLEND_MODE": "Exclusion",
+  "HUE_BLEND_MODE": "Hue",
+  "SATURATION_BLEND_MODE": "Saturation",
+  "LUMINOSITY_BLEND_MODE": "Luminosity",
+  "COLOR_BLEND_MODE": "Color",
+  "NOT_SUPPORTED_BLEND_MODE": "Not supported",
+  "RESTART": "Restart",
+  "SORT_BY": "Sort by",
+  "NAME": "Name",
+  "COLORS": "Colors",
+  "DEFAULT": "Default",
+  "ALPHABETICAL": "Alphabetical",
+  "COLOR_COUNT": "Color count",
+  "ANY": "Any",
+  "MAX": "Max",
+  "MIN": "Min",
+  "EXACT": "Exact",
+  "ASCENDING": "Ascending",
+  "DESCENDING": "Descending",
+  "NAME_IS_TOO_LONG": "The name is too long",
+  "STOP_IT_TEXT1": "That's enough. Tidy up your file names.",
+  "STOP_IT_TEXT2": "Can you stop copying these names please?",
+  "REPLACER_TOOLTIP": "Right click on palette color and choose 'Replace' or drop it here.",
+  "CLICK_TO_CHOOSE_COLOR": "Click to choose the color",
+  "REPLACE_COLOR": "Replace color",
+  "PALETTE_COLOR_TOOLTIP": "Click to select as main color. Drag and drop onto another palette color to swap them.",
+  "ADD_FROM_SWATCHES": "Add from swatches",
+  "ADD_COLOR_TO_PALETTE": "Add color to palette",
+  "USE_IN_CURRENT_IMAGE": "Use in current image",
+  "ADD_TO_FAVORITES": "Add to favorites",
+  "BROWSE_PALETTES": "Browse palettes",
+  "LOAD_PALETTE": "Load palette",
+  "SAVE_PALETTE": "Save palette",
+  "FAVORITES": "Favorites",
+  "ADD_FROM_CURRENT_PALETTE": "Add from current palette",
+  "OPEN_PALETTES_DIR_TOOLTIP": "Open palettes directory in explorer",
+  "BROWSE_ON_LOSPEC_TOOLTIP": "Browse palettes on Lospec",
+  "IMPORT_FROM_FILE_TOOLTIP": "Import from file",
+  "TOP_LEFT": "Top left",
+  "TOP_CENTER": "Top center",
+  "TOP_RIGHT": "Top right",
+  "MIDDLE_LEFT": "Middle left",
+  "MIDDLE_CENTER": "Middle center",
+  "MIDDLE_RIGHT": "Middle right",
+  "BOTTOM_LEFT": "Bottom left",
+  "BOTTOM_CENTER": "Bottom center",
+  "BOTTOM_RIGHT": "Bottom right",
+  "CLIP_TO_BELOW": "Clip to member below",
+  "MOVE_UPWARDS": "Move upwards",
+  "MOVE_DOWNWARDS": "Move downwards",
+  "MERGE_SELECTED": "Merge selected",
+  "LOCK_TRANSPARENCY": "Lock transparency",
+  "COULD_NOT_LOAD_PALETTE": "Couldn't fetch palettes",
+  "NO_PALETTES_FOUND": "No palettes found.",
+  "LOSPEC_LINK_TEXT": "I heard you can find some here: lospec.com/palette-list",
+  "PALETTE_BROWSER": "Palette Browser",
+  "DELETE_PALETTE_CONFIRMATION": "Are you sure you want to delete this palette? This cannot be undone.",
+  "SHORTCUTS_IMPORTED": "Shortcuts from {0} were imported successfully.",
+  "SHORTCUT_PROVIDER_DETECTED": "We've detected, that you have {0} installed. Do you want to import shortcuts from it?",
+  "IMPORT_INSTALLATION_OPTION1": "Import from installation",
+  "IMPORT_INSTALLATION_OPTION2": "Use defaults",
+  "IMPORT_FROM_TEMPLATE": "Import from template",
+  "SHORTCUTS_IMPORTED_SUCCESS": "Shortcuts were imported successfully.",
+  "WARNING_RESET_SHORTCUTS_DEFAULT": "Are you sure you want to reset all shortcuts to their default value?",
+  "SUCCESS": "Success",
+  "WARNING": "Warning",
+  "ERROR_IMPORTING_IMAGE": "An error occured while importing the image.",
+  "SHORTCUTS_CORRUPTED_TITLE": "Corrupted shortcuts file",
+  "SHORTCUTS_CORRUPTED": "Shortcuts file was corrupted, resetting to default.",
+  "FAILED_DOWNLOAD_PALETTE": "Failed to download palette",
+  "FILE_INCORRECT_FORMAT": "The file was not in a correct format",
+  "INVALID_FILE": "Invalid file",
+  "SHORTCUTS_FILE_INCORRECT_FORMAT": "Shortcuts file was not in a correct format",
+  "UNSUPPORTED_FILE_FORMAT": "This file format is unsupported",
+  "ALREADY_ASSIGNED": "Already assigned",
+  "REPLACE": "Replace",
+  "SWAP": "Swap",
+  "SHORTCUT_ALREADY_ASSIGNED_SWAP": "This shortcut is already assigned to '{0}'\nDo you want to replace the existing shortcut or swap the two?",
+  "SHORTCUT_ALREADY_ASSIGNED_OVERWRITE": "This shortcut is already assigned to '{0}'\nDo you want to replace the existing shortcut?",
+  "UNSAVED_CHANGES": "Unsaved changes",
+  "DOCUMENT_MODIFIED_SAVE": "The document has been modified. Do you want to save changes?",
+  "PROJECT_MAINTAINERS": "Project Maintainers",
+  "OTHER_AWESOME_CONTRIBUTORS": "And other awesome contributors",
+  "HELP": "Help",
+  "STOP_IT_TEXT3": "No, really, stop it.",
+  "STOP_IT_TEXT4": "Don't you have anything better to do?",
+  "LINEAR_DODGE_BLEND_MODE": "Linear dodge (Add)",
+  "PRESS_ANY_KEY": "Press any key",
+  "NONE_SHORTCUT": "None",
+  "REFERENCE": "Reference",
+  "PUT_REFERENCE_LAYER_ABOVE": "Put reference layer above",
+  "PUT_REFERENCE_LAYER_BELOW": "Put reference layer below",
+  "TOGGLE_VERTICAL_SYMMETRY": "Toggle vertical symmetry",
+  "TOGGLE_HORIZONTAL_SYMMETRY": "Toggle horizontal symmetry",
+  "RESET_VIEWPORT": "Reset viewport",
+  "MOVE_TOOL_ACTION_DISPLAY_TRANSFORMING": "Click and hold mouse to move pixels in selected layers.",
+  "CTRL_KEY": "Ctrl",
+  "SHIFT_KEY": "Shift",
+  "ALT_KEY": "Alt",
+  "RENAME": "Rename",
+  "PIXEL_UNIT": "px",
+  "OPEN_LOCALIZATION_DEBUG_WINDOW": "Open Localization Debug Window",
+  "FORCE_OTHER_FLOW_DIRECTION": "Force other flow direction",
+  "API_KEY": "API Key",
+  "LOCALIZATION_VIEW_TYPE": "Localization View Type",
+  "LOAD_LANGUAGE_FROM_FILE": "Load language from file",
+  "LOG_IN": "Log in",
+  "SYNC": "Sync",
+  "NOT_LOGGED_IN": "Not logged in",
+  "POE_EDITOR_ERROR": "POEditor Error: {0} {1}",
+  "HTTP_ERROR_MESSAGE": "HTTP Error: {0} {1}",
+  "LOGGED_IN": "Logged in",
+  "SYNCED_SUCCESSFULLY": "Synced successfully",
+  "EXCEPTION_ERROR": "Exception: {0}",
+  "DROP_PALETTE": "Drop palette here",
+  "SECURITY_ERROR": "Security error",
+  "SECURITY_ERROR_MSG": "No rights to write to the specified location.",
+  "IO_ERROR": "IO error",
+  "IO_ERROR_MSG": "Error while writing to disk.",
+  "COULD_NOT_SAVE_PALETTE": "There was an error while saving the palette.",
+  "NO_COLORS_TO_SAVE": "There are no colors to save.",
+  "CANVAS": "Canvas",
+  "SINGLE_LAYER": "Single Layer",
+  "CHOOSE": "Choose",
+  "REMOVE": "Remove",
+  "FILE_FORMAT_NOT_ASEPRITE_KEYS": "File is not a \".aseprite-keys\" file",
+  "FILE_HAS_INVALID_SHORTCUT": "The file contains an invalid shortcut",
+  "FILE_EXTENSION_NOT_SUPPORTED": "The file type '{0}' is not supported",
+  "ERROR_READING_FILE": "Error while reading the file",
+  "DISCARD_PALETTE": "Discard palette",
+  "DISCARD_PALETTE_CONFIRMATION": "Are you sure you want to discard current palette? This cannot be undone.",
+  "IMPORT_AS_NEW_LAYER": "Import as new layer",
+  "PASTE_AS_PRIMARY_COLOR": "Paste as primary color",
+  "IMPORT_AS_NEW_FILE": "Import as new file",
+  "IMPORT_PALETTE_FILE": "Import palette file",
+  "IMPORT_MULTIPLE_PALETTE_COLORS": "Import colors into palette",
+  "IMPORT_SINGLE_PALETTE_COLOR": "Import color into palette",
+  "IMPORT_AS_REFERENCE_LAYER": "Import as reference layer",
+  "NAVIGATOR_PICK_ACTION_DISPLAY": "Right-click to pick color, Shift-right-click to copy color to clipboard",
+  "OPEN_FILE_FROM_CLIPBOARD": "Open from clipboard",
+  "OPEN_FILE_FROM_CLIPBOARD_DESCRIPTIVE": "Open from clipboard",
+  "OPEN_LOCALIZATION_DATA": "Do you want to open the LocalizationData.json?\nThe updated date has been put in the clipboard.\nNote that changes wont be applied until a restart",
+  "DOWNLOADING_LANGUAGE_FAILED": "Downloading language failed.\nAPI Key might have been overused.",
+  "LOCALIZATION_DATA_NOT_FOUND": "Localization data path not found",
+  "APPLY": "Apply",
+  "UPDATE_SOURCE": "Update source",
+  "COPY_TO_CLIPBOARD": "Copy to clipboard",
+  "LANGUAGE_FILE_NOT_FOUND": "Language file not found.\nLooking for {0}",
+  "PROJECT_ROOT_NOT_FOUND": "PixiEditor Project root not found.\nLooking for PixiEditor.csproj",
+  "LOCALIZATION_FOLDER_NOT_FOUND": "Localization folder not found.\nLooking for /Data/Localization",
+  "SELECT_A_LANGUAGE": "Select a language",
+  "DONE": "Done",
+  "SOURCE_UNSET_OR_MISSING": "Source missing/unset",
+  "SOURCE_NEWER": "Source newer",
+  "SOURCE_UP_TO_DATE": "Source is up to date",
+  "SOURCE_OLDER": "Cloud newer",
+  "COLOR_PICKER_ACTION_DISPLAY_REFERENCE_ONLY": "Click to pick colors from the reference layer.",
+  "COLOR_PICKER_ACTION_DISPLAY_CANVAS_ONLY": "Click to pick colors from the canvas.",
+  "LOCALIZATION_DEBUG_WINDOW_TITLE": "Localization Debug Window",
+  "SHORTCUTS_TITLE": "Shortcuts",
+  "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_SHEAR_PERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Hold Alt and drag a side handle to shear. Drag outside handles to rotate.",
+  "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_SHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Hold Alt and drag a side handle to shear. Drag outside handles to rotate.",
+  "TRANSFORM_ACTION_DISPLAY_SCALE_ROTATE_NOSHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally. Drag outside handles to rotate.",
+  "TRANSFORM_ACTION_DISPLAY_SCALE_NOROTATE_NOSHEAR_NOPERSPECTIVE": "Drag handles to scale transform. Hold Ctrl and drag a handle to scale from center. Hold Shift to scale proportionally.",
+  "LOCAL_PALETTE_SOURCE_NAME": "Local",
+  "ERROR_FORBIDDEN_UNIQUE_NAME": "Extension unique name cannot start with 'pixieditor'.",
+  "ERROR_MISSING_METADATA": "Extension metadata key '{0}' is missing.",
+  "ERROR_NO_CLASS_ENTRY": "Extension class entry is missing on path '{0}'.",
+  "ERROR_NO_ENTRY_ASSEMBLY": "Extension entry assembly is missing on path '{0}'.",
+  "ERROR_MISSING_ADDITIONAL_CONTENT": "Your current setup doesn't allow loading this extension. Perhaps you don't own it or don't have it installed. You can purchase it here '{0}'.",
+  "BUY_SUPPORTER_PACK": "Buy Supporter Pack",
+  "NEWS": "News",
+  "DISABLE_NEWS_PANEL": "Disable News panel in startup window",
+  "FAILED_FETCH_NEWS": "Failed to fetch news",
+  "CROP_TO_SELECTION": "Crop to selection",
+  "CROP_TO_SELECTION_DESCRIPTIVE": "Crop image to selection",
+  "SHOW_CONTEXT_MENU": "Show context menu",
+  "ERASE": "Erase",
+  "USE_SECONDARY_COLOR": "Use secondary color",
+  "RIGHT_CLICK_MODE": "Right click mode",
+  "ADD_PRIMARY_COLOR_TO_PALETTE": "Add primary color to palette",
+  "ADD_PRIMARY_COLOR_TO_PALETTE_DESCRIPTIVE": "Add primary color to current palette",
+  "EXPORT_SAVE_TITLE": "Choose a location to save the image",
+  "BROWSE_DIRECTORY": "Browse Directory",
+  "CRASH_NOT_ALL_DOCUMENTS_RECOVERED_TITLE": "Not all documents were recovered",
+  "CRASH_NOT_ALL_DOCUMENTS_RECOVERED": "Could not recover all documents. Git gud at saving your work.",
+  "SEND": "Send report",
+  "OPEN_DOCKABLE_MENU": "Open Tab",
+  "TIMELINE_TITLE": "Timeline",
+  "EXPORT_IMAGE_HEADER": "Image",
+  "EXPORT_ANIMATION_HEADER": "Animation",
+  "EXPORT_SPRITESHEET_HEADER": "Spritesheet",
+  "PIXI_FILE": "PixiEditor Files",
+  "PNG_FILE": "PNG Images",
+  "JPEG_FILE": "JPEG Images",
+  "WEBP_FILE": "WebP Images",
+  "GIF_FILE": "GIFs",
+  "BMP_FILE": "BMP Images",
+  "IMAGE_FILES": "Image Files",
+  "VIDEO_FILES": "Video Files",
+  "OPEN_TYPE_FONT": "OpenType Fonts",
+  "TRUE_TYPE_FONT": "TrueType Fonts",
+  "SVG_FILE": "Scalable Vector Graphics",
+  "MP4_FILE": "MP4 Videos",
+  "COLUMNS": "Columns",
+  "ROWS": "Rows",
+  "BACKGROUND": "Background",
+  "OPACITY": "Opacity",
+  "IS_VISIBLE": "Is visible",
+  "BLEND_MODE": "Blend mode",
+  "MASK": "Mask",
+  "MASK_IS_VISIBLE": "Mask is visible",
+  "OUTPUT": "Output",
+  "INPUT": "Input",
+  "NODE_GRAPH_TITLE": "Graph View",
+  "CONTENT": "Content",
+  "RADIUS": "Radius",
+  "STROKE_COLOR": "Stroke color",
+  "STROKE_WIDTH": "Stroke width",
+  "FILL_COLOR": "Fill color",
+  "TOP": "Top",
+  "BOTTOM": "Bottom",
+  "CHANNELS_DOCK_TITLE": "Channels",
+  "RED": "Red",
+  "GREEN": "Green",
+  "BLUE": "Blue",
+  "ALPHA": "Alpha",
+  "COLOR": "Color",
+  "COORDINATE": "Coordinate",
+  "VECTOR": "Vector",
+  "MATRIX": "Matrix",
+  "TRANSFORMED": "Transformed",
+  "GRAYSCALE": "Grayscale",
+  "CLAMP": "Clamp",
+  "SIZE": "Size",
+  "NOISE": "Noise",
+  "SCALE": "Scale",
+  "SEED": "Seed",
+  "KERNEL": "Kernel",
+  "KERNEL_VIEW_SUM": "Sum:",
+  "KERNEL_VIEW_SUM_TOOLTIP": "The sum of all values. You likely want to aim for a value of 1 or 0",
+  "GAIN": "Gain",
+  "BIAS": "Bias",
+  "TILE_MODE": "Tile Mode",
+  "ON_ALPHA": "On Alpha",
+  "OUTPUT_NODE": "Output",
+  "NOISE_NODE": "Noise",
+  "ELLIPSE_NODE": "Ellipse",
+  "LINE_NODE": "Line",
+  "LINE_START": "Start",
+  "LINE_END": "End",
+  "RECTANGLE_NODE": "Rectangle",
+  "CREATE_IMAGE_NODE": "Create Image",
+  "FOLDER_NODE": "Folder",
+  "IMAGE_LAYER_NODE": "Image Layer",
+  "KERNEL_FILTER_NODE": "Kernel Filter",
+  "MATH_NODE": "Math",
+  "COLOR_MATRIX_TRANSFORM_FILTER_NODE": "Matrix Transform Filter",
+  "MERGE_NODE": "Merge",
+  "MODIFY_IMAGE_LEFT_NODE": "Begin Modify Image",
+  "MODIFY_IMAGE_RIGHT_NODE": "End Modify Image",
+  "COMBINE_CHANNELS_NODE": "Combine Channels",
+  "COMBINE_COLOR_NODE": "Combine Color",
+  "COMBINE_VECD_NODE": "Combine Vector",
+  "COMBINE_VECI_NODE": "Combine Integer Vector",
+  "SEPARATE_CHANNELS_NODE": "Separate Channels",
+  "SEPARATE_VECD_NODE": "Separate Vector",
+  "SEPARATE_VECI_NODE": "Separate Integer Vector",
+  "SEPARATE_COLOR_NODE": "Separate Color",
+  "TIME_NODE": "Time",
+  "FILTERS": "Filters",
+  "PREVIOUS": "Previous",
+  "FILL": "Fill",
+  "MATH_MODE": "Math Mode",
+  "NOISE_TYPE": "Noise Type",
+  "OCTAVES": "Octaves",
+  "ACTIVE_FRAME": "Active Frame",
+  "NORMALIZED_TIME": "Normalized Time",
+  "WITHOUT_FILTERS": "Without filters",
+  "RAW_LAYER_OUTPUT": "Raw",
+  "EXAMPLE_FILES": "Example Files",
+  "PROCEDURAL_GENERATION": "Procedural Animation",
+  "POND_EXAMPLE": "Pond",
+  "TREE_EXAMPLE": "Windy Tree",
+  "OUTLINE_EXAMPLE": "Automatic Outline",
+  "BETA_ANIMATIONS": "Animations",
+  "SLIME_EXAMPLE": "Animated Slime",
+  "APPLY_FILTER_NODE": "Apply Filter",
+  "FILTER": "Filter",
+  "LERP_NODE": "Lerp",
+  "GRAYSCALE_FILTER_NODE": "Grayscale Filter",
+  "FROM": "From",
+  "TO": "To",
+  "TIME": "Time",
+  "WARMING_UP": "Warming up",
+  "RENDERING_FRAME": "Generating Frame {0}/{1}",
+  "RENDERING_VIDEO": "Rendering Video",
+  "FINISHED": "Finished",
+  "GENERATING_SPRITE_SHEET": "Generating Sprite Sheet",
+  "RENDERING_IMAGE": "Rendering Image",
+  "PROGRESS_POPUP_TITLE": "Progress",
+  "POINTS": "Points",
+  "MIN_DISTANCE": "Min. Distance",
+  "MAX_POINTS": "Max. Points",
+  "DISTRIBUTE_POINTS": "Distribute points",
+  "REMOVE_CLOSE_POINTS": "Remove close points",
+  "RASTERIZE_SHAPE": "Rasterize Shape",
+  "MODE": "Mode",
+  "Factor": "Factor",
+  "NORMALIZE": "Normalize",
+  "WEIGHT_FACTOR": "Weight",
+  "STARS_EXAMPLE": "Stars",
+  "ADD_EMPTY_FRAME": "Add empty frame",
+  "DUPLICATE_FRAME": "Duplicate frame",
+  "DELETE_FRAME": "Remove frame",
+  "DEFAULT_MEMBER_NAME": "New Element",
+  "NO_PARSER_FOUND": "No file parser found for extension '{0}'",
+  "SELECT_FILE_FORMAT": "Select file format",
+  "SELECT_FILE_FORMAT_DESCRIPTION": "Multiple file types of the same format are supported. Please select the one you want to use.",
+  "NEW_PALETTE_FILE": "palette",
+  "ISLAND_EXAMPLE": "Islands",
+  "ONION_FRAMES_COUNT": "Onion frames",
+  "ONION_OPACITY": "Onion opacity",
+  "TOGGLE_ONION_SKINNING": "Toggle onion skinning",
+  "CHANGE_ACTIVE_FRAME_PREVIOUS": "Change active frame to previous",
+  "CHANGE_ACTIVE_FRAME_NEXT": "Change active frame to next",
+  "TOGGLE_ANIMATION": "Toggle animation",
+  "NEW_FROM_CLIPBOARD": "New from clipboard",
+  "OFFSET": "Offset",
+  "SHAPE": "Shape",
+  "STRUCTURE": "Structure",
+  "NUMBERS": "Numbers",
+  "OPERATIONS": "Operations",
+  "GENERATION": "Generation",
+  "NUMBER": "Number",
+  "ANIMATION": "Animation",
+  "SAMPLE_IMAGE": "Sample Image",
+  "POSITION": "Position",
+  "MATH_ADD": "Add",
+  "MATH_SUBTRACT": "Subtract",
+  "MULTIPLY": "Multiply",
+  "DIVIDE": "Divide",
+  "SIN": "Sin",
+  "COS": "Cos",
+  "TAN": "Tan",
+  "GREATER_THAN": "Greater than",
+  "LESS_THAN": "Less than",
+  "LESS_THAN_OR_EQUAL": "Less than or equal",
+  "COMPARE": "Compare",
+  "MATH_POWER": "Power",
+  "LOGARITHM": "Logarithm",
+  "NATURAL_LOGARITHM": "Natural logarithm",
+  "ROOT": "Root",
+  "INVERSE_ROOT": "Inverse root",
+  "FRACTION": "Fraction",
+  "NEGATE": "Negate",
+  "FLOOR": "Floor",
+  "CEIL": "Ceil",
+  "ROUND": "Round",
+  "MODULO": "Modulo",
+  "STEP": "Step",
+  "SMOOTH_STEP": "Smoothstep",
+  "PIXEL_ART_TOOLSET": "Pixel Art",
+  "VECTOR_TOOLSET": "Vector",
+  "VECTOR_LAYER": "Vector Layer",
+  "STROKE_COLOR_LABEL": "Stroke",
+  "SYNC_WITH_PRIMARY_COLOR_LABEL": "Sync with primary color",
+  "RASTERIZE": "Rasterize",
+  "RASTERIZE_ACTIVE_LAYER": "Rasterize active layer",
+  "RASTERIZE_ACTIVE_LAYER_DESCRIPTIVE": "Convert/Rasterize the active layer into a image (raster) layer.",
+  "NEW_ELLIPSE_LAYER_NAME": "Ellipse",
+  "NEW_RECTANGLE_LAYER_NAME": "Rectangle",
+  "NEW_LINE_LAYER_NAME": "Line",
+  "RENDER_OUTPUT": "Render Output",
+  "PAINT_TOOLSET": "Painting",
+  "HARDNESS_SETTING": "Hardness",
+  "SPACING_SETTING": "Spacing",
+  "ANTI_ALIASING_SETTING": "Anti-aliasing",
+  "TOLERANCE_LABEL": "Tolerance",
+  "TOGGLE_SNAPPING": "Toggle snapping",
+  "HIGH_RES_PREVIEW": "High Resolution Preview",
+  "LOW_RES_PREVIEW": "Document Resolution Preview",
+  "TOGGLE_HIGH_RES_PREVIEW": "Toggle high resolution preview",
+  "FACTOR": "Factor",
+  "PATH_TOOL": "Path",
+  "PATH_TOOL_TOOLTIP": "Create vector paths and curves ({0}).",
+  "PATH_TOOL_ACTION_DISPLAY": "Click to add a point.",
+  "PATH_TOOL_ACTION_DISPLAY_CTRL": "Click on existing point and drag to make it a curve. Tap on a control point to select it.",
+  "PATH_TOOL_ACTION_DISPLAY_SHIFT": "Click to create a new layer.",
+  "PATH_TOOL_ACTION_DISPLAY_CTRL_SHIFT": "Tap on a control point to add it to the selection.",
+  "PATH_TOOL_ACTION_DISPLAY_ALT": "Click on a control point and move to adjust only one side of the curve.",
+  "DEFAULT_PATH_LAYER_NAME": "Path",
+  "DELETE_NODES": "Delete nodes",
+  "DELETE_NODES_DESCRIPTIVE": "Delete selected nodes",
+  "DELETE_CELS": "Delete cels",
+  "DELETE_CELS_DESCRIPTIVE": "Delete selected cels",
+  "COPY_COLOR_TO_CLIPBOARD": "Copy color to clipboard",
+  "VIEWPORT_ROTATION": "Viewport rotation",
+  "NEXT_TOOL_SET": "Next tool set",
+  "PREVIOUS_TOOL_SET": "Previous tool set",
+  "FILL_MODE": "Fill mode",
+  "USE_LINEAR_SRGB_PROCESSING": "Use linear sRGB for processing colors",
+  "USE_LINEAR_SRGB_PROCESSING_DESC": "Convert document using sRGB blending mode to linear sRGB for processing colors. This will affect the colors of the document, but will make blending more accurate.",
+  "FILL_TYPE_WINDING": "Winding",
+  "FILL_TYPE_EVEN_ODD": "Even Odd",
+  "FILL_TYPE_INVERSE_WINDING": "Inverse Winding",
+  "FILL_TYPE_INVERSE_EVEN_ODD": "Inverse Even Odd",
+  "STROKE_CAP": "Stroke Cap",
+  "STROKE_JOIN": "Stroke Join",
+  "COPY_VISIBLE": "Copy visible",
+  "COPY_VISIBLE_DESCRIPTIVE": "Copy visible pixels",
+  "COLOR_SAMPLE_MODE": "Sample mode",
+  "CREATE_CEL": "Create cel",
+  "CREATE_CEL_DESCRIPTIVE": "Create a new cel",
+  "DUPLICATE_CEL": "Duplicate cel",
+  "DUPLICATE_CEL_DESCRIPTIVE": "Duplicate cel in the current frame",
+  "RENDER_PREVIEW": "Render preview",
+  "OUTPUT_NAME": "Output name",
+  "CUSTOM_OUTPUT_NODE": "Custom Output",
+  "TOGGLE_HUD": "Toggle HUD",
+  "OPEN_TIMELINE": "Open timeline",
+  "OPEN_NODE_GRAPH": "Open node graph",
+  "TOGGLE_PLAY": "Play/Pause animation",
+  "COPY_NODES": "Copy nodes",
+  "COPY_NODES_DESCRIPTIVE": "Copy selected nodes",
+  "PASTE_NODES": "Paste nodes",
+  "PASTE_NODES_DESCRIPTIVE": "Paste copied nodes",
+  "COPY_CELS": "Copy cels",
+  "COPY_CELS_DESCRIPTIVE": "Copy selected cels",
+  "TOGGLE_ONION_SKINNING_DESCRIPTIVE": "Toggle onion skinning",
+  "VALUE": "Value",
+  "TARGET": "Target",
+  "EPSILON": "Epsilon",
+  "PRESERVE_ALPHA": "Preserve alpha",
+  "BLUR_FILTER_NODE": "Gaussian Blur Filter",
+  "LENGTH": "Length",
+  "GREATER_THAN_OR_EQUAL": "Greater than or equal",
+  "COLOR_NODE": "Color",
+  "CONVERT_TO_CURVE": "Convert to curve",
+  "CONVERT_TO_CURVE_DESCRIPTIVE": "Convert selected vector layer to a curve/path",
+  "FONT_FILES": "Font Files",
+  "UNIT_PT": "pt",
+  "FONT_LABEL": "Family",
+  "FONT_SIZE_LABEL": "Size",
+  "SPACING_LABEL": "Spacing",
+  "TEXT_TOOL": "Text",
+  "MISSING_FONT": "Missing font",
+  "TEXT_LAYER_NAME": "Text",
+  "TEXT_TOOL_TOOLTIP": "Create text ({0}).",
+  "BOLD_TOOLTIP": "Bold",
+  "ITALIC_TOOLTIP": "Italic",
+  "CUSTOM_FONT": "Custom font",
+  "DUMP_GPU_DIAGNOSTICS": "Dump GPU diagnostics",
+  "USE_SRGB_PROCESSING": "Use sRGB for processing colors",
+  "USE_SRGB_PROCESSING_DESC": "Convert document using linear sRGB to sRGB for processing colors. This will affect the colors of the document.",
+  "TEXT_NODE": "Text",
+  "TEXT_LABEL": "Text",
+  "TEXT_ON_PATH_NODE": "Text on Path",
+  "HIGH_DPI_RENDERING": "High DPI Rendering",
+  "THICKNESS": "Thickness",
+  "TYPE": "Type",
+  "EFFECTS": "Effects",
+  "OUTLINE_NODE": "Outline",
+  "SHADER_CODE": "Shader Code",
+  "SHADER_NODE": "Shader",
+  "FAILED_TO_OPEN_EDITABLE_STRING_TITLE": "Failed to open file",
+  "FAILED_TO_OPEN_EDITABLE_STRING_MESSAGE": "Failed to edit this string in external editor. Reason: {0}",
+  "STRING_EDIT_IN_DEFAULT_APP": "Edit in default app",
+  "STRING_OPEN_IN_FOLDER": "Open in folder",
+  "DISCO_BALL_EXAMPLE": "Disco Ball",
+  "COLOR_SPACE": "Color Space",
+  "PHOTO_EXAMPLES": "Photo",
+  "MASK_EXAMPLE": "Mask",
+  "SHADOW_NODE": "Shadow Filter",
+  "INPUT_MATRIX": "Input Matrix",
+  "OUTPUT_MATRIX": "Output Matrix",
+  "CENTER": "Center",
+  "CANVAS_POSITION": "Canvas Position",
+  "CENTER_POSITION": "Center Position",
+  "TILE_MODE_X": "Tile Mode X",
+  "TILE_MODE_Y": "Tile Mode Y",
+  "TILE_NODE": "Tile",
+  "SKEW": "Skew",
+  "OFFSET_NODE": "Offset",
+  "SKEW_NODE": "Skew",
+  "SCALE_NODE": "Scale",
+  "ROTATE_NODE": "Rotate",
+  "TRANSFORM_NODE": "Transform",
+  "UNIT": "Unit",
+  "ANGLE": "Angle",
+  "DOCUMENT_INFO_NODE": "Document Info",
+  "MASK_NODE": "Mask",
+  "SEPIA_FILTER_NODE": "Sepia Filter",
+  "INTENSITY": "Intensity",
+  "INVERT_FILTER_NODE": "Invert Filter",
+  "COLOR_ADJUSTMENTS_FILTER": "Color Adjustments Filter",
+  "ADJUST_BRIGHTNESS": "Adjust Brightness",
+  "ADJUST_CONTRAST": "Adjust Contrast",
+  "ADJUST_SATURATION": "Adjust Saturation",
+  "ADJUST_TEMPERATURE": "Adjust Temperature",
+  "ADJUST_TINT": "Adjust Tint",
+  "ADJUST_HUE": "Adjust Hue",
+  "HUE_VALUE": "Hue",
+  "SATURATION_VALUE": "Saturation",
+  "BRIGHTNESS_VALUE": "Brightness",
+  "CONTRAST_VALUE": "Contrast",
+  "TEMPERATURE_VALUE": "Temperature",
+  "TINT_VALUE": "Tint",
+  "UNEXPECTED_SHUTDOWN": "Unexpected shutdown",
+  "UNEXPECTED_SHUTDOWN_MSG": "PixiEditor was unexpectedly shut down. We've loaded latest autosave of your files.",
+  "OK": "OK",
+  "OPEN_AUTOSAVES": "Browse Autosaves",
+  "AUTOSAVE_SETTINGS_HEADER": "Autosave",
+  "AUTOSAVE_SETTINGS_SAVE_STATE": "Reopen last files on startup",
+  "AUTOSAVE_SETTINGS_PERIOD": "Autosave period",
+  "AUTOSAVE_ENABLED": "Autosave enabled",
+  "MINUTE_UNIVERSAL": "min",
+  "AUTOSAVE_SETTINGS_SAVE_USER_FILE": "Autosave to selected file",
+  "LOAD_LAZY_FILE_MESSAGE": "To improve startup time, PixiEditor didn't load this file. Click the button below to load it.",
+  "EASING_NODE": "Easing",
+  "EASING_TYPE": "Easing Type",
+  "OPEN_DIRECTORY_ON_EXPORT": "Open directory on export",
+  "ERROR_LOOP_DETECTED_MESSAGE": "Moving this layer will create a loop. Fix it in the Node Graph.",
+  "LINEAR_EASING_TYPE": "Linear",
+  "IN_SINE_EASING_TYPE": "In Sine",
+  "OUT_SINE_EASING_TYPE": "Out Sine",
+  "IN_OUT_SINE_EASING_TYPE": "In Out Sine",
+  "IN_QUAD_EASING_TYPE": "In Quad",
+  "OUT_QUAD_EASING_TYPE": "Out Quad",
+  "IN_OUT_QUAD_EASING_TYPE": "In Out Quad",
+  "IN_CUBIC_EASING_TYPE": "In Cubic",
+  "OUT_CUBIC_EASING_TYPE": "Out Cubic",
+  "IN_OUT_CUBIC_EASING_TYPE": "In Out Cubic",
+  "IN_QUART_EASING_TYPE": "In Quart",
+  "OUT_QUART_EASING_TYPE": "Out Quart",
+  "IN_OUT_QUART_EASING_TYPE": "In Out Quart",
+  "IN_QUINT_EASING_TYPE": "In Quint",
+  "OUT_QUINT_EASING_TYPE": "Out Quint",
+  "IN_OUT_QUINT_EASING_TYPE": "In Out Quint",
+  "IN_EXPO_EASING_TYPE": "In Expo",
+  "OUT_EXPO_EASING_TYPE": "Out Expo",
+  "IN_OUT_EXPO_EASING_TYPE": "In Out Expo",
+  "IN_CIRC_EASING_TYPE": "In Circ",
+  "OUT_CIRC_EASING_TYPE": "Out Circ",
+  "IN_OUT_CIRC_EASING_TYPE": "In Out Circ",
+  "IN_BACK_EASING_TYPE": "In Back",
+  "OUT_BACK_EASING_TYPE": "Out Back",
+  "IN_OUT_BACK_EASING_TYPE": "In Out Back",
+  "IN_ELASTIC_EASING_TYPE": "In Elastic",
+  "OUT_ELASTIC_EASING_TYPE": "Out Elastic",
+  "IN_OUT_ELASTIC_EASING_TYPE": "In Out Elastic",
+  "IN_BOUNCE_EASING_TYPE": "In Bounce",
+  "OUT_BOUNCE_EASING_TYPE": "Out Bounce",
+  "IN_OUT_BOUNCE_EASING_TYPE": "In Out Bounce",
+  "R_G_B_COMBINE_SEPARATE_COLOR_MODE": "RGB",
+  "H_S_V_COMBINE_SEPARATE_COLOR_MODE": "HSV",
+  "H_S_L_COMBINE_SEPARATE_COLOR_MODE": "HSL",
+  "COLOR_MANAGED_COLOR_SAMPLE_MODE": "Color Managed",
+  "RAW_COLOR_SAMPLE_MODE": "Raw",
+  "FRACTAL_PERLIN_NOISE_TYPE": "Perlin",
+  "TURBULENCE_PERLIN_NOISE_TYPE": "Turbulence",
+  "VORONOI_NOISE_TYPE": "Voronoi",
+  "VORONOI_FEATURE": "Feature",
+  "F1_VORONOI_FEATURE": "F1",
+  "F2_VORONOI_FEATURE": "F2",
+  "F2_MINUS_F1_VORONOI_FEATURE": "F2-F1",
+  "RANDOMNESS": "Randomness",
+  "ANGLE_OFFSET": "Angle Offset",
+  "INHERIT_COLOR_SPACE_TYPE": "Inherit",
+  "SRGB_COLOR_SPACE_TYPE": "sRGB",
+  "LINEAR_SRGB_COLOR_SPACE_TYPE": "Linear sRGB",
+  "SIMPLE_OUTLINE_TYPE": "Simple",
+  "GAUSSIAN_OUTLINE_TYPE": "Gaussian",
+  "PIXEL_PERFECT_OUTLINE_TYPE": "Pixel Perfect",
+  "DEGREES_ROTATION_TYPE": "Degrees",
+  "RADIANS_ROTATION_TYPE": "Radians",
+  "WEIGHTED_GRAYSCALE_MODE": "Weighted",
+  "AVERAGE_GRAYSCALE_MODE": "Average",
+  "CUSTOM_GRAYSCALE_MODE": "Custom",
+  "CLAMP_TILE_MODE": "Clamp",
+  "REPEAT_TILE_MODE": "Repeat",
+  "MIRROR_TILE_MODE": "Mirror",
+  "DECAL_TILE_MODE": "Decal",
+  "ERR_UNKNOWN_FILE_FORMAT": "Unknown file format",
+  "ERR_EXPORT_SIZE_INVALID": "Invalid export size. Values must be greater than 0.",
+  "ERR_UNKNOWN_IMG_FORMAT": "Unknown image format '{0}'.",
+  "ERR_FAILED_GENERATE_SPRITE_SHEET": "Failed generating sprite sheet",
+  "ERR_NO_RENDERER": "Animation renderer not found.",
+  "ERR_RENDERING_FAILED": "Rendering failed",
+  "ENABLE_ANALYTICS": "Send anonymous analytics",
+  "ANALYTICS_INFO": "We collect anonymous usage data to improve PixiEditor. No personal data is collected.",
+  "LANGUAGE_INFO": "All translations are community-driven. Join our Discord server for more information.",
+  "UP_TO_DATE_UNKNOWN": "Couldn't check for updates",
+  "UP_TO_DATE": "PixiEditor is up to date",
+  "UPDATE_AVAILABLE": "Update {0} is available",
+  "UPDATE_FAILED_DOWNLOAD": "Failed to download the update",
+  "UPDATE_READY_TO_INSTALL": "Update is ready. Switch to {0}?",
+  "SWITCH_TO_NEW_VERSION": "Switch",
+  "DOWNLOAD_UPDATE": "Download",
+  "DOWNLOADING_UPDATE": "Downloading update...",
+  "CHECKING_FOR_UPDATES": "Checking for updates...",
+  "PAINT_SHAPE_SETTING": "Brush shape",
+  "BOOL_OPERATION_NODE": "Boolean Operation",
+  "FIRST_SHAPE": "First shape",
+  "SECOND_SHAPE": "Second shape",
+  "OPERATION": "Operation",
+  "UNION_VECTOR_PATH_OP": "Union",
+  "DIFFERENCE_VECTOR_PATH_OP": "Difference",
+  "INTERSECT_VECTOR_PATH_OP": "Intersect",
+  "XOR_VECTOR_PATH_OP": "XOR",
+  "REVERSE_DIFFERENCE_VECTOR_PATH_OP": "Reverse Difference",
+  "NO_DOCUMENT_OPEN": "Nothing's here",
+  "EMPTY_DOCUMENT_ACTION_BTN": "Start creating",
+  "ONBOARDING_TITLE": "Welcome to",
+  "ONBOARDING_DESCRIPTION": "Let's set up your workspace!",
+  "ONBOARDING_SKIP_BTN": "Skip",
+  "ONBOARDING_ACTION_BTN": "Let's begin",
+  "ONB_SELECT_PRIMARY_TOOLSET": "Select Your Primary Toolset",
+  "ONB_NEXT_BTN": "Next",
+  "ONB_FINISH_BTN": "Finish",
+  "ONB_BACK_BTN": "Previous",
+  "ONB_ANALYTICS": "Anonymous Analytics",
+  "ONB_ALL_SET": "You are all set!",
+  "ONB_ALL_SET_BTN": "Start creating",
+  "ANALYTICS_INFO_DETAILED": "PixiEditor collects anonymous usage data to improve the app. The data does not contain any personal information. Among other things, PixiEditor tracks the following:\n- Which and how the tools are used\n- How long you've used the app for\n- Which commands are used\n- Performance data\n\n You can opt out of analytics at any time in the settings.",
+  "PRIVACY_POLICY": "Privacy Policy",
+  "ONB_SHORTCUTS": "Select Your Shortcuts",
+  "GRAPH_STATE_UNABLE_TO_CREATE_MEMBER": "Current Node Graph setup disallows creation of a new layer next to the selected one.",
+  "PRIMARY_TOOLSET": "Primary Toolset",
+  "OPEN_ONBOARDING_WINDOW": "Open onboarding window",
+  "USER_NOT_FOUND": "Please enter the email you used to purchase the Founder's Edition.",
+  "SESSION_NOT_VALID": "Session is not valid, please log in again",
+  "SESSION_NOT_FOUND": "Session not found, try logging in again",
+  "INTERNAL_SERVER_ERROR": "There was an internal server error. Please try again later.",
+  "TOO_MANY_REQUESTS": "Too many requests. Try again in {0} seconds.",
+  "SESSION_EXPIRED": "Session expired. Please log in again.",
+  "CONNECTION_ERROR": "Connection error. Please check your internet connection.",
+  "FAIL_LOAD_USER_DATA": "Failed to load saved user data",
+  "LOGOUT": "Logout",
+  "LOGGED_IN_AS": "Hello",
+  "EMAIL_SENT": "Email sent! Check your inbox.",
+  "RESEND_ACTIVATION": "Resend",
+  "INVALID_TOKEN": "Session is invalid or expired. Please log in again.",
+  "ENTER_EMAIL": "Enter your email",
+  "LOGIN_LINK": "Send Login Link",
+  "LOGIN_LINK_INFO": "We'll email you a secure link to log in. No password needed.",
+  "ACCOUNT_WINDOW_TITLE": "Account",
+  "CONNECTION_TIMEOUT": "Connection timed out. Please try again.",
+  "OPEN_ACCOUNT_WINDOW": "Manage Account",
+  "AUTO_SCALE_BACKGROUND": "Auto scale background",
+  "UPDATES": "Updates",
+  "SCENE": "Scene",
+  "CUSTOM_BACKGROUND_SCALE": "Custom background scale",
+  "PRIMARY_BG_COLOR": "Primary background color",
+  "SECONDARY_BG_COLOR": "Secondary background color",
+  "RESET": "Reset",
+  "INSTALL": "Install",
+  "OWNED_PRODUCTS": "Owned Content",
+  "INSTALLING": "Installing",
+  "INSTALLED": "Installed",
+  "ACCOUNT_PROVIDER_INFO": "Account handled by",
+  "UPDATE": "Update",
+  "AUTOSAVE_OPEN_FOLDER": "Open autosave folder",
+  "AUTOSAVE_OPEN_FOLDER_DESCRIPTIVE": "Open the folder where autosaves are stored",
+  "AUTOSAVE_TOGGLE_DESCRIPTIVE": "Enable/disable autosave",
+  "FOUNDERS_BUNDLE": "Founder's Bundle",
+  "FOUNDERS_BUNDLE_SUBTEXT": "Support PixiEditor and boost your productivity!",
+  "BECOME_A_FOUNDER": "Become a Founder",
+  "LOGIN": "Login",
+  "NOT_FOUNDER_YET": "Not a Founder yet?",
+  "ERROR_GRAPH": "Graph setup produced an error. Fix it in the node graph",
+  "COLOR_MATRIX_FILTER_NODE": "Color Matrix Filter",
+  "WORKSPACE": "Workspace",
+  "IS_DEFAULT_EXPORT": "Is Default Export",
+  "EXPORT_OUTPUT": "Export Output",
+  "RENDER_OUTPUT_SIZE": "Render Output Size",
+  "RENDER_OUTPUT_CENTER": "Render Output Center",
+  "COLOR_PICKER": "Color Picker",
+  "UNAUTHORIZED_ACCESS": "Unauthorized access",
+  "SEPARATE_SHAPES": "Separate Shapes",
+  "SEPARATE_SHAPES_DESCRIPTIVE": "Separate shapes from current vector into individual layers",
+  "TEXT": "Text",
+  "EXTRACT_SELECTED_TEXT": "Extract selected text",
+  "EXTRACT_SELECTED_TEXT_DESCRIPTIVE": "Extract selected text into new layer.",
+  "EXTRACT_SELECTED_CHARACTERS": "Extract selected characters",
+  "EXTRACT_SELECTED_CHARACTERS_DESCRIPTIVE": "Extract individual characters from selection into new layers.",
+  "STEP_START": "Step back to closest cel",
+  "STEP_END": "Step forward to closest cel",
+  "STEP_FORWARD": "Step forward one frame",
+  "STEP_BACK": "Step back one frame",
+  "ANIMATION_QUALITY_PRESET": "Quality Preset",
+  "VERY_LOW_QUALITY_PRESET": "Very Low",
+  "LOW_QUALITY_PRESET": "Low",
+  "MEDIUM_QUALITY_PRESET": "Medium",
+  "HIGH_QUALITY_PRESET": "High",
+  "VERY_HIGH_QUALITY_PRESET": "Very High",
+  "EXPORT_FRAMES": "Export Frames",
+  "NORMALIZE_OFFSET": "Normalize Offset",
+  "TANGENT": "Tangent",
+  "EVALUATE_PATH_NODE": "Evaluate Path",
+  "OLD_MIN": "Old Min",
+  "OLD_MAX": "Old Max",
+  "NEW_MIN": "New Min",
+  "NEW_MAX": "New Max",
+  "REMAP_NODE": "Remap",
+  "TEXT_TOOL_ACTION_DISPLAY": "Click on the canvas to add a new text (drag while clicking to set the size). Click on existing text to edit it.",
+  "PASTE_CELS": "Paste cels",
+  "PASTE_CELS_DESCRIPTIVE": "Paste cels from clipboard into the current frame",
+  "SCALE_X": "Scale X",
+  "SCALE_Y": "Scale Y",
+  "TRANSLATE_X": "Translate X",
+  "TRANSLATE_Y": "Translate Y",
+  "SKEW_X": "Skew X",
+  "SKEW_Y": "Skew Y",
+  "PERSPECTIVE_0": "Perspective 0",
+  "PERSPECTIVE_1": "Perspective 1",
+  "PERSPECTIVE_2": "Perspective 2",
+  "COMPOSE_MATRIX": "Compose Matrix",
+  "DECOMPOSE_MATRIX": "Decompose Matrix",
+  "NORMALIZE_COORDINATES": "Normalize Coordinates",
+  "TRANSFORMED_POSITION": "Transformed Position",
+  "ACCOUNT_PROVIDER_NOT_AVAILABLE": "This build of PixiEditor does not support accounts. Use the official build from pixieditor.net to manage your account.",
+  "STEAM_OFFLINE": "Cannot validate the account. Steam is offline. Make sure Steam client is running and you are logged in.",
+  "ERROR_GPU_RESOURCES_CREATION": "Failed to create resources: Try updating your GPU drivers or try setting different rendering api in settings. \nError: '{0}'",
+  "ERROR_SAVING_PREFERENCES_DESC": "Failed to save preferences with error: '{0}'. Please check if you have write permissions to the PixiEditor data folder.",
+  "ERROR_SAVING_PREFERENCES": "Failed to save preferences",
+  "PREFERRED_RENDERER": "Preferred Render Api",
+  "PERFORMANCE": "Performance",
+  "DISABLE_PREVIEWS": "Disable Previews",
+  "MAX_BILINEAR_CANVAS_SIZE": "Max Bilinear Canvas Size",
+  "MAX_BILINEAR_CANVAS_SIZE_DESC": "Maximum canvas size for bilinear filtering. Set to 0 to disable bilinear filtering. Bilinear filtering improves the quality of the canvas, but can cause performance issues on large canvases.",
+  "INVERT_MASK": "Invert mask",
+  "SLICE_TEXT_NODE": "Slice text",
+  "INDEX_START_AT": "Start at",
+  "CHARACTER_POSITION_NODE": "Character Position",
+  "FIRST_POSITION": "First position",
+  "LAST_POSITION": "Last position",
+  "MATCH_CASE": "Match case",
+  "SEARCH_TEXT": "Search text",
+  "TEXT_INFO_NODE": "Text info",
+  "TEXT_LENGTH": "Length",
+  "TEXT_LINE_COUNT": "Line count",
+  "TEXT_SLICE_USE_LENGTH": "Use length",
+  "TOGGLE_TINTING_SELECTION": "Toggle selection tinting",
+  "TOGGLE_TINTING_SELECTION_DESCRIPTIVE": "Toggle selection tinting",
+  "TINT_SELECTION": "Selection tinting",
+  "PAINT_BRUSH_SHAPE_CIRCLE": "Circle",
+  "PAINT_BRUSH_SHAPE_SQUARE": "Square",
+  "BRIGHTNESS_MODE_DEFAULT": "Default",
+  "BRIGHTNESS_MODE_REPEAT": "Repeat",
+  "ROUND_STROKE_CAP": "Round",
+  "BUTT_STROKE_CAP": "Butt",
+  "SQUARE_STROKE_CAP": "Square",
+  "ROUND_STROKE_JOIN": "Round",
+  "MITER_STROKE_JOIN": "Miter",
+  "BEVEL_STROKE_JOIN": "Bevel",
+  "TOGGLE_FULLSCREEN": "Toggle Fullscreen",
+  "TOGGLE_FULLSCREEN_DESCRIPTIVE": "Enter or Exit Fullscreen Mode"
 }

+ 24 - 0
src/PixiEditor/ViewModels/Document/Nodes/Text/SliceTextNodeViewModel.cs

@@ -0,0 +1,24 @@
+using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+using PixiEditor.Models.Events;
+using PixiEditor.Models.Handlers;
+using PixiEditor.ViewModels.Nodes;
+
+namespace PixiEditor.ViewModels.Document.Nodes.Text;
+
+[NodeViewModel("SLICE_TEXT_NODE", "SHAPE", PixiPerfectIcons.Slice)]
+internal class SliceTextNodeViewModel : NodeViewModel<SliceTextNode>
+{
+    private NodePropertyViewModel<bool> _useLengthProperty;
+    private NodePropertyViewModel _lengthProperty;
+    
+    public override void OnInitialized()
+    {
+        _useLengthProperty = FindInputProperty<bool>("UseLength");
+        _lengthProperty = FindInputProperty("Length");
+        
+        _useLengthProperty.ValueChanged += UseLengthValueChanged;
+    }
+
+    private void UseLengthValueChanged(INodePropertyHandler property, NodePropertyValueChangedArgs args) =>
+        _lengthProperty.IsVisible = _useLengthProperty.Value;
+}

+ 7 - 0
src/PixiEditor/ViewModels/Document/Nodes/Text/TextIndexOfNodeViewModel.cs

@@ -0,0 +1,7 @@
+using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+using PixiEditor.ViewModels.Nodes;
+
+namespace PixiEditor.ViewModels.Document.Nodes.Text;
+
+[NodeViewModel("CHARACTER_POSITION_NODE", "SHAPE", PixiPerfectIcons.WholeWord)]
+internal class TextIndexOfNodeViewModel : NodeViewModel<TextIndexOfNode>;

+ 7 - 0
src/PixiEditor/ViewModels/Document/Nodes/Text/TextInfoNodeViewModel.cs

@@ -0,0 +1,7 @@
+using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Text;
+using PixiEditor.ViewModels.Nodes;
+
+namespace PixiEditor.ViewModels.Document.Nodes.Text;
+
+[NodeViewModel("TEXT_INFO_NODE", "SHAPE", PixiPerfectIcons.Shredder)]
+internal class TextInfoNodeViewModel : NodeViewModel<TextInfoNode>;

+ 1 - 0
src/PixiEditor/Views/Nodes/Properties/BooleanPropertyView.axaml

@@ -10,5 +10,6 @@
                              x:Class="PixiEditor.Views.Nodes.Properties.BooleanPropertyView">
     <StackPanel Orientation="Horizontal" HorizontalAlignment="{Binding IsInput, Converter={converters:BoolToValueConverter FalseValue='Right', TrueValue='Stretch'}}">
         <CheckBox localization:Translator.Key="{Binding DisplayName}" Margin="0,0,4,0" IsVisible="{Binding ShowInputField}" IsChecked="{Binding Value}"/>
+        <TextBlock localization:Translator.Key="{Binding DisplayName}" Margin="0,0,4,0" IsVisible="{Binding !ShowInputField}" />
     </StackPanel>
 </properties:NodePropertyView>

Някои файлове не бяха показани, защото твърде много файлове са промени