From 6a865a614620d71521bd3dc032adffe0bf82378c Mon Sep 17 00:00:00 2001
From: Marcio Teixeira <marcio@alephobjects.com>
Date: Wed, 9 Oct 2019 18:46:10 -0600
Subject: [PATCH] Multi-language support (#15453)

---
 Marlin/src/Marlin.cpp                         |    9 +-
 Marlin/src/Marlin.h                           |    2 +-
 Marlin/src/core/language.h                    |   55 +-
 Marlin/src/core/multi_language.cpp            |    0
 Marlin/src/core/multi_language.h              |   79 +
 Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp   |   20 +-
 Marlin/src/feature/pause.cpp                  |   27 +-
 Marlin/src/feature/power_loss_recovery.cpp    |    2 +-
 Marlin/src/feature/prusa_MMU2/mmu2.cpp        |    6 +-
 Marlin/src/feature/tmc_util.cpp               |    2 +-
 Marlin/src/gcode/bedlevel/G26.cpp             |   14 +-
 Marlin/src/gcode/bedlevel/abl/G29.cpp         |    4 +-
 Marlin/src/gcode/calibrate/G28.cpp            |    4 +-
 Marlin/src/gcode/calibrate/M48.cpp            |    4 +-
 Marlin/src/gcode/calibrate/M852.cpp           |   10 +-
 Marlin/src/gcode/config/M43.cpp               |    2 +-
 Marlin/src/gcode/control/M108_M112_M410.cpp   |    2 +-
 Marlin/src/gcode/control/M80_M81.cpp          |    2 +-
 Marlin/src/gcode/geometry/M206_M428.cpp       |    2 +-
 Marlin/src/gcode/host/M16.cpp                 |    2 +-
 Marlin/src/gcode/lcd/M0_M1.cpp                |    7 +-
 Marlin/src/gcode/temperature/M140_M190.cpp    |    2 +-
 Marlin/src/gcode/temperature/M141_M191.cpp    |    2 +-
 Marlin/src/inc/Conditionals_post.h            |    9 +-
 Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp   |    6 +-
 Marlin/src/lcd/dogm/ultralcd_DOGM.cpp         |    8 +-
 .../extensible_ui/lib/dgus/DGUSDisplay.cpp    |   20 +-
 .../lib/dgus/DGUSDisplayDefinition.cpp        |   30 +-
 .../lib/dgus/DGUSDisplayDefinition.h          |   58 +-
 .../lcd/extensible_ui/lib/lulzbot/compat.h    |    5 -
 .../lib/lulzbot/language/language.h           |   64 -
 .../lib/lulzbot/language/language_de.h        |    2 -
 .../lib/lulzbot/language/language_en.h        |    2 -
 .../lib/lulzbot/language/language_fr.h        |    2 -
 .../lib/lulzbot/marlin_events.cpp             |   10 +-
 .../lib/lulzbot/screens/boot_screen.cpp       |    4 +-
 .../lulzbot/screens/endstop_state_screen.cpp  |    2 +
 .../lib/lulzbot/screens/kill_screen.cpp       |    2 +-
 .../screens/max_acceleration_screen.cpp       |   10 +-
 .../lib/lulzbot/screens/screens.h             |    2 +-
 Marlin/src/lcd/extensible_ui/ui_api.cpp       |   10 +-
 Marlin/src/lcd/extensible_ui/ui_api.h         |    3 +-
 Marlin/src/lcd/extui_dgus_lcd.cpp             |    6 +-
 Marlin/src/lcd/extui_example.cpp              |    2 +-
 Marlin/src/lcd/extui_malyan_lcd.cpp           |    6 +-
 Marlin/src/lcd/language/language_an.h         |  466 ++--
 Marlin/src/lcd/language/language_bg.h         |  288 ++-
 Marlin/src/lcd/language/language_ca.h         |  475 ++--
 Marlin/src/lcd/language/language_cz.h         | 1067 ++++----
 Marlin/src/lcd/language/language_da.h         |  411 ++-
 Marlin/src/lcd/language/language_de.h         | 1169 +++++----
 Marlin/src/lcd/language/language_el.h         |  377 +--
 Marlin/src/lcd/language/language_el_gr.h      |  405 +--
 Marlin/src/lcd/language/language_en.h         | 2197 +++++------------
 Marlin/src/lcd/language/language_es.h         | 1110 +++++----
 Marlin/src/lcd/language/language_eu.h         |  706 +++---
 Marlin/src/lcd/language/language_fi.h         |  268 +-
 Marlin/src/lcd/language/language_fr.h         | 1083 ++++----
 Marlin/src/lcd/language/language_gl.h         |  451 ++--
 Marlin/src/lcd/language/language_hr.h         |  386 ++-
 Marlin/src/lcd/language/language_it.h         | 1155 +++++----
 Marlin/src/lcd/language/language_jp_kana.h    |  488 ++--
 Marlin/src/lcd/language/language_ko_KR.h      |  482 +---
 Marlin/src/lcd/language/language_nl.h         |  504 ++--
 Marlin/src/lcd/language/language_pl.h         |  469 ++--
 Marlin/src/lcd/language/language_pt.h         |  333 +--
 Marlin/src/lcd/language/language_pt_br.h      |  848 ++++---
 Marlin/src/lcd/language/language_ru.h         |  926 ++++---
 Marlin/src/lcd/language/language_sk.h         | 1130 +++++----
 Marlin/src/lcd/language/language_test.h       |  253 +-
 Marlin/src/lcd/language/language_tr.h         |  874 ++++---
 Marlin/src/lcd/language/language_uk.h         |  495 ++--
 Marlin/src/lcd/language/language_vi.h         |  910 ++++---
 Marlin/src/lcd/language/language_zh_CN.h      |  794 +++---
 Marlin/src/lcd/language/language_zh_TW.h      |  795 +++---
 Marlin/src/lcd/menu/menu.cpp                  |   11 +-
 Marlin/src/lcd/menu/menu.h                    |   51 +-
 Marlin/src/lcd/menu/menu_advanced.cpp         |  127 +-
 Marlin/src/lcd/menu/menu_backlash.cpp         |    2 +-
 Marlin/src/lcd/menu/menu_bed_corners.cpp      |    4 +-
 Marlin/src/lcd/menu/menu_bed_leveling.cpp     |   10 +-
 Marlin/src/lcd/menu/menu_configuration.cpp    |   10 +-
 Marlin/src/lcd/menu/menu_custom.cpp           |   10 +-
 Marlin/src/lcd/menu/menu_delta_calibrate.cpp  |    6 +-
 Marlin/src/lcd/menu/menu_filament.cpp         |  224 +-
 Marlin/src/lcd/menu/menu_info.cpp             |  113 +-
 Marlin/src/lcd/menu/menu_main.cpp             |    8 +-
 Marlin/src/lcd/menu/menu_media.cpp            |    8 +-
 Marlin/src/lcd/menu/menu_mixer.cpp            |   22 +-
 Marlin/src/lcd/menu/menu_mmu2.cpp             |    8 +-
 Marlin/src/lcd/menu/menu_motion.cpp           |   54 +-
 Marlin/src/lcd/menu/menu_service.cpp          |   12 +-
 Marlin/src/lcd/menu/menu_temperature.cpp      |   20 +-
 Marlin/src/lcd/menu/menu_tmc.cpp              |    8 +-
 Marlin/src/lcd/menu/menu_tune.cpp             |   32 +-
 Marlin/src/lcd/menu/menu_ubl.cpp              |   22 +-
 Marlin/src/lcd/ultralcd.cpp                   |   35 +-
 Marlin/src/lcd/ultralcd.h                     |    9 +-
 Marlin/src/module/endstops.cpp                |    4 +-
 Marlin/src/module/motion.cpp                  |    4 +-
 Marlin/src/module/probe.cpp                   |    8 +-
 Marlin/src/module/temperature.cpp             |   87 +-
 buildroot/share/tests/DUE-tests               |    4 +-
 buildroot/share/tests/megaatmega1280-tests    |    1 +
 buildroot/share/tests/megaatmega2560-tests    |   16 +-
 105 files changed, 11554 insertions(+), 11213 deletions(-)
 create mode 100644 Marlin/src/core/multi_language.cpp
 create mode 100644 Marlin/src/core/multi_language.h

diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index ef8442e867..f130221821 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -324,7 +324,7 @@ void disable_all_steppers() {
       #ifdef ACTION_ON_CANCEL
         host_action_cancel();
       #endif
-      kill(PSTR(MSG_ERR_PROBING_FAILED));
+      kill(GET_TEXT(MSG_LCD_PROBING_FAILED));
     #endif
   }
 
@@ -686,15 +686,16 @@ void idle(
  * Kill all activity and lock the machine.
  * After this the machine will need to be reset.
  */
-void kill(PGM_P const lcd_msg/*=nullptr*/, const bool steppers_off/*=false*/) {
+void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
   thermalManager.disable_all_heaters();
 
   SERIAL_ERROR_MSG(MSG_ERR_KILLED);
 
   #if HAS_DISPLAY
-    ui.kill_screen(lcd_msg ?: PSTR(MSG_KILLED));
+    ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component);
   #else
-    UNUSED(lcd_msg);
+    UNUSED(lcd_error);
+    UNUSED(lcd_component);
   #endif
 
   #ifdef ACTION_ON_KILL
diff --git a/Marlin/src/Marlin.h b/Marlin/src/Marlin.h
index 8b64c9a2cb..391c453e01 100644
--- a/Marlin/src/Marlin.h
+++ b/Marlin/src/Marlin.h
@@ -322,7 +322,7 @@ void disable_e_stepper(const uint8_t e);
 void disable_e_steppers();
 void disable_all_steppers();
 
-void kill(PGM_P const lcd_msg=nullptr, const bool steppers_off=false);
+void kill(PGM_P const lcd_error=nullptr, PGM_P const lcd_component=nullptr, const bool steppers_off=false);
 void minkill(const bool steppers_off=false);
 
 void quickstop_stepper();
diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index 9a68a4765c..696a5cb0a9 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -97,7 +97,20 @@
 //  #define STRING_SPLASH_LINE3 WEBSITE_URL
 //#endif
 
-#if HAS_GRAPHICAL_LCD
+#if HAS_CHARACTER_LCD
+
+  // Custom characters defined in the first 8 characters of the LCD
+  #define LCD_STR_BEDTEMP     "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
+  #define LCD_STR_DEGREE      "\x01"
+  #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
+  #define LCD_STR_UPLEVEL     "\x03"
+  #define LCD_STR_REFRESH     "\x04"
+  #define LCD_STR_FOLDER      "\x05"
+  #define LCD_STR_FEEDRATE    "\x06"
+  #define LCD_STR_CLOCK       "\x07"
+  #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
+
+#else
   //
   // Custom characters from Marlin_symbols.fon which was merged into ISO10646-0-3.bdf
   // \x00 intentionally skipped to avoid problems in strings
@@ -120,19 +133,6 @@
   #define LCD_STR_FILAM_DIA   "\xF8"
   #define LCD_STR_FILAM_MUL   "\xA4"
 
-#elif HAS_CHARACTER_LCD
-
-  // Custom characters defined in the first 8 characters of the LCD
-  #define LCD_STR_BEDTEMP     "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
-  #define LCD_STR_DEGREE      "\x01"
-  #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
-  #define LCD_STR_UPLEVEL     "\x03"
-  #define LCD_STR_REFRESH     "\x04"
-  #define LCD_STR_FOLDER      "\x05"
-  #define LCD_STR_FEEDRATE    "\x06"
-  #define LCD_STR_CLOCK       "\x07"
-  #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
-
 #endif
 
 // Common LCD messages
@@ -243,10 +243,9 @@
 #define MSG_ERR_COLD_EXTRUDE_STOP           " cold extrusion prevented"
 #define MSG_ERR_LONG_EXTRUDE_STOP           " too long extrusion prevented"
 #define MSG_ERR_HOTEND_TOO_COLD             "Hotend too cold"
+#define MSG_ERR_Z_HOMING_SER                "Home XY first"
+#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
 
-#define MSG_FILAMENT_CHANGE_HEAT            "Press button (or M108) to heat nozzle"
-#define MSG_FILAMENT_CHANGE_INSERT          "Insert filament and press button (or M108)"
-#define MSG_FILAMENT_CHANGE_WAIT            "Press button (or M108) to resume"
 #define MSG_FILAMENT_CHANGE_HEAT_LCD        "Press button to heat nozzle"
 #define MSG_FILAMENT_CHANGE_INSERT_LCD      "Insert filament and press button"
 #define MSG_FILAMENT_CHANGE_WAIT_LCD        "Press button to resume"
@@ -254,8 +253,6 @@
 #define MSG_FILAMENT_CHANGE_INSERT_M108     "Insert filament and send M108"
 #define MSG_FILAMENT_CHANGE_WAIT_M108       "Send M108 to resume"
 
-#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
-
 #define MSG_STOP_BLTOUCH                    "STOP called because of BLTouch error - restart with M999"
 #define MSG_STOP_UNHOMED                    "STOP called because of unhomed error - restart with M999"
 #define MSG_KILL_INACTIVE_TIME              "KILL caused by too much inactive time - current command: "
@@ -298,6 +295,8 @@
 #define MSG_T_THERMAL_RUNAWAY               "Thermal Runaway"
 #define MSG_T_MAXTEMP                       "MAXTEMP triggered"
 #define MSG_T_MINTEMP                       "MINTEMP triggered"
+#define MSG_ERR_PROBING_FAILED              "Probing Failed"
+#define MSG_ZPROBE_OUT_SER                  "Z Probe Past Bed"
 
 // Debug
 #define MSG_DEBUG_PREFIX                    "DEBUG:"
@@ -313,11 +312,9 @@
 
 #define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
 #define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
-#define INCLUDE_LANGUAGE_DATA LANGUAGE_DATA_INCL(LCD_LANGUAGE)
 
 #define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
 #define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
-#define INCLUDE_LANGUAGE LANGUAGE_INCL(LCD_LANGUAGE)
 
 // Never translate these strings
 #define MSG_X "X"
@@ -338,6 +335,11 @@
 #define MSG_Z2 "Z2"
 #define MSG_Z3 "Z3"
 
+#define LCD_STR_A MSG_A
+#define LCD_STR_B MSG_B
+#define LCD_STR_C MSG_C
+#define LCD_STR_E MSG_E
+
 /**
  * Tool indexes for LCD display only
  *
@@ -370,7 +372,14 @@
 #define LCD_STR_E4 "E" LCD_STR_N4
 #define LCD_STR_E5 "E" LCD_STR_N5
 
-#include INCLUDE_LANGUAGE
+#include "multi_language.h"   // Allow multiple languages
+
+#include "../lcd/language/language_en.h"
+#include LANGUAGE_INCL(LCD_LANGUAGE)
+#include LANGUAGE_INCL(LCD_LANGUAGE_2)
+#include LANGUAGE_INCL(LCD_LANGUAGE_3)
+#include LANGUAGE_INCL(LCD_LANGUAGE_4)
+#include LANGUAGE_INCL(LCD_LANGUAGE_5)
 
 #if NONE(DISPLAY_CHARSET_ISO10646_1, \
          DISPLAY_CHARSET_ISO10646_5, \
@@ -383,5 +392,3 @@
          DISPLAY_CHARSET_ISO10646_SK)
   #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
 #endif
-
-#include "../lcd/language/language_en.h"
diff --git a/Marlin/src/core/multi_language.cpp b/Marlin/src/core/multi_language.cpp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/Marlin/src/core/multi_language.h b/Marlin/src/core/multi_language.h
new file mode 100644
index 0000000000..7ddedf3e1a
--- /dev/null
+++ b/Marlin/src/core/multi_language.h
@@ -0,0 +1,79 @@
+/********************
+ * multi_language.h *
+ ********************/
+
+/****************************************************************************
+ *   Written By Marcio Teixeira 2019 - Aleph Objects, Inc.                  *
+ *                                                                          *
+ *   This program is free software: you can redistribute it and/or modify   *
+ *   it under the terms of the GNU General Public License as published by   *
+ *   the Free Software Foundation, either version 3 of the License, or      *
+ *   (at your option) any later version.                                    *
+ *                                                                          *
+ *   This program is distributed in the hope that it will be useful,        *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *   GNU General Public License for more details.                           *
+ *                                                                          *
+ *   To view a copy of the GNU General Public License, go to the following  *
+ *   location: <http://www.gnu.org/licenses/>.                              *
+ ****************************************************************************/
+#pragma once
+
+typedef const char Language_Str[];
+
+#if defined(LCD_LANGUAGE_5)
+  #define NUM_LANGUAGES 5
+#elif defined(LCD_LANGUAGE_4)
+  #define NUM_LANGUAGES 4
+#elif defined(LCD_LANGUAGE_3)
+  #define NUM_LANGUAGES 3
+#elif defined(LCD_LANGUAGE_2)
+  #define NUM_LANGUAGES 2
+#else
+  #define NUM_LANGUAGES 1
+#endif
+
+// Setting the unused languages equal to each other allows
+// the compiler to optimize away the conditionals
+
+#ifndef LCD_LANGUAGE_2
+  #define LCD_LANGUAGE_2 LCD_LANGUAGE
+#endif
+
+#ifndef LCD_LANGUAGE_3
+  #define LCD_LANGUAGE_3 LCD_LANGUAGE_2
+#endif
+
+#ifndef LCD_LANGUAGE_4
+  #define LCD_LANGUAGE_4 LCD_LANGUAGE_3
+#endif
+
+#ifndef LCD_LANGUAGE_5
+  #define LCD_LANGUAGE_5 LCD_LANGUAGE_4
+#endif
+
+#define _GET_LANG(LANG) Language_##LANG
+#define GET_LANG(LANG) _GET_LANG(LANG)
+
+#if NUM_LANGUAGES > 1
+  extern uint8_t lang;
+  #define GET_TEXT(MSG) ( \
+    lang == 0 ? GET_LANG(LCD_LANGUAGE)::MSG : \
+    lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \
+    lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \
+    lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \
+                GET_LANG(LCD_LANGUAGE_5)::MSG \
+    )
+  #define MAX_LANG_CHARSIZE max(GET_LANG(LCD_LANGUAGE)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_2)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_3)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_4)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_5)::CHARSIZE)
+#else
+  #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE)::MSG
+  #define MAX_LANG_CHARSIZE GET_LANG(LCD_LANGUAGE)::CHARSIZE
+#endif
+#define GET_TEXT_F(MSG) (const __FlashStringHelper*)GET_TEXT(MSG)
+
+#define MSG_CONCAT(A,B) pgm_p_pair_t(GET_TEXT(A),GET_TEXT(B))
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index d016667e44..69c3d2d997 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -757,7 +757,7 @@
         const int point_num = (GRID_MAX_POINTS) - count + 1;
         SERIAL_ECHOLNPAIR("\nProbing mesh point ", point_num, "/", int(GRID_MAX_POINTS), ".\n");
         #if HAS_DISPLAY
-          ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/%i"), point_num, int(GRID_MAX_POINTS));
+          ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_MESH), point_num, int(GRID_MAX_POINTS));
         #endif
 
         #if HAS_LCD_MENU
@@ -921,7 +921,7 @@
 
         if (do_ubl_mesh_map) display_map(g29_map_type);  // show user where we're probing
 
-        serialprintPGM(parser.seen('B') ? PSTR(MSG_UBL_BC_INSERT) : PSTR(MSG_UBL_BC_INSERT2));
+        serialprintPGM(parser.seen('B') ? GET_TEXT(MSG_UBL_BC_INSERT) : GET_TEXT(MSG_UBL_BC_INSERT2));
 
         const float z_step = 0.01f;                         // existing behavior: 0.01mm per click, occasionally step
         //const float z_step = planner.steps_to_mm[Z_AXIS]; // approx one step each click
@@ -959,7 +959,7 @@
     void abort_fine_tune() {
       ui.return_to_status();
       do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
-      set_message_with_feedback(PSTR(MSG_EDITING_STOPPED));
+      set_message_with_feedback(GET_TEXT(MSG_EDITING_STOPPED));
     }
 
     void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) {
@@ -1072,7 +1072,7 @@
     bool err_flag = false;
 
     #if HAS_LCD_MENU
-      set_message_with_feedback(PSTR(MSG_UBL_DOING_G29));
+      set_message_with_feedback(GET_TEXT(MSG_UBL_DOING_G29));
     #endif
 
     g29_constant = 0;
@@ -1196,7 +1196,7 @@
       if (ubl_state_recursion_chk != 1) {
         SERIAL_ECHOLNPGM("save_ubl_active_state_and_disabled() called multiple times in a row.");
         #if HAS_LCD_MENU
-          set_message_with_feedback(PSTR(MSG_UBL_SAVE_ERROR));
+          set_message_with_feedback(GET_TEXT(MSG_UBL_SAVE_ERROR));
         #endif
         return;
       }
@@ -1210,7 +1210,7 @@
       if (--ubl_state_recursion_chk) {
         SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times.");
         #if HAS_LCD_MENU
-          set_message_with_feedback(PSTR(MSG_UBL_RESTORE_ERROR));
+          set_message_with_feedback(GET_TEXT(MSG_UBL_RESTORE_ERROR));
         #endif
         return;
       }
@@ -1410,7 +1410,7 @@
       if (do_3_pt_leveling) {
         SERIAL_ECHOLNPGM("Tilting mesh (1/3)");
         #if HAS_DISPLAY
-          ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3"));
+          ui.status_printf_P(0, PSTR(S_FMT " 1/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
         #endif
 
         measured_z = probe_at_point(points[0], PROBE_PT_RAISE, g29_verbose_level);
@@ -1431,7 +1431,7 @@
         if (!abort_flag) {
           SERIAL_ECHOLNPGM("Tilting mesh (2/3)");
           #if HAS_DISPLAY
-            ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3"));
+            ui.status_printf_P(0, PSTR(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
           #endif
 
           measured_z = probe_at_point(points[1], PROBE_PT_RAISE, g29_verbose_level);
@@ -1453,7 +1453,7 @@
         if (!abort_flag) {
           SERIAL_ECHOLNPGM("Tilting mesh (3/3)");
           #if HAS_DISPLAY
-            ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3"));
+            ui.status_printf_P(0, PSTR(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
           #endif
 
           measured_z = probe_at_point(points[2], PROBE_PT_STOW, g29_verbose_level);
@@ -1497,7 +1497,7 @@
             if (!abort_flag) {
               SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n");
               #if HAS_DISPLAY
-                ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " %i/%i"), point_num, total_points);
+                ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points);
               #endif
 
               measured_z = probe_at_point(rpos, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling
diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp
index b319bbab6e..07f1d7d1b2 100644
--- a/Marlin/src/feature/pause.cpp
+++ b/Marlin/src/feature/pause.cpp
@@ -53,6 +53,7 @@
   #include "../lcd/extensible_ui/ui_api.h"
 #endif
 
+#include "../core/language.h"
 #include "../lcd/ultralcd.h"
 
 #if HAS_BUZZER
@@ -76,6 +77,12 @@ fil_change_settings_t fc_settings[EXTRUDERS];
   #include "../sd/cardreader.h"
 #endif
 
+#if ENABLED(EMERGENCY_PARSER)
+  #define _PMSG(L) L##_M108
+#else
+  #define _PMSG(L) L##_LCD
+#endif
+
 #if HAS_BUZZER
   static void filament_change_beep(const int8_t max_beep_count, const bool init=false) {
     if (pause_mode == PAUSE_MODE_PAUSE_PRINT) return;
@@ -163,7 +170,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
     #if HAS_LCD_MENU
       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
     #endif
-    SERIAL_ECHO_MSG(MSG_FILAMENT_CHANGE_INSERT);
+    SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT));
 
     #if HAS_BUZZER
       filament_change_beep(max_beep_count, true);
@@ -188,7 +195,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
       host_action_prompt_show();
     #endif
     #if ENABLED(EXTENSIBLE_UI)
-      ExtUI::onUserConfirmRequired(PSTR("Load Filament"));
+      ExtUI::onUserConfirmRequired_P(PSTR("Load Filament"));
     #endif
     while (wait_for_user) {
       #if HAS_BUZZER
@@ -243,7 +250,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
       host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purge Running..."), PSTR("Continue"));
     #endif
     #if ENABLED(EXTENSIBLE_UI)
-      ExtUI::onUserConfirmRequired(PSTR("Filament Purge Running..."));
+      ExtUI::onUserConfirmRequired_P(PSTR("Filament Purge Running..."));
     #endif
     for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
       do_pause_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE);
@@ -481,14 +488,6 @@ bool pause_print(const float &retract, const xyz_pos_t &park_point, const float
  * Used by M125 and M600
  */
 
-#if (HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI)) && ENABLED(EMERGENCY_PARSER)
-  #define _PMSG(L) L
-#elif ENABLED(EMERGENCY_PARSER)
-  #define _PMSG(L) L##_M108
-#else
-  #define _PMSG(L) L##_LCD
-#endif
-
 void show_continue_prompt(const bool is_reload) {
   #if HAS_LCD_MENU
     lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
@@ -527,7 +526,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
     host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), PSTR("Continue"));
   #endif
   #if ENABLED(EXTENSIBLE_UI)
-    ExtUI::onUserConfirmRequired(PSTR("Nozzle Parked"));
+    ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked"));
   #endif
   while (wait_for_user) {
     #if HAS_BUZZER
@@ -551,7 +550,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
       #endif
 
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("HeaterTimeout"));
+        ExtUI::onUserConfirmRequired_P(PSTR("HeaterTimeout"));
       #endif
 
       // Wait for LCD click or M108
@@ -581,7 +580,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired("Reheat finished.");
+        ExtUI::onUserConfirmRequired_P(PSTR("Reheat finished."));
       #endif
       wait_for_user = true;
       nozzle_timed_out = false;
diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp
index bf13bb4b1a..99f8d5dc4a 100644
--- a/Marlin/src/feature/power_loss_recovery.cpp
+++ b/Marlin/src/feature/power_loss_recovery.cpp
@@ -228,7 +228,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=
 #if PIN_EXISTS(POWER_LOSS)
   void PrintJobRecovery::_outage() {
     save(true);
-    kill(PSTR(MSG_OUTAGE_RECOVERY));
+    kill(GET_TEXT(MSG_OUTAGE_RECOVERY));
   }
 #endif
 
diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.cpp b/Marlin/src/feature/prusa_MMU2/mmu2.cpp
index dd0b2c681c..66b3877f0c 100644
--- a/Marlin/src/feature/prusa_MMU2/mmu2.cpp
+++ b/Marlin/src/feature/prusa_MMU2/mmu2.cpp
@@ -433,7 +433,7 @@ bool MMU2::rx_ok() {
 void MMU2::check_version() {
   if (buildnr < MMU_REQUIRED_FW_BUILDNR) {
     SERIAL_ERROR_MSG("Invalid MMU2 firmware. Version >= " STRINGIFY(MMU_REQUIRED_FW_BUILDNR) " required.");
-    kill(MSG_MMU2_WRONG_FIRMWARE);
+    kill(GET_TEXT(MSG_MMU2_WRONG_FIRMWARE));
   }
 }
 
@@ -449,7 +449,7 @@ void MMU2::tool_change(uint8_t index) {
   if (index != extruder) {
 
     disable_E0();
-    ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+    ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
 
     command(MMU_CMD_T0 + index);
 
@@ -712,7 +712,7 @@ void MMU2::filament_runout() {
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("MMU2 Eject Recover"));
+        ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover"));
       #endif
       while (wait_for_user) idle();
       BUZZ(200, 404);
diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp
index 6b97168f98..618fdd81f5 100644
--- a/Marlin/src/feature/tmc_util.cpp
+++ b/Marlin/src/feature/tmc_util.cpp
@@ -1118,7 +1118,7 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
     #endif
   }
 
-  if (axis_connection) ui.set_status_P(PSTR(MSG_ERROR_TMC));
+  if (axis_connection) ui.set_status_P(GET_TEXT(MSG_ERROR_TMC));
 }
 
 #endif // HAS_TRINAMIC
diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp
index 46001411c8..467b71059c 100644
--- a/Marlin/src/gcode/bedlevel/G26.cpp
+++ b/Marlin/src/gcode/bedlevel/G26.cpp
@@ -168,7 +168,7 @@ int8_t g26_prime_flag;
    */
   bool user_canceled() {
     if (!ui.button_pressed()) return false; // Return if the button isn't pressed
-    ui.set_status_P(PSTR(MSG_G26_CANCELED), 99);
+    ui.set_status_P(GET_TEXT(MSG_G26_CANCELED), 99);
     #if HAS_LCD_MENU
       ui.quick_feedback();
     #endif
@@ -370,7 +370,7 @@ inline bool turn_on_heaters() {
 
     if (g26_bed_temp > 25) {
       #if HAS_SPI_LCD
-        ui.set_status_P(PSTR(MSG_G26_HEATING_BED), 99);
+        ui.set_status_P(GET_TEXT(MSG_G26_HEATING_BED), 99);
         ui.quick_feedback();
         #if HAS_LCD_MENU
           ui.capture();
@@ -391,7 +391,7 @@ inline bool turn_on_heaters() {
 
   // Start heating the active nozzle
   #if HAS_SPI_LCD
-    ui.set_status_P(PSTR(MSG_G26_HEATING_NOZZLE), 99);
+    ui.set_status_P(GET_TEXT(MSG_G26_HEATING_NOZZLE), 99);
     ui.quick_feedback();
   #endif
   thermalManager.setTargetHotend(g26_hotend_temp, active_extruder);
@@ -426,7 +426,7 @@ inline bool prime_nozzle() {
     if (g26_prime_flag == -1) {  // The user wants to control how much filament gets purged
 
       ui.capture();
-      ui.set_status_P(PSTR(MSG_G26_MANUAL_PRIME), 99);
+      ui.set_status_P(GET_TEXT(MSG_G26_MANUAL_PRIME), 99);
       ui.chirp();
 
       destination = current_position;
@@ -450,7 +450,7 @@ inline bool prime_nozzle() {
 
       ui.wait_for_release();
 
-      ui.set_status_P(PSTR(MSG_G26_PRIME_DONE), 99);
+      ui.set_status_P(GET_TEXT(MSG_G26_PRIME_DONE), 99);
       ui.quick_feedback();
       ui.release();
     }
@@ -458,7 +458,7 @@ inline bool prime_nozzle() {
   #endif
   {
     #if HAS_SPI_LCD
-      ui.set_status_P(PSTR(MSG_G26_FIXED_LENGTH), 99);
+      ui.set_status_P(GET_TEXT(MSG_G26_FIXED_LENGTH), 99);
       ui.quick_feedback();
     #endif
     destination = current_position;
@@ -827,7 +827,7 @@ void GcodeSuite::G26() {
   } while (--g26_repeats && location.valid());
 
   LEAVE:
-  ui.set_status_P(PSTR(MSG_G26_LEAVING), -1);
+  ui.set_status_P(GET_TEXT(MSG_G26_LEAVING), -1);
 
   retract_filament(destination);
   destination.z = Z_CLEARANCE_BETWEEN_PROBES;
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index 5f1ef2e9a3..9ca621d7cd 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -722,7 +722,7 @@ G29_TYPE GcodeSuite::G29() {
 
           if (verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", int(pt_index), "/", int(GRID_MAX_POINTS), ".");
           #if HAS_DISPLAY
-            ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), PSTR(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS));
+            ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS));
           #endif
 
           measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(probePos, raise_after, verbose_level);
@@ -764,7 +764,7 @@ G29_TYPE GcodeSuite::G29() {
       for (uint8_t i = 0; i < 3; ++i) {
         if (verbose_level) SERIAL_ECHOLNPAIR("Probing point ", int(i), "/3.");
         #if HAS_DISPLAY
-          ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/3"), int(i));
+          ui.status_printf_P(0, PSTR(S_FMT" %i/3"), GET_TEXT(MSG_PROBING_MESH)), int(i);
         #endif
 
         // Retain the last probe position
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index 7f1fb7705e..8fcb74abc5 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -118,7 +118,7 @@
     // Disallow Z homing if X or Y are unknown
     if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
-      SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING);
+      SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING_SER);
       return;
     }
 
@@ -154,7 +154,7 @@
     }
     else {
       LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
-      SERIAL_ECHO_MSG(MSG_ZPROBE_OUT);
+      SERIAL_ECHO_MSG(MSG_ZPROBE_OUT_SER);
     }
 
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp
index 8a12767224..ca30110670 100644
--- a/Marlin/src/gcode/calibrate/M48.cpp
+++ b/Marlin/src/gcode/calibrate/M48.cpp
@@ -126,7 +126,7 @@ void GcodeSuite::M48() {
     for (uint8_t n = 0; n < n_samples; n++) {
       #if HAS_SPI_LCD
         // Display M48 progress in the status bar
-        ui.status_printf_P(0, PSTR(MSG_M48_POINT ": %d/%d"), int(n + 1), int(n_samples));
+        ui.status_printf_P(0, PSTR(S_FMT ": %d/%d"), GET_TEXT(MSG_M48_POINT), int(n + 1), int(n_samples));
       #endif
       if (n_legs) {
         const int dir = (random(0, 10) > 5.0) ? -1 : 1;  // clockwise or counter clockwise
@@ -252,7 +252,7 @@ void GcodeSuite::M48() {
     #if HAS_SPI_LCD
       // Display M48 results in the status bar
       char sigma_str[8];
-      ui.status_printf_P(0, PSTR(MSG_M48_DEVIATION ": %s"), dtostrf(sigma, 2, 6, sigma_str));
+      ui.status_printf_P(0, PSTR(S_FMT ": %s"), GET_TEXT(MSG_M48_DEVIATION), dtostrf(sigma, 2, 6, sigma_str));
     #endif
   }
 
diff --git a/Marlin/src/gcode/calibrate/M852.cpp b/Marlin/src/gcode/calibrate/M852.cpp
index 156d1f5bf6..4bb068e5b2 100644
--- a/Marlin/src/gcode/calibrate/M852.cpp
+++ b/Marlin/src/gcode/calibrate/M852.cpp
@@ -93,13 +93,13 @@ void GcodeSuite::M852() {
 
   if (!ijk) {
     SERIAL_ECHO_START();
-    SERIAL_ECHOLNPAIR_F(MSG_SKEW_FACTOR " XY: ", planner.skew_factor.xy, 6);
+    serialprintPGM(GET_TEXT(MSG_SKEW_FACTOR));
+    SERIAL_ECHOPAIR_F(" XY: ", planner.skew_factor.xy, 6);
     #if ENABLED(SKEW_CORRECTION_FOR_Z)
-      SERIAL_ECHOPAIR(" XZ: ", planner.skew_factor.xz);
-      SERIAL_ECHOLNPAIR(" YZ: ", planner.skew_factor.yz);
-    #else
-      SERIAL_EOL();
+      SERIAL_ECHOPAIR_F(" XZ: ", planner.skew_factor.xz, 6);
+      SERIAL_ECHOPAIR_F(" YZ: ", planner.skew_factor.yz, 6);
     #endif
+    SERIAL_EOL();
   }
 }
 
diff --git a/Marlin/src/gcode/config/M43.cpp b/Marlin/src/gcode/config/M43.cpp
index 34d42ed499..0fd213886d 100644
--- a/Marlin/src/gcode/config/M43.cpp
+++ b/Marlin/src/gcode/config/M43.cpp
@@ -334,7 +334,7 @@ void GcodeSuite::M43() {
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M43 Wait Called"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("M43 Wait Called"));
+        ExtUI::onUserConfirmRequired_P(PSTR("M43 Wait Called"));
       #endif
     #endif
 
diff --git a/Marlin/src/gcode/control/M108_M112_M410.cpp b/Marlin/src/gcode/control/M108_M112_M410.cpp
index 9b6193bd93..50feb8276f 100644
--- a/Marlin/src/gcode/control/M108_M112_M410.cpp
+++ b/Marlin/src/gcode/control/M108_M112_M410.cpp
@@ -41,7 +41,7 @@ void GcodeSuite::M108() {
  * M112: Full Shutdown
  */
 void GcodeSuite::M112() {
-  kill(PSTR("M112 Shutdown"), true);
+  kill(PSTR("M112 Shutdown"), nullptr, true);
 }
 
 /**
diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp
index 03f73fe877..d7880358c4 100644
--- a/Marlin/src/gcode/control/M80_M81.cpp
+++ b/Marlin/src/gcode/control/M80_M81.cpp
@@ -110,6 +110,6 @@ void GcodeSuite::M81() {
   #endif
 
   #if HAS_LCD_MENU
-    LCD_MESSAGEPGM(MACHINE_NAME " " MSG_OFF ".");
+    LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " MSG_OFF "."));
   #endif
 }
diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp
index e17f41f835..6e2b46081c 100644
--- a/Marlin/src/gcode/geometry/M206_M428.cpp
+++ b/Marlin/src/gcode/geometry/M206_M428.cpp
@@ -70,7 +70,7 @@ void GcodeSuite::M428() {
       diff[i] = -current_position[i];
     if (!WITHIN(diff[i], -20, 20)) {
       SERIAL_ERROR_MSG(MSG_ERR_M428_TOO_FAR);
-      LCD_ALERTMESSAGEPGM("Err: Too far!");
+      LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
       BUZZ(200, 40);
       return;
     }
diff --git a/Marlin/src/gcode/host/M16.cpp b/Marlin/src/gcode/host/M16.cpp
index 94ae79b263..9219155011 100644
--- a/Marlin/src/gcode/host/M16.cpp
+++ b/Marlin/src/gcode/host/M16.cpp
@@ -33,7 +33,7 @@
 void GcodeSuite::M16() {
 
   if (strcmp_P(parser.string_arg, PSTR(MACHINE_NAME)))
-    kill(PSTR(MSG_EXPECTED_PRINTER));
+    kill(GET_TEXT(MSG_EXPECTED_PRINTER));
 
 }
 
diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp
index 05fb7576fb..aca149abdc 100644
--- a/Marlin/src/gcode/lcd/M0_M1.cpp
+++ b/Marlin/src/gcode/lcd/M0_M1.cpp
@@ -80,7 +80,10 @@ void GcodeSuite::M0_M1() {
 
   #elif ENABLED(EXTENSIBLE_UI)
 
-    ExtUI::onUserConfirmRequired(has_message ? args : MSG_USERWAIT); // SRAM string
+    if (has_message)
+      ExtUI::onUserConfirmRequired(args); // Can this take an SRAM string??
+    else
+      ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_USERWAIT));
 
   #else
 
@@ -98,7 +101,7 @@ void GcodeSuite::M0_M1() {
     host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), PSTR("Continue"));
   #endif
   #if ENABLED(EXTENSIBLE_UI)
-    ExtUI::onUserConfirmRequired(PSTR("M0/1 Break Called"));
+    ExtUI::onUserConfirmRequired_P(PSTR("M0/1 Break Called"));
   #endif
 
   if (ms > 0) {
diff --git a/Marlin/src/gcode/temperature/M140_M190.cpp b/Marlin/src/gcode/temperature/M140_M190.cpp
index a0d132f6b7..8d7c4fe0d1 100644
--- a/Marlin/src/gcode/temperature/M140_M190.cpp
+++ b/Marlin/src/gcode/temperature/M140_M190.cpp
@@ -64,7 +64,7 @@ void GcodeSuite::M190() {
   }
   else return;
 
-  ui.set_status_P(thermalManager.isHeatingBed() ? PSTR(MSG_BED_HEATING) : PSTR(MSG_BED_COOLING));
+  ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));
 
   thermalManager.wait_for_bed(no_wait_for_cooling);
 }
diff --git a/Marlin/src/gcode/temperature/M141_M191.cpp b/Marlin/src/gcode/temperature/M141_M191.cpp
index 53deb25d2f..a319faa8ac 100644
--- a/Marlin/src/gcode/temperature/M141_M191.cpp
+++ b/Marlin/src/gcode/temperature/M141_M191.cpp
@@ -68,7 +68,7 @@ void GcodeSuite::M191() {
   }
   else return;
 
-  lcd_setstatusPGM(thermalManager.isHeatingChamber() ? PSTR(MSG_CHAMBER_HEATING) : PSTR(MSG_CHAMBER_COOLING));
+  lcd_setstatusPGM(thermalManager.isHeatingChamber() ? GET_TEXT(MSG_CHAMBER_HEATING) : GET_TEXT(MSG_CHAMBER_COOLING));
 
   thermalManager.wait_for_chamber(no_wait_for_cooling);
 }
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 627fd0be38..fcc361ad4b 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -1072,14 +1072,9 @@
 #define HAS_AUTO_CHAMBER_FAN (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN))
 
 #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_CHAMBER_FAN)
+#define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
 #if HAS_AUTO_FAN
-  #define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_5 (CHAMBER_AUTO_FAN_PIN == E5_AUTO_FAN_PIN)
-  #define AUTO_CHAMBER_IS_E (AUTO_CHAMBER_IS_0 || AUTO_CHAMBER_IS_1 || AUTO_CHAMBER_IS_2 || AUTO_CHAMBER_IS_3 || AUTO_CHAMBER_IS_4 || AUTO_CHAMBER_IS_5)
+  #define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5))
 #endif
 
 #if !HAS_AUTO_CHAMBER_FAN || AUTO_CHAMBER_IS_E
diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
index 9f34946137..e497cfe9ee 100644
--- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
+++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
@@ -484,9 +484,9 @@ void MarlinUI::draw_kill_screen() {
   lcd_put_u8str(0, 0, status_message);
   lcd_uint_t y = 2;
   #if LCD_HEIGHT >= 4
-    lcd_put_u8str_P(0, y++, PSTR(MSG_HALTED));
+    lcd_put_u8str_P(0, y++, GET_TEXT(MSG_HALTED));
   #endif
-  lcd_put_u8str_P(0, y, PSTR(MSG_PLEASE_RESET));
+  lcd_put_u8str_P(0, y, GET_TEXT(MSG_PLEASE_RESET));
 }
 
 //
@@ -977,7 +977,7 @@ void MarlinUI::draw_status_screen() {
 
   #endif // ADVANCED_PAUSE_FEATURE
 
-  void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) {
+  void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) {
     int8_t n = LCD_WIDTH;
     lcd_moveto(0, row);
     if ((style & SS_CENTER) && !valstr) {
diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
index 7f9376fbc1..9f08643e76 100644
--- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
@@ -300,8 +300,8 @@ void MarlinUI::draw_kill_screen() {
   do {
     set_font(FONT_MENU);
     lcd_put_u8str(0, h4 * 1, status_message);
-    lcd_put_u8str_P(0, h4 * 2, PSTR(MSG_HALTED));
-    lcd_put_u8str_P(0, h4 * 3, PSTR(MSG_PLEASE_RESET));
+    lcd_put_u8str_P(0, h4 * 2, GET_TEXT(MSG_HALTED));
+    lcd_put_u8str_P(0, h4 * 3, GET_TEXT(MSG_PLEASE_RESET));
   } while (u8g.nextPage());
 }
 
@@ -363,9 +363,9 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
   }
 
   // Draw a static line of text in the same idiom as a menu item
-  void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) {
+  void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) {
 
-    if (mark_as_selected(row, (style & SS_INVERT))) {
+    if (mark_as_selected(row, style & SS_INVERT)) {
 
       u8g_uint_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
index 1fb3783b2d..c669294125 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
@@ -289,11 +289,11 @@ void DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable
 
     // Don't let the user in the dark why there is no reaction.
     if (!ExtUI::isMediaInserted()) {
-       setstatusmessagePGM(PSTR(MSG_NO_MEDIA));
+       setstatusmessagePGM(GET_TEXT(MSG_NO_MEDIA));
        return;
     }
     if (card.flag.abort_sd_printing) {
-       setstatusmessagePGM(PSTR(MSG_MEDIA_ABORTING));
+       setstatusmessagePGM(GET_TEXT(MSG_MEDIA_ABORTING));
        return;
     }
   }
@@ -472,13 +472,13 @@ void DGUSScreenVariableHandler::HandleTemperatureChanged(DGUS_VP_Variable &var,
   switch (var.VP) {
     default: return;
     #if HOTENDS >= 1
-      case VP_T_E1_Set:
+      case VP_T_E0_Set:
         thermalManager.setTargetHotend(newvalue, 0);
         acceptedvalue = thermalManager.temp_hotend[0].target;
         break;
     #endif
     #if HOTENDS >= 2
-      case VP_T_E2_Set:
+      case VP_T_E1_Set:
         thermalManager.setTargetHotend(newvalue, 1);
         acceptedvalue = thermalManager.temp_hotend[1].target;
       break;
@@ -503,10 +503,10 @@ void DGUSScreenVariableHandler::HandleFlowRateChanged(DGUS_VP_Variable &var, voi
     switch (var.VP) {
       default: return;
       #if (HOTENDS >= 1)
-        case VP_Flowrate_E1: target_extruder = 0; break;
+        case VP_Flowrate_E0: target_extruder = 0; break;
       #endif
       #if (HOTENDS >= 2)
-        case VP_Flowrate_E2: target_extruder = 1; break;
+        case VP_Flowrate_E1: target_extruder = 1; break;
       #endif
     }
 
@@ -526,11 +526,11 @@ void DGUSScreenVariableHandler::HandleManualExtrude(DGUS_VP_Variable &var, void
   ExtUI::extruder_t target_extruder;
 
   switch (var.VP) {
-    #if HOTENDS >=1
-      case VP_MOVE_E1: target_extruder = ExtUI::extruder_t::E0; break;
+    #if HOTENDS >= 1
+      case VP_MOVE_E0: target_extruder = ExtUI::extruder_t::E0; break;
     #endif
-    #if HOTENDS >=2
-      case VP_MOVE_E2: target_extruder = ExtUI::extruder_t::E1; break
+    #if HOTENDS >= 2
+      case VP_MOVE_E1: target_extruder = ExtUI::extruder_t::E1; break
     #endif
     default: return;
   }
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
index 0501bc635b..de15d54597 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
@@ -46,10 +46,10 @@ const uint16_t VPList_Main[] PROGMEM = {
 
 const uint16_t VPList_Temp[] PROGMEM = {
   #if HOTENDS >= 1
-    VP_T_E1_Is, VP_T_E1_Set,
+    VP_T_E0_Is, VP_T_E0_Set,
   #endif
   #if HOTENDS >= 2
-    VP_T_E2_I, VP_T_E2_S,
+    VP_T_E1_I, VP_T_E1_S,
   #endif
   #if HAS_HEATED_BED
     VP_T_Bed_Is, VP_T_Bed_Set,
@@ -60,10 +60,10 @@ const uint16_t VPList_Temp[] PROGMEM = {
 const uint16_t VPList_Status[] PROGMEM = {
   /* VP_M117, for completeness, but it cannot be auto-uploaded */
   #if HOTENDS >= 1
-    VP_T_E1_Is, VP_T_E1_Set,
+    VP_T_E0_Is, VP_T_E0_Set,
   #endif
   #if HOTENDS >= 2
-    VP_T_E2_I, VP_T_E2_S,
+    VP_T_E1_I, VP_T_E1_S,
   #endif
   #if HAS_HEATED_BED
     VP_T_Bed_Is, VP_T_Bed_Set,
@@ -81,10 +81,10 @@ const uint16_t VPList_Status[] PROGMEM = {
 const uint16_t VPList_Status2[] PROGMEM = {
   /* VP_M117, for completeness, but it cannot be auto-uploaded */
   #if HOTENDS >= 1
-    VP_Flowrate_E1,
+    VP_Flowrate_E0,
   #endif
   #if HOTENDS >= 2
-    VP_Flowrate_E2,
+    VP_Flowrate_E1,
   #endif
   VP_PrintProgress_Percentage,
   VP_PrintTime,
@@ -107,7 +107,7 @@ const uint16_t VPList_FanAndFeedrate[] PROGMEM = {
 };
 
 const uint16_t VPList_SD_FlowRates[] PROGMEM = {
-  VP_Flowrate_E1, VP_Flowrate_E2,
+  VP_Flowrate_E0, VP_Flowrate_E1,
   0x0000
 };
 
@@ -166,17 +166,17 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
 
   // Temperature Data
   #if HOTENDS >= 1
-    VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>),
-    VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
-    VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+    VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>),
+    VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+    VPHELPER(VP_Flowrate_E0, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
     VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
-    VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
+    VPHELPER(VP_MOVE_E0, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
   #endif
   #if HOTENDS >= 2
-    VPHELPER(VP_T_E2_I, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>),
-    VPHELPER(VP_T_E2_S, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
-    VPHELPER(VP_Flowrate_E2, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
-    VPHELPER(VP_MOVE_E2, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
+    VPHELPER(VP_T_E1_I, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>),
+    VPHELPER(VP_T_E1_S, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+    VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+    VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
   #endif
   #if HOTENDS >= 3
     #error More than 2 Hotends currently not implemented on the Display UI design.
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
index f54a2938ec..f90cfa948b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
@@ -109,12 +109,12 @@ constexpr uint16_t VP_SD_AbortPrintConfirmed = 0x2028; // Abort print confirmati
 constexpr uint16_t VP_MOVE_X = 0x2100;
 constexpr uint16_t VP_MOVE_Y = 0x2102;
 constexpr uint16_t VP_MOVE_Z = 0x2104;
-constexpr uint16_t VP_MOVE_E1 = 0x2110;
-constexpr uint16_t VP_MOVE_E2 = 0x2112;
-//constexpr uint16_t VP_MOVE_E3 = 0x2114;
-//constexpr uint16_t VP_MOVE_E4 = 0x2116;
-//constexpr uint16_t VP_MOVE_E5 = 0x2118;
-//constexpr uint16_t VP_MOVE_E6 = 0x211A;
+constexpr uint16_t VP_MOVE_E0 = 0x2110;
+constexpr uint16_t VP_MOVE_E1 = 0x2112;
+//constexpr uint16_t VP_MOVE_E2 = 0x2114;
+//constexpr uint16_t VP_MOVE_E3 = 0x2116;
+//constexpr uint16_t VP_MOVE_E4 = 0x2118;
+//constexpr uint16_t VP_MOVE_E5 = 0x211A;
 constexpr uint16_t VP_HOME_ALL = 0x2120;
 
 // Firmware version on the boot screen.
@@ -126,34 +126,34 @@ constexpr uint16_t VP_M117 = 0x3020;
 constexpr uint8_t VP_M117_LEN = 0x20;
 
 // Temperatures.
-constexpr uint16_t VP_T_E1_Is = 0x3060;  // 4 Byte Integer
-constexpr uint16_t VP_T_E1_Set = 0x3062; // 2 Byte Integer
-constexpr uint16_t VP_T_E2_Is = 0x3064;  // 4 Byte Integer
+constexpr uint16_t VP_T_E0_Is = 0x3060;  // 4 Byte Integer
+constexpr uint16_t VP_T_E0_Set = 0x3062; // 2 Byte Integer
+constexpr uint16_t VP_T_E1_Is = 0x3064;  // 4 Byte Integer
 
 // reserved to support up to 6 Extruders:
-//constexpr uint16_t VP_T_E2_Set = 0x3066; // 2 Byte Integer
-//constexpr uint16_t VP_T_E3_Is = 0x3068;  // 4 Byte Integer
-//constexpr uint16_t VP_T_E3_Set = 0x306A; // 2 Byte Integer
-//constexpr uint16_t VP_T_E4_Is = 0x306C;  // 4 Byte Integer
-//constexpr uint16_t VP_T_E4_Set = 0x306E; // 2 Byte Integer
-//constexpr uint16_t VP_T_E5_Is = 0x3070;  // 4 Byte Integer
-//constexpr uint16_t VP_T_E5_Set = 0x3072; // 2 Byte Integer
-//constexpr uint16_t VP_T_E5_Is = 0x3074;  // 4 Byte Integer
-//constexpr uint16_t VP_T_E5_Set = 0x3076; // 2 Byte Integer
-//constexpr uint16_t VP_T_E6_Is = 0x3078;  // 4 Byte Integer
-//constexpr uint16_t VP_T_E6_Set = 0x307A; // 2 Byte Integer
+//constexpr uint16_t VP_T_E1_Set = 0x3066; // 2 Byte Integer
+//constexpr uint16_t VP_T_E2_Is = 0x3068;  // 4 Byte Integer
+//constexpr uint16_t VP_T_E2_Set = 0x306A; // 2 Byte Integer
+//constexpr uint16_t VP_T_E3_Is = 0x306C;  // 4 Byte Integer
+//constexpr uint16_t VP_T_E3_Set = 0x306E; // 2 Byte Integer
+//constexpr uint16_t VP_T_E4_Is = 0x3070;  // 4 Byte Integer
+//constexpr uint16_t VP_T_E4_Set = 0x3072; // 2 Byte Integer
+//constexpr uint16_t VP_T_E4_Is = 0x3074;  // 4 Byte Integer
+//constexpr uint16_t VP_T_E4_Set = 0x3076; // 2 Byte Integer
+//constexpr uint16_t VP_T_E5_Is = 0x3078;  // 4 Byte Integer
+//constexpr uint16_t VP_T_E5_Set = 0x307A; // 2 Byte Integer
 
 constexpr uint16_t VP_T_Bed_Is = 0x3080;  // 4 Byte Integer
 constexpr uint16_t VP_T_Bed_Set = 0x3082; // 2 Byte Integer
 
-constexpr uint16_t VP_Flowrate_E1 = 0x3090; // 2 Byte Integer
-constexpr uint16_t VP_Flowrate_E2 = 0x3092; // 2 Byte Integer
+constexpr uint16_t VP_Flowrate_E0 = 0x3090; // 2 Byte Integer
+constexpr uint16_t VP_Flowrate_E1 = 0x3092; // 2 Byte Integer
 
 // reserved for up to 6 Extruders:
-//constexpr uint16_t VP_Flowrate_E3 = 0x3094;
-//constexpr uint16_t VP_Flowrate_E4 = 0x3096;
-//constexpr uint16_t VP_Flowrate_E5 = 0x3098;
-//constexpr uint16_t VP_Flowrate_E6 = 0x309A;
+//constexpr uint16_t VP_Flowrate_E2 = 0x3094;
+//constexpr uint16_t VP_Flowrate_E3 = 0x3096;
+//constexpr uint16_t VP_Flowrate_E4 = 0x3098;
+//constexpr uint16_t VP_Flowrate_E5 = 0x309A;
 
 constexpr uint16_t VP_Fan_Percentage = 0x3100;  // 2 Byte Integer (0..100)
 constexpr uint16_t VP_Feedrate_Percentage = 0x3102; // 2 Byte Integer (0..100)
@@ -182,9 +182,9 @@ constexpr uint16_t VP_SD_FileName4 = 0x3280;
 // located at 0x5000 and up
 // Not used yet!
 // This can be used e.g to make controls / data display invisible
-constexpr uint16_t SP_T_E1_Is = 0x5000;
-constexpr uint16_t SP_T_E1_Set = 0x5010;
-constexpr uint16_t SP_T_E2_Is = 0x5020;
+constexpr uint16_t SP_T_E0_Is = 0x5000;
+constexpr uint16_t SP_T_E0_Set = 0x5010;
+constexpr uint16_t SP_T_E1_Is = 0x5020;
 constexpr uint16_t SP_T_Bed_Is = 0x5030;
 constexpr uint16_t SP_T_Bed_Set = 0x5040;
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
index 7e051be75a..90fd615a5d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
@@ -38,11 +38,6 @@
   // __MARLIN_FIRMWARE__ exists when compiled within Marlin.
   #include "pin_mappings.h"
 #else
-  // Messages that are declared in Marlin
-  #define WELCOME_MSG        "Printer Ready"
-  #define MSG_MEDIA_INSERTED "Media Inserted"
-  #define MSG_MEDIA_REMOVED  "Media Removed"
-
   namespace UI {
     static inline uint32_t safe_millis() {return millis();};
     static inline void     yield()       {};
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
index 694a94b908..fb66e6d77e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
@@ -20,70 +20,6 @@
  ****************************************************************************/
 #pragma once
 
-typedef const char Language_Str[];
-
-// Count how many languages are defined.
-
-#if defined(LCD_LANGUAGE_5)
-  #define NUM_LANGUAGES 5
-#elif defined(LCD_LANGUAGE_4)
-  #define NUM_LANGUAGES 4
-#elif defined(LCD_LANGUAGE_3)
-  #define NUM_LANGUAGES 3
-#elif defined(LCD_LANGUAGE_2)
-  #define NUM_LANGUAGES 2
-#else
-  #define NUM_LANGUAGES 1
-#endif
-
-// Set undefined languages equal to the last and
-// let the compiler optimize out the duplicates
-
-#ifndef LCD_LANGUAGE_1
-  #define LCD_LANGUAGE_1 LCD_LANGUAGE
-#endif
-
-#ifndef LCD_LANGUAGE_2
-  #define LCD_LANGUAGE_2 LCD_LANGUAGE_1
-#endif
-
-#ifndef LCD_LANGUAGE_3
-  #define LCD_LANGUAGE_3 LCD_LANGUAGE_2
-#endif
-
-#ifndef LCD_LANGUAGE_4
-  #define LCD_LANGUAGE_4 LCD_LANGUAGE_3
-#endif
-
-#ifndef LCD_LANGUAGE_5
-  #define LCD_LANGUAGE_5 LCD_LANGUAGE_4
-#endif
-
-// Indirection required to paste together the namespace name
-
-#define _GET_LANG(LANG) Language_##LANG
-#define GET_LANG(LANG) _GET_LANG(LANG)
-
-#if NUM_LANGUAGES > 1
-  extern uint8_t lang;
-  // The compiler does a good job of "flattening" out this
-  // if statement when there are fewer than five languages.
-  #define GET_TEXT(MSG) ( \
-    lang == 0 ? GET_LANG(LCD_LANGUAGE_1)::MSG : \
-    lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \
-    lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \
-    lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \
-                GET_LANG(LCD_LANGUAGE_5)::MSG \
-    )
-#else
-  #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE_1)::MSG
-#endif
-#define GET_TEXT_F(MSG) reinterpret_cast<const __FlashStringHelper *>(GET_TEXT(MSG))
-
-#define GET_LANGUAGE_NAME(N) GET_LANG(LCD_LANGUAGE_##N)::LANGUAGE
-
-// All the language tables go here
-
 #include "language_en.h"
 #include "language_de.h"
 #include "language_fr.h"
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
index 3c26bfb3d8..f00c50591e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
@@ -24,8 +24,6 @@
 namespace Language_de {
   using namespace Language_en; // Inherit undefined strings from English
 
-  PROGMEM Language_Str LANGUAGE                 = u8"Deutsche";
-
   PROGMEM Language_Str YES                      = u8"JA";
   PROGMEM Language_Str NO                       = u8"NEIN";
   PROGMEM Language_Str BACK                     = u8"Zurück";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
index d9bd63eb35..1485b0838e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
@@ -24,8 +24,6 @@
 #include "language.h"
 
 namespace Language_en {
-  PROGMEM Language_Str LANGUAGE                 = u8"English";
-
   PROGMEM Language_Str YES                      = u8"Yes";
   PROGMEM Language_Str NO                       = u8"No";
   PROGMEM Language_Str BACK                     = u8"Back";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
index a9ad20d320..64582219ce 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
@@ -24,8 +24,6 @@
 namespace Language_fr {
   using namespace Language_en; // Inherit undefined strings from English
 
-  PROGMEM Language_Str LANGUAGE                 = u8"Français";
-
   PROGMEM Language_Str YES                      = u8"oui";
   PROGMEM Language_Str NO                       = u8"non";
   PROGMEM Language_Str BACK                     = u8"Retour";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
index 38d7c7985f..e61033ee3a 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
@@ -38,19 +38,21 @@ namespace ExtUI {
     EventLoop::loop();
   }
 
-  void onPrinterKilled(PGM_P lcd_msg) {
-    KillScreen::show(progmem_str(lcd_msg));
+  void onPrinterKilled(PGM_P const error, PGM_P const component) {
+    char str[strlen_P(error) + strlen_P(component) + 3];
+    sprintf_P(str, PSTR(S_FMT ": " S_FMT), error, component);
+    KillScreen::show(str);
   }
 
   void onMediaInserted() {
     if (AT_SCREEN(StatusScreen))
-      StatusScreen::setStatusMessage(F(MSG_MEDIA_INSERTED));
+      StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED));
     sound.play(media_inserted, PLAY_ASYNCHRONOUS);
   }
 
   void onMediaRemoved() {
     if (AT_SCREEN(StatusScreen))
-      StatusScreen::setStatusMessage(F(MSG_MEDIA_REMOVED));
+      StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_REMOVED));
     sound.play(media_removed, PLAY_ASYNCHRONOUS);
     if (AT_SCREEN(FilesScreen)) {
       GOTO_SCREEN(StatusScreen)
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
index 117d426999..47a71f836d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
@@ -85,10 +85,10 @@ void BootScreen::onIdle() {
       PUSH_SCREEN(StatusScreen);
       PUSH_SCREEN(BioConfirmHomeE);
     #elif NUM_LANGUAGES > 1
-      StatusScreen::setStatusMessage(F(WELCOME_MSG));
+      StatusScreen::setStatusMessage(GET_TEXT_F(WELCOME_MSG));
       GOTO_SCREEN(LanguageMenu);
     #else
-      StatusScreen::setStatusMessage(F(WELCOME_MSG));
+      StatusScreen::setStatusMessage(GET_TEXT_F(WELCOME_MSG));
       GOTO_SCREEN(StatusScreen);
     #endif
   }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
index 740ca4e0e6..05dccf96f3 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
@@ -32,10 +32,12 @@ using namespace ExtUI;
 
 void EndstopStatesScreen::onEntry() {
   BaseScreen::onEntry();
+  enable_emi_pins(true);
 }
 
 void EndstopStatesScreen::onExit() {
   BaseScreen::onExit();
+  enable_emi_pins(false);
 }
 
 void EndstopStatesScreen::onRedraw(draw_mode_t) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
index 7aa8a081e4..853491032e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
@@ -32,7 +32,7 @@ using namespace FTDI;
 // loop. So we only have a show() method rather than onRedraw(). The KillScreen
 // should not be used as a model for other UI screens as it is an exception.
 
-void KillScreen::show(progmem_str message) {
+void KillScreen::show(const char *message) {
   CommandProcessor cmd;
 
   cmd.cmd(CMD_DLSTART)
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
index dafa91de74..2a4569244d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
@@ -39,15 +39,15 @@ void MaxAccelerationScreen::onRedraw(draw_mode_t what) {
   w.color(y_axis)  .adjuster( 4, GET_TEXT_F(AMAX_Y),  getAxisMaxAcceleration_mm_s2(Y) );
   w.color(z_axis)  .adjuster( 6, GET_TEXT_F(AMAX_Z),  getAxisMaxAcceleration_mm_s2(Z) );
   #if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
-    w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
+    w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E0), getAxisMaxAcceleration_mm_s2(E0) );
   #elif EXTRUDERS > 1
-    w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
-    w.color(e_axis).adjuster(10, GET_TEXT_F(AMAX_E2), getAxisMaxAcceleration_mm_s2(E1) );
+    w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E0), getAxisMaxAcceleration_mm_s2(E0) );
+    w.color(e_axis).adjuster(10, GET_TEXT_F(AMAX_E1), getAxisMaxAcceleration_mm_s2(E1) );
     #if EXTRUDERS > 2
-    w.color(e_axis).adjuster(12, GET_TEXT_F(AMAX_E3), getAxisMaxAcceleration_mm_s2(E2) );
+    w.color(e_axis).adjuster(12, GET_TEXT_F(AMAX_E2), getAxisMaxAcceleration_mm_s2(E2) );
     #endif
     #if EXTRUDERS > 3
-    w.color(e_axis).adjuster(14, GET_TEXT_F(AMAX_E4), getAxisMaxAcceleration_mm_s2(E3) );
+    w.color(e_axis).adjuster(14, GET_TEXT_F(AMAX_E3), getAxisMaxAcceleration_mm_s2(E3) );
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
index 0f52ed0363..a781564644 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
@@ -135,7 +135,7 @@ class KillScreen {
   // The KillScreen is behaves differently than the
   // others, so we do not bother extending UIScreen.
   public:
-    static void show(progmem_str msg);
+    static void show(const char*);
 };
 
 class DialogBoxBaseClass : public BaseScreen {
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp
index 206befe7cc..66f4edd5de 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.cpp
+++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp
@@ -939,6 +939,12 @@ namespace ExtUI {
     ui.abort_print();
   }
 
+  void onUserConfirmRequired_P(PGM_P const pstr) {
+    char msg[strlen_P(pstr) + 1];
+    strcpy_P(msg, pstr);
+    onUserConfirmRequired(msg);
+  }
+
   FileList::FileList() { refresh(); }
 
   void FileList::refresh() { num_files = 0xFFFF; }
@@ -1036,11 +1042,11 @@ void MarlinUI::update() {
   ExtUI::onIdle();
 }
 
-void MarlinUI::kill_screen(PGM_P const msg) {
+void MarlinUI::kill_screen(PGM_P const error, PGM_P const component) {
   using namespace ExtUI;
   if (!flags.printer_killed) {
     flags.printer_killed = true;
-    onPrinterKilled(msg);
+    onPrinterKilled(error, component);
   }
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h
index 393b19d307..d929183949 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.h
+++ b/Marlin/src/lcd/extensible_ui/ui_api.h
@@ -293,12 +293,13 @@ namespace ExtUI {
   void onMediaError();
   void onMediaRemoved();
   void onPlayTone(const uint16_t frequency, const uint16_t duration);
-  void onPrinterKilled(PGM_P const msg);
+  void onPrinterKilled(PGM_P const error, PGM_P const component);
   void onPrintTimerStarted();
   void onPrintTimerPaused();
   void onPrintTimerStopped();
   void onFilamentRunout(const extruder_t extruder);
   void onUserConfirmRequired(const char * const msg);
+  void onUserConfirmRequired_P(PGM_P const pstr);
   void onStatusChanged(const char * const msg);
   void onFactoryReset();
   void onStoreSettings(char *);
diff --git a/Marlin/src/lcd/extui_dgus_lcd.cpp b/Marlin/src/lcd/extui_dgus_lcd.cpp
index 484a333095..e57355bcd0 100644
--- a/Marlin/src/lcd/extui_dgus_lcd.cpp
+++ b/Marlin/src/lcd/extui_dgus_lcd.cpp
@@ -43,8 +43,8 @@ namespace ExtUI {
 
   void onIdle() { ScreenHandler.loop(); }
 
-  void onPrinterKilled(const char* msg) {
-    ScreenHandler.sendinfoscreen(PSTR(MSG_HALTED), msg, PSTR(""), PSTR(MSG_PLEASE_RESET), true, true, true, true);
+  void onPrinterKilled(PGM_P error, PGM_P component) {
+    ScreenHandler.sendinfoscreen(GET_TEXT(MSG_HALTED), error, PSTR(""), GET_TEXT(MSG_PLEASE_RESET), true, true, true, true);
     ScreenHandler.GotoScreen(DGUSLCD_SCREEN_KILL);
     while (!ScreenHandler.loop());  // Wait while anything is left to be sent
   }
@@ -59,7 +59,7 @@ namespace ExtUI {
   void onPrintTimerStopped() {}
   void onFilamentRunout(const extruder_t extruder) {}
 
-  void onUserConfirmRequired(const char *msg) {
+  void onUserConfirmRequired(const char * const msg) {
     if (msg) {
       ScreenHandler.sendinfoscreen(PSTR("Please confirm."), nullptr, msg, nullptr, true, true, false, true);
       ScreenHandler.SetupConfirmAction(ExtUI::setUserConfirmed);
diff --git a/Marlin/src/lcd/extui_example.cpp b/Marlin/src/lcd/extui_example.cpp
index 35a0215c37..9bdc0ddfe9 100644
--- a/Marlin/src/lcd/extui_example.cpp
+++ b/Marlin/src/lcd/extui_example.cpp
@@ -46,7 +46,7 @@ namespace ExtUI {
      */
   }
   void onIdle() {}
-  void onPrinterKilled(PGM_P const msg) {}
+  void onPrinterKilled(PGM_P const error, PGM_P const component) {}
   void onMediaInserted() {};
   void onMediaError() {};
   void onMediaRemoved() {};
diff --git a/Marlin/src/lcd/extui_malyan_lcd.cpp b/Marlin/src/lcd/extui_malyan_lcd.cpp
index e6605c10be..61d4a7d761 100644
--- a/Marlin/src/lcd/extui_malyan_lcd.cpp
+++ b/Marlin/src/lcd/extui_malyan_lcd.cpp
@@ -464,9 +464,11 @@ namespace ExtUI {
   }
 
   // {E:<msg>} is for error states.
-  void onPrinterKilled(PGM_P msg) {
+  void onPrinterKilled(PGM_P error, PGM_P component) {
     write_to_lcd_P(PSTR("{E:"));
-    write_to_lcd_P(msg);
+    write_to_lcd_P(error);
+    write_to_lcd_P(PSTR(" "));
+    write_to_lcd_P(component);
     write_to_lcd_P("}");
   }
 
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index 56c785ab13..45d19e85c1 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -32,225 +32,263 @@
 #define DISPLAY_CHARSET_ISO10646_1
 #define NOT_EXTENDED_ISO10646_1_5X7
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" parada.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Tarcheta mesa")
-#define MSG_MEDIA_REMOVED                   _UxGT("Tarcheta sacada")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Menu prencipal")
-#define MSG_AUTOSTART                       _UxGT("Inicio automatico")
-#define MSG_DISABLE_STEPPERS                _UxGT("Amortar motors")
-#define MSG_AUTO_HOME                       _UxGT("Levar a l'orichen")
-#define MSG_AUTO_HOME_X                     _UxGT("Orichen X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Orichen Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Orichen Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Orichen XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Encetar (pretar)")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Vinient punto")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Nivelacion feita!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Achustar desfases")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Desfase aplicau")
-#define MSG_SET_ORIGIN                      _UxGT("Establir orichen")
-#define MSG_PREHEAT_1                       _UxGT("Precalentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Tot")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Base")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Conf")
-#define MSG_PREHEAT_2                       _UxGT("Precalentar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Tot")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Base")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Conf")
-#define MSG_COOLDOWN                        _UxGT("Enfriar")
-#define MSG_SWITCH_PS_ON                    _UxGT("Enchegar Fuent")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Amortar Fuent")
-#define MSG_EXTRUDE                         _UxGT("Extruir")
-#define MSG_RETRACT                         _UxGT("Retraer")
-#define MSG_MOVE_AXIS                       _UxGT("Mover Eixes")
-#define MSG_BED_LEVELING                    _UxGT("Nivelar base")
-#define MSG_LEVEL_BED                       _UxGT("Nivelar base")
-#define MSG_MOVE_X                          _UxGT("Mover X")
-#define MSG_MOVE_Y                          _UxGT("Mover Y")
-#define MSG_MOVE_Z                          _UxGT("Mover Z")
-#define MSG_MOVE_E                          _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mover %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mover 10mm")
-#define MSG_SPEED                           _UxGT("Velocidat")
-#define MSG_BED_Z                           _UxGT("Base Z")
-#define MSG_NOZZLE                          _UxGT("Boquilla")
-#define MSG_BED                             _UxGT("Base")
-#define MSG_FAN_SPEED                       _UxGT("Ixoriador")
-#define MSG_FLOW                            _UxGT("Fluxo")
-#define MSG_CONTROL                         _UxGT("Control")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Temperatura Auto.")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Trigar")
-#define MSG_ACC                             _UxGT("Aceleracion")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT("Vmax")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("Vel. viache min")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Acel. max")
-#define MSG_A_RETRACT                       _UxGT("Acel. retrac.")
-#define MSG_A_TRAVEL                        _UxGT("Acel. Viaje")
-#define MSG_STEPS_PER_MM                    _UxGT("Trangos/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A trangos/mm")
-  #define MSG_BSTEPS                        _UxGT("B trangos/mm")
-  #define MSG_CSTEPS                        _UxGT("C trangos/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X trangos/mm")
-  #define MSG_BSTEPS                        _UxGT("Y trangos/mm")
-  #define MSG_CSTEPS                        _UxGT("Z trangos/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E trangos/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 trangos/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 trangos/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 trangos/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 trangos/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 trangos/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 trangos/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movimiento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_CONTRAST                        _UxGT("Contraste")
-#define MSG_STORE_EEPROM                    _UxGT("Alzar memoria")
-#define MSG_LOAD_EEPROM                     _UxGT("Cargar memoria")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Restaurar memoria")
-#define MSG_REFRESH                         _UxGT("Tornar a cargar")
-#define MSG_WATCH                           _UxGT("Informacion")
-#define MSG_PREPARE                         _UxGT("Preparar")
-#define MSG_TUNE                            _UxGT("Achustar")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausar impresion")
-#define MSG_RESUME_PRINT                    _UxGT("Contin. impresion")
-#define MSG_STOP_PRINT                      _UxGT("Detener Impresion")
-#define MSG_MEDIA_MENU                      _UxGT("Menu de SD")
-#define MSG_NO_MEDIA                        _UxGT("No i hai tarcheta")
-#define MSG_DWELL                           _UxGT("Reposo...")
-#define MSG_USERWAIT                        _UxGT("Aguardand ordines")
-#define MSG_PRINT_ABORTED                   _UxGT("Impres. cancelada")
-#define MSG_NO_MOVE                         _UxGT("Sin movimiento")
-#define MSG_KILLED                          _UxGT("Aturada d'emerch.")
-#define MSG_STOPPED                         _UxGT("Aturada.")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retraer mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Swap Retraer mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retraer  F")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Devantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Swap DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("DesRet F")
-#define MSG_AUTORETRACT                     _UxGT("Retraccion auto.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Cambear filamento")
-#define MSG_INIT_MEDIA                      _UxGT("Encetan. tarcheta")
-#define MSG_CHANGE_MEDIA                    _UxGT("Cambiar tarcheta")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z fuera")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Auto-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Desfase Z")
-#define MSG_BABYSTEP_X                      _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y                      _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Micropaso Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Cancelado - Endstop")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Error: en calentar")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Error: temperatura")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Error de temperatura")
-#define MSG_ERR_MAXTEMP                     _UxGT("Error: Temp Maxima")
-#define MSG_ERR_MINTEMP                     _UxGT("Error: Temp Menima")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Error: Temp Max base")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Error: Temp Min base")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY first")
-#define MSG_HALTED                          _UxGT("IMPRESORA ATURADA")
-#define MSG_PLEASE_RESET                    _UxGT("Per favor reinic.")
-#define MSG_SHORT_DAY                       _UxGT("d")
-#define MSG_SHORT_HOUR                      _UxGT("h")
-#define MSG_SHORT_MINUTE                    _UxGT("m")
-#define MSG_HEATING                         _UxGT("Calentando...")
-#define MSG_BED_HEATING                     _UxGT("Calentando base...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibracion Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrar Centro")
+namespace Language_an {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_INFO_MENU                       _UxGT("Inf. Impresora")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Inf. Impresora")
-#define MSG_INFO_STATS_MENU                 _UxGT("Estadisticas Imp.")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Inf. Controlador")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistors")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrusors")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocolo")
-#define MSG_CASE_LIGHT                      _UxGT("Luz")
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Aragonese");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Conteo de impresion")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tiempo total d'imp.")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Impresion mas larga")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total d'extrusion")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Impresions")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Mas larga")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrusion")
-#endif
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" parada.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Tarcheta mesa");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Tarcheta sacada");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu prencipal");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Inicio automatico");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Amortar motors");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Levar a l'orichen");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Orichen X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Orichen Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Orichen Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Orichen XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Encetar (pretar)");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Vinient punto");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Nivelacion feita!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Achustar desfases");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Desfase aplicau");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Establir orichen");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Precalentar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Tot");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Base");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Precalentar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Precal. ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Tot");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Base");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Conf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Enfriar");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Enchegar Fuent");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Amortar Fuent");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extruir");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retraer");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mover Eixes");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Nivelar base");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Nivelar base");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mover X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mover Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mover Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mover %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mover 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mover 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mover 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocidat");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Base Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Boquilla");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Boquilla ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Boquilla ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Boquilla ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Boquilla ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Boquilla ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Boquilla ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Base");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ixoriador");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Ixoriador 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Ixoriador 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Ixoriador 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxo");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Fluxo ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Fluxo ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Fluxo ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Fluxo ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Fluxo ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Fluxo ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Temperatura Auto.");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Trigar");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Trigar ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Trigar ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Trigar ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Trigar ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Trigar ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Trigar ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Aceleracion");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vel. viache min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accel");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Acel. max") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Acel. max") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Acel. max") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Acel. max") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Acel. max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Acel. max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Acel. max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Acel. max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Acel. max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Acel. max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Acel. retrac.");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Acel. Viaje");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Trangos/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E trangos/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" trangos/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movimiento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Alzar memoria");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar memoria");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaurar memoria");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Tornar a cargar");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Informacion");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Achustar");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausar impresion");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Contin. impresion");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Detener Impresion");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Menu de SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("No i hai tarcheta");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Reposo...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Aguardand ordines");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impres. cancelada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sin movimiento");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("Aturada d'emerch.");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("Aturada.");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retraer mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Swap Retraer mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retraer  F");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Devantar mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Swap DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("DesRet F");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Retraccion auto.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Cambear filamento");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Cambear filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Cambear filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Cambear filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Cambear filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Cambear filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Cambear filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Encetan. tarcheta");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambiar tarcheta");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z fuera");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Reset BLTouch");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Desfase Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Micropaso X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Micropaso Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Micropaso Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Cancelado - Endstop");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Error: en calentar");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Error: temperatura");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Error de temperatura");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Error: Temp Max");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Error: Temp Min");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY first");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("IMPRESORA ATURADA");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Per favor reinic.");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d");
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h");
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Calentando...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Calentando base...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibracion Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrar X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrar Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrar Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrar Centro");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temperatura menima")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temperatura maxima")
-#define MSG_INFO_PSU                        _UxGT("Fuente de aliment")
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Inf. Impresora");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Inf. Impresora");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Estadisticas Imp.");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Inf. Controlador");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistors");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrusors");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baudios");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocolo");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Luz");
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Fuerza d'o driver")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Escri. DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Resumir imp.")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Conteo de impresion");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tiempo total d'imp.");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Impresion mas larga");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total d'extrusion");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Impresions");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Mas larga");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrusion");
+  #endif
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Aguardand iniciar")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temperatura menima");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temperatura maxima");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Fuente de aliment");
 
-#define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Meta o filamento")
-#define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("y prete lo boton")
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Fuerza d'o driver");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Escri. DAC EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Resumir imp.");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("d'o filamento")
-  #define MSG_FILAMENT_CHANGE_INIT_3          _UxGT("cambear")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("pa continar...")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("d'o fil. cambear")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Meta o filamento")
-#endif // LCD_HEIGHT < 4
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
 
-#define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Aguardando a")
-#define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("expulsar filament")
-#define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Aguardando a")
-#define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("cargar filamento")
-#define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Aguardando impre.")
-#define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("pa continar")
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Aguardand iniciar", "d'o filamento", "cambear"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Meta o filamento", "y prete lo boton", "pa continar..."));
+  #else // LCD_HEIGHT < 4
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_2_LINE("Aguardand iniciar", "d'o fil. cambear"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_2_LINE("Meta o filamento", "y prete lo boton"));
+  #endif // LCD_HEIGHT < 4
+
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD          = _UxGT(MSG_2_LINE("Aguardando a", "expulsar filament"));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD            = _UxGT(MSG_2_LINE("Aguardando a", "cargar filamento"));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME          = _UxGT(MSG_2_LINE("Aguardando impre.", "pa continar"));
+}
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index 8367eb7990..7d1bc74751 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -28,120 +28,178 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+
 #define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" Готов.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Картата е поставена")
-#define MSG_MEDIA_REMOVED                   _UxGT("Картата е извадена")
-#define MSG_MAIN                            _UxGT("Меню")
-#define MSG_AUTOSTART                       _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS                _UxGT("Изкл. двигатели")
-#define MSG_AUTO_HOME                       _UxGT("Паркиране")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Задай Начало")
-#define MSG_SET_ORIGIN                      _UxGT("Изходна точка")
-#define MSG_PREHEAT_1                       _UxGT("Подгряване " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Подгряване " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_ALL                   _UxGT("Подгр. " PREHEAT_1_LABEL " Всички")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Подгр. " PREHEAT_1_LABEL " Легло")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Настройки " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2                       _UxGT("Подгряване " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Подгряване " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_ALL                   _UxGT("Подгр. " PREHEAT_2_LABEL " Всички")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Подгр. " PREHEAT_2_LABEL " Легло")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Настройки " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN                        _UxGT("Охлаждане")
-#define MSG_SWITCH_PS_ON                    _UxGT("Вкл. захранване")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Изкл. захранване")
-#define MSG_EXTRUDE                         _UxGT("Екструзия")
-#define MSG_RETRACT                         _UxGT("Откат")
-#define MSG_MOVE_AXIS                       _UxGT("Движение по ос")
-#define MSG_BED_LEVELING                    _UxGT("Нивелиране")
-#define MSG_LEVEL_BED                       _UxGT("Нивелиране")
-#define MSG_MOVE_X                          _UxGT("Движение по X")
-#define MSG_MOVE_Y                          _UxGT("Движение по Y")
-#define MSG_MOVE_Z                          _UxGT("Движение по Z")
-#define MSG_MOVE_E                          _UxGT("Екструдер")
-#define MSG_MOVE_Z_DIST                     _UxGT("Премести с %smm")
-#define MSG_MOVE_01MM                       _UxGT("Премести с 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Премести с 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Премести с 10mm")
-#define MSG_SPEED                           _UxGT("Скорост")
-#define MSG_BED_Z                           _UxGT("Bed Z")
-#define MSG_NOZZLE                          LCD_STR_THERMOMETER _UxGT(" Дюза")
-#define MSG_BED                             LCD_STR_THERMOMETER _UxGT(" Легло")
-#define MSG_FAN_SPEED                       _UxGT("Вентилатор")
-#define MSG_FLOW                            _UxGT("Поток")
-#define MSG_CONTROL                         _UxGT("Управление")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Минимум")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Максимум")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Фактор")
-#define MSG_AUTOTEMP                        _UxGT("Авто-темп.")
-#define MSG_LCD_ON                          _UxGT("Вкл.")
-#define MSG_LCD_OFF                         _UxGT("Изкл.")
-#define MSG_A_RETRACT                       _UxGT("A-откат")
-#define MSG_A_TRAVEL                        _UxGT("A-travel")
-#define MSG_STEPS_PER_MM                    _UxGT("Стъпки/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Aстъпки/mm")
-  #define MSG_BSTEPS                        _UxGT("Bстъпки/mm")
-  #define MSG_CSTEPS                        _UxGT("Cстъпки/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xстъпки/mm")
-  #define MSG_BSTEPS                        _UxGT("Yстъпки/mm")
-  #define MSG_CSTEPS                        _UxGT("Zстъпки/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E стъпки/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 стъпки/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 стъпки/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 стъпки/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 стъпки/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 стъпки/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 стъпки/mm")
-#define MSG_TEMPERATURE                     _UxGT("Температура")
-#define MSG_MOTION                          _UxGT("Движение")
-#define MSG_FILAMENT                        _UxGT("Нишка")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Диам. нишка")
-#define MSG_CONTRAST                        _UxGT("LCD контраст")
-#define MSG_STORE_EEPROM                    _UxGT("Запази в EPROM")
-#define MSG_LOAD_EEPROM                     _UxGT("Зареди от EPROM")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Фабрични настройки")
-#define MSG_REFRESH                         LCD_STR_REFRESH _UxGT("Обнови")
-#define MSG_WATCH                           _UxGT("Преглед")
-#define MSG_PREPARE                         _UxGT("Действия")
-#define MSG_TUNE                            _UxGT("Настройка")
-#define MSG_PAUSE_PRINT                     _UxGT("Пауза")
-#define MSG_RESUME_PRINT                    _UxGT("Възобнови печата")
-#define MSG_STOP_PRINT                      _UxGT("Спри печата")
-#define MSG_MEDIA_MENU                      _UxGT("Меню карта")
-#define MSG_NO_MEDIA                        _UxGT("Няма карта")
-#define MSG_DWELL                           _UxGT("Почивка...")
-#define MSG_USERWAIT                        _UxGT("Изчакване")
-#define MSG_PRINT_ABORTED                   _UxGT("Печатът е прекъснат")
-#define MSG_NO_MOVE                         _UxGT("Няма движение")
-#define MSG_KILLED                          _UxGT("УБИТО.")
-#define MSG_STOPPED                         _UxGT("СПРЯНО.")
-#define MSG_CONTROL_RETRACT                 _UxGT("Откат mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Смяна Откат mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Откат  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Скок mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Възврат mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Смяна Възврат mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Възврат  V")
-#define MSG_AUTORETRACT                     _UxGT("Автоoткат")
-#define MSG_FILAMENTCHANGE                  _UxGT("Смяна нишка")
-#define MSG_INIT_MEDIA                      _UxGT("Иниц. SD-Карта")
-#define MSG_CHANGE_MEDIA                    _UxGT("Смяна SD-Карта")
-#define MSG_ZPROBE_OUT                      _UxGT("Z-сондата е извадена")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Отстояние")
-#define MSG_BABYSTEP_X                      _UxGT("Министъпка X")
-#define MSG_BABYSTEP_Y                      _UxGT("Министъпка Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Министъпка Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Стоп Кр.Изключватели")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Делта Калибровка")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Калибровка X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Калибровка Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Калибровка Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Калибровка Център")
-#define MSG_EXPECTED_PRINTER                _UxGT("Неправилен принтер")
+namespace Language_bg {
+  using namespace Language_en; // Inherit undefined strings from English
+
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Bulgarian");
+
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" Готов.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Картата е поставена");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Картата е извадена");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Меню");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Автостарт");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Изкл. двигатели");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Паркиране");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Задай Начало");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Изходна точка");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Подгряване ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Всички");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Легло");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Настройки ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Подгряване ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Подгр. ") PREHEAT_2_LABEL _UxGT(" Всички");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Подгр. ") PREHEAT_2_LABEL _UxGT(" Легло");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Настройки ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Охлаждане");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Вкл. захранване");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Изкл. захранване");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Екструзия");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Откат");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Движение по ос");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Нивелиране");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Нивелиране");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Движение по X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Движение по Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Движение по Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Екструдер");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Екструдер ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Екструдер ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Екструдер ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Екструдер ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Екструдер ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Екструдер ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Премести с %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Премести с 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Премести с 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Премести с 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Скорост");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Bed Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" Легло");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Вентилатор");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Вентилатор 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Вентилатор 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Вентилатор 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Поток");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Поток ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Поток ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Поток ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Поток ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Поток ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Поток ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Управление");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Минимум");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Максимум");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Авто-темп.");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Вкл.");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Изкл.");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-откат");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-travel");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Стъпки/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("стъпки/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("стъпки/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("стъпки/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E стъпки/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" стъпки/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Температура");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Движение");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Нишка");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Диам. нишка");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Диам. нишка ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Диам. нишка ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Диам. нишка ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Диам. нишка ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Диам. нишка ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Диам. нишка ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD контраст");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Запази в EPROM");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зареди от EPROM");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Фабрични настройки");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Обнови");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Преглед");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Действия");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Настройка");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Пауза");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Възобнови печата");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Спри печата");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Меню карта");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Няма карта");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Почивка...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Изчакване");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Печатът е прекъснат");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Няма движение");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("УБИТО.");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("СПРЯНО.");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Откат mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Смяна Откат mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Откат  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Скок mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Възврат mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Смяна Възврат mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Възврат  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Автоoткат");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Смяна нишка");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Смяна нишка ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Смяна нишка ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Смяна нишка ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Смяна нишка ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Смяна нишка ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Смяна нишка ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Иниц. SD-Карта");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Смяна SD-Карта");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z-сондата е извадена");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z Отстояние");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Министъпка X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Министъпка Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Министъпка Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Стоп Кр.Изключватели");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Делта Калибровка");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Калибровка X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Калибровка Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Калибровка Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Калибровка Център");
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Неправилен принтер");
+}
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index 571d12bd1c..21d5329db3 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -28,236 +28,263 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_ca {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define CHARSIZE 2
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Catalan");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" preparada.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Targeta detectada.")
-#define MSG_MEDIA_REMOVED                   _UxGT("Targeta extreta.")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops")
-#define MSG_MAIN                            _UxGT("Menú principal")
-#define MSG_AUTOSTART                       _UxGT("Inici automatic")
-#define MSG_DISABLE_STEPPERS                _UxGT("Desactiva motors")
-#define MSG_DEBUG_MENU                      _UxGT("Menu de depuracio")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Test barra progres")
-#define MSG_AUTO_HOME                       _UxGT("Ves a l'origen")
-#define MSG_AUTO_HOME_X                     _UxGT("X a origen")
-#define MSG_AUTO_HOME_Y                     _UxGT("Y a origen")
-#define MSG_AUTO_HOME_Z                     _UxGT("Z a origen")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Origen XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Premeu per iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Següent punt")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Anivellament fet!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Ajusta decalatge")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Decalatge aplicat")
-#define MSG_SET_ORIGIN                      _UxGT("Estableix origen")
-#define MSG_PREHEAT_1                       _UxGT("Preescalfa " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Tot")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Llit")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Conf.")
-#define MSG_PREHEAT_2                       _UxGT("Preescalfa " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Tot")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Llit")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Conf.")
-#define MSG_COOLDOWN                        _UxGT("Refreda")
-#define MSG_SWITCH_PS_ON                    _UxGT("Switch power on")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Switch power off")
-#define MSG_EXTRUDE                         _UxGT("Extrudeix")
-#define MSG_RETRACT                         _UxGT("Retreu")
-#define MSG_MOVE_AXIS                       _UxGT("Mou eixos")
-#define MSG_BED_LEVELING                    _UxGT("Anivella llit")
-#define MSG_LEVEL_BED                       _UxGT("Anivella llit")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" preparada.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Targeta detectada.");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Targeta extreta.");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menú principal");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Inici automatic");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Desactiva motors");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menu de depuracio");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Test barra progres");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Ves a l'origen");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("X a origen");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Y a origen");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Z a origen");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Origen XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Premeu per iniciar");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Següent punt");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Anivellament fet!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Ajusta decalatge");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Decalatge aplicat");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Estableix origen");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Preescalfa ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Tot");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Llit");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf.");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Preescalfa ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Tot");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Llit");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Refreda");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Switch power on");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Switch power off");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrudeix");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retreu");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mou eixos");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Anivella llit");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Anivella llit");
 
-#define MSG_MOVING                          _UxGT("Movent..")
-#define MSG_FREE_XY                         _UxGT("XY lliures")
-#define MSG_MOVE_X                          _UxGT("Mou X")
-#define MSG_MOVE_Y                          _UxGT("Mou Y")
-#define MSG_MOVE_Z                          _UxGT("Mou Z")
-#define MSG_MOVE_E                          _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mou %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mou 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mou 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mou 10mm")
-#define MSG_SPEED                           _UxGT("Velocitat")
-#define MSG_BED_Z                           _UxGT("Llit Z")
-#define MSG_NOZZLE                          _UxGT("Nozzle")
-#define MSG_BED                             _UxGT("Llit")
-#define MSG_FAN_SPEED                       _UxGT("Vel. Ventilador")
-#define MSG_FLOW                            _UxGT("Flux")
-#define MSG_CONTROL                         _UxGT("Control")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Select")
-#define MSG_ACC                             _UxGT("Accel")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VViatge min")
-#define MSG_AMAX                            _UxGT("Accel. max ")
-#define MSG_A_RETRACT                       _UxGT("Accel. retracc")
-#define MSG_A_TRAVEL                        _UxGT("Accel. Viatge")
-#define MSG_STEPS_PER_MM                    _UxGT("Passos/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Apassos/mm")
-  #define MSG_BSTEPS                        _UxGT("Bpassos/mm")
-  #define MSG_CSTEPS                        _UxGT("Cpassos/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xpassos/mm")
-  #define MSG_BSTEPS                        _UxGT("Ypassos/mm")
-  #define MSG_CSTEPS                        _UxGT("Zpassos/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Epassos/mm")
-#define MSG_E0_STEPS                        _UxGT("E1passos/mm")
-#define MSG_E1_STEPS                        _UxGT("E2passos/mm")
-#define MSG_E2_STEPS                        _UxGT("E3passos/mm")
-#define MSG_E3_STEPS                        _UxGT("E4passos/mm")
-#define MSG_E4_STEPS                        _UxGT("E5passos/mm")
-#define MSG_E5_STEPS                        _UxGT("E6passos/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Moviment")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Diam. Fil.")
-#define MSG_CONTRAST                        _UxGT("Contrast de LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Desa memoria")
-#define MSG_LOAD_EEPROM                     _UxGT("Carrega memoria")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Restaura valors")
-#define MSG_REFRESH                         _UxGT("Actualitza")
-#define MSG_WATCH                           _UxGT("Pantalla Info.")
-#define MSG_PREPARE                         _UxGT("Prepara")
-#define MSG_TUNE                            _UxGT("Ajusta")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausa impressio")
-#define MSG_RESUME_PRINT                    _UxGT("Repren impressio")
-#define MSG_STOP_PRINT                      _UxGT("Atura impressio.")
-#define MSG_MEDIA_MENU                      _UxGT("Imprimeix de SD")
-#define MSG_NO_MEDIA                        _UxGT("No hi ha targeta")
-#define MSG_DWELL                           _UxGT("En repos...")
-#define MSG_USERWAIT                        _UxGT("Esperant usuari..")
-#define MSG_PRINT_ABORTED                   _UxGT("Imp. cancelada")
-#define MSG_NO_MOVE                         _UxGT("Sense moviment.")
-#define MSG_KILLED                          _UxGT("MATAT.")
-#define MSG_STOPPED                         _UxGT("ATURADA.")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retreu mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Swap Retreure mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retreu V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Aixeca mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("DesRet +mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Swap DesRet +mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("DesRet V")
-#define MSG_AUTORETRACT                     _UxGT("Auto retraccio")
-#define MSG_FILAMENTCHANGE                  _UxGT("Canvia filament")
-#define MSG_INIT_MEDIA                      _UxGT("Inicialitza SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Canvia SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z fora")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reinicia BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s primer")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Decalatge Z")
-#define MSG_BABYSTEP_X                      _UxGT("Micropas X")
-#define MSG_BABYSTEP_Y                      _UxGT("Micropas Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Micropas Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Cancel. Endstop")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Error al escalfar")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: TEMP REDUNDANT")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("THERMAL RUNAWAY")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err: TEMP MAXIMA")
-#define MSG_ERR_MINTEMP                     _UxGT("Err: TEMP MINIMA")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: TEMPMAX LLIT")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err: TEMPMIN LLIT")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY primer")
-#define MSG_HALTED                          _UxGT("IMPRESSORA PARADA")
-#define MSG_PLEASE_RESET                    _UxGT("Reinicieu")
-#define MSG_SHORT_DAY                       _UxGT("d") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Escalfant...")
-#define MSG_BED_HEATING                     _UxGT("Escalfant llit...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibratge Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibra X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibra Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibra Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibra el centre")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Movent..");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("XY lliures");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mou X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mou Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mou Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mou %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mou 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mou 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mou 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocitat");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Llit Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Nozzle");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Nozzle ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Nozzle ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Nozzle ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Nozzle ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Nozzle ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Nozzle ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Llit");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. Ventilador");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Vel. Ventilador 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Vel. Ventilador 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Vel. Ventilador 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flux");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flux ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flux ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flux ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flux ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flux ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flux ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VViatge min");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Accel. max ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Accel. max ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Accel. max ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Accel. max ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Accel. max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Accel. max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Accel. max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Accel. max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Accel. max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Accel. max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Accel. retracc");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Accel. Viatge");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Passos/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Epassos/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("passos/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Moviment");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E en mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Diam. Fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Diam. Fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Diam. Fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Diam. Fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Diam. Fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Diam. Fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Diam. Fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrast de LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Desa memoria");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carrega memoria");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaura valors");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Actualitza");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Pantalla Info.");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepara");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Ajusta");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausa impressio");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Repren impressio");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Atura impressio.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Imprimeix de SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("No hi ha targeta");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("En repos...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Esperant usuari..");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Imp. cancelada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sense moviment.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("MATAT.");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ATURADA.");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retreu mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Swap Retreure mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retreu V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Aixeca mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("DesRet +mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Swap DesRet +mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("DesRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Auto retraccio");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Canvia filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Canvia filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Canvia filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Canvia filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Canvia filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Canvia filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Canvia filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Inicialitza SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Canvia SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z fora");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Reinicia BLTouch");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s primer");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Decalatge Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Micropas X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Micropas Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Micropas Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Cancel. Endstop");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Error al escalfar");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err: TEMP REDUNDANT");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("THERMAL RUNAWAY");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: TEMP MAXIMA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: TEMP MINIMA");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY primer");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("IMPRESSORA PARADA");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Reinicieu");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Escalfant...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Escalfant llit...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibratge Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibra X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibra Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibra Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibra el centre");
 
-#define MSG_INFO_MENU                       _UxGT("Quant a la impr.")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info Impressora")
-#define MSG_INFO_STATS_MENU                 _UxGT("Estadistiques")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info placa")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistors")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrusors")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocol")
-#define MSG_CASE_LIGHT                      _UxGT("Llum")
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Quant a la impr.");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info Impressora");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Estadistiques");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info placa");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistors");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrusors");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocol");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Llum");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Total impressions")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Acabades")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Temps imprimint")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Treball mes llarg")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total extrudit")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Impressions")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Acabades")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Mes llarg")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrudit")
-#endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Total impressions");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Acabades");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Temps imprimint");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Treball mes llarg");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total extrudit");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Impressions");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Acabades");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Mes llarg");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrudit");
+  #endif
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temp. mínima")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temp. màxima")
-#define MSG_INFO_PSU                        _UxGT("Font alimentacio")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temp. mínima");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temp. màxima");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Font alimentacio");
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Força motor")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Repren impressió")
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Força motor");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC EEPROM Write");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Repren impressió");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Impressora incorrecta")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Impressora incorrecta");
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Esperant per")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("iniciar el canvi")
-  #define MSG_FILAMENT_CHANGE_INIT_3          _UxGT("de filament")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Esperant per")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("treure filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Poseu filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("i premeu el boto")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("per continuar...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1          _UxGT("Premeu boto per")
-  #define MSG_FILAMENT_CHANGE_HEAT_2          _UxGT("escalfar nozzle.")
-  #define MSG_FILAMENT_CHANGE_HEATING_1       _UxGT("Escalfant nozzle")
-  #define MSG_FILAMENT_CHANGE_HEATING_2       _UxGT("Espereu...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Esperant carrega")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("de filament")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Esperant per")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("reprendre")
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Espereu...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Expulsant...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Insereix i prem")
-  #define MSG_FILAMENT_CHANGE_HEATING_1       _UxGT("Escalfant...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Carregant...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Reprenent...")
-#endif // LCD_HEIGHT < 4
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Esperant per", "iniciar el canvi", "de filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Esperant per", "treure filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Poseu filament", "i premeu el boto", "per continuar..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Premeu boto per", "escalfar nozzle."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Escalfant nozzle", "Espereu..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Esperant carrega", "de filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Esperant per", "reprendre"));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Espereu..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Expulsant..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Insereix i prem"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Escalfant..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Carregant..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Reprenent..."));
+  #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index 38a4d0f2bc..ebb8186e76 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -35,521 +35,578 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_CZ
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("áÁčČďĎéÉěĚíÍňŇóÓřŘšŠťŤúÚůŮýÝžŽ³")
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" připraven.")
-#define MSG_YES                             _UxGT("ANO")
-#define MSG_NO                              _UxGT("NE")
-#define MSG_BACK                            _UxGT("Zpět")
-#define MSG_MEDIA_INSERTED                  _UxGT("Karta vložena")
-#define MSG_MEDIA_REMOVED                   _UxGT("Karta vyjmuta")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstopy") // max 8 znaku
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Soft Endstopy")
-#define MSG_MAIN                            _UxGT("Hlavní nabídka")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Další nastavení")
-#define MSG_CONFIGURATION                   _UxGT("Konfigurace")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Uvolnit motory")
-#define MSG_DEBUG_MENU                      _UxGT("Nabídka ladění")
-#if LCD_WIDTH >= 20
-  #define MSG_PROGRESS_BAR_TEST             _UxGT("Test ukaz. průběhu")
-#else
-  #define MSG_PROGRESS_BAR_TEST             _UxGT("Test uk. průběhu")
-#endif
-#define MSG_AUTO_HOME                       _UxGT("Domovská pozice")
-#define MSG_AUTO_HOME_X                     _UxGT("Domů osa X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Domů osa Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Domů osa Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Auto srovnání Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Měření podložky")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Kliknutím spusťte")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Další bod")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Měření hotovo!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Výška srovnávání")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Nastavit ofsety")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Ofsety nastaveny")
-#define MSG_SET_ORIGIN                      _UxGT("Nastavit počátek")
-#define MSG_PREHEAT_1                       _UxGT("Zahřát " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" vše")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" hotend")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" podlož")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" nast")
-#define MSG_PREHEAT_2                       _UxGT("Zahřát " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" vše")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" hotend")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" podlož")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" nast")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Zahřát vlastní")
-#define MSG_COOLDOWN                        _UxGT("Zchladit")
-#define MSG_LASER_MENU                      _UxGT("Ovládání laseru")
-#define MSG_LASER_OFF                       _UxGT("Vypnout laser")
-#define MSG_LASER_ON                        _UxGT("Zapnout laser")
-#define MSG_LASER_POWER                     _UxGT("Výkon laseru")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Vřeteno opačně")
-#define MSG_SWITCH_PS_ON                    _UxGT("Zapnout napájení")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Vypnout napájení")
-#define MSG_EXTRUDE                         _UxGT("Vytlačit (extr.)")
-#define MSG_RETRACT                         _UxGT("Zatlačit (retr.)")
-#define MSG_MOVE_AXIS                       _UxGT("Posunout osy")
-#define MSG_BED_LEVELING                    _UxGT("Vyrovnat podložku")
-#define MSG_LEVEL_BED                       _UxGT("Vyrovnat podložku")
-#define MSG_LEVEL_CORNERS                   _UxGT("Vyrovnat rohy")
-#define MSG_NEXT_CORNER                     _UxGT("Další roh")
-#define MSG_EDIT_MESH                       _UxGT("Upravit síť bodů")
-#define MSG_EDITING_STOPPED                 _UxGT("Konec úprav sítě")
-#define MSG_MESH_X                          _UxGT("Index X")
-#define MSG_MESH_Y                          _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Hodnota Z")
+namespace Language_cz {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_USER_MENU                       _UxGT("Vlastní příkazy")
-#define MSG_IDEX_MENU                       _UxGT("Režim IDEX")
-#define MSG_OFFSETS_MENU                    _UxGT("Ofsety nástrojů")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplikace")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Zrcadlení")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Plná kontrola")
-#define MSG_X_OFFSET                        _UxGT("2. tryska X")
-#define MSG_Y_OFFSET                        _UxGT("2. tryska Y")
-#define MSG_Z_OFFSET                        _UxGT("2. tryska Z")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Czech");
 
-#define MSG_UBL_DOING_G29                   _UxGT("Provádím G29")
-#define MSG_UBL_TOOLS                       _UxGT("UBL nástroje")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Manuální síť bodů")
-#define MSG_UBL_BC_INSERT                   _UxGT("Vložte kartu, změřte")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Změřte")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Odstraňte a změřte")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Přesun na další")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Aktivovat UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Deaktivovat UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Teplota podložky")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Teplota hotendu")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Úprava sítě bodů")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Upravit vlastní síť")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Doladit síť bodů")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Konec úprav sítě")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Vlastní síť")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Vytvořit síť")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Síť bodů " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Síť bodů " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Studená síť bodů")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Upravit výšku sítě")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Výška")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Zkontrolovat síť")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Kontrola sítě " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Kontrola sítě " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Kontrola vlast. sítě")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Pokračovat v síťi")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Síťové rovnání")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3-bodové rovnání")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Mřížkové rovnání")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Srovnat podložku")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Postranní body")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Typ sítě bodu")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Exportovat síť")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Exportovat do PC")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Exportovat do CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Záloha do PC")
-#define MSG_UBL_INFO_UBL                    _UxGT("Info o UBL do PC")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Hustota mřížky")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Ruční hustota")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Chytrá hustota")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Zaplnit mřížku")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Zrušit všechno")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Zrušit poslední")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Upravit všechny")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Upravit poslední")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Uložiště sítí")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Paměťový slot")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Načíst síť bodů")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Uložit síť bodů")
-#define MSG_MESH_LOADED                     _UxGT("Síť %i načtena")
-#define MSG_MESH_SAVED                      _UxGT("Síť %i uložena")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Nedostatek místa")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Ch.: Uložit UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Ch.: Obnovit UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Konec Z-Offsetu")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("UBL PostupnÄ›")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" připraven.");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("ANO");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NE");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Zpět");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Karta vložena");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Karta vyjmuta");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstopy"); // max 8 znaku
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Soft Endstopy");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Hlavní nabídka");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Další nastavení");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Konfigurace");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Uvolnit motory");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Nabídka ladění");
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_PROGRESS_BAR_TEST             = _UxGT("Test ukaz. průběhu");
+  #else
+    PROGMEM Language_Str MSG_PROGRESS_BAR_TEST             = _UxGT("Test uk. průběhu");
+  #endif
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Domovská pozice");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Domů osa X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Domů osa Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Domů osa Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto srovnání Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Měření podložky");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Kliknutím spusťte");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Další bod");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Měření hotovo!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Výška srovnávání");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Nastavit ofsety");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Ofsety nastaveny");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Nastavit počátek");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Zahřát ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" vše");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" podlož");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" nast");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Zahřát ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" vše");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" podlož");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" nast");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Zahřát vlastní");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Zchladit");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Ovládání laseru");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Vypnout laser");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Zapnout laser");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Výkon laseru");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Vřeteno opačně");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Zapnout napájení");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Vypnout napájení");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Vytlačit (extr.)");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Zatlačit (retr.)");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Posunout osy");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Vyrovnat podložku");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Vyrovnat podložku");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Vyrovnat rohy");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Další roh");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Upravit síť bodů");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Konec úprav sítě");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Index X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Index Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Hodnota Z");
 
-#define MSG_LED_CONTROL                     _UxGT("Nastavení LED")
-#define MSG_LEDS                            _UxGT("Světla")
-#define MSG_LED_PRESETS                     _UxGT("Světla Předvolby")
-#define MSG_SET_LEDS_RED                    _UxGT("Červená")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Oranžová")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Žlutá")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Zelená")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Modrá")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Fialová")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Bílá")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Výchozí")
-#define MSG_CUSTOM_LEDS                     _UxGT("Vlastní světla")
-#define MSG_INTENSITY_R                     _UxGT("Červená intenzita")
-#define MSG_INTENSITY_G                     _UxGT("Zelená intezita")
-#define MSG_INTENSITY_B                     _UxGT("Modrá intenzita")
-#define MSG_INTENSITY_W                     _UxGT("Bílá intenzita")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Jas")
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Vlastní příkazy");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("Režim IDEX");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Ofsety nástrojů");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Park");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplikace");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Zrcadlení");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Plná kontrola");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2. tryska X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2. tryska Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2. tryska Z");
 
-#define MSG_MOVING                          _UxGT("Posouvání...")
-#define MSG_FREE_XY                         _UxGT("Uvolnit XY")
-#define MSG_MOVE_X                          _UxGT("Posunout X")
-#define MSG_MOVE_Y                          _UxGT("Posunout Y")
-#define MSG_MOVE_Z                          _UxGT("Posunout Z")
-#define MSG_MOVE_E                          _UxGT("Extrudér")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Hotend je studený")
-#define MSG_MOVE_Z_DIST                     _UxGT("Posunout o %smm")
-#define MSG_MOVE_01MM                       _UxGT("Posunout o 0,1mm")
-#define MSG_MOVE_1MM                        _UxGT("Posunout o 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Posunout o 10mm")
-#define MSG_SPEED                           _UxGT("Rychlost")
-#define MSG_BED_Z                           _UxGT("Výška podl.")
-#define MSG_NOZZLE                          _UxGT("Tryska")
-#define MSG_BED                             _UxGT("Podložka")
-#define MSG_CHAMBER                         _UxGT("Komora")
-#define MSG_FAN_SPEED                       _UxGT("Rychlost vent.")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Rychlost ex. vent.")
-#define MSG_FLOW                            _UxGT("Průtok")
-#define MSG_CONTROL                         _UxGT("Ovládaní")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP                        _UxGT("Autoteplota")
-#define MSG_LCD_ON                          _UxGT("Zap")
-#define MSG_LCD_OFF                         _UxGT("Vyp")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Vybrat")
-#define MSG_ACC                             _UxGT("Zrychl")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Odchylka spoje")
-#define MSG_VELOCITY                        _UxGT("Rychlost")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_ACCELERATION                    _UxGT("Akcelerace")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retrakt")
-#define MSG_A_TRAVEL                        _UxGT("A-přejezd")
-#define MSG_STEPS_PER_MM                    _UxGT("Kroků/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Akroků/mm")
-  #define MSG_BSTEPS                        _UxGT("Bkroků/mm")
-  #define MSG_CSTEPS                        _UxGT("Ckroků/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xkroků/mm")
-  #define MSG_BSTEPS                        _UxGT("Ykroků/mm")
-  #define MSG_CSTEPS                        _UxGT("Zkroků/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Ekroků/mm")
-#define MSG_E0_STEPS                        _UxGT("E1kroků/mm")
-#define MSG_E1_STEPS                        _UxGT("E2kroků/mm")
-#define MSG_E2_STEPS                        _UxGT("E3kroků/mm")
-#define MSG_E3_STEPS                        _UxGT("E4kroků/mm")
-#define MSG_E4_STEPS                        _UxGT("E5kroků/mm")
-#define MSG_E5_STEPS                        _UxGT("E6kroků/mm")
-#define MSG_TEMPERATURE                     _UxGT("Teplota")
-#define MSG_MOTION                          _UxGT("Pohyb")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E na mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Prum.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Vysunout mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Zavést mm")
-#define MSG_ADVANCE_K                       _UxGT("K pro posun")
-#define MSG_CONTRAST                        _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Uložit nastavení")
-#define MSG_LOAD_EEPROM                     _UxGT("Načíst nastavení")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Obnovit výchozí")
-#define MSG_INIT_EEPROM                     _UxGT("Inic. EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Aktualizace z SD")
-#define MSG_RESET_PRINTER                   _UxGT("Reset tiskárny")
-#define MSG_REFRESH                         _UxGT("Obnovit")
-#define MSG_WATCH                           _UxGT("Info obrazovka")
-#define MSG_PREPARE                         _UxGT("Připrava tisku")
-#define MSG_TUNE                            _UxGT("Doladění tisku")
-#define MSG_START_PRINT                     _UxGT("Spustit tisk")
-#define MSG_BUTTON_PRINT                    _UxGT("Tisk")
-#define MSG_BUTTON_CANCEL                   _UxGT("Zrušit")
-#define MSG_PAUSE_PRINT                     _UxGT("Pozastavit tisk")
-#define MSG_RESUME_PRINT                    _UxGT("Obnovit tisk")
-#define MSG_STOP_PRINT                      _UxGT("Zastavit tisk")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Obnova výpadku")
-#define MSG_MEDIA_MENU                      _UxGT("Tisknout z SD")
-#define MSG_NO_MEDIA                        _UxGT("Žádná SD karta")
-#define MSG_DWELL                           _UxGT("Uspáno...")
-#define MSG_USERWAIT                        _UxGT("Čekání na uživ...")
-#define MSG_PRINT_PAUSED                    _UxGT("Tisk pozastaven")
-#define MSG_PRINTING                        _UxGT("Tisknu...")
-#define MSG_PRINT_ABORTED                   _UxGT("Tisk zrušen")
-#define MSG_NO_MOVE                         _UxGT("Žádný pohyb.")
-#define MSG_KILLED                          _UxGT("PŘERUSENO. ")
-#define MSG_STOPPED                         _UxGT("ZASTAVENO. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retrakt mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Výměna Re.mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retraktovat  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Zvednuti Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("AutoRetr.")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Délka retrakce")
-#define MSG_TOOL_CHANGE                     _UxGT("Výměna nástroje")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Zdvih Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Rychlost primár.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Rychlost retrak.")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Tryska standby")
-#define MSG_FILAMENTCHANGE                  _UxGT("Vyměnit filament")
-#define MSG_FILAMENTLOAD                    _UxGT("Zavést filament")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Vysunout filament")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Vysunout vše")
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Provádím G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL nástroje");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Manuální síť bodů");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Vložte kartu, změřte");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Změřte");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Odstraňte a změřte");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Přesun na další");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Aktivovat UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Deaktivovat UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Teplota podložky");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Teplota podložky");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Teplota hotendu");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Teplota hotendu");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Úprava sítě bodů");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Upravit vlastní síť");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Doladit síť bodů");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Konec úprav sítě");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Vlastní síť");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Vytvořit síť");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Síť bodů ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Síť bodů ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Studená síť bodů");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Upravit výšku sítě");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Výška");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Zkontrolovat síť");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Kontrola sítě ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Kontrola sítě ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Kontrola vlast. sítě");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Pokračovat v síťi");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Síťové rovnání");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3-bodové rovnání");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Mřížkové rovnání");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Srovnat podložku");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Postranní body");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Typ sítě bodu");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Exportovat síť");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Exportovat do PC");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Exportovat do CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Záloha do PC");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Info o UBL do PC");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Hustota mřížky");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ruční hustota");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Chytrá hustota");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Zaplnit mřížku");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Zrušit všechno");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Zrušit poslední");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Upravit všechny");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Upravit poslední");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Uložiště sítí");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Paměťový slot");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načíst síť bodů");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložit síť bodů");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Síť %i načtena");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Síť %i uložena");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatek místa");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ch.: Uložit UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ch.: Obnovit UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Konec Z-Offsetu");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("UBL PostupnÄ›");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1. Studená síť bodů");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2. Chytrá hustota");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3. Zkontrolovat síť");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4. Upravit všechny");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5. Zkontrolovat síť");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6. Upravit všechny");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7. Uložit síť bodů");
 
-#define MSG_INIT_MEDIA                      _UxGT("Načíst SD kartu")
-#define MSG_CHANGE_MEDIA                    _UxGT("Vyměnit SD kartu")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z mimo podl")
-#define MSG_SKEW_FACTOR                     _UxGT("Faktor zkosení")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch self-test")
-#define MSG_BLTOUCH_RESET                   _UxGT("BLTouch reset")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("BLTouch vysunout")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("SW výsun BLTouch")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("BLTouch 5V režim")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("BLTouch OD režim")
-#define MSG_BLTOUCH_STOW                    _UxGT("BLTouch zasunout")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Vysunout Z-sondu")
-#define MSG_MANUAL_STOW                     _UxGT("Zasunout Z-sondu")
-#define MSG_HOME_FIRST                      _UxGT("Domů %s%s%s první")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z ofset")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Celkem")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Chyba zahřívání")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Chyba zahÅ™.podl.")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("REDUND. TEPLOTA")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("TEPLOTNÍ ÚNIK")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("TEPL. ÚNIK PODL.")
-#define MSG_ERR_MAXTEMP                     _UxGT("VYSOKÁ TEPLOTA")
-#define MSG_ERR_MINTEMP                     _UxGT("NÍZKA TEPLOTA")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("VYS. TEPL. PODL.")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("NÍZ. TEPL. PODL.")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err: MAXTEMP KOMORA")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err: MINTEMP KOMORA")
-#define MSG_ERR_Z_HOMING                    _UxGT("Domů XY první")
-#define MSG_HALTED                          _UxGT("TISK. ZASTAVENA")
-#define MSG_PLEASE_RESET                    _UxGT("Proveďte reset")
-#define MSG_SHORT_DAY                       _UxGT("d")
-#define MSG_SHORT_HOUR                      _UxGT("h")
-#define MSG_SHORT_MINUTE                    _UxGT("m")
-#define MSG_HEATING                         _UxGT("Zahřívání...")
-#define MSG_COOLING                         _UxGT("Chlazení...")
-#if LCD_WIDTH >= 20
-  #define MSG_BED_HEATING                   _UxGT("Zahřívání podložky")
-#else
-  #define MSG_BED_HEATING                   _UxGT("Zahřívání podl.")
-#endif
-#if LCD_WIDTH >= 20
-  #define MSG_BED_COOLING                   _UxGT("Chlazení podložky")
-#else
-  #define MSG_BED_COOLING                   _UxGT("Chlazení podl.")
-#endif
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibrace")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibrovat X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibrovat Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibrovat Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibrovat Střed")
-#define MSG_DELTA_SETTINGS                  _UxGT("Delta nastavení")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Autokalibrace")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Nast.výšku delty")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Nast. Z-ofset")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Diag rameno")
-#define MSG_DELTA_HEIGHT                    _UxGT("Výška")
-#define MSG_DELTA_RADIUS                    _UxGT("Poloměr")
-#define MSG_INFO_MENU                       _UxGT("O tiskárně")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info o tiskárně")
-#define MSG_3POINT_LEVELING                 _UxGT("3-bodové rovnání")
-#define MSG_LINEAR_LEVELING                 _UxGT("Lineárni rovnání")
-#define MSG_BILINEAR_LEVELING               _UxGT("Bilineární rovnání")
-#define MSG_UBL_LEVELING                    _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING                   _UxGT("Mřížkové rovnání")
-#define MSG_INFO_STATS_MENU                 _UxGT("Statistika")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info o desce")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistory")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrudéry")
-#define MSG_INFO_BAUDRATE                   _UxGT("Rychlost")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokol")
-#define MSG_CASE_LIGHT                      _UxGT("Osvětlení")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Jas světla")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Nastavení LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Světla");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Světla Předvolby");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Červená");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Oranžová");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Žlutá");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Zelená");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Modrá");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Fialová");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Bílá");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Výchozí");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Vlastní světla");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Červená intenzita");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Zelená intezita");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Modrá intenzita");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Bílá intenzita");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Jas");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Počet tisků")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Dokončeno")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Celkový čas")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Nejdelší tisk")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Celkem vytlačeno")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Tisky")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Hotovo")
-  #define MSG_INFO_PRINT_TIME               _UxGT("ÄŒas")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Nejdelší")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Vytlačeno")
-#endif
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Posouvání...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Uvolnit XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Posunout X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Posunout Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Posunout Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrudér");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrudér ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrudér ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrudér ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrudér ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrudér ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrudér ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Hotend je studený");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Posunout o %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Posunout o 0,1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Posunout o 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Posunout o 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Rychlost");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Výška podl.");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Tryska");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Tryska ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Tryska ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Tryska ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Tryska ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Tryska ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Tryska ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Podložka");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Komora");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Rychlost vent.");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Rychlost vent. 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Rychlost vent. 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Rychlost vent. 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Rychlost ex. vent.");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Rychlost ex. vent. 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Rychlost ex. vent. 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Rychlost ex. vent. 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Průtok");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Průtok ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Průtok ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Průtok ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Průtok ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Průtok ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Průtok ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ovládaní");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autoteplota");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Zap");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Vyp");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Vybrat");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Vybrat ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Vybrat ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Vybrat ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Vybrat ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Vybrat ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Vybrat ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Zrychl");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Odchylka spoje");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Rychlost");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Akcelerace");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-retrakt");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-přejezd");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Kroků/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Ekroků/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("kroků/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Teplota");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Pohyb");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E na mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Prum.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Prum. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Prum. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Prum. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Prum. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Prum. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Prum. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Vysunout mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Zavést mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K pro posun");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K pro posun ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K pro posun ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K pro posun ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K pro posun ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K pro posun ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K pro posun ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložit nastavení");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načíst nastavení");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Obnovit výchozí");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inic. EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizace z SD");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset tiskárny");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Obnovit");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info obrazovka");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Připrava tisku");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Doladění tisku");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Spustit tisk");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Tisk");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Zrušit");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pozastavit tisk");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Obnovit tisk");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Zastavit tisk");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Obnova výpadku");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Tisknout z SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Žádná SD karta");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Uspáno...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Čekání na uživ...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Tisk pozastaven");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Tisknu...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Tisk zrušen");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Žádný pohyb.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("PŘERUSENO. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ZASTAVENO. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retrakt mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Výměna Re.mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retraktovat  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Zvednuti Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Délka retrakce");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Výměna nástroje");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Zdvih Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Rychlost primár.");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Rychlost retrak.");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Tryska standby");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Vyměnit filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Vyměnit filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Vyměnit filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Vyměnit filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Vyměnit filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Vyměnit filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Vyměnit filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Zavést filament");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Zavést filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Zavést filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Zavést filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Zavést filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Zavést filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Zavést filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Vysunout filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Vysunout filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Vysunout filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Vysunout filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Vysunout filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Vysunout filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Vysunout vše");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Teplota min")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Teplota max")
-#define MSG_INFO_PSU                        _UxGT("Nap. zdroj")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Buzení motorů")
-#define MSG_DAC_PERCENT                     _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Uložit do EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("TISK POZASTAVEN")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("ZAVEDENÍ FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("VYSUNUTÍ FILAMENTU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("MOŽNOSTI OBNOVENÍ:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Vytlačit víc")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Obnovit tisk")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Tryska: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Senzor filamentu")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Parkování selhalo")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Kalibrace selhala")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Moc studený")
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Načíst SD kartu");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Vyměnit SD kartu");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z mimo podl");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Faktor zkosení");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch self-test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("BLTouch reset");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("BLTouch vysunout");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("SW výsun BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("BLTouch 5V režim");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("BLTouch OD režim");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("BLTouch zasunout");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Vysunout Z-sondu");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Zasunout Z-sondu");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Domů %s%s%s první");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z ofset");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Celkem");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Endstop abort");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Chyba zahřívání");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Chyba zahÅ™.podl.");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("REDUND. TEPLOTA");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("TEPLOTNÍ ÚNIK");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("TEPL. ÚNIK PODL.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("VYSOKÁ TEPLOTA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("NÍZKA TEPLOTA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("VYS. TEPL. PODL.");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("NÍZ. TEPL. PODL.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Err: MAXTEMP KOMORA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Err: MINTEMP KOMORA");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Domů XY první");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("TISK. ZASTAVENA");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Proveďte reset");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d");
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h");
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Zahřívání...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Chlazení...");
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_BED_HEATING                   = _UxGT("Zahřívání podložky");
+  #else
+    PROGMEM Language_Str MSG_BED_HEATING                   = _UxGT("Zahřívání podl.");
+  #endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_BED_COOLING                   = _UxGT("Chlazení podložky");
+  #else
+    PROGMEM Language_Str MSG_BED_COOLING                   = _UxGT("Chlazení podl.");
+  #endif
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibrace");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibrovat X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibrovat Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibrovat Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibrovat Střed");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta nastavení");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Autokalibrace");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Nast.výšku delty");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Nast. Z-ofset");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Diag rameno");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Výška");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Poloměr");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("O tiskárně");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info o tiskárně");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3-bodové rovnání");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Lineárni rovnání");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Bilineární rovnání");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Mřížkové rovnání");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Statistika");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info o desce");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistory");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrudéry");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Rychlost");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokol");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Osvětlení");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Jas světla");
 
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("VÝMĚNA FILAMENTU")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("VYBERTE FILAMENT")
-#define MSG_MMU2_MENU                       _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Aktual. MMU firmware!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU potÅ™. pozornost.")
-#define MSG_MMU2_RESUME                     _UxGT("Obnovit tisk")
-#define MSG_MMU2_RESUMING                   _UxGT("Obnovování...")
-#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Zavést filament")
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Zavést všechny")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Zavést do trysky")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Vysunout filament")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Vysun. filament 1")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Vysun. filament 2")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Vysun. filament 3")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Vysun. filament 4")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Vysun. filament 5")
-#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Vytáhnout filament")
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Zavádění fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Vytahování fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Vysouvání fil....")
-#define MSG_MMU2_ALL                        _UxGT("VÅ¡echny")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
-#define MSG_MMU2_RESET                      _UxGT("Resetovat MMU")
-#define MSG_MMU2_RESETTING                  _UxGT("Resetování MMU...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Vytáhněte, klikněte")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Počet tisků");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Dokončeno");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Celkový čas");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Nejdelší tisk");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Celkem vytlačeno");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Tisky");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Hotovo");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("ÄŒas");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Nejdelší");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Vytlačeno");
+  #endif
 
-#define MSG_MIX                             _UxGT("Mix")
-#define MSG_MIX_COMPONENT                   _UxGT("Komponenta")
-#define MSG_MIXER                           _UxGT("Mixér")
-#define MSG_GRADIENT                        _UxGT("Přechod")
-#define MSG_FULL_GRADIENT                   _UxGT("Celý přechod")
-#define MSG_TOGGLE_MIX                      _UxGT("Přepnout mix")
-#define MSG_CYCLE_MIX                       _UxGT("Střídat mix")
-#define MSG_GRADIENT_MIX                    _UxGT("Přechod mix")
-#define MSG_REVERSE_GRADIENT                _UxGT("Opačný přechod")
-#if LCD_WIDTH >= 20
-  #define MSG_ACTIVE_VTOOL                    _UxGT("Aktivní V-nástroj")
-  #define MSG_START_VTOOL                     _UxGT("Spustit V-nástroj")
-  #define MSG_END_VTOOL                       _UxGT("Ukončit V-nástroj")
-  #define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-nástroje")
-  #define MSG_RESET_VTOOLS                    _UxGT("Resetovat V-nástroj")
-  #define MSG_COMMIT_VTOOL                    _UxGT("Uložit V-nástroj mix")
-  #define MSG_VTOOLS_RESET                    _UxGT("V-nástroj resetovat")
-#else
-  #define MSG_ACTIVE_VTOOL                    _UxGT("Aktivní V-nástr.")
-  #define MSG_START_VTOOL                     _UxGT("Spustit V-nástr.")
-  #define MSG_END_VTOOL                       _UxGT("Ukončit V-nástr.")
-  #define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-nástr.")
-  #define MSG_RESET_VTOOLS                    _UxGT("Reset. V-nástr.")
-  #define MSG_COMMIT_VTOOL                    _UxGT("Uložit V-nás. mix")
-  #define MSG_VTOOLS_RESET                    _UxGT("V-nástr. reset.")
-#endif
-#define MSG_START_Z                         _UxGT("Počáteční Z")
-#define MSG_END_Z                           _UxGT("  Koncové Z")
-#define MSG_BRICKOUT                        _UxGT("Brickout")
-#define MSG_INVADERS                        _UxGT("Invaders")
-#define MSG_SNAKE                           _UxGT("Sn4k3")
-#define MSG_MAZE                            _UxGT("Bludiště")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Teplota min");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Teplota max");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Nap. zdroj");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Buzení motorů");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Motor %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Uložit do EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("VÝMĚNA FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("TISK POZASTAVEN");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("ZAVEDENÍ FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("VYSUNUTÍ FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("MOŽNOSTI OBNOVENÍ:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Vytlačit víc");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Obnovit tisk");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Tryska: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Senzor filamentu");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Parkování selhalo");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Kalibrace selhala");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Moc studený");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Nesprávná tiskárna")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("VYBERTE FILAMENT");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("Aktual. MMU firmware!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU potÅ™. pozornost.");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Obnovit tisk");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Obnovování...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Zavést filament");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Zavést všechny");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Zavést do trysky");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Vysunout filament");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Vysun. filament 1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Vysun. filament 2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Vysun. filament 3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Vysun. filament 4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Vysun. filament 5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Vytáhnout filament");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Zavádění fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Vytahování fil. ...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Vysouvání fil....");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("VÅ¡echny");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filament 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filament 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filament 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filament 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filament 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Resetovat MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Resetování MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Vytáhněte, klikněte");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Stikněte tlačítko")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("pro obnovení tisku")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parkování...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Čekejte prosím")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("na zahájení")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("výměny filamentu")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Vložte filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("a stiskněte")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("tlačítko...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Klikněte pro")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("nahřátí trysky")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Čekejte prosím")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("na nahřátí tr.")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Čekejte prosím")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("na vysunuti")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("filamentu")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Čekejte prosím")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("na zavedení")
-  #define MSG_FILAMENT_CHANGE_LOAD_3        _UxGT("filamentu")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Vyčkejte na")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("vytlačení")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Klikněte pro")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("ukončení")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_3  _UxGT("vytlačování")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Čekejte prosím")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("na pokračování")
-  #define MSG_FILAMENT_CHANGE_RESUME_3      _UxGT("tisku")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Stikněte tlač.")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("pro obnovení")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parkování...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("ÄŒekejte...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Vložte, klikněte")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Klikněte pro")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("nahřátí")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Nahřívání...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Vysouvání...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Zavádění...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Vytlačování...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Klikněte pro")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("ukončení")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Pokračování...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Mix");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Komponenta 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Komponenta 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Komponenta 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Komponenta 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Komponenta 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Komponenta 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Mixér");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Přechod");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Celý přechod");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Přepnout mix");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Střídat mix");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Přechod mix");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Opačný přechod");
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_ACTIVE_VTOOL                  = _UxGT("Aktivní V-nástroj");
+    PROGMEM Language_Str MSG_START_VTOOL                   = _UxGT("Spustit V-nástroj");
+    PROGMEM Language_Str MSG_END_VTOOL                     = _UxGT("Ukončit V-nástroj");
+    PROGMEM Language_Str MSG_GRADIENT_ALIAS                = _UxGT("Alias V-nástroje");
+    PROGMEM Language_Str MSG_RESET_VTOOLS                  = _UxGT("Resetovat V-nástroj");
+    PROGMEM Language_Str MSG_COMMIT_VTOOL                  = _UxGT("Uložit V-nástroj mix");
+    PROGMEM Language_Str MSG_VTOOLS_RESET                  = _UxGT("V-nástroj resetovat");
+  #else
+    PROGMEM Language_Str MSG_ACTIVE_VTOOL                  = _UxGT("Aktivní V-nástr.");
+    PROGMEM Language_Str MSG_START_VTOOL                   = _UxGT("Spustit V-nástr.");
+    PROGMEM Language_Str MSG_END_VTOOL                     = _UxGT("Ukončit V-nástr.");
+    PROGMEM Language_Str MSG_GRADIENT_ALIAS                = _UxGT("Alias V-nástr.");
+    PROGMEM Language_Str MSG_RESET_VTOOLS                  = _UxGT("Reset. V-nástr.");
+    PROGMEM Language_Str MSG_COMMIT_VTOOL                  = _UxGT("Uložit V-nás. mix");
+    PROGMEM Language_Str MSG_VTOOLS_RESET                  = _UxGT("V-nástr. reset.");
+  #endif
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Počáteční Z:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("  Koncové Z:");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Brickout");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Bludiště");
 
-#define MSG_TMC_DRIVERS                     _UxGT("TMC budiče")
-#define MSG_TMC_CURRENT                     _UxGT("Proud budičů")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Hybridní práh")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Domů bez senzorů")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Režim kroků")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop povolen")
-#define MSG_SERVICE_RESET                   _UxGT("Reset")
-#define MSG_SERVICE_IN                      _UxGT(" za:")
-#define MSG_BACKLASH                        _UxGT("Vůle")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Korekce")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Vyhlazení")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Nesprávná tiskárna");
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Stikněte tlačítko", "pro obnovení tisku"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parkování..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Čekejte prosím", "na zahájení", "výměny filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Vložte filament", "a stiskněte", "tlačítko..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí trysky"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Čekejte prosím", "na nahřátí tr."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Čekejte prosím", "na vysunuti", "filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Čekejte prosím", "na zavedení", "filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Vyčkejte na", "vytlačení"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_3_LINE("Klikněte pro", "ukončení", "vytlačování"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Čekejte prosím", "na pokračování", "tisku"));
+  #else // LCD_HEIGHT < 4
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Stikněte tlač.", "pro obnovení"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parkování..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("ÄŒekejte..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Vložte, klikněte"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Nahřívání..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Vysouvání..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Zavádění..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Vytlačování..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Klikněte pro", "ukončení"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Pokračování..."));
+  #endif // LCD_HEIGHT < 4
+
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("TMC budiče");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Proud budičů");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Hybridní práh");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Domů bez senzorů");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Režim kroků");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop povolen");
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Reset");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" za:");
+  PROGMEM Language_Str MSG_BACKLASH                        = _UxGT("Vůle");
+  PROGMEM Language_Str MSG_BACKLASH_A                      = LCD_STR_A;
+  PROGMEM Language_Str MSG_BACKLASH_B                      = LCD_STR_B;
+  PROGMEM Language_Str MSG_BACKLASH_C                      = LCD_STR_C;
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Korekce");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Vyhlazení");
+}
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index 98ed4a0bd1..98b47d7511 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -30,223 +30,212 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" er klar")
-#define MSG_MEDIA_INSERTED                  _UxGT("Kort isat")
-#define MSG_MEDIA_REMOVED                   _UxGT("Kort fjernet")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Menu")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Slå alle steppere fra")
-#define MSG_AUTO_HOME                       _UxGT("Auto Home") // G28
-#define MSG_AUTO_HOME_X                     _UxGT("Home X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Home Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Klik når du er klar")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Næste punkt")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Bed level er færdig!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Sæt forsk. af home")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Forsk. er nu aktiv")
-#define MSG_SET_ORIGIN                      _UxGT("Sæt origin")
-#define MSG_PREHEAT_1                       _UxGT("Forvarm " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Forvarm " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL                   _UxGT("Forvarm " PREHEAT_1_LABEL " Alle")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Forvarm " PREHEAT_1_LABEL " Bed")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Forvarm " PREHEAT_1_LABEL " conf")
-#define MSG_PREHEAT_2                       _UxGT("Forvarm " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Forvarm " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Forvarm " PREHEAT_2_LABEL " Alle")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Forvarm " PREHEAT_2_LABEL " Bed")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Forvarm " PREHEAT_2_LABEL " conf")
-#define MSG_COOLDOWN                        _UxGT("Afkøl")
-#define MSG_SWITCH_PS_ON                    _UxGT("Slå strøm til")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Slå strøm fra")
-#define MSG_EXTRUDE                         _UxGT("Extruder")
-#define MSG_RETRACT                         _UxGT("Retract")
-#define MSG_MOVE_AXIS                       _UxGT("Flyt akser")
-#define MSG_BED_LEVELING                    _UxGT("Juster bed")
-#define MSG_LEVEL_BED                       _UxGT("Juster bed")
-#define MSG_MOVE_X                          _UxGT("Flyt X")
-#define MSG_MOVE_Y                          _UxGT("Flyt Y")
-#define MSG_MOVE_Z                          _UxGT("Flyt Z")
-#define MSG_MOVE_E                          _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST                     _UxGT("Flyt %smm")
-#define MSG_MOVE_01MM                       _UxGT("Flyt 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Flyt 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Flyt 10mm")
-#define MSG_SPEED                           _UxGT("Hastighed")
-#define MSG_BED_Z                           _UxGT("Plade Z")
-#define MSG_NOZZLE                          _UxGT("Dyse")
+namespace Language_da {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_BED                             _UxGT("Plade")
-#define MSG_FAN_SPEED                       _UxGT("Blæser hastighed")
-#define MSG_FLOW                            _UxGT("Flow")
-#define MSG_CONTROL                         _UxGT("Kontrol")
-#define MSG_MIN                             _UxGT(" \002 Min")
-#define MSG_MAX                             _UxGT(" \002 Max")
-#define MSG_FACTOR                          _UxGT(" \002 Fact")
-#define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#define MSG_LCD_ON                          _UxGT("Til")
-#define MSG_LCD_OFF                         _UxGT("Fra")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Vælg")
-#define MSG_ACC                             _UxGT("Accel")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retract")
-#define MSG_A_TRAVEL                        _UxGT("A-rejse")
-#define MSG_STEPS_PER_MM                    _UxGT("Steps/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Asteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Bsteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Csteps/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xsteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Ysteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Esteps/mm")
-#define MSG_E0_STEPS                        _UxGT("E1steps/mm")
-#define MSG_E1_STEPS                        _UxGT("E2steps/mm")
-#define MSG_E2_STEPS                        _UxGT("E3steps/mm")
-#define MSG_E3_STEPS                        _UxGT("E4steps/mm")
-#define MSG_E4_STEPS                        _UxGT("E5steps/mm")
-#define MSG_E5_STEPS                        _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatur")
-#define MSG_MOTION                          _UxGT("Bevægelse")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E i mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_CONTRAST                        _UxGT("LCD kontrast")
-#define MSG_STORE_EEPROM                    _UxGT("Gem i EEPROM")
-#define MSG_LOAD_EEPROM                     _UxGT("Hent fra EEPROM")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Gendan failsafe")
-#define MSG_REFRESH                         _UxGT("Genopfrisk")
-#define MSG_WATCH                           _UxGT("Info skærm")
-#define MSG_PREPARE                         _UxGT("Forbered")
-#define MSG_TUNE                            _UxGT("Tune")
-#define MSG_PAUSE_PRINT                     _UxGT("Pause printet")
-#define MSG_RESUME_PRINT                    _UxGT("Forsæt printet")
-#define MSG_STOP_PRINT                      _UxGT("Stop printet")
-#define MSG_MEDIA_MENU                      _UxGT("Print fra SD")
-#define MSG_NO_MEDIA                        _UxGT("Intet SD kort")
-#define MSG_DWELL                           _UxGT("Dvale...")
-#define MSG_USERWAIT                        _UxGT("Venter på bruger...")
-#define MSG_PRINT_ABORTED                   _UxGT("Print annulleret")
-#define MSG_NO_MOVE                         _UxGT("Ingen bevægelse.")
-#define MSG_KILLED                          _UxGT("DRÆBT. ")
-#define MSG_STOPPED                         _UxGT("STOPPET. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Tilbagetræk mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Skift Re.mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Tilbagetræk V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Hop mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Skift UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_AUTORETRACT                     _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Skift filament")
-#define MSG_INIT_MEDIA                      _UxGT("Init. SD card")
-#define MSG_CHANGE_MEDIA                    _UxGT("Skift SD kort")
-#define MSG_ZPROBE_OUT                      _UxGT("Probe udenfor plade")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Selv-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s først")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Offset")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Opvarmning fejlet")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Fejl: reserve temp")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Temp løber løbsk")
-#define MSG_ERR_MAXTEMP                     _UxGT("Fejl: Maks temp")
-#define MSG_ERR_MINTEMP                     _UxGT("Fejl: Min temp")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Fejl: Maks Plade temp")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Fejl: Min Plade temp")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY først")
-#define MSG_HALTED                          _UxGT("PRINTER STOPPET")
-#define MSG_PLEASE_RESET                    _UxGT("Reset Venligst")
-#define MSG_SHORT_DAY                       _UxGT("d") // Kun et bogstav
-#define MSG_SHORT_HOUR                      _UxGT("h") // Kun et bogstav
-#define MSG_SHORT_MINUTE                    _UxGT("m") // Kun et bogstav
-#define MSG_HEATING                         _UxGT("Opvarmer...")
-#define MSG_BED_HEATING                     _UxGT("Opvarmer plade...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibrering")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibrer X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibrer Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibrer Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibrerings Center")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Danish");
 
-#define MSG_INFO_MENU                       _UxGT("Om Printer")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Printer Info")
-#define MSG_INFO_STATS_MENU                 _UxGT("Printer Stats")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Kort Info")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extruders")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocol")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" er klar");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Kort isat");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Kort fjernet");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Slå alle steppere fra");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Auto Home"); // G28
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Klik når du er klar");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Næste punkt");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Bed level er færdig!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Sæt forsk. af home");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Forsk. er nu aktiv");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Sæt origin");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Forvarm ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end")
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Alle");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Forvarm ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end")
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" Alle");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Afkøl");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Slå strøm til");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Slå strøm fra");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extruder");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Flyt akser");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Juster bed");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Juster bed");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Flyt X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Flyt Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Flyt Z");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Flyt %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Flyt 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Flyt 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Flyt 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Hastighed");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Plade Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Dyse");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Dyse ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Dyse ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Dyse ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Dyse ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Dyse ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Dyse ") LCD_STR_N5;
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Ant. Prints")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Færdige")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total print tid")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Længste print")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total Extruderet")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Prints")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Færdige")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Længste")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extruderet")
-#endif
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Plade");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Blæser hastighed");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Blæser hastighed 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Blæser hastighed 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Blæser hastighed 3");
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrol");
+  PROGMEM Language_Str MSG_MIN                             = _UxGT(" \002 Min");
+  PROGMEM Language_Str MSG_MAX                             = _UxGT(" \002 Max");
+  PROGMEM Language_Str MSG_FACTOR                          = _UxGT(" \002 Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autotemp");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Til");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Fra");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Vælg");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Vælg ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Vælg ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Vælg ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Vælg ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Vælg ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Vælg ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-retract");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-rejse");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatur");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Bevægelse");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E i mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrast");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gem i EEPROM");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hent fra EEPROM");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Gendan failsafe");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Genopfrisk");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info skærm");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Forbered");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pause printet");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Forsæt printet");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Stop printet");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Print fra SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Intet SD kort");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Dvale...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Venter på bruger...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Print annulleret");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Ingen bevægelse.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("DRÆBT. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("STOPPET. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Tilbagetræk mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Skift Re.mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Tilbagetræk V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Hop mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Skift UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Skift filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Skift filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Skift filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Skift filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Skift filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Skift filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Skift filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Skift SD kort");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Probe udenfor plade");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Selv-Test");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s først");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Opvarmning fejlet");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Fejl: reserve temp");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Temp løber løbsk");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Fejl: Maks temp");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Fejl: Min temp");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Fejl: Maks Plade temp");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Fejl: Min Plade temp");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY først");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("PRINTER STOPPET");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Reset Venligst");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // Kun et bogstav
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // Kun et bogstav
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // Kun et bogstav
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Opvarmer...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Opvarmer plade...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibrering");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibrer X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibrer Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibrer Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibrerings Center");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("Strømfors.")
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Om Printer");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Kort Info");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistors");
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Driv Styrke")
-#define MSG_DAC_PERCENT                     _UxGT("Driv %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Skriv")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Ant. Prints");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Færdige");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total print tid");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Længste print");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total Extruderet");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Prints");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Færdige");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Længste");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extruderet");
+  #endif
 
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Forsæt print")
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Strømfors.");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Forkert printer")
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Driv Styrke");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driv %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC EEPROM Skriv");
 
-#if LCD_HEIGHT >= 4
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Vent på start")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("af filament")
-  #define MSG_FILAMENT_CHANGE_INIT_3          _UxGT("skift")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Vent på")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("filament udskyd.")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Indsæt filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("og tryk på knap")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("for at fortsætte...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Vent på")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("filament indtag")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Vent på at print")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("fortsætter")
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Vent venligst...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Udskyder...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Indsæt og klik")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Indtager...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Fortsætter...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Forsæt print");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Forkert printer");
+
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Vent på start", "af filament", "skift"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Vent på", "filament udskyd."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Indsæt filament", "og tryk på knap", "for at fortsætte..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Vent på", "filament indtag"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Vent på at print", "fortsætter"));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Vent venligst..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Udskyder..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Indsæt og klik"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Indtager..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Fortsætter..."));
+  #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h
index 55c5749524..9fa894bb96 100644
--- a/Marlin/src/lcd/language/language_de.h
+++ b/Marlin/src/lcd/language/language_de.h
@@ -29,545 +29,652 @@
  *
  */
 
-#define CHARSIZE 2
+namespace Language_de {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("ÄäÖöÜüß²³")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Deutsche");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" bereit")
-#define MSG_YES                             _UxGT("JA")
-#define MSG_NO                              _UxGT("NEIN")
-#define MSG_BACK                            _UxGT("Zurück")
-#define MSG_MEDIA_ABORTING                  _UxGT("Abbruch...")
-#define MSG_MEDIA_INSERTED                  _UxGT("Medium erkannt")
-#define MSG_MEDIA_REMOVED                   _UxGT("Medium entfernt")
-#define MSG_MEDIA_RELEASED                  _UxGT("Medium freigegeben")
-#define MSG_MEDIA_WAITING                   _UxGT("Warten auf Medium")
-#define MSG_MEDIA_READ_ERROR                _UxGT("Medium Lesefehler")
-#define MSG_MEDIA_USB_REMOVED               _UxGT("USB Gerät entfernt")
-#define MSG_MEDIA_USB_FAILED                _UxGT("USB Start fehlge.")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstopp") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Software-Endstopp")
-#define MSG_MAIN                            _UxGT("Hauptmenü")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Erw. Einstellungen")
-#define MSG_CONFIGURATION                   _UxGT("Konfiguration")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Motoren deaktivieren") // M84 :: Max length 19 characters
-#define MSG_DEBUG_MENU                      _UxGT("Debug-Menü")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Statusbalken-Test")
-#define MSG_AUTO_HOME                       _UxGT("Home XYZ") // G28
-#define MSG_AUTO_HOME_X                     _UxGT("Home X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Home Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Z-Achsen ausgleichen")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Home XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Klick zum Starten")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Nächste Koordinate")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Nivellieren fertig!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Ausblendhöhe")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Setze Homeversatz")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Homeversatz aktiv")
-#define MSG_SET_ORIGIN                      _UxGT("Setze Nullpunkte") //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
-#define MSG_PREHEAT_1                       _UxGT(PREHEAT_1_LABEL " Vorwärmen")
-#define MSG_PREHEAT_1_N                     _UxGT(PREHEAT_1_LABEL " Vorwärmen ")
-#define MSG_PREHEAT_1_ALL                   _UxGT(PREHEAT_1_LABEL " Alles Vorwärmen")
-#define MSG_PREHEAT_1_END                   _UxGT(PREHEAT_1_LABEL " Extr. Vorwärmen")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT(PREHEAT_1_LABEL " Bett Vorwärmen")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT(PREHEAT_1_LABEL " Einstellungen")
-#define MSG_PREHEAT_2                       _UxGT(PREHEAT_2_LABEL " Vorwärmen")
-#define MSG_PREHEAT_2_N                     _UxGT(PREHEAT_2_LABEL " Vorwärmen ")
-#define MSG_PREHEAT_2_ALL                   _UxGT(PREHEAT_2_LABEL " Alles Vorwärmen")
-#define MSG_PREHEAT_2_END                   _UxGT(PREHEAT_2_LABEL " Extr. Vorwärmen")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT(PREHEAT_2_LABEL " Bett Vorwärmen")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT(PREHEAT_2_LABEL " Einstellungen")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("benutzerdef. Heizen")
-#define MSG_COOLDOWN                        _UxGT("Abkühlen")
-#define MSG_LASER_MENU                      _UxGT("Laser")
-#define MSG_LASER_OFF                       _UxGT("Laser aus")
-#define MSG_LASER_ON                        _UxGT("Laser an")
-#define MSG_LASER_POWER                     _UxGT("Laserleistung")
-#define MSG_SPINDLE_MENU                    _UxGT("Spindel-Steuerung")
-#define MSG_SPINDLE_OFF                     _UxGT("Spindel aus")
-#define MSG_SPINDLE_ON                      _UxGT("Spindel an")
-#define MSG_SPINDLE_POWER                   _UxGT("Spindelleistung")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Spindelrichtung")
-#define MSG_SWITCH_PS_ON                    _UxGT("Netzteil ein")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Netzteil aus")
-#define MSG_EXTRUDE                         _UxGT("Extrudieren")
-#define MSG_RETRACT                         _UxGT("Einzug")
-#define MSG_MOVE_AXIS                       _UxGT("Achsen bewegen")
-#define MSG_BED_LEVELING                    _UxGT("Bett-Nivellierung")
-#define MSG_LEVEL_BED                       _UxGT("Bett nivellieren")
-#define MSG_LEVEL_CORNERS                   _UxGT("Ecken nivellieren")
-#define MSG_NEXT_CORNER                     _UxGT("Nächste Ecke")
-#define MSG_MESH_EDITOR                     _UxGT("Netz Editor")
-#define MSG_EDIT_MESH                       _UxGT("Netz bearbeiten")
-#define MSG_EDITING_STOPPED                 _UxGT("Netzbearb. angeh.")
-#define MSG_PROBING_MESH                    _UxGT("Messpunkt")
-#define MSG_MESH_X                          _UxGT("Index X")
-#define MSG_MESH_Y                          _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Z-Wert")
-#define MSG_USER_MENU                       _UxGT("Benutzer-Menü")
-#define MSG_LCD_TILTING_MESH                _UxGT("Berührungspunkt")
-#define MSG_M48_TEST                        _UxGT("M48 Sondentest")
-#define MSG_M48_POINT                       _UxGT("M48 Punkt")
-#define MSG_M48_DEVIATION                   _UxGT("Abweichung")
-#define MSG_IDEX_MENU                       _UxGT("IDEX-Modus")
-#define MSG_OFFSETS_MENU                    _UxGT("Werkzeugversätze")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Autom. parken")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplizieren")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Spiegelkopie")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("vollstä. Kontrolle")
-#define MSG_X_OFFSET                        _UxGT("2. Düse X")
-#define MSG_Y_OFFSET                        _UxGT("2. Düse Y")
-#define MSG_Z_OFFSET                        _UxGT("2. Düse Z")
-#define MSG_UBL_DOING_G29                   _UxGT("G29 ausführen")
-#define MSG_UBL_TOOLS                       _UxGT("UBL-Werkzeuge")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Netz manuell erst.")
-#define MSG_UBL_BC_INSERT                   _UxGT("Unterlegen & messen")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Messen")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Entfernen & messen")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Nächster Punkt...")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("UBL aktivieren")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("UBL deaktivieren")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Betttemperatur")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Hotend-Temp.")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Netz bearbeiten")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Eigenes Netz bearb.")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Feineinstellung...")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Bearbeitung beendet")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Eigenes Netz erst.")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Netz erstellen")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT(PREHEAT_1_LABEL " Netz erstellen")
-#define MSG_UBL_BUILD_MESH_M2               _UxGT(PREHEAT_2_LABEL " Netz erstellen")
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Netz erstellen kalt")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Netzhöhe einst.")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Höhe")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Netz validieren")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT(PREHEAT_1_LABEL " Netz validieren")
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT(PREHEAT_2_LABEL " Netz validieren")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Eig. Netz validieren")
-#define MSG_G26_HEATING_NOZZLE              _UxGT("G26 Heating Nozzle")
-#define MSG_G26_HEATING_BED                 _UxGT("G26 heizt Bett")
-#define MSG_G26_FIXED_LENGTH                _UxGT("Feste Länge Prime")
-#define MSG_G26_PRIME_DONE                  _UxGT("Priming fertig")
-#define MSG_G26_CANCELED                    _UxGT("G26 abgebrochen")
-#define MSG_G26_LEAVING                     _UxGT("G26 verlassen")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Netzerst. forts.")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Netz-Nivellierung")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3-Punkt-Nivell.")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Gitternetz-Nivell.")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Netz nivellieren")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Eckpunkte")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Kartentyp")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Karte ausgeben")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Ausgabe für Host")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Ausgabe für CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Externe Sicherung")
-#define MSG_UBL_INFO_UBL                    _UxGT("UBL-Info ausgeben")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Menge an Füllung")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Manuelles Füllen")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Cleveres Füllen")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Netz Füllen")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Alles annullieren")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Nächstlieg. ann.")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Feineinst. Alles")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Feineinst. Nächstl.")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Netz-Speicherplatz")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Speicherort")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Bettnetz laden")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Bettnetz speichern")
-#define MSG_MESH_LOADED                     _UxGT("Netz %i geladen")
-#define MSG_MESH_SAVED                      _UxGT("Netz %i gespeichert")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Kein Speicher")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Err:UBL speichern")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Err:UBL wiederherst.")
-#define MSG_UBL_Z_OFFSET                    _UxGT("Z-Versatz: ")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z-Versatz angehalten")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Schrittweises UBL")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" bereit");
 
-#define MSG_LED_CONTROL                     _UxGT("Licht-Steuerung")
-#define MSG_LEDS                            _UxGT("Licht")
-#define MSG_LED_PRESETS                     _UxGT("Licht-Einstellung")
-#define MSG_SET_LEDS_RED                    _UxGT("Rot")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Orange")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Gelb")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Grün")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Blau")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Violett")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Weiß")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Standard")
-#define MSG_CUSTOM_LEDS                     _UxGT("Benutzerdefiniert")
-#define MSG_INTENSITY_R                     _UxGT("Intensität Rot")
-#define MSG_INTENSITY_G                     _UxGT("Intensität Grün")
-#define MSG_INTENSITY_B                     _UxGT("Intensität Blau")
-#define MSG_INTENSITY_W                     _UxGT("Intensität Weiß")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Helligkeit")
+  PROGMEM Language_Str MSG_YES                             = _UxGT("JA");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NEIN");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Zurück");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Abbruch...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Medium erkannt");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Medium entfernt");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("Medium freigegeben");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Warten auf Medium");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Medium Lesefehler");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("USB Gerät entfernt");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("USB Start fehlge.");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstopp"); // Max length 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Software-Endstopp");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Hauptmenü");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Erw. Einstellungen");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Konfiguration");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Debug-Menü");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Statusbalken-Test");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Z-Achsen ausgleichen");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Klick zum Starten");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Nächste Koordinate");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Nivellieren fertig!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Ausblendhöhe");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Setze Homeversatz");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Homeversatz aktiv");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
+  PROGMEM Language_Str MSG_PREHEAT_1                       = PREHEAT_1_LABEL _UxGT(" Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = PREHEAT_1_LABEL _UxGT(" Alles Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = PREHEAT_1_LABEL _UxGT(" Bett Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = PREHEAT_1_LABEL _UxGT(" Einstellungen");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = PREHEAT_2_LABEL _UxGT(" Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = PREHEAT_2_LABEL _UxGT(" Alles Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = PREHEAT_2_LABEL _UxGT(" Bett Vorwärmen");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = PREHEAT_2_LABEL _UxGT(" Einstellungen");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("benutzerdef. Heizen");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Abkühlen");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Laser");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Laser aus");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Laser an");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Laserleistung");
+  PROGMEM Language_Str MSG_SPINDLE_MENU                    = _UxGT("Spindel-Steuerung");
+  PROGMEM Language_Str MSG_SPINDLE_OFF                     = _UxGT("Spindel aus");
+  PROGMEM Language_Str MSG_SPINDLE_ON                      = _UxGT("Spindel an");
+  PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindelleistung");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spindelrichtung");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Netzteil ein");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Netzteil aus");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrudieren");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Einzug");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Achsen bewegen");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Bett-Nivellierung");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Bett nivellieren");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Ecken nivellieren");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Nächste Ecke");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Netz Editor");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Netz bearbeiten");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Netzbearb. angeh.");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Messpunkt");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Index X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Index Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Z-Wert");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Benutzer-Menü");
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Berührungspunkt");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("M48 Sondentest");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("M48 Punkt");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Abweichung");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("IDEX-Modus");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Werkzeugversätze");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Autom. parken");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplizieren");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Spiegelkopie");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("vollstä. Kontrolle");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2. Düse X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2. Düse Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2. Düse Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("G29 ausführen");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL-Werkzeuge");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Netz manuell erst.");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Unterlegen & messen");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Messen");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Entfernen & messen");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Nächster Punkt...");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("UBL aktivieren");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("UBL deaktivieren");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Betttemperatur");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Betttemperatur");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Hotend-Temp.");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend-Temp.");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Netz bearbeiten");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Eigenes Netz bearb.");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Feineinstellung...");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Bearbeitung beendet");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Eigenes Netz erst.");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Netz erstellen");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = PREHEAT_1_LABEL _UxGT(" Netz erstellen");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = PREHEAT_2_LABEL _UxGT(" Netz erstellen");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Netz erstellen kalt");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Netzhöhe einst.");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Höhe");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Netz validieren");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = PREHEAT_1_LABEL _UxGT(" Netz validieren");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = PREHEAT_2_LABEL _UxGT(" Netz validieren");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Eig. Netz validieren");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 Heating Nozzle");
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 heizt Bett");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Feste Länge Prime");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Priming fertig");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 abgebrochen");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("G26 verlassen");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Netzerst. forts.");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Netz-Nivellierung");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3-Punkt-Nivell.");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Gitternetz-Nivell.");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Netz nivellieren");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Eckpunkte");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Kartentyp");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Karte ausgeben");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Ausgabe für Host");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Ausgabe für CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Externe Sicherung");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("UBL-Info ausgeben");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Menge an Füllung");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Manuelles Füllen");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Cleveres Füllen");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Netz Füllen");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Alles annullieren");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Nächstlieg. ann.");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Feineinst. Alles");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Feineinst. Nächstl.");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Netz-Speicherplatz");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Speicherort");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Bettnetz laden");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Bettnetz speichern");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Netz %i geladen");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Netz %i gespeichert");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Kein Speicher");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err:UBL speichern");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err:UBL wiederherst.");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Z-Versatz: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z-Versatz angehalten");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Schrittweises UBL");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Netz erstellen kalt");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Cleveres Füllen");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Netz validieren");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Feineinst. Alles");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Netz validieren");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Feineinst. Alles");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Bettnetz speichern");
 
-#define MSG_MOVING                          _UxGT("In Bewegung...")
-#define MSG_FREE_XY                         _UxGT("Abstand XY")
-#define MSG_MOVE_X                          _UxGT("Bewege X")
-#define MSG_MOVE_Y                          _UxGT("Bewege Y")
-#define MSG_MOVE_Z                          _UxGT("Bewege Z")
-#define MSG_MOVE_E                          _UxGT("Bewege Extruder")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Hotend zu kalt")
-#define MSG_MOVE_Z_DIST                     _UxGT(" %s mm")
-#define MSG_MOVE_01MM                       _UxGT(" 0,1   mm")
-#define MSG_MOVE_1MM                        _UxGT(" 1,0   mm")
-#define MSG_MOVE_10MM                       _UxGT("10,0   mm")
-#define MSG_SPEED                           _UxGT("Geschw.")
-#define MSG_BED_Z                           _UxGT("Bett Z")
-#define MSG_NOZZLE                          _UxGT("Düse")
-#define MSG_BED                             _UxGT("Bett")
-#define MSG_CHAMBER                         _UxGT("Gehäuse")
-#define MSG_FAN_SPEED                       _UxGT("Lüfter")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Geschw. Extralüfter")
-#define MSG_FLOW                            _UxGT("Flussrate")
-#define MSG_CONTROL                         _UxGT("Einstellungen")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Faktor")
-#define MSG_AUTOTEMP                        _UxGT("Auto Temperatur")
-#define MSG_LCD_ON                          _UxGT("an")
-#define MSG_LCD_OFF                         _UxGT("aus")
-#define MSG_PID_P                           _UxGT("PID P")
-#define MSG_PID_I                           _UxGT("PID I")
-#define MSG_PID_D                           _UxGT("PID D")
-#define MSG_PID_C                           _UxGT("PID C")
-#define MSG_SELECT                          _UxGT("Auswählen")
-#define MSG_ACC                             _UxGT("Beschleunigung")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("V A Jerk")
-  #define MSG_VB_JERK                       _UxGT("V B Jerk")
-  #define MSG_VC_JERK                       _UxGT("V C Jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("V X Jerk")
-  #define MSG_VB_JERK                       _UxGT("V Y Jerk")
-  #define MSG_VC_JERK                       _UxGT("V Z Jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("V E Jerk")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Junction Dev")
-#define MSG_VELOCITY                        _UxGT("Geschwindigkeit")
-#define MSG_VMAX                            _UxGT("V max ") // space intentional
-#define MSG_VMIN                            _UxGT("V min ")
-#define MSG_VTRAV_MIN                       _UxGT("V min Leerfahrt")
-#define MSG_ACCELERATION                    _UxGT("Beschleunigung")
-#define MSG_AMAX                            _UxGT("A max ") // space intentional
-#define MSG_A_RETRACT                       _UxGT("A Einzug")
-#define MSG_A_TRAVEL                        _UxGT("A Leerfahrt")
-#define MSG_STEPS_PER_MM                    _UxGT("Steps/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A Steps/mm")
-  #define MSG_BSTEPS                        _UxGT("B Steps/mm")
-  #define MSG_CSTEPS                        _UxGT("C Steps/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X Steps/mm")
-  #define MSG_BSTEPS                        _UxGT("Y Steps/mm")
-  #define MSG_CSTEPS                        _UxGT("Z Steps/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E Steps/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 Steps/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 Steps/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 Steps/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 Steps/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 Steps/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 Steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatur")
-#define MSG_MOTION                          _UxGT("Bewegung")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("Filamentdurchmesser")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Entladen mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Laden mm")
-#define MSG_ADVANCE_K                       _UxGT("Vorschubfaktor")
-#define MSG_CONTRAST                        _UxGT("LCD-Kontrast")
-#define MSG_STORE_EEPROM                    _UxGT("Konfig. speichern")
-#define MSG_LOAD_EEPROM                     _UxGT("Konfig. laden")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Standardwerte laden")
-#define MSG_INIT_EEPROM                     _UxGT("Werkseinstellungen")
-#define MSG_MEDIA_UPDATE                    _UxGT("FW Update vom Medium")
-#define MSG_RESET_PRINTER                   _UxGT("Drucker neustarten")
-#define MSG_REFRESH                         _UxGT("Aktualisieren")
-#define MSG_WATCH                           _UxGT("Info")
-#define MSG_PREPARE                         _UxGT("Vorbereitung")
-#define MSG_TUNE                            _UxGT("Justierung")
-#define MSG_START_PRINT                     _UxGT("Starte Druck")
-#define MSG_BUTTON_NEXT                     _UxGT("Weiter")
-#define MSG_BUTTON_INIT                     _UxGT("Bestätigen")
-#define MSG_BUTTON_STOP                     _UxGT("Stop")
-#define MSG_BUTTON_PRINT                    _UxGT("Drucken")
-#define MSG_BUTTON_RESET                    _UxGT("Reseten")
-#define MSG_BUTTON_CANCEL                   _UxGT("Abbrechen")
-#define MSG_BUTTON_DONE                     _UxGT("Fertig")
-#define MSG_PAUSE_PRINT                     _UxGT("SD-Druck pausieren")
-#define MSG_RESUME_PRINT                    _UxGT("SD-Druck fortsetzen")
-#define MSG_STOP_PRINT                      _UxGT("SD-Druck abbrechen")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Wiederh. n. Stroma.")
-#define MSG_MEDIA_MENU                      _UxGT("Druck vom Medium")
-#define MSG_NO_MEDIA                        _UxGT("Kein Medium")
-#define MSG_DWELL                           _UxGT("Warten...")
-#define MSG_USERWAIT                        _UxGT("Klick zum Fortsetzen")
-#define MSG_PRINT_PAUSED                    _UxGT("Druck pausiert...")
-#define MSG_PRINTING                        _UxGT("Druckt...")
-#define MSG_PRINT_ABORTED                   _UxGT("Druck abgebrochen")
-#define MSG_NO_MOVE                         _UxGT("Motoren angeschaltet")
-#define MSG_KILLED                          _UxGT("ABGEBROCHEN")
-#define MSG_STOPPED                         _UxGT("ANGEHALTEN")
-#define MSG_CONTROL_RETRACT                 _UxGT("Einzug mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Wechs. Einzug mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("V Einzug")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Z-Sprung mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Wechs. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("Autom. Einzug")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Einzugslänge")
-#define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Entladelänge")
-#define MSG_TOOL_CHANGE                     _UxGT("Werkzeugwechsel")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Z anheben")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Prime-Geschwin.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Einzug-Geschwin.")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Düsen-Standby")
-#define MSG_FILAMENTCHANGE                  _UxGT("Filament wechseln")
-#define MSG_FILAMENTLOAD                    _UxGT("Filament laden")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Filament entladen")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Alles entladen")
-#define MSG_INIT_MEDIA                      _UxGT("Medium initial.")  // Manually initialize the SD-card via user interface
-#define MSG_CHANGE_MEDIA                    _UxGT("Medium getauscht") // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
-#define MSG_RELEASE_MEDIA                   _UxGT("Medium freigeben") // if Marlin gets confused - M22
-#define MSG_ZPROBE_OUT                      _UxGT("Z-Sonde außerhalb")
-#define MSG_SKEW_FACTOR                     _UxGT("Korrekturfaktor")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Selbsttest")
-#define MSG_BLTOUCH_RESET                   _UxGT("BLTouch zurücks.")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("BLTouch ausfahren")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("BLTouch SW-Modus")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("BLTouch 5V-Modus")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("BLTouch OD-Modus")
-#define MSG_BLTOUCH_MODE_STORE              _UxGT("BLTouch Mode Store")
-#define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("BLTouch auf 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("BLTouch auf OD")
-#define MSG_BLTOUCH_STOW                    _UxGT("BLTouch einfahren")
-#define MSG_BLTOUCH_MODE_ECHO               _UxGT("BLTouch Modus: ")
-#define MSG_BLTOUCH_MODE_CHANGE             _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?")
-#define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT                    _UxGT("TouchMI initial.")
-#define MSG_TOUCHMI_ZTEST                   _UxGT("Test Z-Versatz")
-#define MSG_TOUCHMI_SAVE                    _UxGT("Speichern")
-#define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("TouchMI ausfahren")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Z-Sonde ausfahren")
-#define MSG_MANUAL_STOW                     _UxGT("Z-Sonde einfahren")
-#define MSG_HOME_FIRST                      _UxGT("Vorher %s%s%s homen")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Sondenversatz Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Total")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Abbr. mit Endstopp")
-#define MSG_HEATING_FAILED_LCD              _UxGT("HEIZEN ERFOLGLOS")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Bett heizen fehlge.")
-#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Geh. heizen fehlge.")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("REDUND. TEMP-ABWEI.")
-#define MSG_THERMAL_RUNAWAY                 LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("BETT") MSG_THERMAL_RUNAWAY
-#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("GEH.") MSG_THERMAL_RUNAWAY
-#define MSG_ERR_MAXTEMP                     LCD_STR_THERMOMETER _UxGT(" ÃœBERSCHRITTEN")
-#define MSG_ERR_MINTEMP                     LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÃœBERSCHRITTEN")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err:Gehäuse max Temp")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err:Gehäuse min Temp")
-#define MSG_ERR_Z_HOMING                    _UxGT("Vorher XY homen")
-#define MSG_HALTED                          _UxGT("DRUCKER GESTOPPT")
-#define MSG_PLEASE_RESET                    _UxGT("Bitte neustarten")
-#define MSG_SHORT_DAY                       _UxGT("t") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("heizt...")
-#define MSG_COOLING                         _UxGT("kühlt...")
-#define MSG_BED_HEATING                     _UxGT("Bett heizt...")
-#define MSG_BED_COOLING                     _UxGT("Bett kühlt...")
-#define MSG_CHAMBER_HEATING                 _UxGT("Gehäuse heizt...")
-#define MSG_CHAMBER_COOLING                 _UxGT("Gehäuse kühlt...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta kalibrieren")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibriere X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibriere Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibriere Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibriere Mitte")
-#define MSG_DELTA_SETTINGS                  _UxGT("Delta Einst. anzeig.")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Autom. Kalibrierung")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Delta Höhe setzen")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Sondenversatz Z")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Diag Rod")
-#define MSG_DELTA_HEIGHT                    _UxGT("Höhe")
-#define MSG_DELTA_RADIUS                    _UxGT("Radius")
-#define MSG_INFO_MENU                       _UxGT("Ãœber den Drucker")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Drucker-Info")
-#define MSG_3POINT_LEVELING                 _UxGT("3-Punkt-Nivellierung")
-#define MSG_LINEAR_LEVELING                 _UxGT("Lineare Nivellierung")
-#define MSG_BILINEAR_LEVELING               _UxGT("Bilineare Nivell.")
-#define MSG_UBL_LEVELING                    _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING                   _UxGT("Netz-Nivellierung")
-#define MSG_INFO_STATS_MENU                 _UxGT("Drucker-Statistik")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Board-Info")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistoren")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extruder")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baudrate")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokoll")
-#define MSG_CASE_LIGHT                      _UxGT("Beleuchtung")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Helligkeit")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Licht-Steuerung");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Licht");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Licht-Einstellung");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Rot");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Orange");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Gelb");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Grün");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Blau");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Violett");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Weiß");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Standard");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Benutzerdefiniert");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intensität Rot");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intensität Grün");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intensität Blau");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intensität Weiß");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Helligkeit");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Falscher Drucker")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("In Bewegung...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Abstand XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Bewege X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Bewege Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Bewege Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Bewege Extruder");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Bewege Extruder ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Bewege Extruder ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Bewege Extruder ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Bewege Extruder ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Bewege Extruder ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Bewege Extruder ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Hotend zu kalt");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT(" %s mm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT(" 0,1   mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT(" 1,0   mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("10,0   mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Geschw.");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Bett Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Düse");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Düse ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Düse ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Düse ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Düse ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Düse ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Düse ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Bett");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Gehäuse");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Lüfter");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Lüfter 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Lüfter 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Lüfter 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Geschw. Extralüfter");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Geschw. Extralüfter 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Geschw. Extralüfter 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Geschw. Extralüfter 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flussrate");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flussrate ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flussrate ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flussrate ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flussrate ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flussrate ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flussrate ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Einstellungen");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Faktor");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Auto Temperatur");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("an");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("aus");
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Auswählen");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Auswählen ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Auswählen ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Auswählen ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Auswählen ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Auswählen ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Auswählen ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Beschleunigung");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Jerk");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V ") LCD_STR_A _UxGT(" Jerk");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V ") LCD_STR_B _UxGT(" Jerk");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V ") LCD_STR_C _UxGT(" Jerk");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("V E Jerk");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Junction Dev");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Geschwindigkeit");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("V max ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("V max ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("V max ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("V max ") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("V max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("V max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("V max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("V max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("V max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("V max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("V min ");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("V min Leerfahrt");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Beschleunigung");
+  PROGMEM Language_Str MSG_AMAX                            = _UxGT("A max "); // space intentional
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("A max ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("A max ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("A max ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("A max ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("A max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("A max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("A max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("A max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("A max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("A max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A Einzug");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A Leerfahrt");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Steps/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = LCD_STR_E _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" Steps/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatur");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Bewegung");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Filamentdurchmesser");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Filamentdurchmesser ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Filamentdurchmesser ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Filamentdurchmesser ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Filamentdurchmesser ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Filamentdurchmesser ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Filamentdurchmesser ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Entladen mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Laden mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Vorschubfaktor");
+  PROGMEM Language_Str MSG_ADVANCE_E0                      = _UxGT("Vorschubfaktor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_E1                      = _UxGT("Vorschubfaktor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_E2                      = _UxGT("Vorschubfaktor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_E3                      = _UxGT("Vorschubfaktor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_E4                      = _UxGT("Vorschubfaktor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_E5                      = _UxGT("Vorschubfaktor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD-Kontrast");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Konfig. speichern");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Konfig. laden");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Standardwerte laden");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Werkseinstellungen");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("FW Update vom Medium");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Drucker neustarten");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Aktualisieren");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Vorbereitung");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Justierung");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Starte Druck");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Weiter");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Bestätigen");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Stop");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Drucken");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Reseten");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Abbrechen");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Fertig");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("SD-Druck pausieren");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("SD-Druck fortsetzen");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("SD-Druck abbrechen");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Wiederh. n. Stroma.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Druck vom Medium");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Kein Medium");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Warten...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Klick zum Fortsetzen");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Druck pausiert...");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Druckt...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Druck abgebrochen");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Motoren angeschaltet");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ABGEBROCHEN");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ANGEHALTEN");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Einzug mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Wechs. Einzug mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("V Einzug");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Z-Sprung mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Wechs. UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Autom. Einzug");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Einzugslänge");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Entladelänge");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Werkzeugwechsel");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Z anheben");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Prime-Geschwin.");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Einzug-Geschwin.");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Düsen-Standby");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Filament wechseln");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Filament wechseln ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Filament wechseln ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Filament wechseln ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Filament wechseln ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Filament wechseln ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Filament wechseln ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Filament laden");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Filament laden ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Filament laden ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Filament laden ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Filament laden ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Filament laden ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Filament laden ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Filament entladen ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Filament entladen ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Filament entladen ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Filament entladen ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Filament entladen ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Filament entladen ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Alles entladen");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Medium initial.");  // Manually initialize the SD-card via user interface
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z-Sonde außerhalb");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Korrekturfaktor");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Selbsttest");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("BLTouch zurücks.");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("BLTouch ausfahren");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("BLTouch SW-Modus");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("BLTouch 5V-Modus");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("BLTouch OD-Modus");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("BLTouch Mode Store");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("BLTouch auf 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("BLTouch auf OD");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("BLTouch einfahren");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("BLTouch Modus: ");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE             = _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("TouchMI initial.");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Test Z-Versatz");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Speichern");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("TouchMI ausfahren");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Z-Sonde ausfahren");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Z-Sonde einfahren");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Vorher %s%s%s homen");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Sondenversatz Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Total");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Abbr. mit Endstopp");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("HEIZEN ERFOLGLOS");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Bett heizen fehlge.");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER      = _UxGT("Geh. heizen fehlge.");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("REDUND. TEMP-ABWEI.");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = " " LCD_STR_THERMOMETER _UxGT(" ÃœBERSCHRITTEN");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÃœBERSCHRITTEN");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Err:Gehäuse max Temp");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Err:Gehäuse min Temp");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Vorher XY homen");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("DRUCKER GESTOPPT");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Bitte neustarten");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("t"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("heizt...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("kühlt...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Bett heizt...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Bett kühlt...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Gehäuse heizt...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Gehäuse kühlt...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta kalibrieren");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibriere X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibriere Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibriere Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibriere Mitte");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta Einst. anzeig.");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Autom. Kalibrierung");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Delta Höhe setzen");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Sondenversatz Z");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Diag Rod");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Höhe");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Radius");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Ãœber den Drucker");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Drucker-Info");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3-Punkt-Nivellierung");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Lineare Nivellierung");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Bilineare Nivell.");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Netz-Nivellierung");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Drucker-Statistik");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Board-Info");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistoren");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extruder");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baudrate");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokoll");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Beleuchtung");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Helligkeit");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Gesamte Drucke")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Komplette Drucke")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Gesamte Druckzeit")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Längste Druckzeit")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Gesamt Extrudiert")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Drucke")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Komplette")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Gesamte")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Längste")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrud.")
-#endif
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Falscher Drucker");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("Netzteil")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Motorleistung")
-#define MSG_DAC_PERCENT                     _UxGT("Treiber %")
-#define MSG_ERROR_TMC                       _UxGT("TMC Verbindungsfehler")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Werte speichern")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("DRUCK PAUSIERT")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("FILAMENT LADEN")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("FILAMENT ENTLADEN")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("FORTS. OPTIONEN:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Mehr entladen")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Druck weiter")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Düse: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Runout-Sensor")
-#define MSG_RUNOUT_DISTANCE_MM              _UxGT("Runout-Weg mm")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Homing gescheitert")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Probing gescheitert")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: zu kalt")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Gesamte Drucke");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Komplette Drucke");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Gesamte Druckzeit");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Längste Druckzeit");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Gesamt Extrudiert");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Drucke");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Komplette");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Gesamte");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Längste");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrud.");
+  #endif
 
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("FILAMENT WECHSEL")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("FILAMENT WÄHLEN")
-#define MSG_MMU2_MENU                       _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Update MMU Firmware!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU handeln erfor.")
-#define MSG_MMU2_RESUME                     _UxGT("Druck fortsetzen")
-#define MSG_MMU2_RESUMING                   _UxGT("Fortfahren...")
-#define MSG_MMU2_LOAD_FILAMENT              MSG_FILAMENTLOAD
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Lade alle")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Düse laden")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Filament auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Filament 1 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Filament 2 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Filament 3 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Filament 4 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Filament 5 auswerfen")
-#define MSG_MMU2_UNLOAD_FILAMENT            MSG_FILAMENTUNLOAD
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Lade Fila. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Fila. auswerfen...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Fila. entladen...")
-#define MSG_MMU2_ALL                        _UxGT("Alle")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
-#define MSG_MMU2_RESET                      _UxGT("setze MMU zurück")
-#define MSG_MMU2_RESETTING                  _UxGT("MMU zurücksetzen...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Entfernen, klicken")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Temp");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Temp");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Netzteil");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Motorleistung");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Treiber %");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("TMC Verbindungsfehler");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Werte speichern");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("FILAMENT WECHSEL");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("DRUCK PAUSIERT");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("FILAMENT LADEN");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("FILAMENT ENTLADEN");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("FORTS. OPTIONEN:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Mehr entladen");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Druck weiter");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Düse: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Runout-Sensor");
+  PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM              = _UxGT("Runout-Weg mm");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Homing gescheitert");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Probing gescheitert");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: zu kalt");
 
-#define MSG_MIX                             _UxGT("Mix")
-#define MSG_MIX_COMPONENT                   _UxGT("Komponente")
-#define MSG_MIXER                           _UxGT("Mixer")
-#define MSG_GRADIENT                        _UxGT("Gradient") // equal Farbverlauf
-#define MSG_FULL_GRADIENT                   _UxGT("Volle Gradient")
-#define MSG_TOGGLE_MIX                      _UxGT("Mix umschalten")
-#define MSG_CYCLE_MIX                       _UxGT("Zyklus Mix")
-#define MSG_GRADIENT_MIX                    _UxGT("Gradient Mix")
-#define MSG_REVERSE_GRADIENT                _UxGT("Umgekehrte Gradient")
-#define MSG_ACTIVE_VTOOL                    _UxGT("Aktives V-Tool")
-#define MSG_START_VTOOL                     _UxGT("V-Tool Start")
-#define MSG_END_VTOOL                       _UxGT("V-Tool Ende")
-#define MSG_GRADIENT_ALIAS                  _UxGT("V-Tool Alias")
-#define MSG_RESET_VTOOLS                    _UxGT("V-Tools Reseten")
-#define MSG_COMMIT_VTOOL                    _UxGT("V-Tool Mix sichern")
-#define MSG_VTOOLS_RESET                    _UxGT("V-Tools ist resetet")
-#define MSG_START_Z                         _UxGT("Z Start")
-#define MSG_END_Z                           _UxGT("Z Ende")
-#define MSG_GAMES                           _UxGT("Spiele")
-#define MSG_BRICKOUT                        _UxGT("Brickout")
-#define MSG_INVADERS                        _UxGT("Invaders")
-#define MSG_SNAKE                           _UxGT("Sn4k3")
-#define MSG_MAZE                            _UxGT("Maze")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("FILAMENT WÄHLEN");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("Update MMU Firmware!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU handeln erfor.");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Druck fortsetzen");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Fortfahren...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Filament laden");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Lade alle");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Düse laden");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Filament auswerfen");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Filament 1 auswerfen");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Filament 2 auswerfen");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Filament 3 auswerfen");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Filament 4 auswerfen");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Filament 5 auswerfen");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Filament entladen ");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Lade Fila. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Fila. auswerfen...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Fila. entladen...");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("Alle");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filament 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filament 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filament 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filament 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filament 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("setze MMU zurück");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("MMU zurücksetzen...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Entfernen, klicken");
 
-//
-// Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
-//                                       ...oder 2 Zeilen auf einem 3-Zeilen-Display.
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Knopf drücken um")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("Druck fortzusetzen")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Druck ist")
-  #define MSG_PAUSE_PRINT_INIT_2            _UxGT("pausiert...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Warte auf den")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("Start des")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("Filamentwechsels...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Filament einlegen")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("und Knopf drücken")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("um fortzusetzen")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Knopf drücken um")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("Düse aufzuheizen")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Düse heizt auf")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("bitte warten...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Warte auf")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("Herausnahme")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("des Filaments...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Warte auf")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("Laden des")
-  #define MSG_FILAMENT_CHANGE_LOAD_3        _UxGT("Filaments...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Warte auf")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("Entladen des")
-  #define MSG_FILAMENT_CHANGE_PURGE_3       _UxGT("Filaments...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Klicke um")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("die Fila-Entladung")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_3  _UxGT("zu beenden")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Warte auf")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("Fortsetzen des")
-  #define MSG_FILAMENT_CHANGE_RESUME_3      _UxGT("Drucks...")
-#else // LCD_HEIGHT < 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      MSG_USERWAIT
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Pausiert...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Bitte warten...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Laden und Klick")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Klick zum Heizen")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Heizen...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Entladen...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Laden...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Entladen...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Klick zum beenden")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("der Fila-Entladung")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Fortsetzen...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Mix");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Komponente 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Komponente 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Komponente 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Komponente 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Komponente 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Komponente 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Mixer");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Gradient"); // equal Farbverlauf
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Volle Gradient");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Mix umschalten");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Zyklus Mix");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Gradient Mix");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Umgekehrte Gradient");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("Aktives V-Tool");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("V-Tool Start");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("V-Tool Ende");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("V-Tool Alias");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("V-Tools Reseten");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("V-Tool Mix sichern");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("V-Tools ist resetet");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Z Start:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("Z Ende:");
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Spiele");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Brickout");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Maze");
 
-#define MSG_TMC_DRIVERS                     _UxGT("TMC Treiber") // Max length 18 characters
-#define MSG_TMC_CURRENT                     _UxGT("Treiber Strom")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Hybrid threshold")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Sensorloses Homing")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Schrittmodus")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop einsch.")
-#define MSG_SERVICE_RESET                   _UxGT("Reset")
-#define MSG_SERVICE_IN                      _UxGT(" im:")
-#define MSG_BACKLASH                        _UxGT("Spiel")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Korrektur")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Glätten")
+  //
+  // Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
+  //                                       ...oder 2 Zeilen auf einem 3-Zeilen-Display.
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Knopf drücken um", "Druck fortzusetzen"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_2_LINE("Druck ist", "pausiert..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Warte auf den", "Start des", "Filamentwechsels..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Filament einlegen", "und Knopf drücken", "um fortzusetzen"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Knopf drücken um", "Düse aufzuheizen"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Düse heizt auf", "bitte warten..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Warte auf", "Herausnahme", "des Filaments..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Warte auf", "Laden des", "Filaments..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_3_LINE("Warte auf", "Entladen des", "Filaments..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_3_LINE("Klicke um", "die Fila-Entladung", "zu beenden"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Warte auf", "Fortsetzen des", "Drucks..."));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Klick zum Fortsetzen"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Pausiert..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Bitte warten..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Laden und Klick"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Klick zum Heizen"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Heizen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Entladen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Laden..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Entladen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Klick zum beenden", "der Fila-Entladung"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Fortsetzen..."));
+  #endif // LCD_HEIGHT < 4
+
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("TMC Treiber"); // Max length 18 characters
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Treiber Strom");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Hybrid threshold");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Sensorloses Homing");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Schrittmodus");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop einsch.");
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Reset");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" im:");
+  PROGMEM Language_Str MSG_BACKLASH                        = _UxGT("Spiel");
+  PROGMEM Language_Str MSG_BACKLASH_A                      = LCD_STR_A;
+  PROGMEM Language_Str MSG_BACKLASH_B                      = LCD_STR_B;
+  PROGMEM Language_Str MSG_BACKLASH_C                      = LCD_STR_C;
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Korrektur");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Glätten");
+}
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 75bdfa3ed5..a74c8da12f 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -30,162 +30,225 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_GREEK
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" έτοιμο.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Εισαγωγή κάρτας")
-#define MSG_MEDIA_REMOVED                   _UxGT("Αφαίρεση κάρτας")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Βασική Οθόνη")
-#define MSG_AUTOSTART                       _UxGT("Αυτόματη εκκίνηση")
-#define MSG_DISABLE_STEPPERS                _UxGT("Απενεργοποίηση Μοτέρ")
-#define MSG_AUTO_HOME                       _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο") //SHORTEN
-#define MSG_AUTO_HOME_X                     _UxGT("Αρχικό σημείο X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Αρχικό σημείο Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Αρχικό σημείο Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Επαναφορά Επ. Εκτύπωσης") //SHORTEN
-#define MSG_LEVEL_BED_WAITING               _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει") //SHORTEN
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Επόμενο σημείο")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Ολοκλήρωση επιπεδοποίησης!") //SHORTEN
-#define MSG_SET_HOME_OFFSETS                _UxGT("Ορισμός βασικών μετατοπίσεων") //SHORTEN
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Εφαρμόστηκαν οι μετατοπίσεις") //SHORTEN
-#define MSG_SET_ORIGIN                      _UxGT("Ορισμός προέλευσης")
-#define MSG_PREHEAT_1                       _UxGT("Προθέρμανση " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" όλα")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" bed") //SHORTEN
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" επιβεβαίωση") //SHORTEN
-#define MSG_PREHEAT_2                       _UxGT("Προθέρμανση " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" όλα")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" bed") //SHORTEN
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" επιβεβαίωση") //SHORTEN
-#define MSG_COOLDOWN                        _UxGT("Μειωση θερμοκρασιας")
-#define MSG_SWITCH_PS_ON                    _UxGT("Ενεργοποίηση")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Απενεργοποίηση")
-#define MSG_EXTRUDE                         _UxGT("Εξώθηση")
-#define MSG_RETRACT                         _UxGT("Ανάσυρση")
-#define MSG_MOVE_AXIS                       _UxGT("Μετακίνηση άξονα")
-#define MSG_BED_LEVELING                    _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
-#define MSG_LEVEL_BED                       _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
-#define MSG_MOVE_X                          _UxGT("Μετακίνηση X")
-#define MSG_MOVE_Y                          _UxGT("Μετακίνηση Y")
-#define MSG_MOVE_Z                          _UxGT("Μετακίνηση Z")
-#define MSG_MOVE_E                          _UxGT("Εξωθητήρας")
-#define MSG_MOVE_Z_DIST                     _UxGT("Μετακίνηση %s μμ")
-#define MSG_MOVE_01MM                       _UxGT("Μετακίνηση 0,1 μμ")
-#define MSG_MOVE_1MM                        _UxGT("Μετακίνηση 1 μμ")
-#define MSG_MOVE_10MM                       _UxGT("Μετακίνηση 10 μμ")
-#define MSG_SPEED                           _UxGT("Ταχύτητα")
-#define MSG_BED_Z                           _UxGT("Επ. Εκτύπωσης Z")
-#define MSG_NOZZLE                          _UxGT("Ακροφύσιο")
-#define MSG_BED                             _UxGT("Κλίνη")
-#define MSG_FAN_SPEED                       _UxGT("Ταχύτητα ανεμιστήρα")
-#define MSG_FLOW                            _UxGT("Ροή")
-#define MSG_CONTROL                         _UxGT("Έλεγχος")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Αυτομ ρύθμιση θερ/σίας") //SHORTEN
-#define MSG_LCD_ON                          _UxGT("Ενεργοποιημένο")
-#define MSG_LCD_OFF                         _UxGT("Απενεργοποιημένο")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_ACC                             _UxGT("Επιτάχυνση")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Vαντίδραση A")
-  #define MSG_VB_JERK                       _UxGT("Vαντίδραση B")
-  #define MSG_VC_JERK                       _UxGT("Vαντίδραση C")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vαντίδραση X")
-  #define MSG_VB_JERK                       _UxGT("Vαντίδραση Y")
-  #define MSG_VC_JERK                       _UxGT("Vαντίδραση Z")
-#endif
-#define MSG_VE_JERK                         _UxGT("Vαντίδραση E")
-#define MSG_VMAX                            _UxGT("V Μέγιστο")
-#define MSG_VMIN                            _UxGT("V Ελάχιστο")
-#define MSG_VTRAV_MIN                       _UxGT("Vελάχ. μετατόπιση")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Aμεγ ")
-#define MSG_A_RETRACT                       _UxGT("Α-ανάσυρση")
-#define MSG_A_TRAVEL                        _UxGT("Α-μετατόπιση")
-#define MSG_STEPS_PER_MM                    _UxGT("Bήματα ανά μμ")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Bήματα A ανά μμ")
-  #define MSG_BSTEPS                        _UxGT("Bήματα B ανά μμ")
-  #define MSG_CSTEPS                        _UxGT("Bήματα C ανά μμ")
-#else
-  #define MSG_ASTEPS                        _UxGT("Bήματα X ανά μμ")
-  #define MSG_BSTEPS                        _UxGT("Bήματα Y ανά μμ")
-  #define MSG_CSTEPS                        _UxGT("Bήματα Z ανά μμ")
-#endif
-#define MSG_ESTEPS                          _UxGT("Bήματα Ε ανά μμ")
-#define MSG_E0_STEPS                        _UxGT("Bήματα Ε1 ανά μμ")
-#define MSG_E1_STEPS                        _UxGT("Bήματα Ε2 ανά μμ")
-#define MSG_E2_STEPS                        _UxGT("Bήματα Ε3 ανά μμ")
-#define MSG_E3_STEPS                        _UxGT("Bήματα Ε4 ανά μμ")
-#define MSG_E4_STEPS                        _UxGT("Bήματα Ε5 ανά μμ")
-#define MSG_E5_STEPS                        _UxGT("Bήματα Ε6 ανά μμ")
-#define MSG_TEMPERATURE                     _UxGT("Θερμοκρασία")
-#define MSG_MOTION                          _UxGT("Κίνηση")
-#define MSG_FILAMENT                        _UxGT("Νήμα")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("Ε σε μμ3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Διάμετρος νήματος")
-#define MSG_CONTRAST                        _UxGT("Κοντράστ LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Αποθήκευση")
-#define MSG_LOAD_EEPROM                     _UxGT("Φόρτωση")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Επαναφορά ασφαλούς αντιγράφου") //SHORTEN
-#define MSG_REFRESH                         _UxGT("Ανανέωση")
-#define MSG_WATCH                           _UxGT("Οθόνη πληροφόρησης")
-#define MSG_PREPARE                         _UxGT("Προετοιμασία")
-#define MSG_TUNE                            _UxGT("Συντονισμός")
-#define MSG_PAUSE_PRINT                     _UxGT("Παύση εκτύπωσης")
-#define MSG_RESUME_PRINT                    _UxGT("Συνέχιση εκτύπωσης")
-#define MSG_STOP_PRINT                      _UxGT("Διακοπή εκτύπωσης")
-#define MSG_MEDIA_MENU                      _UxGT("Εκτύπωση από SD")
-#define MSG_NO_MEDIA                        _UxGT("Δεν βρέθηκε SD")
-#define MSG_DWELL                           _UxGT("Αναστολή λειτουργίας")
-#define MSG_USERWAIT                        _UxGT("Αναμονή για χρήστη")
-#define MSG_PRINT_ABORTED                   _UxGT("Διακόπτεται η εκτύπωση") //SHORTEN
-#define MSG_NO_MOVE                         _UxGT("Καμία κίνηση.")
-#define MSG_KILLED                          _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ")
-#define MSG_STOPPED                         _UxGT("ΔΙΑΚΟΠΗ. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Ανάσυρση μμ")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Εναλλαγή ανάσυρσης μμ")  //SHORTEN
-#define MSG_CONTROL_RETRACTF                _UxGT("Ανάσυρση V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Μεταπήδηση μμ")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_AUTORETRACT                     _UxGT("Αυτόματη ανάσυρση")
-#define MSG_FILAMENTCHANGE                  _UxGT("Αλλαγή νήματος")
-#define MSG_INIT_MEDIA                      _UxGT("Προετοιμασία κάρτας SD")  //SHORTEN
-#define MSG_CHANGE_MEDIA                    _UxGT("Αλλαγή κάρτας SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης") //SHORTEN
-#define MSG_YX_UNHOMED                      _UxGT("Επαναφορά Χ/Υ πριν από Ζ") //SHORTEN
-#define MSG_XYZ_UNHOMED                     _UxGT("Επαναφορά ΧΥΖ πρώτα")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Μετατόπιση Ζ")
-#define MSG_BABYSTEP_X                      _UxGT("Μικρό βήμα Χ")
-#define MSG_BABYSTEP_Y                      _UxGT("Μικρό βήμα Υ")
-#define MSG_BABYSTEP_Z                      _UxGT("Μικρό βήμα Ζ")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Ακύρωση endstop ")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Ανεπιτυχής θέρμανση")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΚΡΑΣΙΑΣ")
-#define MSG_ERR_MAXTEMP                     _UxGT("ΠΕΡΙΤΗ ΘΕΡΜΟΚΡΑΣΙΑ")
-#define MSG_ERR_MINTEMP                     _UxGT("ΜΗ ΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ") //SHORTEN
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("ΜΕΓΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ") //SHORTEN
-#define MSG_ERR_MINTEMP_BED                 _UxGT("ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ") //SHORTEN
-#define MSG_HALTED                          _UxGT("H εκτύπωση διακόπηκε")
-#define MSG_HEATING                         _UxGT("Θερμαίνεται…")
-#define MSG_BED_HEATING                     _UxGT("Θέρμανση ΕΠ. Εκτύπωσης") //SHORTEN
-#define MSG_DELTA_CALIBRATE                 _UxGT("Βαθμονόμηση Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Βαθμονόμηση X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Βαθμονόμηση Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Βαθμονόμηση Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Βαθμονόμηση κέντρου")
+namespace Language_el {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Εσφαλμένος εκτυπωτής")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Greek");
+
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" έτοιμο.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Εισαγωγή κάρτας");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Αφαίρεση κάρτας");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Βασική Οθόνη");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Αυτόματη εκκίνηση");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Απενεργοποίηση Μοτέρ");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); //SHORTEN
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Αρχικό σημείο X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Αρχικό σημείο Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Αρχικό σημείο Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Επαναφορά Επ. Εκτύπωσης"); //SHORTEN
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει"); //SHORTEN
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Επόμενο σημείο");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Ολοκλήρωση επιπεδοποίησης!"); //SHORTEN
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Ορισμός βασικών μετατοπίσεων"); //SHORTEN
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις"); //SHORTEN
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Ορισμός προέλευσης");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" bed"); //SHORTEN
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" όλα");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" bed"); //SHORTEN
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Μειωση θερμοκρασιας");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Ενεργοποίηση");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Απενεργοποίηση");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Εξώθηση");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Ανάσυρση");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Μετακίνηση άξονα");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Μετακίνηση X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Μετακίνηση Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Μετακίνηση Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Εξωθητήρας");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Εξωθητήρας ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Εξωθητήρας ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Εξωθητήρας ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Εξωθητήρας ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Εξωθητήρας ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Εξωθητήρας ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Μετακίνηση %s μμ");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Μετακίνηση 0,1 μμ");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Μετακίνηση 1 μμ");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Μετακίνηση 10 μμ");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Ταχύτητα");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Επ. Εκτύπωσης Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Ακροφύσιο");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Ακροφύσιο ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Ακροφύσιο ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Ακροφύσιο ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Ακροφύσιο ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Ακροφύσιο ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Ακροφύσιο ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Κλίνη");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ταχύτητα ανεμιστήρα");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Ταχύτητα ανεμιστήρα 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Ταχύτητα ανεμιστήρα 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Ταχύτητα ανεμιστήρα 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Ροή");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Ροή ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Ροή ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Ροή ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Ροή ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Ροή ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Ροή ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Έλεγχος");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Αυτομ ρύθμιση θερ/σίας"); //SHORTEN
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Ενεργοποιημένο");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Απενεργοποιημένο");
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Επιτάχυνση");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Vαντίδραση E");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("V Μέγιστο") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("V Μέγιστο") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("V Μέγιστο") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("V Μέγιστο") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("V Μέγιστο ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("V Μέγιστο ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("V Μέγιστο ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("V Μέγιστο ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("V Μέγιστο ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("V Μέγιστο ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("V Ελάχιστο");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vελάχ. μετατόπιση");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accel");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Aμεγ ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Aμεγ ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Aμεγ ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Aμεγ ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Aμεγ ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Aμεγ ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Aμεγ ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Aμεγ ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Aμεγ ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Aμεγ ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Α-ανάσυρση");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Α-μετατόπιση");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Bήματα ανά μμ");
+  PROGMEM Language_Str MSG_A_STEPS                         = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_B_STEPS                         = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_C_STEPS                         = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Bήματα Ε ανά μμ");
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("Bήματα ") LCD_STR_E0 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("Bήματα ") LCD_STR_E1 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("Bήματα ") LCD_STR_E2 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("Bήματα ") LCD_STR_E3 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("Bήματα ") LCD_STR_E4 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("Bήματα ") LCD_STR_E5 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Θερμοκρασία");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Κίνηση");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Νήμα");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("Ε σε μμ3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Διάμετρος νήματος");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Διάμετρος νήματος ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Διάμετρος νήματος ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Διάμετρος νήματος ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Διάμετρος νήματος ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Διάμετρος νήματος ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Διάμετρος νήματος ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Οθόνη πληροφόρησης");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Συντονισμός");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Παύση εκτύπωσης");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Συνέχιση εκτύπωσης");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Διακοπή εκτύπωσης");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Εκτύπωση από SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Δεν βρέθηκε SD");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Αναστολή λειτουργίας");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Αναμονή για χρήστη");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Διακόπτεται η εκτύπωση"); //SHORTEN
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Καμία κίνηση.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ΔΙΑΚΟΠΗ. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Ανάσυρση μμ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Εναλλαγή ανάσυρσης μμ");  //SHORTEN
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Ανάσυρση V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Μεταπήδηση μμ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Αυτόματη ανάσυρση");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Αλλαγή νήματος");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Αλλαγή νήματος ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Αλλαγή νήματος ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Αλλαγή νήματος ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Αλλαγή νήματος ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Αλλαγή νήματος ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Αλλαγή νήματος ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Προετοιμασία κάρτας SD");  //SHORTEN
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Αλλαγή κάρτας SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
+  PROGMEM Language_Str MSG_YX_UNHOMED                      = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); //SHORTEN
+  PROGMEM Language_Str MSG_XYZ_UNHOMED                     = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Μετατόπιση Ζ");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Μικρό βήμα Χ");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Μικρό βήμα Υ");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Μικρό βήμα Ζ");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Ακύρωση endstop ");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Ανεπιτυχής θέρμανση");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΚΡΑΣΙΑΣ");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("ΠΕΡΙΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("ΜΗ ΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ"); //SHORTEN
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("ΜΕΓΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ"); //SHORTEN
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ"); //SHORTEN
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("H εκτύπωση διακόπηκε");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Θερμαίνεται…");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Θέρμανση ΕΠ. Εκτύπωσης"); //SHORTEN
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Βαθμονόμηση Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Βαθμονόμηση X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Βαθμονόμηση Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Βαθμονόμηση Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Βαθμονόμηση κέντρου");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Εσφαλμένος εκτυπωτής");
+}
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
index 83754591d0..e78a229008 100644
--- a/Marlin/src/lcd/language/language_el_gr.h
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -30,161 +30,254 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_GREEK
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" έτοιμο.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Εισαγωγή κάρτας")
-#define MSG_MEDIA_REMOVED                   _UxGT("Αφαίρεση κάρτας")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Βασική Οθόνη")
-#define MSG_AUTOSTART                       _UxGT("Αυτόματη εκκίνηση")
-#define MSG_DISABLE_STEPPERS                _UxGT("Απενεργοποίηση βηματιστή")
-#define MSG_AUTO_HOME                       _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο")
-#define MSG_AUTO_HOME_X                     _UxGT("Αρχικό σημείο X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Αρχικό σημείο Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Αρχικό σημείο Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Κάντε κλικ για να ξεκινήσετε")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Επόμενο σημείο")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Ολοκλήρωση επιπεδοποίησης!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Ορισμός βασικών μετατοπίσεων")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Εφαρμόστηκαν οι μετατοπίσεις")
-#define MSG_SET_ORIGIN                      _UxGT("Ορισμός προέλευσης")
-#define MSG_PREHEAT_1                       _UxGT("Προθέρμανση " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" όλα")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" κλίνη")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" επιβεβαίωση")
-#define MSG_PREHEAT_2                       _UxGT("Προθέρμανση " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" όλα")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Bed")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" επιβεβαίωση")
-#define MSG_COOLDOWN                        _UxGT("Μειωση θερμοκρασιας")
-#define MSG_SWITCH_PS_ON                    _UxGT("Ενεργοποίηση")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Απενεργοποίηση")
-#define MSG_EXTRUDE                         _UxGT("Εξώθηση")
-#define MSG_RETRACT                         _UxGT("Ανάσυρση")
-#define MSG_MOVE_AXIS                       _UxGT("Μετακίνηση άξονα")
-#define MSG_BED_LEVELING                    _UxGT("Επιπεδοποίηση κλίνης")
-#define MSG_LEVEL_BED                       _UxGT("Επιπεδοποίηση κλίνης")
-#define MSG_MOVE_X                          _UxGT("Μετακίνηση X")
-#define MSG_MOVE_Y                          _UxGT("Μετακίνηση Y")
-#define MSG_MOVE_Z                          _UxGT("Μετακίνηση Z")
-#define MSG_MOVE_E                          _UxGT("Εξωθητήρας")
-#define MSG_MOVE_Z_DIST                     _UxGT("Μετακίνηση %s μμ")
-#define MSG_MOVE_01MM                       _UxGT("Μετακίνηση 0,1 μμ")
-#define MSG_MOVE_1MM                        _UxGT("Μετακίνηση 1 μμ")
-#define MSG_MOVE_10MM                       _UxGT("Μετακίνηση 10 μμ")
-#define MSG_SPEED                           _UxGT("Ταχύτητα")
-#define MSG_BED_Z                           _UxGT("Κλίνη Z")
-#define MSG_NOZZLE                          _UxGT("Ακροφύσιο")
-#define MSG_BED                             _UxGT("Κλίνη")
-#define MSG_FAN_SPEED                       _UxGT("Ταχύτητα ανεμιστήρα")
-#define MSG_FLOW                            _UxGT("Ροή")
-#define MSG_CONTROL                         _UxGT("Έλεγχος")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Αυτομ. ρύθμιση θερμοκρασίας")
-#define MSG_LCD_ON                          _UxGT("Ενεργοποιημένο")
-#define MSG_LCD_OFF                         _UxGT("Απενεργοποιημένο")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_ACC                             _UxGT("Επιτάχυνση")
-#define MSG_JERK                            _UxGT("Vαντίδραση")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Vαντίδραση A")
-  #define MSG_VB_JERK                       _UxGT("Vαντίδραση B")
-  #define MSG_VC_JERK                       _UxGT("Vαντίδραση C")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vαντίδραση X")
-  #define MSG_VB_JERK                       _UxGT("Vαντίδραση Y")
-  #define MSG_VC_JERK                       _UxGT("Vαντίδραση Z")
-#endif
-#define MSG_VE_JERK                         _UxGT("Vαντίδραση E")
-#define MSG_VMAX                            _UxGT("Vμεγ ")
-#define MSG_VMIN                            _UxGT("Vελαχ")
-#define MSG_VTRAV_MIN                       _UxGT("Vελάχ. μετατόπιση")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Aμεγ ")
-#define MSG_A_RETRACT                       _UxGT("Α-ανάσυρση")
-#define MSG_A_TRAVEL                        _UxGT("Α-μετατόπιση")
-#define MSG_STEPS_PER_MM                    _UxGT("Bήματα ανά μμ")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Bήματα A ανά μμ")
-  #define MSG_BSTEPS                        _UxGT("Bήματα B ανά μμ")
-  #define MSG_CSTEPS                        _UxGT("Bήματα C ανά μμ")
-#else
-  #define MSG_ASTEPS                        _UxGT("Bήματα X ανά μμ")
-  #define MSG_BSTEPS                        _UxGT("Bήματα Y ανά μμ")
-  #define MSG_CSTEPS                        _UxGT("Bήματα Z ανά μμ")
-#endif
-#define MSG_ESTEPS                          _UxGT("Bήματα Ε ανά μμ")
-#define MSG_E0_STEPS                        _UxGT("Bήματα Ε1 ανά μμ")
-#define MSG_E1_STEPS                        _UxGT("Bήματα Ε2 ανά μμ")
-#define MSG_E2_STEPS                        _UxGT("Bήματα Ε3 ανά μμ")
-#define MSG_E3_STEPS                        _UxGT("Bήματα Ε4 ανά μμ")
-#define MSG_E4_STEPS                        _UxGT("Bήματα Ε5 ανά μμ")
-#define MSG_E5_STEPS                        _UxGT("Bήματα Ε6 ανά μμ")
-#define MSG_TEMPERATURE                     _UxGT("Θερμοκρασία")
-#define MSG_MOTION                          _UxGT("Κίνηση")
-#define MSG_FILAMENT                        _UxGT("Νήμα")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("Ε σε μμ3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Διάμετρος νήματος")
-#define MSG_CONTRAST                        _UxGT("Κοντράστ LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Αποθήκευση")
-#define MSG_LOAD_EEPROM                     _UxGT("Φόρτωση")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Επαναφορά ασφαλούς αντιγράφου")
-#define MSG_REFRESH                         _UxGT("Ανανέωση")
-#define MSG_WATCH                           _UxGT("Οθόνη πληροφόρησης")
-#define MSG_PREPARE                         _UxGT("Προετοιμασία")
-#define MSG_TUNE                            _UxGT("Συντονισμός")
-#define MSG_PAUSE_PRINT                     _UxGT("Παύση εκτύπωσης")
-#define MSG_RESUME_PRINT                    _UxGT("Συνέχιση εκτύπωσης")
-#define MSG_STOP_PRINT                      _UxGT("Διακοπή εκτύπωσης")
-#define MSG_MEDIA_MENU                      _UxGT("Εκτύπωση από SD")
-#define MSG_NO_MEDIA                        _UxGT("Δεν βρέθηκε SD")
-#define MSG_DWELL                           _UxGT("Αναστολή λειτουργίας…")
-#define MSG_USERWAIT                        _UxGT("Αναμονή για χρήστη…")
-#define MSG_PRINT_ABORTED                   _UxGT("Διακόπτεται η εκτύπωση")
-#define MSG_NO_MOVE                         _UxGT("Καμία κίνηση.")
-#define MSG_KILLED                          _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ")
-#define MSG_STOPPED                         _UxGT("ΔΙΑΚΟΠΗ. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Ανάσυρση μμ")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Εναλλαγή ανάσυρσης μμ")
-#define MSG_CONTROL_RETRACTF                _UxGT("Ανάσυρση V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Μεταπήδηση μμ")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_AUTORETRACT                     _UxGT("Αυτόματη ανάσυρση")
-#define MSG_FILAMENTCHANGE                  _UxGT("Αλλαγή νήματος")
-#define MSG_INIT_MEDIA                      _UxGT("Προετοιμασία κάρτας SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Αλλαγή κάρτας SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Διερεύνηση Z εκτός κλίνης")
-#define MSG_YX_UNHOMED                      _UxGT("Επαναφορά Χ/Υ πριν από Ζ")
-#define MSG_XYZ_UNHOMED                     _UxGT("Επαναφορά ΧΥΖ πρώτα")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Μετατόπιση Ζ")
-#define MSG_BABYSTEP_X                      _UxGT("Μικρό βήμα Χ")
-#define MSG_BABYSTEP_Y                      _UxGT("Μικρό βήμα Υ")
-#define MSG_BABYSTEP_Z                      _UxGT("Μικρό βήμα Ζ")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Ματαίωση endstop ")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Ανεπιτυχής θέρμανση")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ")
-#define MSG_ERR_MAXTEMP                     _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_ERR_MINTEMP                     _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ")
-#define MSG_HEATING                         _UxGT("Θερμαίνεται…")
-#define MSG_BED_HEATING                     _UxGT("Θέρμανση κλίνης…")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Βαθμονόμηση Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Βαθμονόμηση X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Βαθμονόμηση Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Βαθμονόμηση Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Βαθμονόμηση κέντρου")
+namespace Language_el_gr {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Εσφαλμένος εκτυπωτής")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Greek (Greece)");
+
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" έτοιμο.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Εισαγωγή κάρτας");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Αφαίρεση κάρτας");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Βασική Οθόνη");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Αυτόματη εκκίνηση");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Απενεργοποίηση βηματιστή");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Αρχικό σημείο X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Αρχικό σημείο Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Αρχικό σημείο Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Κάντε κλικ για να ξεκινήσετε");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Επόμενο σημείο");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Ολοκλήρωση επιπεδοποίησης!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Ορισμός βασικών μετατοπίσεων");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Ορισμός προέλευσης");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" κλίνη");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" όλα");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" κλίνη");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" επιβεβαίωση");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Μειωση θερμοκρασιας");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Ενεργοποίηση");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Απενεργοποίηση");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Εξώθηση");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Ανάσυρση");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Μετακίνηση άξονα");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Επιπεδοποίηση κλίνης");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Επιπεδοποίηση κλίνης");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Μετακίνηση X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Μετακίνηση Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Μετακίνηση Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Εξωθητήρας");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Εξωθητήρας ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Εξωθητήρας ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Εξωθητήρας ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Εξωθητήρας ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Εξωθητήρας ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Εξωθητήρας ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Μετακίνηση %s μμ");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Μετακίνηση 0,1 μμ");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Μετακίνηση 1 μμ");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Μετακίνηση 10 μμ");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Ταχύτητα");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Κλίνη Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Ακροφύσιο");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Ακροφύσιο ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Ακροφύσιο ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Ακροφύσιο ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Ακροφύσιο ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Ακροφύσιο ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Ακροφύσιο ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Κλίνη");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ταχύτητα ανεμιστήρα");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Ταχύτητα ανεμιστήρα 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Ταχύτητα ανεμιστήρα 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Ταχύτητα ανεμιστήρα 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Ροή");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Ροή ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Ροή ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Ροή ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Ροή ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Ροή ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Ροή ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Έλεγχος");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Ενεργοποιημένο");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Απενεργοποιημένο");
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Επιτάχυνση");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Vαντίδραση");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("Vαντίδραση ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Vαντίδραση E");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("Vμεγ ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("Vμεγ ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("Vμεγ ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("Vμεγ ") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("Vμεγ ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("Vμεγ ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("Vμεγ ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("Vμεγ ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("Vμεγ ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("Vμεγ ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vελαχ");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vελάχ. μετατόπιση");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accel");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Aμεγ ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Aμεγ ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Aμεγ ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Aμεγ ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Aμεγ ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Aμεγ ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Aμεγ ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Aμεγ ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Aμεγ ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Aμεγ ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Α-ανάσυρση");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Α-μετατόπιση");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Bήματα ανά μμ");
+  PROGMEM Language_Str MSG_A_STEPS                         = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_B_STEPS                         = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_C_STEPS                         = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Bήματα Ε ανά μμ");
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("Bήματα ") LCD_STR_E0 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("Bήματα ") LCD_STR_E1 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("Bήματα ") LCD_STR_E2 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("Bήματα ") LCD_STR_E3 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("Bήματα ") LCD_STR_E4 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("Bήματα ") LCD_STR_E5 _UxGT(" ανά μμ");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Θερμοκρασία");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Κίνηση");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Νήμα");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("Ε σε μμ3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Διάμετρος νήματος");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Διάμετρος νήματος ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Διάμετρος νήματος ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Διάμετρος νήματος ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Διάμετρος νήματος ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Διάμετρος νήματος ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Διάμετρος νήματος ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Οθόνη πληροφόρησης");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Συντονισμός");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Παύση εκτύπωσης");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Συνέχιση εκτύπωσης");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Διακοπή εκτύπωσης");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Εκτύπωση από SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Δεν βρέθηκε SD");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Αναστολή λειτουργίας…");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Αναμονή για χρήστη…");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Διακόπτεται η εκτύπωση");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Καμία κίνηση.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ΔΙΑΚΟΠΗ. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Ανάσυρση μμ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Εναλλαγή ανάσυρσης μμ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Ανάσυρση V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Μεταπήδηση μμ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Αυτόματη ανάσυρση");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Αλλαγή νήματος");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Αλλαγή νήματος ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Αλλαγή νήματος ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Αλλαγή νήματος ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Αλλαγή νήματος ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Αλλαγή νήματος ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Αλλαγή νήματος ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Προετοιμασία κάρτας SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Αλλαγή κάρτας SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Διερεύνηση Z εκτός κλίνης");
+  PROGMEM Language_Str MSG_YX_UNHOMED                      = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");
+  PROGMEM Language_Str MSG_XYZ_UNHOMED                     = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Μετατόπιση Ζ");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Μικρό βήμα Χ");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Μικρό βήμα Υ");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Μικρό βήμα Ζ");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Ματαίωση endstop ");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Ανεπιτυχής θέρμανση");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Θερμαίνεται…");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Θέρμανση κλίνης…");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Βαθμονόμηση Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Βαθμονόμηση X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Βαθμονόμηση Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Βαθμονόμηση Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Βαθμονόμηση κέντρου");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Εσφαλμένος εκτυπωτής");
+}
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 5bd20ec541..2b813cea2a 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -35,1554 +35,675 @@
 #endif
 #undef en
 
-#ifndef THIS_LANGUAGES_SPECIAL_SYMBOLS
-  #define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("³")
-#endif
-
-#ifdef NOT_EXTENDED_ISO10646_1_5X7
-  #define MSG_CUBED                           _UxGT("^3")
-#else
-  #define MSG_CUBED                           _UxGT("³")
-#endif
-
-#ifndef CHARSIZE
-  #define CHARSIZE 1
-#endif
+namespace Language_en {
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("English");
 
-#ifndef WELCOME_MSG
-  #define WELCOME_MSG                         MACHINE_NAME _UxGT(" Ready.")
-#endif
-#ifndef MSG_YES
-  #define MSG_YES                             _UxGT("YES")
-#endif
-#ifndef MSG_NO
-  #define MSG_NO                              _UxGT("NO")
-#endif
-#ifndef MSG_BACK
-  #define MSG_BACK                            _UxGT("Back")
-#endif
-#ifndef MSG_MEDIA_ABORTING
-  #define MSG_MEDIA_ABORTING                  _UxGT("Aborting...")
-#endif
-#ifndef MSG_MEDIA_INSERTED
-  #define MSG_MEDIA_INSERTED                  _UxGT("Media Inserted")
-#endif
-#ifndef MSG_MEDIA_REMOVED
-  #define MSG_MEDIA_REMOVED                   _UxGT("Media Removed")
-#endif
-#ifndef MSG_MEDIA_RELEASED
-  #define MSG_MEDIA_RELEASED                  _UxGT("Media Released")
-#endif
-#ifndef MSG_MEDIA_WAITING
-  #define MSG_MEDIA_WAITING                   _UxGT("Waiting for media")
-#endif
-#ifndef MSG_MEDIA_READ_ERROR
-  #define MSG_MEDIA_READ_ERROR                _UxGT("Media read error")
-#endif
-#ifndef MSG_MEDIA_USB_REMOVED
-  #define MSG_MEDIA_USB_REMOVED               _UxGT("USB device removed")
-#endif
-#ifndef MSG_MEDIA_USB_FAILED
-  #define MSG_MEDIA_USB_FAILED                _UxGT("USB start failed")
-#endif
-#ifndef MSG_LCD_ENDSTOPS
-  #define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#endif
-#ifndef MSG_LCD_SOFT_ENDSTOPS
-  #define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Soft Endstops")
-#endif
-#ifndef MSG_MAIN
-  #define MSG_MAIN                            _UxGT("Main")
-#endif
-#ifndef MSG_ADVANCED_SETTINGS
-  #define MSG_ADVANCED_SETTINGS               _UxGT("Advanced Settings")
-#endif
-#ifndef MSG_CONFIGURATION
-  #define MSG_CONFIGURATION                   _UxGT("Configuration")
-#endif
-#ifndef MSG_AUTOSTART
-  #define MSG_AUTOSTART                       _UxGT("Autostart")
-#endif
-#ifndef MSG_DISABLE_STEPPERS
-  #define MSG_DISABLE_STEPPERS                _UxGT("Disable Steppers")
-#endif
-#ifndef MSG_DEBUG_MENU
-  #define MSG_DEBUG_MENU                      _UxGT("Debug Menu")
-#endif
-#ifndef MSG_PROGRESS_BAR_TEST
-  #define MSG_PROGRESS_BAR_TEST               _UxGT("Progress Bar Test")
-#endif
-#ifndef MSG_AUTO_HOME
-  #define MSG_AUTO_HOME                       _UxGT("Auto Home")
-#endif
-#ifndef MSG_AUTO_HOME_X
-  #define MSG_AUTO_HOME_X                     _UxGT("Home X")
-#endif
-#ifndef MSG_AUTO_HOME_Y
-  #define MSG_AUTO_HOME_Y                     _UxGT("Home Y")
-#endif
-#ifndef MSG_AUTO_HOME_Z
-  #define MSG_AUTO_HOME_Z                     _UxGT("Home Z")
-#endif
-#ifndef MSG_AUTO_Z_ALIGN
-  #define MSG_AUTO_Z_ALIGN                    _UxGT("Auto Z-Align")
-#endif
-#ifndef MSG_LEVEL_BED_HOMING
-  #define MSG_LEVEL_BED_HOMING                _UxGT("Homing XYZ")
-#endif
-#ifndef MSG_LEVEL_BED_WAITING
-  #define MSG_LEVEL_BED_WAITING               _UxGT("Click to Begin")
-#endif
-#ifndef MSG_LEVEL_BED_NEXT_POINT
-  #define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Next Point")
-#endif
-#ifndef MSG_LEVEL_BED_DONE
-  #define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
-#endif
-#ifndef MSG_Z_FADE_HEIGHT
-  #define MSG_Z_FADE_HEIGHT                   _UxGT("Fade Height")
-#endif
-#ifndef MSG_SET_HOME_OFFSETS
-  #define MSG_SET_HOME_OFFSETS                _UxGT("Set Home Offsets")
-#endif
-#ifndef MSG_HOME_OFFSETS_APPLIED
-  #define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets Applied")
-#endif
-#ifndef MSG_SET_ORIGIN
-  #define MSG_SET_ORIGIN                      _UxGT("Set Origin")
-#endif
-#ifndef MSG_PREHEAT_1
-  #define MSG_PREHEAT_1                       _UxGT("Preheat " PREHEAT_1_LABEL)
-#endif
-#ifndef MSG_PREHEAT_1_N
-  #define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#endif
-#ifndef MSG_PREHEAT_1_ALL
-  #define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" All")
-#endif
-#ifndef MSG_PREHEAT_1_END
-  #define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" End")
-#endif
-#ifndef MSG_PREHEAT_1_BEDONLY
-  #define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Bed")
-#endif
-#ifndef MSG_PREHEAT_1_SETTINGS
-  #define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Conf")
-#endif
-#ifndef MSG_PREHEAT_2
-  #define MSG_PREHEAT_2                       _UxGT("Preheat " PREHEAT_2_LABEL)
-#endif
-#ifndef MSG_PREHEAT_2_N
-  #define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#endif
-#ifndef MSG_PREHEAT_2_ALL
-  #define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" All")
-#endif
-#ifndef MSG_PREHEAT_2_END
-  #define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" End")
-#endif
-#ifndef MSG_PREHEAT_2_BEDONLY
-  #define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Bed")
-#endif
-#ifndef MSG_PREHEAT_2_SETTINGS
-  #define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Conf")
-#endif
-#ifndef MSG_PREHEAT_CUSTOM
-  #define MSG_PREHEAT_CUSTOM                  _UxGT("Preheat Custom")
-#endif
-#ifndef MSG_COOLDOWN
-  #define MSG_COOLDOWN                        _UxGT("Cooldown")
-#endif
-#ifndef MSG_LASER_MENU
-  #define MSG_LASER_MENU                      _UxGT("Laser Control")
-#endif
-#ifndef MSG_LASER_OFF
-  #define MSG_LASER_OFF                       _UxGT("Laser Off")
-#endif
-#ifndef MSG_LASER_ON
-  #define MSG_LASER_ON                        _UxGT("Laser On")
-#endif
-#ifndef MSG_LASER_POWER
-  #define MSG_LASER_POWER                     _UxGT("Laser Power")
-#endif
-#ifndef MSG_SPINDLE_MENU
-  #define MSG_SPINDLE_MENU                    _UxGT("Spindle Control")
-#endif
-#ifndef MSG_SPINDLE_OFF
-  #define MSG_SPINDLE_OFF                     _UxGT("Spindle Off")
-#endif
-#ifndef MSG_SPINDLE_ON
-  #define MSG_SPINDLE_ON                      _UxGT("Spindle On")
-#endif
-#ifndef MSG_SPINDLE_POWER
-  #define MSG_SPINDLE_POWER                   _UxGT("Spindle Power")
-#endif
-#ifndef MSG_SPINDLE_REVERSE
-  #define MSG_SPINDLE_REVERSE                 _UxGT("Spindle Reverse")
-#endif
-#ifndef MSG_SWITCH_PS_ON
-  #define MSG_SWITCH_PS_ON                    _UxGT("Switch Power On")
-#endif
-#ifndef MSG_SWITCH_PS_OFF
-  #define MSG_SWITCH_PS_OFF                   _UxGT("Switch Power Off")
-#endif
-#ifndef MSG_EXTRUDE
-  #define MSG_EXTRUDE                         _UxGT("Extrude")
-#endif
-#ifndef MSG_RETRACT
-  #define MSG_RETRACT                         _UxGT("Retract")
-#endif
-#ifndef MSG_MOVE_AXIS
-  #define MSG_MOVE_AXIS                       _UxGT("Move Axis")
-#endif
-#ifndef MSG_BED_LEVELING
-  #define MSG_BED_LEVELING                    _UxGT("Bed Leveling")
-#endif
-#ifndef MSG_LEVEL_BED
-  #define MSG_LEVEL_BED                       _UxGT("Level Bed")
-#endif
-#ifndef MSG_LEVEL_CORNERS
-  #define MSG_LEVEL_CORNERS                   _UxGT("Level Corners")
-#endif
-#ifndef MSG_NEXT_CORNER
-  #define MSG_NEXT_CORNER                     _UxGT("Next Corner")
-#endif
-#ifndef MSG_MESH_EDITOR
-  #define MSG_MESH_EDITOR                     _UxGT("Mesh Editor")
-#endif
-#ifndef MSG_EDIT_MESH
-  #define MSG_EDIT_MESH                       _UxGT("Edit Mesh")
-#endif
-#ifndef MSG_EDITING_STOPPED
-  #define MSG_EDITING_STOPPED                 _UxGT("Mesh Editing Stopped")
-#endif
-#ifndef MSG_PROBING_MESH
-  #define MSG_PROBING_MESH                    _UxGT("Probing Point")
-#endif
-#ifndef MSG_MESH_X
-  #define MSG_MESH_X                          _UxGT("Index X")
-#endif
-#ifndef MSG_MESH_Y
-  #define MSG_MESH_Y                          _UxGT("Index Y")
-#endif
-#ifndef MSG_MESH_EDIT_Z
-  #define MSG_MESH_EDIT_Z                     _UxGT("Z Value")
-#endif
-#ifndef MSG_USER_MENU
-  #define MSG_USER_MENU                       _UxGT("Custom Commands")
-#endif
-#ifndef MSG_M48_TEST
-  #define MSG_M48_TEST                        _UxGT("M48 Probe Test")
-#endif
-#ifndef MSG_M48_POINT
-  #define MSG_M48_POINT                       _UxGT("M48 Point")
-#endif
-#ifndef MSG_M48_DEVIATION
-  #define MSG_M48_DEVIATION                   _UxGT("Deviation")
-#endif
-#ifndef MSG_IDEX_MENU
-  #define MSG_IDEX_MENU                       _UxGT("IDEX Mode")
-#endif
-#ifndef MSG_OFFSETS_MENU
-  #define MSG_OFFSETS_MENU                    _UxGT("Tool Offsets")
-#endif
-#ifndef MSG_IDEX_MODE_AUTOPARK
-  #define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
-#endif
-#ifndef MSG_IDEX_MODE_DUPLICATE
-  #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplication")
-#endif
-#ifndef MSG_IDEX_MODE_MIRRORED_COPY
-  #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Mirrored Copy")
-#endif
-#ifndef MSG_IDEX_MODE_FULL_CTRL
-  #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Full Control")
-#endif
-#ifndef MSG_X_OFFSET
-  #define MSG_X_OFFSET                        _UxGT("2nd Nozzle X")
-#endif
-#ifndef MSG_Y_OFFSET
-  #define MSG_Y_OFFSET                        _UxGT("2nd Nozzle Y")
-#endif
-#ifndef MSG_Z_OFFSET
-  #define MSG_Z_OFFSET                        _UxGT("2nd nNozzle Z")
-#endif
-#ifndef MSG_UBL_DOING_G29
-  #define MSG_UBL_DOING_G29                   _UxGT("Doing G29")
-#endif
-#ifndef MSG_UBL_TOOLS
-  #define MSG_UBL_TOOLS                       _UxGT("UBL Tools")
-#endif
-#ifndef MSG_UBL_LEVEL_BED
-  #define MSG_UBL_LEVEL_BED                   _UxGT("Unified Bed Leveling")
-#endif
-#ifndef MSG_LCD_TILTING_MESH
-  #define MSG_LCD_TILTING_MESH                _UxGT("Tilting Point")
-#endif
-#ifndef MSG_UBL_MANUAL_MESH
-  #define MSG_UBL_MANUAL_MESH                 _UxGT("Manually Build Mesh")
-#endif
-#ifndef MSG_UBL_BC_INSERT
-  #define MSG_UBL_BC_INSERT                   _UxGT("Place Shim & Measure")
-#endif
-#ifndef MSG_UBL_BC_INSERT2
-  #define MSG_UBL_BC_INSERT2                  _UxGT("Measure")
-#endif
-#ifndef MSG_UBL_BC_REMOVE
-  #define MSG_UBL_BC_REMOVE                   _UxGT("Remove & Measure Bed")
-#endif
-#ifndef MSG_UBL_MOVING_TO_NEXT
-  #define MSG_UBL_MOVING_TO_NEXT              _UxGT("Moving to next")
-#endif
-#ifndef MSG_UBL_ACTIVATE_MESH
-  #define MSG_UBL_ACTIVATE_MESH               _UxGT("Activate UBL")
-#endif
-#ifndef MSG_UBL_DEACTIVATE_MESH
-  #define MSG_UBL_DEACTIVATE_MESH             _UxGT("Deactivate UBL")
-#endif
-#ifndef MSG_UBL_SET_TEMP_BED
-  #define MSG_UBL_SET_TEMP_BED                _UxGT("Bed Temp")
-#endif
-#ifndef MSG_UBL_BED_TEMP_CUSTOM
-  #define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#endif
-#ifndef MSG_UBL_SET_TEMP_HOTEND
-  #define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Hotend Temp")
-#endif
-#ifndef MSG_UBL_HOTEND_TEMP_CUSTOM
-  #define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#endif
-#ifndef MSG_UBL_MESH_EDIT
-  #define MSG_UBL_MESH_EDIT                   _UxGT("Mesh Edit")
-#endif
-#ifndef MSG_UBL_EDIT_CUSTOM_MESH
-  #define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Edit Custom Mesh")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_MESH
-  #define MSG_UBL_FINE_TUNE_MESH              _UxGT("Fine Tuning Mesh")
-#endif
-#ifndef MSG_UBL_DONE_EDITING_MESH
-  #define MSG_UBL_DONE_EDITING_MESH           _UxGT("Done Editing Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_CUSTOM_MESH
-  #define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Build Custom Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_MENU
-  #define MSG_UBL_BUILD_MESH_MENU             _UxGT("Build Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_M1
-  #define MSG_UBL_BUILD_MESH_M1               _UxGT("Build Mesh (" PREHEAT_1_LABEL ")")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_M2
-  #define MSG_UBL_BUILD_MESH_M2               _UxGT("Build Mesh (" PREHEAT_2_LABEL ")")
-#endif
-#ifndef MSG_UBL_BUILD_COLD_MESH
-  #define MSG_UBL_BUILD_COLD_MESH             _UxGT("Build Cold Mesh")
-#endif
-#ifndef MSG_UBL_MESH_HEIGHT_ADJUST
-  #define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Adjust Mesh Height")
-#endif
-#ifndef MSG_UBL_MESH_HEIGHT_AMOUNT
-  #define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Height Amount")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_MENU
-  #define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Validate Mesh")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_M1
-  #define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Validate Mesh (" PREHEAT_1_LABEL ")")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_M2
-  #define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Validate Mesh (" PREHEAT_2_LABEL ")")
-#endif
-#ifndef MSG_UBL_VALIDATE_CUSTOM_MESH
-  #define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Validate Custom Mesh")
-#endif
-#ifndef MSG_G26_HEATING_BED
-  #define MSG_G26_HEATING_BED                 _UxGT("G26 Heating Bed")
-#endif
-#ifndef MSG_G26_HEATING_NOZZLE
-  #define MSG_G26_HEATING_NOZZLE              _UxGT("G26 Heating Nozzle")
-#endif
-#ifndef MSG_G26_MANUAL_PRIME
-  #define MSG_G26_MANUAL_PRIME                _UxGT("Manual priming...")
-#endif
-#ifndef MSG_G26_FIXED_LENGTH
-  #define MSG_G26_FIXED_LENGTH                _UxGT("Fixed Length Prime")
-#endif
-#ifndef MSG_G26_PRIME_DONE
-  #define MSG_G26_PRIME_DONE                  _UxGT("Done Priming")
-#endif
-#ifndef MSG_G26_CANCELED
-  #define MSG_G26_CANCELED                    _UxGT("G26 Canceled")
-#endif
-#ifndef MSG_G26_LEAVING
-  #define MSG_G26_LEAVING                     _UxGT("Leaving G26")
-#endif
-#ifndef MSG_UBL_CONTINUE_MESH
-  #define MSG_UBL_CONTINUE_MESH               _UxGT("Continue Bed Mesh")
-#endif
-#ifndef MSG_UBL_MESH_LEVELING
-  #define MSG_UBL_MESH_LEVELING               _UxGT("Mesh Leveling")
-#endif
-#ifndef MSG_UBL_3POINT_MESH_LEVELING
-  #define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3-Point Leveling")
-#endif
-#ifndef MSG_UBL_GRID_MESH_LEVELING
-  #define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Grid Mesh Leveling")
-#endif
-#ifndef MSG_UBL_MESH_LEVEL
-  #define MSG_UBL_MESH_LEVEL                  _UxGT("Level Mesh")
-#endif
-#ifndef MSG_UBL_SIDE_POINTS
-  #define MSG_UBL_SIDE_POINTS                 _UxGT("Side Points")
-#endif
-#ifndef MSG_UBL_MAP_TYPE
-  #define MSG_UBL_MAP_TYPE                    _UxGT("Map Type")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP
-  #define MSG_UBL_OUTPUT_MAP                  _UxGT("Output Mesh Map")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_HOST
-  #define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Output for Host")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_CSV
-  #define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Output for CSV")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_BACKUP
-  #define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Off Printer Backup")
-#endif
-#ifndef MSG_UBL_INFO_UBL
-  #define MSG_UBL_INFO_UBL                    _UxGT("Output UBL Info")
-#endif
-#ifndef MSG_UBL_FILLIN_AMOUNT
-  #define MSG_UBL_FILLIN_AMOUNT               _UxGT("Fill-in Amount")
-#endif
-#ifndef MSG_UBL_MANUAL_FILLIN
-  #define MSG_UBL_MANUAL_FILLIN               _UxGT("Manual Fill-in")
-#endif
-#ifndef MSG_UBL_SMART_FILLIN
-  #define MSG_UBL_SMART_FILLIN                _UxGT("Smart Fill-in")
-#endif
-#ifndef MSG_UBL_FILLIN_MESH
-  #define MSG_UBL_FILLIN_MESH                 _UxGT("Fill-in Mesh")
-#endif
-#ifndef MSG_UBL_INVALIDATE_ALL
-  #define MSG_UBL_INVALIDATE_ALL              _UxGT("Invalidate All")
-#endif
-#ifndef MSG_UBL_INVALIDATE_CLOSEST
-  #define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Invalidate Closest")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_ALL
-  #define MSG_UBL_FINE_TUNE_ALL               _UxGT("Fine Tune All")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_CLOSEST
-  #define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Fine Tune Closest")
-#endif
-#ifndef MSG_UBL_STORAGE_MESH_MENU
-  #define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Mesh Storage")
-#endif
-#ifndef MSG_UBL_STORAGE_SLOT
-  #define MSG_UBL_STORAGE_SLOT                _UxGT("Memory Slot")
-#endif
-#ifndef MSG_UBL_LOAD_MESH
-  #define MSG_UBL_LOAD_MESH                   _UxGT("Load Bed Mesh")
-#endif
-#ifndef MSG_UBL_SAVE_MESH
-  #define MSG_UBL_SAVE_MESH                   _UxGT("Save Bed Mesh")
-#endif
-#ifndef MSG_MESH_LOADED
-  #define MSG_MESH_LOADED                     _UxGT("Mesh %i Loaded")
-#endif
-#ifndef MSG_MESH_SAVED
-  #define MSG_MESH_SAVED                      _UxGT("Mesh %i Saved")
-#endif
-#ifndef MSG_UBL_NO_STORAGE
-  #define MSG_UBL_NO_STORAGE                  _UxGT("No Storage")
-#endif
-#ifndef MSG_UBL_SAVE_ERROR
-  #define MSG_UBL_SAVE_ERROR                  _UxGT("Err: UBL Save")
-#endif
-#ifndef MSG_UBL_RESTORE_ERROR
-  #define MSG_UBL_RESTORE_ERROR               _UxGT("Err: UBL Restore")
-#endif
-#ifndef MSG_UBL_Z_OFFSET
-  #define MSG_UBL_Z_OFFSET                    _UxGT("Z-Offset: ")
-#endif
-#ifndef MSG_UBL_Z_OFFSET_STOPPED
-  #define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z-Offset Stopped")
-#endif
-#ifndef MSG_UBL_STEP_BY_STEP_MENU
-  #define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Step-By-Step UBL")
-#endif
+  #ifdef NOT_EXTENDED_ISO10646_1_5X7
+    PROGMEM Language_Str MSG_CUBED                         = _UxGT("^3");
+  #else
+    PROGMEM Language_Str MSG_CUBED                         = _UxGT("³");
+  #endif
 
-#ifndef MSG_LED_CONTROL
-  #define MSG_LED_CONTROL                     _UxGT("LED Control")
-#endif
-#ifndef MSG_LEDS
-  #define MSG_LEDS                            _UxGT("Lights")
-#endif
-#ifndef MSG_LED_PRESETS
-  #define MSG_LED_PRESETS                     _UxGT("Light Presets")
-#endif
-#ifndef MSG_SET_LEDS_RED
-  #define MSG_SET_LEDS_RED                    _UxGT("Red")
-#endif
-#ifndef MSG_SET_LEDS_ORANGE
-  #define MSG_SET_LEDS_ORANGE                 _UxGT("Orange")
-#endif
-#ifndef MSG_SET_LEDS_YELLOW
-  #define MSG_SET_LEDS_YELLOW                 _UxGT("Yellow")
-#endif
-#ifndef MSG_SET_LEDS_GREEN
-  #define MSG_SET_LEDS_GREEN                  _UxGT("Green")
-#endif
-#ifndef MSG_SET_LEDS_BLUE
-  #define MSG_SET_LEDS_BLUE                   _UxGT("Blue")
-#endif
-#ifndef MSG_SET_LEDS_INDIGO
-  #define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#endif
-#ifndef MSG_SET_LEDS_VIOLET
-  #define MSG_SET_LEDS_VIOLET                 _UxGT("Violet")
-#endif
-#ifndef MSG_SET_LEDS_WHITE
-  #define MSG_SET_LEDS_WHITE                  _UxGT("White")
-#endif
-#ifndef MSG_SET_LEDS_DEFAULT
-  #define MSG_SET_LEDS_DEFAULT                _UxGT("Default")
-#endif
-#ifndef MSG_CUSTOM_LEDS
-  #define MSG_CUSTOM_LEDS                     _UxGT("Custom Lights")
-#endif
-#ifndef MSG_INTENSITY_R
-  #define MSG_INTENSITY_R                     _UxGT("Red Intensity")
-#endif
-#ifndef MSG_INTENSITY_G
-  #define MSG_INTENSITY_G                     _UxGT("Green Intensity")
-#endif
-#ifndef MSG_INTENSITY_B
-  #define MSG_INTENSITY_B                     _UxGT("Blue Intensity")
-#endif
-#ifndef MSG_INTENSITY_W
-  #define MSG_INTENSITY_W                     _UxGT("White Intensity")
-#endif
-#ifndef MSG_LED_BRIGHTNESS
-  #define MSG_LED_BRIGHTNESS                  _UxGT("Brightness")
-#endif
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" Ready.");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("YES");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NO");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Back");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Aborting...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Media Inserted");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Media Removed");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("Media Released");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Waiting for media");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Media read error");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("USB device removed");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("USB start failed");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Soft Endstops");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Main");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Advanced Settings");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Configuration");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Disable Steppers");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Debug Menu");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Progress Bar Test");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Auto Home");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Home X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Home Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Home Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto Z-Align");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Homing XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Click to Begin");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Next Point");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Leveling Done!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Fade Height");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Set Home Offsets");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offsets Applied");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Set Origin");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Preheat ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Preheat ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" All");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Preheat Custom");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Cooldown");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Laser Control");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Laser Off");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Laser On");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Laser Power");
+  PROGMEM Language_Str MSG_SPINDLE_MENU                    = _UxGT("Spindle Control");
+  PROGMEM Language_Str MSG_SPINDLE_OFF                     = _UxGT("Spindle Off");
+  PROGMEM Language_Str MSG_SPINDLE_ON                      = _UxGT("Spindle On");
+  PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindle Power");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spindle Reverse");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Switch Power On");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Switch Power Off");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrude");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retract");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Move Axis");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Bed Leveling");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Level Bed");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Level Corners");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Next Corner");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Mesh Editor");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Edit Mesh");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Mesh Editing Stopped");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Probing Point");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Index X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Index Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Z Value");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Custom Commands");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("M48 Probe Test");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("M48 Point");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Deviation");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("IDEX Mode");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Tool Offsets");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Park");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplication");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Mirrored Copy");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Full Control");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2nd Nozzle X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2nd Nozzle Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2nd Nozzle Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Doing G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL Tools");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Tilting Point");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Manually Build Mesh");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Place Shim & Measure");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Measure");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Remove & Measure Bed");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Moving to next");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Activate UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Deactivate UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Mesh Edit");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Edit Custom Mesh");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Fine Tuning Mesh");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Done Editing Mesh");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Build Custom Mesh");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Build Mesh");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Build Mesh (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Build Mesh (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Build Cold Mesh");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Adjust Mesh Height");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Height Amount");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Validate Mesh");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Validate Mesh (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Validate Mesh (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Validate Custom Mesh");
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 Heating Bed");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 Heating Nozzle");
+  PROGMEM Language_Str MSG_G26_MANUAL_PRIME                = _UxGT("Manual priming...");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Fixed Length Prime");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Done Priming");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 Canceled");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("Leaving G26");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Continue Bed Mesh");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Mesh Leveling");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3-Point Leveling");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Grid Mesh Leveling");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Level Mesh");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Side Points");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Map Type");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Output Mesh Map");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Output for Host");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Output for CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Off Printer Backup");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Output UBL Info");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Fill-in Amount");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Manual Fill-in");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Smart Fill-in");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Fill-in Mesh");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Invalidate All");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Invalidate Closest");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Fine Tune All");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Fine Tune Closest");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Mesh Storage");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Memory Slot");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Load Bed Mesh");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Save Bed Mesh");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i Loaded");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i Saved");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("No Storage");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: UBL Save");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: UBL Restore");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Z-Offset: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z-Offset Stopped");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Step-By-Step UBL");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1. Build Cold Mesh");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2. Smart Fill-in");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3. Validate Mesh");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4. Fine Tune All");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5. Validate Mesh");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6. Fine Tune All");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7. Save Bed Mesh");
 
-#ifndef MSG_MOVING
-  #define MSG_MOVING                          _UxGT("Moving...")
-#endif
-#ifndef MSG_FREE_XY
-  #define MSG_FREE_XY                         _UxGT("Free XY")
-#endif
-#ifndef MSG_MOVE_X
-  #define MSG_MOVE_X                          _UxGT("Move X")
-#endif
-#ifndef MSG_MOVE_Y
-  #define MSG_MOVE_Y                          _UxGT("Move Y")
-#endif
-#ifndef MSG_MOVE_Z
-  #define MSG_MOVE_Z                          _UxGT("Move Z")
-#endif
-#ifndef MSG_MOVE_E
-  #define MSG_MOVE_E                          _UxGT("Extruder")
-#endif
-#ifndef MSG_HOTEND_TOO_COLD
-  #define MSG_HOTEND_TOO_COLD                 _UxGT("Hotend too cold")
-#endif
-#ifndef MSG_MOVE_Z_DIST
-  #define MSG_MOVE_Z_DIST                     _UxGT("Move %smm")
-#endif
-#ifndef MSG_MOVE_01MM
-  #define MSG_MOVE_01MM                       _UxGT("Move 0.1mm")
-#endif
-#ifndef MSG_MOVE_1MM
-  #define MSG_MOVE_1MM                        _UxGT("Move 1mm")
-#endif
-#ifndef MSG_MOVE_10MM
-  #define MSG_MOVE_10MM                       _UxGT("Move 10mm")
-#endif
-#ifndef MSG_SPEED
-  #define MSG_SPEED                           _UxGT("Speed")
-#endif
-#ifndef MSG_BED_Z
-  #define MSG_BED_Z                           _UxGT("Bed Z")
-#endif
-#ifndef MSG_NOZZLE
-  #define MSG_NOZZLE                          _UxGT("Nozzle")
-#endif
-#ifndef MSG_BED
-  #define MSG_BED                             _UxGT("Bed")
-#endif
-#ifndef MSG_CHAMBER
-  #define MSG_CHAMBER                         _UxGT("Enclosure")
-#endif
-#ifndef MSG_FAN_SPEED
-  #define MSG_FAN_SPEED                       _UxGT("Fan Speed")
-#endif
-#ifndef MSG_EXTRA_FAN_SPEED
-  #define MSG_EXTRA_FAN_SPEED                 _UxGT("Extra Fan Speed")
-#endif
-#ifndef MSG_FLOW
-  #define MSG_FLOW                            _UxGT("Flow")
-#endif
-#ifndef MSG_CONTROL
-  #define MSG_CONTROL                         _UxGT("Control")
-#endif
-#ifndef MSG_MIN
-  #define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#endif
-#ifndef MSG_MAX
-  #define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#endif
-#ifndef MSG_FACTOR
-  #define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#endif
-#ifndef MSG_AUTOTEMP
-  #define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#endif
-#ifndef MSG_LCD_ON
-  #define MSG_LCD_ON                          _UxGT("On")
-#endif
-#ifndef MSG_LCD_OFF
-  #define MSG_LCD_OFF                         _UxGT("Off")
-#endif
-#ifndef MSG_PID_P
-  #define MSG_PID_P                           _UxGT("PID-P")
-#endif
-#ifndef MSG_PID_I
-  #define MSG_PID_I                           _UxGT("PID-I")
-#endif
-#ifndef MSG_PID_D
-  #define MSG_PID_D                           _UxGT("PID-D")
-#endif
-#ifndef MSG_PID_C
-  #define MSG_PID_C                           _UxGT("PID-C")
-#endif
-#ifndef MSG_SELECT
-  #define MSG_SELECT                          _UxGT("Select")
-#endif
-#ifndef MSG_ACC
-  #define MSG_ACC                             _UxGT("Accel")
-#endif
-#ifndef MSG_JERK
-  #define MSG_JERK                            _UxGT("Jerk")
-#endif
-#if IS_KINEMATIC
-  #ifndef MSG_VA_JERK
-    #define MSG_VA_JERK                       _UxGT("Va-Jerk")
-  #endif
-  #ifndef MSG_VB_JERK
-    #define MSG_VB_JERK                       _UxGT("Vb-Jerk")
-  #endif
-  #ifndef MSG_VC_JERK
-    #define MSG_VC_JERK                       _UxGT("Vc-Jerk")
-  #endif
-#else
-  #ifndef MSG_VA_JERK
-    #define MSG_VA_JERK                       _UxGT("Vx-Jerk")
-  #endif
-  #ifndef MSG_VB_JERK
-    #define MSG_VB_JERK                       _UxGT("Vy-Jerk")
-  #endif
-  #ifndef MSG_VC_JERK
-    #define MSG_VC_JERK                       _UxGT("Vz-Jerk")
-  #endif
-#endif
-#ifndef MSG_VE_JERK
-  #define MSG_VE_JERK                         _UxGT("Ve-Jerk")
-#endif
-#ifndef MSG_JUNCTION_DEVIATION
-  #define MSG_JUNCTION_DEVIATION              _UxGT("Junction Dev")
-#endif
-#ifndef MSG_VELOCITY
-  #define MSG_VELOCITY                        _UxGT("Velocity")
-#endif
-#ifndef MSG_VMAX
-  #define MSG_VMAX                            _UxGT("Vmax ")
-#endif
-#ifndef MSG_VMIN
-  #define MSG_VMIN                            _UxGT("Vmin")
-#endif
-#ifndef MSG_VTRAV_MIN
-  #define MSG_VTRAV_MIN                       _UxGT("VTrav Min")
-#endif
-#ifndef MSG_ACCELERATION
-  #define MSG_ACCELERATION                    _UxGT("Acceleration")
-#endif
-#ifndef MSG_AMAX
-  #define MSG_AMAX                            _UxGT("Amax ")
-#endif
-#ifndef MSG_A_RETRACT
-  #define MSG_A_RETRACT                       _UxGT("A-Retract")
-#endif
-#ifndef MSG_A_TRAVEL
-  #define MSG_A_TRAVEL                        _UxGT("A-Travel")
-#endif
-#ifndef MSG_STEPS_PER_MM
-  #define MSG_STEPS_PER_MM                    _UxGT("Steps/mm")
-#endif
-#if IS_KINEMATIC
-  #ifndef MSG_ASTEPS
-    #define MSG_ASTEPS                        _UxGT("Asteps/mm")
-  #endif
-  #ifndef MSG_BSTEPS
-    #define MSG_BSTEPS                        _UxGT("Bsteps/mm")
-  #endif
-  #ifndef MSG_CSTEPS
-    #define MSG_CSTEPS                        _UxGT("Csteps/mm")
-  #endif
-#else
-  #ifndef MSG_ASTEPS
-    #define MSG_ASTEPS                        _UxGT("Xsteps/mm")
-  #endif
-  #ifndef MSG_BSTEPS
-    #define MSG_BSTEPS                        _UxGT("Ysteps/mm")
-  #endif
-  #ifndef MSG_CSTEPS
-    #define MSG_CSTEPS                        _UxGT("Zsteps/mm")
-  #endif
-#endif
-#ifndef MSG_ESTEPS
-  #define MSG_ESTEPS                          _UxGT("Esteps/mm")
-#endif
-#ifndef MSG_E0_STEPS
-  #define MSG_E0_STEPS                        _UxGT("E1steps/mm")
-#endif
-#ifndef MSG_E1_STEPS
-  #define MSG_E1_STEPS                        _UxGT("E2steps/mm")
-#endif
-#ifndef MSG_E2_STEPS
-  #define MSG_E2_STEPS                        _UxGT("E3steps/mm")
-#endif
-#ifndef MSG_E3_STEPS
-  #define MSG_E3_STEPS                        _UxGT("E4steps/mm")
-#endif
-#ifndef MSG_E4_STEPS
-  #define MSG_E4_STEPS                        _UxGT("E5steps/mm")
-#endif
-#ifndef MSG_E5_STEPS
-  #define MSG_E5_STEPS                        _UxGT("E6steps/mm")
-#endif
-#ifndef MSG_TEMPERATURE
-  #define MSG_TEMPERATURE                     _UxGT("Temperature")
-#endif
-#ifndef MSG_MOTION
-  #define MSG_MOTION                          _UxGT("Motion")
-#endif
-#ifndef MSG_FILAMENT
-  #define MSG_FILAMENT                        _UxGT("Filament")
-#endif
-#ifndef MSG_VOLUMETRIC_ENABLED
-  #define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm") MSG_CUBED
-#endif
-#ifndef MSG_FILAMENT_DIAM
-  #define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#endif
-#ifndef MSG_FILAMENT_UNLOAD
-  #define MSG_FILAMENT_UNLOAD                 _UxGT("Unload mm")
-#endif
-#ifndef MSG_FILAMENT_LOAD
-  #define MSG_FILAMENT_LOAD                   _UxGT("Load mm")
-#endif
-#ifndef MSG_ADVANCE_K
-  #define MSG_ADVANCE_K                       _UxGT("Advance K")
-#endif
-#ifndef MSG_CONTRAST
-  #define MSG_CONTRAST                        _UxGT("LCD Contrast")
-#endif
-#ifndef MSG_STORE_EEPROM
-  #define MSG_STORE_EEPROM                    _UxGT("Store Settings")
-#endif
-#ifndef MSG_LOAD_EEPROM
-  #define MSG_LOAD_EEPROM                     _UxGT("Load Settings")
-#endif
-#ifndef MSG_RESTORE_FAILSAFE
-  #define MSG_RESTORE_FAILSAFE                _UxGT("Restore failsafe")
-#endif
-#ifndef MSG_INIT_EEPROM
-  #define MSG_INIT_EEPROM                     _UxGT("Initialize EEPROM")
-#endif
-#ifndef MSG_MEDIA_UPDATE
-  #define MSG_MEDIA_UPDATE                    _UxGT("Media Update")
-#endif
-#ifndef MSG_RESET_PRINTER
-  #define MSG_RESET_PRINTER                   _UxGT("Reset Printer")
-#endif
-#ifndef MSG_REFRESH
-  #define MSG_REFRESH                         _UxGT("Refresh")
-#endif
-#ifndef MSG_WATCH
-  #define MSG_WATCH                           _UxGT("Info Screen")
-#endif
-#ifndef MSG_PREPARE
-  #define MSG_PREPARE                         _UxGT("Prepare")
-#endif
-#ifndef MSG_TUNE
-  #define MSG_TUNE                            _UxGT("Tune")
-#endif
-#ifndef MSG_START_PRINT
-  #define MSG_START_PRINT                     _UxGT("Start Print")
-#endif
-#ifndef MSG_BUTTON_NEXT
-  #define MSG_BUTTON_NEXT                     _UxGT("Next")
-#endif
-#ifndef MSG_BUTTON_INIT
-  #define MSG_BUTTON_INIT                     _UxGT("Init")
-#endif
-#ifndef MSG_BUTTON_STOP
-  #define MSG_BUTTON_STOP                     _UxGT("Stop")
-#endif
-#ifndef MSG_BUTTON_PRINT
-  #define MSG_BUTTON_PRINT                    _UxGT("Print")
-#endif
-#ifndef MSG_BUTTON_RESET
-  #define MSG_BUTTON_RESET                    _UxGT("Reset")
-#endif
-#ifndef MSG_BUTTON_CANCEL
-  #define MSG_BUTTON_CANCEL                   _UxGT("Cancel")
-#endif
-#ifndef MSG_BUTTON_DONE
-  #define MSG_BUTTON_DONE                     _UxGT("Done")
-#endif
-#ifndef MSG_PAUSE_PRINT
-  #define MSG_PAUSE_PRINT                     _UxGT("Pause Print")
-#endif
-#ifndef MSG_RESUME_PRINT
-  #define MSG_RESUME_PRINT                    _UxGT("Resume Print")
-#endif
-#ifndef MSG_STOP_PRINT
-  #define MSG_STOP_PRINT                      _UxGT("Stop Print")
-#endif
-#ifndef MSG_OUTAGE_RECOVERY
-  #define MSG_OUTAGE_RECOVERY                 _UxGT("Outage Recovery")
-#endif
-#ifndef MSG_MEDIA_MENU
-  #define MSG_MEDIA_MENU                      _UxGT("Print from Media")
-#endif
-#ifndef MSG_NO_MEDIA
-  #define MSG_NO_MEDIA                        _UxGT("No Media")
-#endif
-#ifndef MSG_DWELL
-  #define MSG_DWELL                           _UxGT("Sleep...")
-#endif
-#ifndef MSG_USERWAIT
-  #define MSG_USERWAIT                        _UxGT("Click to Resume...")
-#endif
-#ifndef MSG_PRINT_PAUSED
-  #define MSG_PRINT_PAUSED                    _UxGT("Print Paused")
-#endif
-#ifndef MSG_PRINTING
-  #define MSG_PRINTING                        _UxGT("Printing...")
-#endif
-#ifndef MSG_PRINT_ABORTED
-  #define MSG_PRINT_ABORTED                   _UxGT("Print Aborted")
-#endif
-#ifndef MSG_NO_MOVE
-  #define MSG_NO_MOVE                         _UxGT("No Move.")
-#endif
-#ifndef MSG_KILLED
-  #define MSG_KILLED                          _UxGT("KILLED. ")
-#endif
-#ifndef MSG_STOPPED
-  #define MSG_STOPPED                         _UxGT("STOPPED. ")
-#endif
-#ifndef MSG_CONTROL_RETRACT
-  #define MSG_CONTROL_RETRACT                 _UxGT("Retract mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_SWAP
-  #define MSG_CONTROL_RETRACT_SWAP            _UxGT("Swap Re.mm")
-#endif
-#ifndef MSG_CONTROL_RETRACTF
-  #define MSG_CONTROL_RETRACTF                _UxGT("Retract  V")
-#endif
-#ifndef MSG_CONTROL_RETRACT_ZHOP
-  #define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Hop mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER
-  #define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER_SWAP
-  #define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVERF
-  #define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet V")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER_SWAPF
-  #define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#endif
-#ifndef MSG_AUTORETRACT
-  #define MSG_AUTORETRACT                     _UxGT("AutoRetr.")
-#endif
-#ifndef MSG_FILAMENT_SWAP_LENGTH
-  #define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Swap Length")
-#endif
-#ifndef MSG_FILAMENT_PURGE_LENGTH
-  #define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Purge Length")
-#endif
-#ifndef MSG_TOOL_CHANGE
-  #define MSG_TOOL_CHANGE                     _UxGT("Tool Change")
-#endif
-#ifndef MSG_TOOL_CHANGE_ZLIFT
-  #define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Z Raise")
-#endif
-#ifndef MSG_SINGLENOZZLE_PRIME_SPD
-  #define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Prime Speed")
-#endif
-#ifndef MSG_SINGLENOZZLE_RETRACT_SPD
-  #define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Retract Speed")
-#endif
-#ifndef MSG_NOZZLE_STANDBY
-  #define MSG_NOZZLE_STANDBY                  _UxGT("Nozzle Standby")
-#endif
-#ifndef MSG_FILAMENTCHANGE
-  #define MSG_FILAMENTCHANGE                  _UxGT("Change Filament")
-#endif
-#ifndef MSG_FILAMENTLOAD
-  #define MSG_FILAMENTLOAD                    _UxGT("Load Filament")
-#endif
-#ifndef MSG_FILAMENTUNLOAD
-  #define MSG_FILAMENTUNLOAD                  _UxGT("Unload Filament")
-#endif
-#ifndef MSG_FILAMENTUNLOAD_ALL
-  #define MSG_FILAMENTUNLOAD_ALL              _UxGT("Unload All")
-#endif
-#ifndef MSG_INIT_MEDIA
-  #define MSG_INIT_MEDIA                      _UxGT("Init. Media")
-#endif
-#ifndef MSG_CHANGE_MEDIA
-  #define MSG_CHANGE_MEDIA                    _UxGT("Change Media")
-#endif
-#ifndef MSG_RELEASE_MEDIA
-  #define MSG_RELEASE_MEDIA                   _UxGT("Release Media")
-#endif
-#ifndef MSG_ZPROBE_OUT
-  #define MSG_ZPROBE_OUT                      _UxGT("Z Probe Past Bed")
-#endif
-#ifndef MSG_SKEW_FACTOR
-  #define MSG_SKEW_FACTOR                     _UxGT("Skew Factor")
-#endif
-#ifndef MSG_BLTOUCH
-  #define MSG_BLTOUCH                         _UxGT("BLTouch")
-#endif
-#ifndef MSG_BLTOUCH_SELFTEST
-  #define MSG_BLTOUCH_SELFTEST                _UxGT("Cmd: Self-Test")
-#endif
-#ifndef MSG_BLTOUCH_RESET
-  #define MSG_BLTOUCH_RESET                   _UxGT("Cmd: Reset")
-#endif
-#ifndef MSG_BLTOUCH_STOW
-  #define MSG_BLTOUCH_STOW                    _UxGT("Cmd: Stow")
-#endif
-#ifndef MSG_BLTOUCH_DEPLOY
-  #define MSG_BLTOUCH_DEPLOY                  _UxGT("Cmd: Deploy")
-#endif
-#ifndef MSG_BLTOUCH_SW_MODE
-  #define MSG_BLTOUCH_SW_MODE                 _UxGT("Cmd: SW-Mode")
-#endif
-#ifndef MSG_BLTOUCH_5V_MODE
-  #define MSG_BLTOUCH_5V_MODE                 _UxGT("Cmd: 5V-Mode")
-#endif
-#ifndef MSG_BLTOUCH_OD_MODE
-  #define MSG_BLTOUCH_OD_MODE                 _UxGT("Cmd: OD-Mode")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE
-  #define MSG_BLTOUCH_MODE_STORE              _UxGT("Cmd: Mode-Store")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE_5V
-  #define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("Set BLTouch to 5V")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE_OD
-  #define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("Set BLTouch to OD")
-#endif
-#ifndef MSG_BLTOUCH_MODE_ECHO
-  #define MSG_BLTOUCH_MODE_ECHO               _UxGT("Report Drain")
-#endif
-#ifndef MSG_BLTOUCH_MODE_CHANGE
-  #define MSG_BLTOUCH_MODE_CHANGE             _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?")
-#endif
-#ifndef MSG_TOUCHMI_PROBE
-  #define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#endif
-#ifndef MSG_TOUCHMI_INIT
-  #define MSG_TOUCHMI_INIT                    _UxGT("Init TouchMI")
-#endif
-#ifndef MSG_TOUCHMI_ZTEST
-  #define MSG_TOUCHMI_ZTEST                   _UxGT("Z Offset Test")
-#endif
-#ifndef MSG_TOUCHMI_SAVE
-  #define MSG_TOUCHMI_SAVE                    _UxGT("Save")
-#endif
-#ifndef MSG_MANUAL_DEPLOY_TOUCHMI
-  #define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("Deploy TouchMI")
-#endif
-#ifndef MSG_MANUAL_DEPLOY
-  #define MSG_MANUAL_DEPLOY                   _UxGT("Deploy Z-Probe")
-#endif
-#ifndef MSG_MANUAL_STOW
-  #define MSG_MANUAL_STOW                     _UxGT("Stow Z-Probe")
-#endif
-#ifndef MSG_HOME_FIRST
-  #define MSG_HOME_FIRST                      _UxGT("Home %s%s%s First")
-#endif
-#ifndef MSG_ZPROBE_ZOFFSET
-  #define MSG_ZPROBE_ZOFFSET                  _UxGT("Probe Z Offset")
-#endif
-#ifndef MSG_BABYSTEP_X
-  #define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#endif
-#ifndef MSG_BABYSTEP_Y
-  #define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#endif
-#ifndef MSG_BABYSTEP_Z
-  #define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#endif
-#ifndef MSG_BABYSTEP_TOTAL
-  #define MSG_BABYSTEP_TOTAL                  _UxGT("Total")
-#endif
-#ifndef MSG_ENDSTOP_ABORT
-  #define MSG_ENDSTOP_ABORT                   _UxGT("Endstop Abort")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD
-  #define MSG_HEATING_FAILED_LCD              _UxGT("Heating Failed")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD_BED
-  #define MSG_HEATING_FAILED_LCD_BED          _UxGT("Bed Heating Failed")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD_CHAMBER
-  #define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Chamber Heating Fail")
-#endif
-#ifndef MSG_ERR_REDUNDANT_TEMP
-  #define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: REDUNDANT TEMP")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY
-  #define MSG_THERMAL_RUNAWAY                 _UxGT("THERMAL RUNAWAY")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY_BED
-  #define MSG_THERMAL_RUNAWAY_BED             _UxGT("BED THERMAL RUNAWAY")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY_CHAMBER
-  #define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("CHAMBER T. RUNAWAY")
-#endif
-#ifndef MSG_ERR_MAXTEMP
-  #define MSG_ERR_MAXTEMP                     _UxGT("Err: MAXTEMP")
-#endif
-#ifndef MSG_ERR_MINTEMP
-  #define MSG_ERR_MINTEMP                     _UxGT("Err: MINTEMP")
-#endif
-#ifndef MSG_ERR_MAXTEMP_BED
-  #define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: MAXTEMP BED")
-#endif
-#ifndef MSG_ERR_MINTEMP_BED
-  #define MSG_ERR_MINTEMP_BED                 _UxGT("Err: MINTEMP BED")
-#endif
-#ifndef MSG_ERR_MAXTEMP_CHAMBER
-  #define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err: MAXTEMP CHAMBER")
-#endif
-#ifndef MSG_ERR_MINTEMP_CHAMBER
-  #define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err: MINTEMP CHAMBER")
-#endif
-#ifndef MSG_ERR_Z_HOMING
-  #define MSG_ERR_Z_HOMING                    _UxGT("Home XY First")
-#endif
-#ifndef MSG_HALTED
-  #define MSG_HALTED                          _UxGT("PRINTER HALTED")
-#endif
-#ifndef MSG_PLEASE_RESET
-  #define MSG_PLEASE_RESET                    _UxGT("Please Reset")
-#endif
-#ifndef MSG_SHORT_DAY
-  #define MSG_SHORT_DAY                       _UxGT("d") // One character only
-#endif
-#ifndef MSG_SHORT_HOUR
-  #define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#endif
-#ifndef MSG_SHORT_MINUTE
-  #define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#endif
-#ifndef MSG_HEATING
-  #define MSG_HEATING                         _UxGT("Heating...")
-#endif
-#ifndef MSG_COOLING
-  #define MSG_COOLING                         _UxGT("Cooling...")
-#endif
-#ifndef MSG_BED_HEATING
-  #define MSG_BED_HEATING                     _UxGT("Bed Heating...")
-#endif
-#ifndef MSG_BED_COOLING
-  #define MSG_BED_COOLING                     _UxGT("Bed Cooling...")
-#endif
-#ifndef MSG_CHAMBER_HEATING
-  #define MSG_CHAMBER_HEATING                 _UxGT("Chamber Heating...")
-#endif
-#ifndef MSG_CHAMBER_COOLING
-  #define MSG_CHAMBER_COOLING                 _UxGT("Chamber Cooling...")
-#endif
-#ifndef MSG_DELTA_CALIBRATE
-  #define MSG_DELTA_CALIBRATE                 _UxGT("Delta Calibration")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_X
-  #define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrate X")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_Y
-  #define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrate Y")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_Z
-  #define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrate Z")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_CENTER
-  #define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrate Center")
-#endif
-#ifndef MSG_DELTA_SETTINGS
-  #define MSG_DELTA_SETTINGS                  _UxGT("Delta Settings")
-#endif
-#ifndef MSG_DELTA_AUTO_CALIBRATE
-  #define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto Calibration")
-#endif
-#ifndef MSG_DELTA_HEIGHT_CALIBRATE
-  #define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Set Delta Height")
-#endif
-#ifndef MSG_DELTA_Z_OFFSET_CALIBRATE
-  #define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Probe Z-offset")
-#endif
-#ifndef MSG_DELTA_DIAG_ROD
-  #define MSG_DELTA_DIAG_ROD                  _UxGT("Diag Rod")
-#endif
-#ifndef MSG_DELTA_HEIGHT
-  #define MSG_DELTA_HEIGHT                    _UxGT("Height")
-#endif
-#ifndef MSG_DELTA_RADIUS
-  #define MSG_DELTA_RADIUS                    _UxGT("Radius")
-#endif
-#ifndef MSG_INFO_MENU
-  #define MSG_INFO_MENU                       _UxGT("About Printer")
-#endif
-#ifndef MSG_INFO_PRINTER_MENU
-  #define MSG_INFO_PRINTER_MENU               _UxGT("Printer Info")
-#endif
-#ifndef MSG_3POINT_LEVELING
-  #define MSG_3POINT_LEVELING                 _UxGT("3-Point Leveling")
-#endif
-#ifndef MSG_LINEAR_LEVELING
-  #define MSG_LINEAR_LEVELING                 _UxGT("Linear Leveling")
-#endif
-#ifndef MSG_BILINEAR_LEVELING
-  #define MSG_BILINEAR_LEVELING               _UxGT("Bilinear Leveling")
-#endif
-#ifndef MSG_UBL_LEVELING
-  #define MSG_UBL_LEVELING                    _UxGT("Unified Bed Leveling")
-#endif
-#ifndef MSG_MESH_LEVELING
-  #define MSG_MESH_LEVELING                   _UxGT("Mesh Leveling")
-#endif
-#ifndef MSG_INFO_STATS_MENU
-  #define MSG_INFO_STATS_MENU                 _UxGT("Printer Stats")
-#endif
-#ifndef MSG_INFO_BOARD_MENU
-  #define MSG_INFO_BOARD_MENU                 _UxGT("Board Info")
-#endif
-#ifndef MSG_INFO_THERMISTOR_MENU
-  #define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistors")
-#endif
-#ifndef MSG_INFO_EXTRUDERS
-  #define MSG_INFO_EXTRUDERS                  _UxGT("Extruders")
-#endif
-#ifndef MSG_INFO_BAUDRATE
-  #define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#endif
-#ifndef MSG_INFO_PROTOCOL
-  #define MSG_INFO_PROTOCOL                   _UxGT("Protocol")
-#endif
-#ifndef MSG_INFO_RUNAWAY_OFF
-  #define MSG_INFO_RUNAWAY_OFF                _UxGT("Runaway Watch: OFF")
-#endif
-#ifndef MSG_INFO_RUNAWAY_ON
-  #define MSG_INFO_RUNAWAY_ON                 _UxGT("Runaway Watch: ON")
-#endif
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("LED Control");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Lights");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Light Presets");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Red");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Orange");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Yellow");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Green");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Blue");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Violet");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("White");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Default");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Custom Lights");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Red Intensity");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Green Intensity");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Blue Intensity");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("White Intensity");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Brightness");
 
-#ifndef MSG_CASE_LIGHT
-  #define MSG_CASE_LIGHT                      _UxGT("Case Light")
-#endif
-#ifndef MSG_CASE_LIGHT_BRIGHTNESS
-  #define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Light Brightness")
-#endif
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Moving...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Free XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Move X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Move Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Move Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extruder");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extruder ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extruder ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extruder ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extruder ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extruder ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extruder ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Hotend too cold");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Move %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Move 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Move 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Move 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Speed");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Bed Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Nozzle");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Nozzle ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Nozzle ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Nozzle ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Nozzle ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Nozzle ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Nozzle ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Bed");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Enclosure");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan Speed");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Fan Speed 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Fan Speed 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Fan Speed 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra Fan Speed");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Extra Fan Speed 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Extra Fan Speed 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Extra Fan Speed 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flow");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flow ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flow ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flow ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flow ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flow ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flow ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autotemp");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("On");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Off");
+  PROGMEM Language_Str MSG_AUTOTUNE_PID                    = _UxGT("PID Autotune");
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E0                 = _UxGT("PID Autotune ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E1                 = _UxGT("PID Autotune ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E2                 = _UxGT("PID Autotune ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E3                 = _UxGT("PID Autotune ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E4                 = _UxGT("PID Autotune ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AUTOTUNE_PID_E5                 = _UxGT("PID Autotune ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Select");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Select ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Select ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Select ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Select ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Select ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Select ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Accel");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Jerk");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-Jerk");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-Jerk");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-Jerk");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-Jerk");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Junction Dev");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Velocity");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("Vmax ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("Vmax ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("Vmax ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("Vmax ") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("Vmax ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("Vmax ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("Vmax ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("Vmax ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("Vmax ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("Vmax ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vmin");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VTrav Min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Acceleration");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Amax ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Amax ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Amax ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Amax ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Amax ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Amax ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Amax ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Amax ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Amax ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Amax ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-Retract");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-Travel");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Steps/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Esteps/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("steps/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperature");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Motion");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Unload mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Load mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Advance K");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("Advance K ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("Advance K ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("Advance K ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("Advance K ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("Advance K ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("Advance K ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Contrast");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Store Settings");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Load Settings");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restore failsafe");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialize EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Media Update");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset Printer");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Refresh");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info Screen");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepare");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Tune");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Start Print");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Next");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Init");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Stop");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Print");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Reset");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Cancel");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Done");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pause Print");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Resume Print");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Stop Print");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Outage Recovery");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Print from Media");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("No Media");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Sleep...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Click to Resume...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Print Paused");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Printing...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Print Aborted");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("No Move.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("KILLED. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("STOPPED. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retract mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Swap Re.mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retract  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Hop mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Swap Length");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Purge Length");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Tool Change");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Z Raise");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Prime Speed");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Retract Speed");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Nozzle Standby");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Change Filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Change Filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Change Filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Change Filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Change Filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Change Filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Change Filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Load Filament");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Load Filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Load Filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Load Filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Load Filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Load Filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Load Filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Unload Filament");
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Unload Filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Unload Filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Unload Filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Unload Filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Unload Filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Unload Filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Unload All");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Init. Media");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Change Media");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Release Media");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z Probe Past Bed");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Skew Factor");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Cmd: Self-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Cmd: Reset");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Cmd: Stow");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Cmd: Deploy");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("Cmd: SW-Mode");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("Cmd: 5V-Mode");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("Cmd: OD-Mode");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("Cmd: Mode-Store");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("Set BLTouch to 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("Set BLTouch to OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("Report Drain");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE             = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("Init TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Z Offset Test");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Save");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("Deploy TouchMI");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Deploy Z-Probe");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Stow Z-Probe");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s First");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Probe Z Offset");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Total");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Endstop Abort");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Heating Failed");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Bed Heating Failed");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER      = _UxGT("Chamber Heating Fail");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err: REDUNDANT TEMP");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("THERMAL RUNAWAY");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("BED THERMAL RUNAWAY");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("CHAMBER T. RUNAWAY");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: MAXTEMP");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: MINTEMP");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err: MAXTEMP BED");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err: MINTEMP BED");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Err: MAXTEMP CHAMBER");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Err: MINTEMP CHAMBER");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY First");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("PRINTER HALTED");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Please Reset");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Heating...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Cooling...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Bed Heating...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Bed Cooling...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Chamber Heating...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Chamber Cooling...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Calibration");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrate X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrate Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrate Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrate Center");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta Settings");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto Calibration");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Set Delta Height");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Probe Z-offset");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Diag Rod");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Height");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Radius");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("About Printer");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Printer Info");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3-Point Leveling");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Linear Leveling");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Bilinear Leveling");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Mesh Leveling");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Printer Stats");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Board Info");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistors");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extruders");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocol");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF                = _UxGT("Runaway Watch: OFF");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_ON                 = _UxGT("Runaway Watch: ON");
 
-#ifndef MSG_EXPECTED_PRINTER
-  #define MSG_EXPECTED_PRINTER                 _UxGT("INCORRECT PRINTER")
-#endif
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Case Light");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Light Brightness");
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("INCORRECT PRINTER");
 
-#if LCD_WIDTH >= 20
-  #ifndef MSG_INFO_PRINT_COUNT
-    #define MSG_INFO_PRINT_COUNT              _UxGT("Print Count")
-  #endif
-  #ifndef MSG_INFO_COMPLETED_PRINTS
-    #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completed")
-  #endif
-  #ifndef MSG_INFO_PRINT_TIME
-    #define MSG_INFO_PRINT_TIME               _UxGT("Total Print time")
-  #endif
-  #ifndef MSG_INFO_PRINT_LONGEST
-    #define MSG_INFO_PRINT_LONGEST            _UxGT("Longest Job Time")
-  #endif
-  #ifndef MSG_INFO_PRINT_FILAMENT
-    #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extruded Total")
-  #endif
-#else
-  #ifndef MSG_INFO_PRINT_COUNT
-    #define MSG_INFO_PRINT_COUNT              _UxGT("Prints")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Print Count");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completed");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total Print time");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Longest Job Time");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extruded Total");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Prints");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completed");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Longest");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extruded");
   #endif
-  #ifndef MSG_INFO_COMPLETED_PRINTS
-    #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completed")
-  #endif
-  #ifndef MSG_INFO_PRINT_TIME
-    #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #endif
-  #ifndef MSG_INFO_PRINT_LONGEST
-    #define MSG_INFO_PRINT_LONGEST            _UxGT("Longest")
-  #endif
-  #ifndef MSG_INFO_PRINT_FILAMENT
-    #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extruded")
-  #endif
-#endif
-#ifndef MSG_INFO_MIN_TEMP
-  #define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#endif
-#ifndef MSG_INFO_MAX_TEMP
-  #define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#endif
-#ifndef MSG_INFO_PSU
-  #define MSG_INFO_PSU                        _UxGT("PSU")
-#endif
-#ifndef MSG_DRIVE_STRENGTH
-  #define MSG_DRIVE_STRENGTH                  _UxGT("Drive Strength")
-#endif
-#ifndef MSG_DAC_PERCENT
-  #define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#endif
-#ifndef MSG_ERROR_TMC
-  #define MSG_ERROR_TMC                       _UxGT("TMC CONNECTION ERROR")
-#endif
-#ifndef MSG_DAC_EEPROM_WRITE
-  #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER
-  #define MSG_FILAMENT_CHANGE_HEADER          _UxGT("FILAMENT CHANGE")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_PAUSE
-  #define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("PRINT PAUSED")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_LOAD
-  #define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("LOAD FILAMENT")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_UNLOAD
-  #define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("UNLOAD FILAMENT")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
-  #define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_PURGE
-  #define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Purge more")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_RESUME
-  #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Continue")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_NOZZLE
-  #define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Nozzle: ")
-#endif
-#ifndef MSG_RUNOUT_SENSOR
-  #define MSG_RUNOUT_SENSOR                   _UxGT("Runout Sensor")
-#endif
-#ifndef MSG_RUNOUT_DISTANCE_MM
-  #define MSG_RUNOUT_DISTANCE_MM              _UxGT("Runout Dist mm")
-#endif
-#ifndef MSG_ERR_HOMING_FAILED
-  #define MSG_ERR_HOMING_FAILED               _UxGT("Homing Failed")
-#endif
-#ifndef MSG_ERR_PROBING_FAILED
-  #define MSG_ERR_PROBING_FAILED              _UxGT("Probing Failed")
-#endif
-#ifndef MSG_M600_TOO_COLD
-  #define MSG_M600_TOO_COLD                   _UxGT("M600: Too Cold")
-#endif
 
-#ifndef MSG_MMU2_FILAMENT_CHANGE_HEADER
-  #define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("FILAMENT CHANGE")
-#endif
-#ifndef MSG_MMU2_CHOOSE_FILAMENT_HEADER
-  #define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("CHOOSE FILAMENT")
-#endif
-#ifndef MSG_MMU2_MENU
-  #define MSG_MMU2_MENU                       _UxGT("MMU")
-#endif
-#ifndef MSG_MMU2_WRONG_FIRMWARE
-  #define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Update MMU Firmware!")
-#endif
-#ifndef MSG_MMU2_NOT_RESPONDING
-  #define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU Needs Attention.")
-#endif
-#ifndef MSG_MMU2_RESUME
-  #define MSG_MMU2_RESUME                     _UxGT("Resume Print")
-#endif
-#ifndef MSG_MMU2_RESUMING
-  #define MSG_MMU2_RESUMING                   _UxGT("Resuming...")
-#endif
-#ifndef MSG_MMU2_LOAD_FILAMENT
-  #define MSG_MMU2_LOAD_FILAMENT              _UxGT("Load Filament")
-#endif
-#ifndef MSG_MMU2_LOAD_ALL
-  #define MSG_MMU2_LOAD_ALL                   _UxGT("Load All")
-#endif
-#ifndef MSG_MMU2_LOAD_TO_NOZZLE
-  #define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Load to Nozzle")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT
-  #define MSG_MMU2_EJECT_FILAMENT             _UxGT("Eject Filament")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT0
-  #define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Eject Filament 1")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT1
-  #define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Eject Filament 2")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT2
-  #define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Eject Filament 3")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT3
-  #define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Eject Filament 4")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT4
-  #define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Eject Filament 5")
-#endif
-#ifndef MSG_MMU2_UNLOAD_FILAMENT
-  #define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Unload Filament")
-#endif
-#ifndef MSG_MMU2_LOADING_FILAMENT
-  #define MSG_MMU2_LOADING_FILAMENT           _UxGT("Loading Fil. %i...")
-#endif
-#ifndef MSG_MMU2_EJECTING_FILAMENT
-  #define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Ejecting Fil. ...")
-#endif
-#ifndef MSG_MMU2_UNLOADING_FILAMENT
-  #define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Unloading Fil....")
-#endif
-#ifndef MSG_MMU2_ALL
-  #define MSG_MMU2_ALL                        _UxGT("All")
-#endif
-#ifndef MSG_MMU2_FILAMENT0
-  #define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
-#endif
-#ifndef MSG_MMU2_FILAMENT1
-  #define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
-#endif
-#ifndef MSG_MMU2_FILAMENT2
-  #define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
-#endif
-#ifndef MSG_MMU2_FILAMENT3
-  #define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
-#endif
-#ifndef MSG_MMU2_FILAMENT4
-  #define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
-#endif
-#ifndef MSG_MMU2_RESET
-  #define MSG_MMU2_RESET                      _UxGT("Reset MMU")
-#endif
-#ifndef MSG_MMU2_RESETTING
-  #define MSG_MMU2_RESETTING                  _UxGT("Resetting MMU...")
-#endif
-#ifndef MSG_MMU2_EJECT_RECOVER
-  #define MSG_MMU2_EJECT_RECOVER              _UxGT("Remove, click")
-#endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Temp");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Temp");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("PSU");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Drive Strength");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("TMC CONNECTION ERROR");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC EEPROM Write");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("FILAMENT CHANGE");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("PRINT PAUSED");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("LOAD FILAMENT");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("UNLOAD FILAMENT");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("RESUME OPTIONS:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Purge more");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Continue");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Nozzle: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Runout Sensor");
+  PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM              = _UxGT("Runout Dist mm");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Homing Failed");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Probing Failed");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Too Cold");
 
-#ifndef MSG_MIX
-  #define MSG_MIX                             _UxGT("Mix")
-#endif
-#ifndef MSG_MIX_COMPONENT
-  #define MSG_MIX_COMPONENT                   _UxGT("Component")
-#endif
-#ifndef MSG_MIXER
-  #define MSG_MIXER                           _UxGT("Mixer")
-#endif
-#ifndef MSG_GRADIENT
-  #define MSG_GRADIENT                        _UxGT("Gradient")
-#endif
-#ifndef MSG_FULL_GRADIENT
-  #define MSG_FULL_GRADIENT                   _UxGT("Full Gradient")
-#endif
-#ifndef MSG_TOGGLE_MIX
-  #define MSG_TOGGLE_MIX                      _UxGT("Toggle Mix")
-#endif
-#ifndef MSG_CYCLE_MIX
-  #define MSG_CYCLE_MIX                       _UxGT("Cycle Mix")
-#endif
-#ifndef MSG_GRADIENT_MIX
-  #define MSG_GRADIENT_MIX                    _UxGT("Gradient Mix")
-#endif
-#ifndef MSG_REVERSE_GRADIENT
-  #define MSG_REVERSE_GRADIENT                _UxGT("Reverse Gradient")
-#endif
-#ifndef MSG_ACTIVE_VTOOL
-  #define MSG_ACTIVE_VTOOL                    _UxGT("Active V-tool")
-#endif
-#ifndef MSG_START_VTOOL
-  #define MSG_START_VTOOL                     _UxGT("Start V-tool")
-#endif
-#ifndef MSG_END_VTOOL
-  #define MSG_END_VTOOL                       _UxGT("  End V-tool")
-#endif
-#ifndef MSG_GRADIENT_ALIAS
-  #define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-tool")
-#endif
-#ifndef MSG_RESET_VTOOLS
-  #define MSG_RESET_VTOOLS                    _UxGT("Reset V-tools")
-#endif
-#ifndef MSG_COMMIT_VTOOL
-  #define MSG_COMMIT_VTOOL                    _UxGT("Commit V-tool Mix")
-#endif
-#ifndef MSG_VTOOLS_RESET
-  #define MSG_VTOOLS_RESET                    _UxGT("V-tools Were Reset")
-#endif
-#ifndef MSG_START_Z
-  #define MSG_START_Z                         _UxGT("Start Z")
-#endif
-#ifndef MSG_END_Z
-  #define MSG_END_Z                           _UxGT("  End Z")
-#endif
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("CHOOSE FILAMENT");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("Update MMU Firmware!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU Needs Attention.");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Resume Print");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Resuming...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Load Filament");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Load All");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Load to Nozzle");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Eject Filament");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Eject Filament 1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Eject Filament 2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Eject Filament 3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Eject Filament 4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Eject Filament 5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Unload Filament");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Loading Fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Ejecting Fil. ...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Unloading Fil....");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("All");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filament 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filament 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filament 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filament 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filament 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Reset MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Resetting MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Remove, click");
 
-#ifndef MSG_GAMES
-  #define MSG_GAMES                           _UxGT("Games")
-#endif
-#ifndef MSG_BRICKOUT
-  #define MSG_BRICKOUT                        _UxGT("Brickout")
-#endif
-#ifndef MSG_INVADERS
-  #define MSG_INVADERS                        _UxGT("Invaders")
-#endif
-#ifndef MSG_SNAKE
-  #define MSG_SNAKE                           _UxGT("Sn4k3")
-#endif
-#ifndef MSG_MAZE
-  #define MSG_MAZE                            _UxGT("Maze")
-#endif
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Mix");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Component 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Component 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Component 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Component 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Component 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Component 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Mixer");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Gradient");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Full Gradient");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Toggle Mix");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Cycle Mix");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Gradient Mix");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Reverse Gradient");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("Active V-tool");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("Start V-tool");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("  End V-tool");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("Alias V-tool");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("Reset V-tools");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("Commit V-tool Mix");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("V-tools Were Reset");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Start Z:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("  End Z:");
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  #ifndef MSG_ADVANCED_PAUSE_WAITING_1
-    #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Press Button")
-    #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("to resume print")
-  #endif
-  #ifndef MSG_PAUSE_PRINT_INIT_1
-    #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parking...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_INIT_1
-    #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Wait for")
-    #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("filament change")
-    #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("to start")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_INSERT_1
-    #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insert filament")
-    #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("and press button")
-    #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("to continue")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_HEAT_1
-    #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Press button")
-    #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("to heat nozzle")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_HEATING_1
-    #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Nozzle heating")
-    #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Please wait...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
-    #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Wait for filament")
-    #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("to fully unload")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_LOAD_1
-    #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Wait for filament")
-    #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("to load to nozzle")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_PURGE_1
-    #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Wait for filament")
-    #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("purge to finish")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
-    #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Click to stop")
-    #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("purging filament")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_RESUME_1
-    #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Wait for print")
-    #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("to resume...")
-  #endif
-#else // LCD_HEIGHT < 4
-  #ifndef MSG_ADVANCED_PAUSE_WAITING_1
-    #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Click to continue")
-  #endif
-  #ifndef MSG_PAUSE_PRINT_INIT_1
-    #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parking...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_INIT_1
-    #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Please wait...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_INSERT_1
-    #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insert and Click")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_HEAT_1
-    #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Click to heat")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_HEATING_1
-    #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Heating...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
-    #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ejecting...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_LOAD_1
-    #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Loading...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_PURGE_1
-    #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purging...")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
-    #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Click to finish")
-  #endif
-  #ifndef MSG_FILAMENT_CHANGE_RESUME_1
-    #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Resuming...")
-  #endif
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Games");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Brickout");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Maze");
 
-#ifndef MSG_TMC_DRIVERS
-  #define MSG_TMC_DRIVERS                     _UxGT("TMC Drivers")
-#endif
-#ifndef MSG_TMC_CURRENT
-  #define MSG_TMC_CURRENT                     _UxGT("Driver Current")
-#endif
-#ifndef MSG_TMC_HYBRID_THRS
-  #define MSG_TMC_HYBRID_THRS                 _UxGT("Hybrid Threshold")
-#endif
-#ifndef MSG_TMC_HOMING_THRS
-  #define MSG_TMC_HOMING_THRS                 _UxGT("Sensorless Homing")
-#endif
-#ifndef MSG_TMC_STEPPING_MODE
-  #define MSG_TMC_STEPPING_MODE               _UxGT("Stepping Mode")
-#endif
-#ifndef MSG_TMC_STEALTH_ENABLED
-  #define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop Enabled")
-#endif
-
-#ifndef MSG_SERVICE_RESET
-  #define MSG_SERVICE_RESET                   _UxGT("Reset")
-#endif
-#ifndef MSG_SERVICE_IN
-  #define MSG_SERVICE_IN                      _UxGT(" in:")
-#endif
+  #define MSG_1_LINE(A)     A "\0"   "\0"
+  #define MSG_2_LINE(A,B)   A "\0" B "\0"
+  #define MSG_3_LINE(A,B,C) A "\0" B "\0" C
 
-#ifndef MSG_BACKLASH
-  #define MSG_BACKLASH                        _UxGT("Backlash")
-#endif
-#ifndef MSG_BACKLASH_CORRECTION
-  #define MSG_BACKLASH_CORRECTION             _UxGT("Correction")
-#endif
-#ifndef MSG_BACKLASH_SMOOTHING
-  #define MSG_BACKLASH_SMOOTHING              _UxGT("Smoothing")
-#endif
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Press Button", "to resume print"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parking..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Wait for", "filament change", "to start"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Wait for", "filament load"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
+  #else
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Click to continue"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parking..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Please wait..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Insert and Click"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Click to heat"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Heating..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Ejecting..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Loading..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Purging..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Click to finish"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Resuming..."));
+  #endif
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("TMC Drivers");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Driver Current");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Hybrid Threshold");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Sensorless Homing");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Stepping Mode");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop Enabled");
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Reset");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" in:");
+  PROGMEM Language_Str MSG_BACKLASH                        = _UxGT("Backlash");
+  PROGMEM Language_Str MSG_BACKLASH_A                      = LCD_STR_A;
+  PROGMEM Language_Str MSG_BACKLASH_B                      = LCD_STR_B;
+  PROGMEM Language_Str MSG_BACKLASH_C                      = LCD_STR_C;
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Correction");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Smoothing");
+}
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index eabf24857e..4d0d8c40d4 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -29,536 +29,606 @@
  *
  */
 
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT ("¡¿ªáéíóúÁÉÍÓÚ")
 #define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" lista")
-#define MSG_YES                             _UxGT("SI")
-#define MSG_NO                              _UxGT("NO")
-#define MSG_BACK                            _UxGT("Atrás")
-#define MSG_MEDIA_ABORTING                  _UxGT("Cancelando...")
-#define MSG_MEDIA_INSERTED                  _UxGT("SD/USB insertado")
-#define MSG_MEDIA_REMOVED                   _UxGT("SD/USB retirado")
-#define MSG_MEDIA_RELEASED                  _UxGT("SD/USB lanzado")
-#define MSG_MEDIA_WAITING                   _UxGT("Esperando al SD/USB")
-#define MSG_MEDIA_READ_ERROR                _UxGT("Error lectura SD/USB")
-#define MSG_MEDIA_USB_REMOVED               _UxGT("Disp. USB retirado")
-#define MSG_MEDIA_USB_FAILED                _UxGT("Inicio USB fallido")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Soft Endstops")
-#define MSG_MAIN                            _UxGT("Menú principal")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Ajustes avanzados")
-#define MSG_CONFIGURATION                   _UxGT("Configuración")
-#define MSG_AUTOSTART                       _UxGT("Inicio automático")
-#define MSG_DISABLE_STEPPERS                _UxGT("Apagar motores")
-#define MSG_DEBUG_MENU                      _UxGT("Menú depuración")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Prob. barra progreso")
-#define MSG_AUTO_HOME                       _UxGT("Llevar al origen")
-#define MSG_AUTO_HOME_X                     _UxGT("Origen X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Origen Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Origen Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Auto alineado Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Origen XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Pulsar para comenzar")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Siguiente punto")
-#define MSG_LEVEL_BED_DONE                  _UxGT("¡Nivelación lista!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Compensación Altura")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Ajustar desfases")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Desfase aplicada")
-#define MSG_SET_ORIGIN                      _UxGT("Establecer origen")
-#define MSG_PREHEAT_1                       _UxGT("Precalentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Todo")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" Fin")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Cama")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Ajuste")
-#define MSG_PREHEAT_2                       _UxGT("Precalentar" PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Todo")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" Fin")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Cama")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Ajuste")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Precalen. Personali.")
-#define MSG_COOLDOWN                        _UxGT("Enfriar")
-#define MSG_LASER_MENU                      _UxGT("Control Láser")
-#define MSG_LASER_OFF                       _UxGT("Láser Apagado")
-#define MSG_LASER_ON                        _UxGT("Láser Encendido")
-#define MSG_LASER_POWER                     _UxGT("Potencia Láser")
-#define MSG_SPINDLE_MENU                    _UxGT("Control Mandrino")
-#define MSG_SPINDLE_OFF                     _UxGT("Mandrino Apagado")
-#define MSG_SPINDLE_ON                      _UxGT("Mandrino Encendido")
-#define MSG_SPINDLE_POWER                   _UxGT("Potencia Mandrino")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Invertir giro")
-#define MSG_SWITCH_PS_ON                    _UxGT("Encender Fuente")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Apagar Fuente")
-#define MSG_EXTRUDE                         _UxGT("Extruir")
-#define MSG_RETRACT                         _UxGT("Retraer")
-#define MSG_MOVE_AXIS                       _UxGT("Mover ejes")
-#define MSG_BED_LEVELING                    _UxGT("Nivelando Cama")
-#define MSG_LEVEL_BED                       _UxGT("Nivelar Cama")
-#define MSG_LEVEL_CORNERS                   _UxGT("Nivelar Esquinas")
-#define MSG_NEXT_CORNER                     _UxGT("Siguente Esquina")
-#define MSG_MESH_EDITOR                     _UxGT("Editor Mallado")
-#define MSG_EDIT_MESH                       _UxGT("Editar Mallado")
-#define MSG_EDITING_STOPPED                 _UxGT("Ed. Mallado parada")
-#define MSG_PROBING_MESH                    _UxGT("Sondear Punto")
-#define MSG_MESH_X                          _UxGT("Índice X")
-#define MSG_MESH_Y                          _UxGT("Índice Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Valor Z")
-#define MSG_USER_MENU                       _UxGT("Comandos Personaliz.")
-#define MSG_M48_TEST                        _UxGT("M48 Probar Sonda")
-#define MSG_M48_POINT                       _UxGT("M48 Punto")
-#define MSG_M48_DEVIATION                   _UxGT("Desviación")
-#define MSG_IDEX_MENU                       _UxGT("Modo IDEX")
-#define MSG_OFFSETS_MENU                    _UxGT("Desfase Boquillas")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Aparcado")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicar")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copia Reflejada")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Control Total")
-#define MSG_X_OFFSET                        _UxGT("2ª Boquilla X")
-#define MSG_Y_OFFSET                        _UxGT("2ª Boquilla Y")
-#define MSG_Z_OFFSET                        _UxGT("2ª Boquilla Z")
-#define MSG_UBL_DOING_G29                   _UxGT("Hacer G29")
-#define MSG_UBL_TOOLS                       _UxGT("Herramientas UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Nivel.Cama.Uni.(UBL)")
-#define MSG_LCD_TILTING_MESH                _UxGT("Punto de inclinación")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Crear Mallado man.")
-#define MSG_UBL_BC_INSERT                   _UxGT("Colocar cuña y Medir")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Medir")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Retirar y Medir Cama")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Mover al Siguente")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Activar UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Desactivar UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Temp. Cama")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT ("Hotend Temp")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Editar Mallado")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Edit. Mallado perso.")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Ajuste fino Mallado")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Term. edici. Mallado")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Crear Mallado Perso.")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Crear Mallado")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Crear Mallado (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Crear Mallado (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Crear Mallado Frío")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Ajustar alt. Mallado")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Cantidad de altura")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Validar Mallado")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Validar Mallado (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Validar Mallado (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Vali. Mallado perso.")
-#define MSG_G26_HEATING_BED                 _UxGT("G26 Calentando Cama")
-#define MSG_G26_HEATING_NOZZLE              _UxGT("G26 Calent. Boquilla")
-#define MSG_G26_MANUAL_PRIME                _UxGT("Imprimado manual...")
-#define MSG_G26_FIXED_LENGTH                _UxGT("Impri. longit. fija")
-#define MSG_G26_PRIME_DONE                  _UxGT("Imprimación Lista")
-#define MSG_G26_CANCELED                    _UxGT("G26 Cancelado")
-#define MSG_G26_LEAVING                     _UxGT("Dejando G26")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Contin. Mallado cama")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Nivelando Mallado")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Nivelando 3Puntos")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Nivel. Mallado cuad.")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Nivel de Mallado")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Puntos Laterales")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Tipo de mapa ")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Salida Mapa mallado")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Salida para el host")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Salida para CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Off Printer Backup")
-#define MSG_UBL_INFO_UBL                    _UxGT("Salida Info. UBL")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Cantidad de relleno")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Relleno manual")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Relleno inteligente")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Mallado de relleno")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Invalidar todo")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Invalidar proximos")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Ajustar Fino Todo")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Ajustar Fino proxi.")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Almacen de Mallado")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Huecos de memoria")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Cargar Mallado cama")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Guardar Mallado cama")
-#define MSG_MESH_LOADED                     _UxGT("Mallado %i Cargado")
-#define MSG_MESH_SAVED                      _UxGT("Mallado %i Guardado")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Sin guardar")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Error: Guardar UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Error: Restaurar UBL")
-#define MSG_UBL_Z_OFFSET                    _UxGT("Desfase de Z: ")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Desfase de Z Parado")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("UBL Paso a Paso")
+namespace Language_es {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_LED_CONTROL                     _UxGT("Control LED")
-#define MSG_LEDS                            _UxGT("Luzes")
-#define MSG_LED_PRESETS                     _UxGT("Luz predefinida")
-#define MSG_SET_LEDS_RED                    _UxGT("Rojo")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Naranja")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Amarillo")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Verde")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Azul")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Índigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Violeta")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Blanco")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Por defecto")
-#define MSG_CUSTOM_LEDS                     _UxGT("Luces personalizadas")
-#define MSG_INTENSITY_R                     _UxGT("Intensidad Rojo")
-#define MSG_INTENSITY_G                     _UxGT("Intensidad Verde")
-#define MSG_INTENSITY_B                     _UxGT("Intensidad Azul")
-#define MSG_INTENSITY_W                     _UxGT("Intensidad Blanco")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Brillo")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Spanish");
 
-#define MSG_MOVING                          _UxGT("Moviendo...")
-#define MSG_FREE_XY                         _UxGT("Libre XY")
-#define MSG_MOVE_X                          _UxGT("Mover X")
-#define MSG_MOVE_Y                          _UxGT("Mover Y")
-#define MSG_MOVE_Z                          _UxGT("Mover Z")
-#define MSG_MOVE_E                          _UxGT("Extrusor")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Hotend muy frio")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mover %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mover 10mm")
-#define MSG_SPEED                           _UxGT("Velocidad")
-#define MSG_BED_Z                           _UxGT("Cama Z")
-#define MSG_NOZZLE                          _UxGT("Boquilla")
-#define MSG_BED                             _UxGT("Cama")
-#define MSG_CHAMBER                         _UxGT("Recinto")
-#define MSG_FAN_SPEED                       _UxGT("Ventilador")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Vel. Ext. ventilador")
-#define MSG_FLOW                            _UxGT("Flujo")
-#define MSG_CONTROL                         _UxGT("Control")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Temperatura Auto.")
-#define MSG_LCD_ON                          _UxGT("Encender")
-#define MSG_LCD_OFF                         _UxGT("Apagar")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Seleccionar")
-#define MSG_ACC                             _UxGT("Aceleración")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-Jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-Jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-Jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-Jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-Jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-Jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-Jerk")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Junction Dev")
-#define MSG_VELOCITY                        _UxGT("Velocidad")
-#define MSG_VMAX                            _UxGT("Vmax")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("Vel. viaje min")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Acel. max")
-#define MSG_A_RETRACT                       _UxGT("Acel. retrac.")
-#define MSG_A_TRAVEL                        _UxGT("Acel. Viaje")
-#define MSG_STEPS_PER_MM                    _UxGT("Pasos/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A pasos/mm")
-  #define MSG_BSTEPS                        _UxGT("B pasos/mm")
-  #define MSG_CSTEPS                        _UxGT("C pasos/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X pasos/mm")
-  #define MSG_BSTEPS                        _UxGT("Y pasos/mm")
-  #define MSG_CSTEPS                        _UxGT("Z pasos/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E pasos/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 pasos/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 pasos/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 pasos/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 pasos/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 pasos/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 pasos/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movimiento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E en mm") MSG_CUBED
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Descarga mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Carga mm")
-#define MSG_ADVANCE_K                       _UxGT("Avance K")
-#define MSG_CONTRAST                        _UxGT("Contraste LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Guardar EEPROM")
-#define MSG_LOAD_EEPROM                     _UxGT("Cargar EEPROM")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Rest. fábrica")
-#define MSG_INIT_EEPROM                     _UxGT("Inicializar EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Actualizar SD/USB")
-#define MSG_RESET_PRINTER                   _UxGT("Resetear Impresora")
-#define MSG_REFRESH                         _UxGT("Recargar")
-#define MSG_WATCH                           _UxGT("Pantalla de Inf.")
-#define MSG_PREPARE                         _UxGT("Preparar")
-#define MSG_TUNE                            _UxGT("Ajustar")
-#define MSG_START_PRINT                     _UxGT("Iniciar impresión")
-#define MSG_BUTTON_NEXT                     _UxGT("Siguinte")
-#define MSG_BUTTON_INIT                     _UxGT("Iniciar")
-#define MSG_BUTTON_STOP                     _UxGT("Parar")
-#define MSG_BUTTON_PRINT                    _UxGT("Imprimir")
-#define MSG_BUTTON_RESET                    _UxGT("Reiniciar")
-#define MSG_BUTTON_CANCEL                   _UxGT("Cancelar")
-#define MSG_BUTTON_DONE                     _UxGT("Listo")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausar impresión")
-#define MSG_RESUME_PRINT                    _UxGT("Reanudar impresión")
-#define MSG_STOP_PRINT                      _UxGT("Detener impresión")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Recuper. por interr.")
-#define MSG_MEDIA_MENU                      _UxGT("Imprim. desde SD/USB")
-#define MSG_NO_MEDIA                        _UxGT("SD/USB no presente")
-#define MSG_DWELL                           _UxGT("Reposo...")
-#define MSG_USERWAIT                        _UxGT("Pulsar para Reanudar")
-#define MSG_PRINT_PAUSED                    _UxGT("Impresión Pausada")
-#define MSG_PRINTING                        _UxGT("Imprimiendo...")
-#define MSG_PRINT_ABORTED                   _UxGT("Impresión cancelada")
-#define MSG_NO_MOVE                         _UxGT("Sin movimiento")
-#define MSG_KILLED                          _UxGT("MUERTA")
-#define MSG_STOPPED                         _UxGT("DETENIDA")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retraer mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Interc. Retraer mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retraer  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Levantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Interc. DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("DesRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("Retracción Auto.")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Inter. longitud")
-#define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Purgar longitud")
-#define MSG_TOOL_CHANGE                     _UxGT("Cambiar Herramienta")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Aumentar Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Prime Speed")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Vel. de retracción")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Colocar boquilla")
-#define MSG_FILAMENTCHANGE                  _UxGT("Cambiar filamento")
-#define MSG_FILAMENTLOAD                    _UxGT("Cargar filamento")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Descargar filamento")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Descargar todo")
-#define MSG_INIT_MEDIA                      _UxGT("Iniciar SD/USB")
-#define MSG_CHANGE_MEDIA                    _UxGT("Cambiar SD/USB")
-#define MSG_RELEASE_MEDIA                   _UxGT("Lanzar SD/USB")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z fuera cama")
-#define MSG_SKEW_FACTOR                     _UxGT("Factor de desviación")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Cmd: Auto-Prueba")
-#define MSG_BLTOUCH_RESET                   _UxGT("Cmd: Reiniciar")
-#define MSG_BLTOUCH_STOW                    _UxGT("Cmd: Bajar pistón")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Cmd: Subir pistón")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("Cmd: Modo Software")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("Cmd: Modo 5V")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("Cmd: Modo OD")
-#define MSG_BLTOUCH_MODE_STORE              _UxGT("Cmd: Modo almacenar")
-#define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("Poner BLTouch a 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("Poner BLTouch a OD")
-#define MSG_BLTOUCH_MODE_ECHO               _UxGT("Informe de drenaje")
-#define MSG_BLTOUCH_MODE_CHANGE             _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?")
-#define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT                    _UxGT("Iniciar TouchMI")
-#define MSG_TOUCHMI_ZTEST                   _UxGT("Test de desfase Z")
-#define MSG_TOUCHMI_SAVE                    _UxGT("Guardar")
-#define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("Subir TouchMI")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Subir Sonda Z")
-#define MSG_MANUAL_STOW                     _UxGT("Bajar Sonda Z")
-#define MSG_HOME_FIRST                      _UxGT("Origen %s%s%s Primero")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Desfase Z")
-#define MSG_BABYSTEP_X                      _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y                      _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Micropaso Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Total")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Cancelado - Endstop")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Calent. fallido")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Calent. cama fallido")
-#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Calent. Cám. fallido")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: TEMP. REDUN.")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ESCAPE TERMICO")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("ESC. TERMICO CAMA")
-#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("ESC. TERMICO CAMARA")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err:TEMP. MÁX")
-#define MSG_ERR_MINTEMP                     _UxGT("Err:TEMP. MIN")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err:TEMP. MÁX CAMA")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err:TEMP. MIN CAMA")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err:TEMP. MÁX CÁMARA")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err:TEMP. MIN CÁMARA")
-#define MSG_ERR_Z_HOMING                    _UxGT("Origen XY Primero")
-#define MSG_HALTED                          _UxGT("IMPRESORA DETENIDA")
-#define MSG_PLEASE_RESET                    _UxGT("Por favor, reinicie")
-#define MSG_SHORT_DAY                       _UxGT("d") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Calentando...")
-#define MSG_COOLING                         _UxGT("Enfriando...")
-#define MSG_BED_HEATING                     _UxGT("Calentando Cama...")
-#define MSG_BED_COOLING                     _UxGT("Enfriando Cama...")
-#define MSG_CHAMBER_HEATING                 _UxGT("Calentando Cámara...")
-#define MSG_CHAMBER_COOLING                 _UxGT("Enfriando Cámara...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibración Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrar Centro")
-#define MSG_DELTA_SETTINGS                  _UxGT("Configuración Delta")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto Calibración")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Est. Altura Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Ajustar Sonda Z")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Barra Diagonal")
-#define MSG_DELTA_HEIGHT                    _UxGT("Altura")
-#define MSG_DELTA_RADIUS                    _UxGT("Radio")
-#define MSG_INFO_MENU                       _UxGT("Acerca de Impresora")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info. Impresora")
-#define MSG_3POINT_LEVELING                 _UxGT("Nivelando 3puntos")
-#define MSG_LINEAR_LEVELING                 _UxGT("Nivelando Lineal")
-#define MSG_BILINEAR_LEVELING               _UxGT("Nivelando Bilineal")
-#define MSG_UBL_LEVELING                    _UxGT("Nivelando UBL")
-#define MSG_MESH_LEVELING                   _UxGT("Nivelando en Mallado")
-#define MSG_INFO_STATS_MENU                 _UxGT("Estadísticas Imp.")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info. Controlador")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrusores")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocolo")
-#define MSG_CASE_LIGHT                      _UxGT("Luz cabina")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Brillo cabina")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" lista");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("SI");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NO");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Atrás");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Cancelando...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("SD/USB insertado");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("SD/USB retirado");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("SD/USB lanzado");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Esperando al SD/USB");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Error lectura SD/USB");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("Disp. USB retirado");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("Inicio USB fallido");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Soft Endstops");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menú principal");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Ajustes avanzados");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Configuración");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Inicio automático");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Apagar motores");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menú depuración");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Prob. barra progreso");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Llevar al origen");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Origen X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Origen Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Origen Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto alineado Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Origen XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Pulsar para comenzar");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Siguiente punto");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("¡Nivelación lista!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Compensación Altura");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Ajustar desfases");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Desfase aplicada");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Establecer origen");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Precalentar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Todo");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Cama");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Ajuste");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Precalentar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Todo");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Cama");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Ajuste");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Precalen. Personali.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Enfriar");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Control Láser");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Láser Apagado");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Láser Encendido");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Potencia Láser");
+  PROGMEM Language_Str MSG_SPINDLE_MENU                    = _UxGT("Control Mandrino");
+  PROGMEM Language_Str MSG_SPINDLE_OFF                     = _UxGT("Mandrino Apagado");
+  PROGMEM Language_Str MSG_SPINDLE_ON                      = _UxGT("Mandrino Encendido");
+  PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Potencia Mandrino");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Invertir giro");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Encender Fuente");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Apagar Fuente");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extruir");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retraer");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mover ejes");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Nivelando Cama");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Nivelar Cama");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Nivelar Esquinas");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Siguente Esquina");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Editor Mallado");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Editar Mallado");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Ed. Mallado parada");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Sondear Punto");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Índice X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Índice Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Valor Z");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Comandos Personaliz.");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("M48 Probar Sonda");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("M48 Punto");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Desviación");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("Modo IDEX");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Desfase Boquillas");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Aparcado");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplicar");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Copia Reflejada");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Control Total");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2ª Boquilla X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2ª Boquilla Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2ª Boquilla Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Hacer G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Herramientas UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Nivel.Cama.Uni.(UBL)");
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Punto de inclinación");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Crear Mallado man.");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Colocar cuña y Medir");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Medir");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Retirar y Medir Cama");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Mover al Siguente");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Activar UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Desactivar UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Temp. Cama");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT ("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Editar Mallado");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Edit. Mallado perso.");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Ajuste fino Mallado");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Term. edici. Mallado");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Crear Mallado Perso.");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Crear Mallado");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Crear Mallado (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Crear Mallado (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Crear Mallado Frío");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Ajustar alt. Mallado");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Cantidad de altura");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Validar Mallado");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Validar Mallado (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Validar Mallado (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Vali. Mallado perso.");
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 Calentando Cama");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 Calent. Boquilla");
+  PROGMEM Language_Str MSG_G26_MANUAL_PRIME                = _UxGT("Imprimado manual...");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Impri. longit. fija");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Imprimación Lista");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 Cancelado");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("Dejando G26");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Contin. Mallado cama");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Nivelando Mallado");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Nivelando 3Puntos");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Nivel. Mallado cuad.");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Nivel de Mallado");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Puntos Laterales");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Tipo de mapa ");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Salida Mapa mallado");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Salida para el host");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Salida para CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Off Printer Backup");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Salida Info. UBL");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Cantidad de relleno");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Relleno manual");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Relleno inteligente");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Mallado de relleno");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Invalidar todo");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Invalidar proximos");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Ajustar Fino Todo");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Ajustar Fino proxi.");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Almacen de Mallado");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Huecos de memoria");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Cargar Mallado cama");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Guardar Mallado cama");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mallado %i Cargado");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mallado %i Guardado");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sin guardar");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Error: Guardar UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Error: Restaurar UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Desfase de Z: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Desfase de Z Parado");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("UBL Paso a Paso");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Crear Mallado Frío");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Relleno inteligente");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Validar Mallado");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Ajustar Fino Todo");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Validar Mallado");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Ajustar Fino Todo");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Guardar Mallado cama");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Impresora incorrecta")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Control LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Luzes");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Luz predefinida");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Rojo");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Naranja");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Amarillo");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Verde");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Azul");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Índigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Violeta");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Blanco");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Por defecto");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Luces personalizadas");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intensidad Rojo");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intensidad Verde");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intensidad Azul");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intensidad Blanco");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Brillo");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Cont. de impresión")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tiempo total de imp.")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Impresión más larga")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total Extruido")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Impresiones")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Más larga")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extruido")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temp. Mínima")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temp. Máxima")
-#define MSG_INFO_PSU                        _UxGT("Fuente alimentación")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Fuerza de empuje")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_ERROR_TMC                       _UxGT("ERROR CONEX. TMC")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Escribe DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("IMPRESIÓN PAUSADA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("CARGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("DESCARGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("OPC. REINICIO:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Purgar más")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Continuar imp.")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Boquilla: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Sensor de sección")
-#define MSG_RUNOUT_DISTANCE_MM              _UxGT("Dist de secc. mm")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Ir a origen Fallado")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Sondeo Fallado")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Muy Frio")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Moviendo...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Libre XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mover X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mover Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mover Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Hotend muy frio");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mover %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mover 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mover 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mover 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocidad");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Cama Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Boquilla");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Boquilla ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Boquilla ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Boquilla ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Boquilla ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Boquilla ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Boquilla ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Cama");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Recinto");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Ventilador");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Ventilador 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Ventilador 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Ventilador 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Vel. Ext. ventilador");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Vel. Ext. ventilador ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Vel. Ext. ventilador ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Vel. Ext. ventilador ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flujo");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flujo ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flujo ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flujo ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flujo ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flujo ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flujo ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Temperatura Auto.");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Encender");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Apagar");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Seleccionar");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Seleccionar ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Seleccionar ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Seleccionar ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Seleccionar ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Seleccionar ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Seleccionar ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Aceleración");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Velocidad");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vel. viaje min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accel");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Acel. max") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Acel. max") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Acel. max") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Acel. max") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Acel. max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Acel. max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Acel. max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Acel. max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Acel. max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Acel. max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Acel. retrac.");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Acel. Viaje");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Pasos/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E pasos/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movimiento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E en mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Descarga mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Carga mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Avance K");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("Avance K ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("Avance K ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("Avance K ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("Avance K ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("Avance K ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("Avance K ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar EEPROM");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar EEPROM");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Rest. fábrica");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializar EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Actualizar SD/USB");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetear Impresora");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Recargar");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Pantalla de Inf.");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Ajustar");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Iniciar impresión");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Siguinte");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Iniciar");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Parar");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Imprimir");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Reiniciar");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Cancelar");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Listo");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausar impresión");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Reanudar impresión");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Detener impresión");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Recuper. por interr.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Imprim. desde SD/USB");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("SD/USB no presente");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Reposo...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Pulsar para Reanudar");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Impresión Pausada");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Imprimiendo...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impresión cancelada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sin movimiento");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("MUERTA");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("DETENIDA");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retraer mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Interc. Retraer mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retraer  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Levantar mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Interc. DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("DesRet V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Retracción Auto.");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Inter. longitud");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Purgar longitud");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Cambiar Herramienta");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Aumentar Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Prime Speed");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Vel. de retracción");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Colocar boquilla");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Cambiar filamento");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Cambiar filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Cambiar filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Cambiar filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Cambiar filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Cambiar filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Cambiar filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Cargar filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Cargar filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Cargar filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Cargar filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Cargar filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Cargar filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Descargar filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Descargar filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Descargar filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Descargar filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Descargar filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Descargar filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Descargar todo");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Iniciar SD/USB");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambiar SD/USB");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Lanzar SD/USB");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z fuera cama");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Factor de desviación");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Cmd: Auto-Prueba");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Cmd: Reiniciar");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Cmd: Bajar pistón");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Cmd: Subir pistón");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("Cmd: Modo Software");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("Cmd: Modo 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("Cmd: Modo OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("Cmd: Modo almacenar");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("Poner BLTouch a 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("Poner BLTouch a OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("Informe de drenaje");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE             = _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("Iniciar TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Test de desfase Z");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Guardar");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("Subir TouchMI");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Subir Sonda Z");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Bajar Sonda Z");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Origen %s%s%s Primero");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Desfase Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Micropaso X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Micropaso Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Micropaso Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Total");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Cancelado - Endstop");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Calent. fallido");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Calent. cama fallido");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER      = _UxGT("Calent. Cám. fallido");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err: TEMP. REDUN.");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ESCAPE TERMICO");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("ESC. TERMICO CAMA");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("ESC. TERMICO CAMARA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err:TEMP. MÁX");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err:TEMP. MIN");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err:TEMP. MÁX CAMA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err:TEMP. MIN CAMA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Err:TEMP. MÁX CÁMARA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Err:TEMP. MIN CÁMARA");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Origen XY Primero");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("IMPRESORA DETENIDA");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Por favor, reinicie");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Calentando...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Enfriando...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Calentando Cama...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Enfriando Cama...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Calentando Cámara...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Enfriando Cámara...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibración Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrar X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrar Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrar Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrar Centro");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Configuración Delta");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto Calibración");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Est. Altura Delta");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Ajustar Sonda Z");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Barra Diagonal");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Altura");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Radio");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Acerca de Impresora");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info. Impresora");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("Nivelando 3puntos");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Nivelando Lineal");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Nivelando Bilineal");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Nivelando UBL");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Nivelando en Mallado");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Estadísticas Imp.");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info. Controlador");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistores");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrusores");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baudios");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocolo");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Luz cabina");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Brillo cabina");
 
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("CAMBIAR FILAMENTO")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("ELIJE FILAMENTO")
-#define MSG_MMU2_MENU                       _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("¡Actu. MMU Firmware!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU Necesita Cuidado")
-#define MSG_MMU2_RESUME                     _UxGT("Continuar imp.")
-#define MSG_MMU2_RESUMING                   _UxGT("Resumiendo...")
-#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Cargar Filamento")
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Cargar Todo")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Cargar hasta boqui.")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Expulsar Filamento")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Expulsar Filamento 1")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Expulsar Filamento 2")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Expulsar Filamento 3")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Expulsar Filamento 4")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Expulsar Filamento 5")
-#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Descargar Filamento")
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Cargando Fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Expulsando Fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Descargando Fil....")
-#define MSG_MMU2_ALL                        _UxGT("Todo")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filamento 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filamento 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filamento 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filamento 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filamento 5")
-#define MSG_MMU2_RESET                      _UxGT("Reiniciar MMU")
-#define MSG_MMU2_RESETTING                  _UxGT("Reiniciando MMU...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Retirar, y pulsar")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Impresora incorrecta");
 
-#define MSG_MIX                             _UxGT("Mezcla")
-#define MSG_MIX_COMPONENT                   _UxGT("Componente")
-#define MSG_MIXER                           _UxGT("Miezclador")
-#define MSG_GRADIENT                        _UxGT("Degradado")
-#define MSG_FULL_GRADIENT                   _UxGT("Degradado Total")
-#define MSG_TOGGLE_MIX                      _UxGT("Mezcla Conmutada")
-#define MSG_CYCLE_MIX                       _UxGT("Mezcla Cíclica")
-#define MSG_GRADIENT_MIX                    _UxGT("Mezcla de Degradado")
-#define MSG_REVERSE_GRADIENT                _UxGT("Degradado inverso")
-#define MSG_ACTIVE_VTOOL                    _UxGT("Activar Herr.V")
-#define MSG_START_VTOOL                     _UxGT("Inicio Herr.V")
-#define MSG_END_VTOOL                       _UxGT("   Fin Herr.V")
-#define MSG_GRADIENT_ALIAS                  _UxGT("Alias Herr.V")
-#define MSG_RESET_VTOOLS                    _UxGT("Reiniciar Herr.V")
-#define MSG_COMMIT_VTOOL                    _UxGT("Cometer mezc. Herr.V")
-#define MSG_VTOOLS_RESET                    _UxGT("Herr.V reiniciados")
-#define MSG_START_Z                         _UxGT("Inicio Z")
-#define MSG_END_Z                           _UxGT("   Fin Z")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Cont. de impresión");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tiempo total de imp.");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Impresión más larga");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total Extruido");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Impresiones");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Más larga");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extruido");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temp. Mínima");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temp. Máxima");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Fuente alimentación");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Fuerza de empuje");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("ERROR CONEX. TMC");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Escribe DAC EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("CAMBIAR FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("IMPRESIÓN PAUSADA");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("CARGAR FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("DESCARGAR FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("OPC. REINICIO:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Purgar más");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Continuar imp.");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Boquilla: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Sensor de sección");
+  PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM              = _UxGT("Dist de secc. mm");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Ir a origen Fallado");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Sondeo Fallado");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Muy Frio");
 
-#define MSG_GAMES                           _UxGT("Games")
-#define MSG_BRICKOUT                        _UxGT("Brickout")
-#define MSG_INVADERS                        _UxGT("Invaders")
-#define MSG_SNAKE                           _UxGT("Sn4k3")
-#define MSG_MAZE                            _UxGT("Maze")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("ELIJE FILAMENTO");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("¡Actu. MMU Firmware!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU Necesita Cuidado");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Continuar imp.");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Resumiendo...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Cargar Filamento");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Cargar Todo");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Cargar hasta boqui.");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Expulsar Filamento");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Expulsar Filamento 1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Expulsar Filamento 2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Expulsar Filamento 3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Expulsar Filamento 4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Expulsar Filamento 5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Descargar Filamento");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Cargando Fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Expulsando Fil. ...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Descargando Fil....");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("Todo");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filamento 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filamento 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filamento 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filamento 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filamento 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Reiniciar MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Reiniciando MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Retirar, y pulsar");
 
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Pulsar el botón para")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("reanudar impresión")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Aparcando...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Esperando para")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("iniciar el cambio")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("de filamento")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Inserte el filamento")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("y pulse el botón")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("para continuar...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Pulse el botón para")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("calentar la boquilla")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Calentando boquilla")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Espere por favor...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Espere para")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("liberar el filamento")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Espere para")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("purgar el filamento")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Pulse para finalizar")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("la purga de filamen.")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Esperando impresora")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("para reanudar...")
-#else
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Pulse para continuar")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Aparcando...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Por Favor espere...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Inserte y Pulse")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Pulse para Calentar")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Calentando...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Liberando...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Cargando...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purgando...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Pulse para finalizar")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Reanudando...")
-#endif
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Mezcla");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Componente 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Componente 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Componente 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Componente 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Componente 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Componente 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Miezclador");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Degradado");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Degradado Total");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Mezcla Conmutada");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Mezcla Cíclica");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Mezcla de Degradado");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Degradado inverso");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("Activar Herr.V");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("Inicio Herr.V");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("   Fin Herr.V");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("Alias Herr.V");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("Reiniciar Herr.V");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("Cometer mezc. Herr.V");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("Herr.V reiniciados");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Inicio Z:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("   Fin Z:");
 
-#define MSG_TMC_DRIVERS                     _UxGT("Controladores TMC")
-#define MSG_TMC_CURRENT                     _UxGT("Amperaje Controlador")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Límite Hibrido")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Origen sin sensores")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Modo de pasos")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop Habilit.")
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Games");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Brickout");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Maze");
 
-#define MSG_SERVICE_RESET                   _UxGT("Reiniciar")
-#define MSG_SERVICE_IN                      _UxGT(" dentro:")
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Pulsar el botón para", "reanudar impresión"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Aparcando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Esperando para", "iniciar el cambio", "de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Inserte el filamento", "y pulse el botón", "para continuar..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Pulse el botón para", "calentar la boquilla"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Calentando boquilla", "Espere por favor..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Espere para", "liberar el filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Espere para", "purgar el filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Pulse para finalizar", "la purga de filamen."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Esperando impresora", "para reanudar..."));
+  #else
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Pulse para continuar"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Aparcando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Por Favor espere..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Inserte y Pulse"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Pulse para Calentar"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Calentando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Liberando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Cargando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Purgando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Pulse para finalizar"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Reanudando..."));
+  #endif
 
-#define MSG_BACKLASH                        _UxGT("Backlash")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Correction")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Suavizado")
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("Controladores TMC");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Amperaje Controlador");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Límite Hibrido");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Origen sin sensores");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Modo de pasos");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop Habilit.");
+
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Reiniciar");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" dentro:");
+
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Correction");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Suavizado");
+}
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index 6ebddc124e..d9c8e2c220 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -32,358 +32,362 @@
 #define DISPLAY_CHARSET_ISO10646_1
 #define NOT_EXTENDED_ISO10646_1_5X7
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" prest.")
-#define MSG_BACK                            _UxGT("Atzera")
-#define MSG_MEDIA_INSERTED                  _UxGT("Txartela sartuta")
-#define MSG_MEDIA_REMOVED                   _UxGT("Txartela kenduta")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Menu nagusia")
-#define MSG_AUTOSTART                       _UxGT("Auto hasiera")
-#define MSG_DISABLE_STEPPERS                _UxGT("Itzali motoreak")
-#define MSG_DEBUG_MENU                      _UxGT("Arazketa Menua")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Prog. Barra Proba")
-#define MSG_AUTO_HOME                       _UxGT("Hasierara joan")
-#define MSG_AUTO_HOME_X                     _UxGT("X jatorrira")
-#define MSG_AUTO_HOME_Y                     _UxGT("Y jatorrira")
-#define MSG_AUTO_HOME_Z                     _UxGT("Z jatorrira")
-#define MSG_LEVEL_BED_HOMING                _UxGT("XYZ hasieraratzen")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Klik egin hasteko")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Hurrengo Puntua")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Berdintzea eginda")
-//#define MSG_Z_FADE_HEIGHT                 _UxGT("Fade Height")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Etxe. offset eza.")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsetak ezarrita")
-#define MSG_SET_ORIGIN                      _UxGT("Hasiera ipini")
-#define MSG_PREHEAT_1                       _UxGT("Berotu " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Guztia")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" Amaia")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Ohea")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Ezarp.")
-#define MSG_PREHEAT_2                       _UxGT("Berotu " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_1 _UxGT(" Guztia")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" Amaia")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_1 _UxGT(" Ohea")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_1 _UxGT(" Ezarp.")
-#define MSG_COOLDOWN                        _UxGT("Hoztu")
-#define MSG_SWITCH_PS_ON                    _UxGT("Energia piztu")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Energia itzali")
-#define MSG_EXTRUDE                         _UxGT("Estruitu")
-#define MSG_RETRACT                         _UxGT("Atzera eragin")
-#define MSG_MOVE_AXIS                       _UxGT("Ardatzak mugitu")
-#define MSG_BED_LEVELING                    _UxGT("Ohe berdinketa")
-#define MSG_LEVEL_BED                       _UxGT("Ohea berdindu")
-#define MSG_LEVEL_CORNERS                   _UxGT("Ertzak berdindu")
-#define MSG_NEXT_CORNER                     _UxGT("Hurrengo ertza")
-#define MSG_EDIT_MESH                       _UxGT("Sarea editatu")
-//#define MSG_EDITING_STOPPED               _UxGT("Mesh Editing Stopped")
-//#define MSG_USER_MENU                     _UxGT("Custom Commands")
+namespace Language_eu {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_UBL_DOING_G29                   _UxGT("G29 exekutatzen")
-#define MSG_UBL_TOOLS                       _UxGT("UBL Tresnak")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Sarea eskuz sortu")
-//#define MSG_UBL_BC_INSERT                 _UxGT("Place shim & measure")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Neurtu")
-//#define MSG_UBL_BC_REMOVE                 _UxGT("Remove & measure bed")
-//#define MSG_UBL_MOVING_TO_NEXT            _UxGT("Moving to next")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("UBL aktibatu")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("UBL desaktibatu")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Ohearen tenperatura")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Mutur beroaren tenp.")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Sarea editatu")
-//#define MSG_UBL_EDIT_CUSTOM_MESH          _UxGT("Edit Custom Mesh")
-//#define MSG_UBL_FINE_TUNE_MESH            _UxGT("Fine Tuning Mesh")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Sarea editatzea eginda")
-//#define MSG_UBL_BUILD_CUSTOM_MESH         _UxGT("Build Custom Mesh")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Sarea sortu")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT(PREHEAT_1_LABEL " sarea sortu")
-#define MSG_UBL_BUILD_MESH_M2               _UxGT(PREHEAT_2_LABEL " sarea sortu")
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Sare hotza sortu")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Sarearen altuera doitu")
-//#define MSG_UBL_MESH_HEIGHT_AMOUNT        _UxGT("Height Amount")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Sarea balioetsi")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT(PREHEAT_1_LABEL " sarea balioetsi")
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT(PREHEAT_2_LABEL " sarea balioetsi")
-//#define MSG_UBL_VALIDATE_CUSTOM_MESH      _UxGT("Validate Custom Mesh")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Ohe sarea balioetsi")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Sare berdinketa")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3 puntuko berdinketa")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Lauki-sare berdinketa")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Sarea berdindu")
-//#define MSG_UBL_SIDE_POINTS               _UxGT("Side Points")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Mapa mota")
-//#define MSG_UBL_OUTPUT_MAP                _UxGT("Output Mesh Map")
-//#define MSG_UBL_OUTPUT_MAP_HOST           _UxGT("Output for Host")
-//#define MSG_UBL_OUTPUT_MAP_CSV            _UxGT("Output for CSV")
-//#define MSG_UBL_OUTPUT_MAP_BACKUP         _UxGT("Off Printer Backup")
-//#define MSG_UBL_INFO_UBL                  _UxGT("Output UBL Info")
-//#define MSG_UBL_FILLIN_AMOUNT             _UxGT("Fill-in Amount")
-//#define MSG_UBL_MANUAL_FILLIN             _UxGT("Manual Fill-in")
-//#define MSG_UBL_SMART_FILLIN              _UxGT("Smart Fill-in")
-//#define MSG_UBL_FILLIN_MESH               _UxGT("Fill-in Mesh")
-//#define MSG_UBL_INVALIDATE_ALL            _UxGT("Invalidate All")
-//#define MSG_UBL_INVALIDATE_CLOSEST        _UxGT("Invalidate Closest")
-//#define MSG_UBL_FINE_TUNE_ALL             _UxGT("Fine Tune All")
-//#define MSG_UBL_FINE_TUNE_CLOSEST         _UxGT("Fine Tune Closest")
-//#define MSG_UBL_STORAGE_MESH_MENU         _UxGT("Mesh Storage")
-//#define MSG_UBL_STORAGE_SLOT              _UxGT("Memory Slot")
-//#define MSG_UBL_LOAD_MESH                 _UxGT("Load Bed Mesh")
-//#define MSG_UBL_SAVE_MESH                 _UxGT("Save Bed Mesh")
-//#define MSG_MESH_LOADED                   _UxGT("Mesh %i loaded")
-//#define MSG_MESH_SAVED                    _UxGT("Mesh %i saved")
-//#define MSG_UBL_NO_STORAGE                _UxGT("No storage")
-//#define MSG_UBL_SAVE_ERROR                _UxGT("Err: UBL Save")
-//#define MSG_UBL_RESTORE_ERROR             _UxGT("Err: UBL Restore")
-//#define MSG_UBL_Z_OFFSET_STOPPED          _UxGT("Z-Offset Stopped")
-//#define MSG_UBL_STEP_BY_STEP_MENU         _UxGT("Step-By-Step UBL")
-#define MSG_LED_CONTROL                     _UxGT("LED ezarpenak")
-#define MSG_LEDS                            _UxGT("Argiak")
-#define MSG_LED_PRESETS                     _UxGT("Argi aurrehautaketak")
-#define MSG_SET_LEDS_RED                    _UxGT("Gorria")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Laranja")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Horia")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Berdea")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Urdina")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Bioleta")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Zuria")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Lehenetsia")
-#define MSG_CUSTOM_LEDS                     _UxGT("Argi pertsonalizatuak")
-#define MSG_INTENSITY_R                     _UxGT("Intentsitate gorria")
-#define MSG_INTENSITY_G                     _UxGT("Intentsitate berdea")
-#define MSG_INTENSITY_B                     _UxGT("Intentsitate urdina")
-#define MSG_INTENSITY_W                     _UxGT("Intentsitate zuria")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Distira")
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Basque-Euskera");
 
-#define MSG_MOVING                          _UxGT("Mugitzen...")
-#define MSG_FREE_XY                         _UxGT("Askatu XY")
-#define MSG_MOVE_X                          _UxGT("Mugitu X")
-#define MSG_MOVE_Y                          _UxGT("Mugitu Y")
-#define MSG_MOVE_Z                          _UxGT("Mugitu Z")
-#define MSG_MOVE_E                          _UxGT("Estrusorea")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mugitu %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mugitu 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mugitu 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mugitu 10mm")
-#define MSG_SPEED                           _UxGT("Abiadura")
-#define MSG_BED_Z                           _UxGT("Z Ohea")
-#define MSG_NOZZLE                          _UxGT("Pita")
-#define MSG_BED                             _UxGT("Ohea")
-#define MSG_FAN_SPEED                       _UxGT("Haizagailu abiadura")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Haiz.gehig. abiadura")
-#define MSG_FLOW                            _UxGT("Fluxua")
-#define MSG_CONTROL                         _UxGT("Kontrola")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP                        _UxGT("Auto tenperatura")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Aukeratu")
-#define MSG_ACC                             _UxGT("Azelerazioa")
-#define MSG_JERK                            _UxGT("Astindua")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-astindua")
-  #define MSG_VB_JERK                       _UxGT("Vb-astindua")
-  #define MSG_VC_JERK                       _UxGT("Vc-astindua")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-astindua")
-  #define MSG_VB_JERK                       _UxGT("Vy-astindua")
-  #define MSG_VC_JERK                       _UxGT("Vz-astindua")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-astindua")
-//#define MSG_VELOCITY                      _UxGT("Velocity")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VBidaia min")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retrakt")
-#define MSG_A_TRAVEL                        _UxGT("A-bidaia")
-#define MSG_STEPS_PER_MM                    _UxGT("Pausoak/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A pausoak/mm")
-  #define MSG_BSTEPS                        _UxGT("B pausoak/mm")
-  #define MSG_CSTEPS                        _UxGT("C pausoak/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X pausoak/mm")
-  #define MSG_BSTEPS                        _UxGT("Y pausoak/mm")
-  #define MSG_CSTEPS                        _UxGT("Z pausoak/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E pausoak/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 pausoak/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 pausoak/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 pausoak/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 pausoak/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 pausoak/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 pausoak/mm")
-#define MSG_TEMPERATURE                     _UxGT("Tenperatura")
-#define MSG_MOTION                          _UxGT("Mugimendua")
-#define MSG_FILAMENT                        _UxGT("Harizpia")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E mm3-tan")
-#define MSG_FILAMENT_DIAM                   _UxGT("Hariz. Dia.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Deskargatu mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Kargatu mm")
-#define MSG_ADVANCE_K                       _UxGT("K Aurrerapena")
-#define MSG_CONTRAST                        _UxGT("LCD kontrastea")
-#define MSG_STORE_EEPROM                    _UxGT("Gorde memoria")
-#define MSG_LOAD_EEPROM                     _UxGT("Kargatu memoria")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Larri. berriz.")
-#define MSG_INIT_EEPROM                     _UxGT("EEPROM-a hasieratu")
-#define MSG_REFRESH                         _UxGT("Berriz kargatu")
-#define MSG_WATCH                           _UxGT("Pantaila info")
-#define MSG_PREPARE                         _UxGT("Prestatu")
-#define MSG_TUNE                            _UxGT("Doitu")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausatu inprimak.")
-#define MSG_RESUME_PRINT                    _UxGT("Jarraitu inprima.")
-#define MSG_STOP_PRINT                      _UxGT("Gelditu inprima.")
-#define MSG_MEDIA_MENU                      _UxGT("SD-tik inprimatu")
-#define MSG_NO_MEDIA                        _UxGT("Ez dago SD-rik")
-#define MSG_DWELL                           _UxGT("Lo egin...")
-#define MSG_USERWAIT                        _UxGT("Aginduak zain...")
-#define MSG_PRINT_PAUSED                    _UxGT("Inprim. geldi.")
-#define MSG_PRINT_ABORTED                   _UxGT("Inprim. deusezta.")
-#define MSG_NO_MOVE                         _UxGT("Mugimendu gabe.")
-#define MSG_KILLED                          _UxGT("AKABATUTA. ")
-#define MSG_STOPPED                         _UxGT("GELDITUTA. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Atzera egin mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Swap Atzera mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Atzera egin V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Igo mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Atzera egin mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Swap Atzera mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Atzera egin V")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("Atzera egin")
-#define MSG_FILAMENTCHANGE                  _UxGT("Aldatu harizpia")
-#define MSG_FILAMENTLOAD                    _UxGT("Harizpia kargatu")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Harizpia deskargatu")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Erabat deskargatu")
-#define MSG_INIT_MEDIA                      _UxGT("Hasieratu SD-a")
-#define MSG_CHANGE_MEDIA                    _UxGT("Aldatu txartela")
-#define MSG_ZPROBE_OUT                      _UxGT("Z zunda kanpora")
-#define MSG_SKEW_FACTOR                     _UxGT("Okertze faktorea")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch AutoProba")
-#define MSG_BLTOUCH_RESET                   _UxGT("BLTouch berrabia.")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("BLTouch jaitsi/luzatu")
-#define MSG_BLTOUCH_STOW                    _UxGT("BLTouch igo/jaso")
-#define MSG_HOME_FIRST                      _UxGT("Etxera %s%s%s lehenengo")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Konpentsatu")
-#define MSG_BABYSTEP_X                      _UxGT("Mikro-urratsa X")
-#define MSG_BABYSTEP_Y                      _UxGT("Mikro-urratsa Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Mikro-urratsa Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop deusezta.")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Err: Beroketa")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: Tenperatura")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("TENP. KONTROL EZA")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err: Tenp Maximoa")
-#define MSG_ERR_MINTEMP                     _UxGT("Err: Tenp Minimoa")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: Ohe Tenp Max")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err: Ohe Tenp Min")
-#define MSG_ERR_Z_HOMING                    _UxGT("Etxera XY lehenengo")
-#define MSG_HALTED                          _UxGT("INPRIMA. GELDIRIK")
-#define MSG_PLEASE_RESET                    _UxGT("Berrabia. Mesedez")
-#define MSG_SHORT_DAY                       _UxGT("d") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Berotzen...")
-#define MSG_BED_HEATING                     _UxGT("Ohea Berotzen...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibraketa")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibratu X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibratu Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibratu Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibratu Zentrua")
-#define MSG_DELTA_SETTINGS                  _UxGT("Delta ezarpenak")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto Kalibraketa")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Delta Alt. Ezar.")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Barra diagonala")
-#define MSG_DELTA_HEIGHT                    _UxGT("Altuera")
-#define MSG_DELTA_RADIUS                    _UxGT("Erradioa")
-#define MSG_INFO_MENU                       _UxGT("Inprimagailu Inf.")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Inprimagailu Inf.")
-#define MSG_3POINT_LEVELING                 _UxGT("3 puntuko berdinketa")
-#define MSG_LINEAR_LEVELING                 _UxGT("Berdinketa lineala")
-#define MSG_BILINEAR_LEVELING               _UxGT("Berdinketa bilinearra")
-#define MSG_UBL_LEVELING                    _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING                   _UxGT("Sare berdinketa")
-#define MSG_INFO_STATS_MENU                 _UxGT("Inprima. estatis.")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Txartelaren Info.")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistoreak")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Estrusoreak")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baudioak")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokoloa")
-#define MSG_CASE_LIGHT                      _UxGT("Kabina Argia")
-//#define MSG_CASE_LIGHT_BRIGHTNESS
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Inprim. Zenbaketa")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Burututa")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Inprim. denbora")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Imprimatze luzeena")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Estruituta guztira")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Inprimatze")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Burututa")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Guztira")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Luzeena")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Estrusio")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Tenp. Minimoa")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Tenp. Maximoa")
-#define MSG_INFO_PSU                        _UxGT("Elikadura-iturria")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Driver-aren potentzia")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Idatzi DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("HARIZPIA ALDATU")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("HARIZPIA KARGATU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("HARIZPIA DESKARGATU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ALDAKETA AUKERAK:")
-//#define MSG_FILAMENT_CHANGE_OPTION_PURGE  _UxGT("Purge more")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Inprima. jarraitu")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Pita: ")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Hasi. huts egin du")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Neurketak huts egin du")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: hotzegi")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" prest.");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Atzera");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Txartela sartuta");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Txartela kenduta");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu nagusia");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Auto hasiera");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Itzali motoreak");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Arazketa Menua");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Prog. Barra Proba");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Hasierara joan");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("X jatorrira");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Y jatorrira");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Z jatorrira");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("XYZ hasieraratzen");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Klik egin hasteko");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Hurrengo Puntua");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Berdintzea eginda");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Etxe. offset eza.");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offsetak ezarrita");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Hasiera ipini");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Berotu ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Guztia");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ohea");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ezarp.");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Berotu ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Guztia");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Ohea");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Ezarp.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Hoztu");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Energia piztu");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Energia itzali");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Estruitu");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Atzera eragin");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Ardatzak mugitu");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Ohe berdinketa");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Ohea berdindu");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Ertzak berdindu");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Hurrengo ertza");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Sarea editatu");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Inprimagailu okerra")
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("G29 exekutatzen");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL Tresnak");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Sarea eskuz sortu");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Neurtu");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("UBL aktibatu");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("UBL desaktibatu");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Ohearen tenperatura");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Mutur beroaren tenp.");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Sarea editatu");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Sarea editatzea eginda");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Sarea sortu");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = PREHEAT_1_LABEL _UxGT(" sarea sortu");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = PREHEAT_2_LABEL _UxGT(" sarea sortu");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Sare hotza sortu");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Sarearen altuera doitu");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Sarea balioetsi");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = PREHEAT_1_LABEL _UxGT(" sarea balioetsi");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = PREHEAT_2_LABEL _UxGT(" sarea balioetsi");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Ohe sarea balioetsi");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Sare berdinketa");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3 puntuko berdinketa");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Lauki-sare berdinketa");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Sarea berdindu");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Mapa mota");
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("LED ezarpenak");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Argiak");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Argi aurrehautaketak");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Gorria");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Laranja");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Horia");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Berdea");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Urdina");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Bioleta");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Zuria");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Lehenetsia");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Argi pertsonalizatuak");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intentsitate gorria");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intentsitate berdea");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intentsitate urdina");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intentsitate zuria");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Distira");
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  //#define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Wait for start")
-  //#define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("of the filament")
-  //#define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("change")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("filament unload")
-  //#define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insert filament")
-  //#define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("and press button")
-  //#define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("to continue...")
-  //#define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Press button to")
-  //#define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("heat nozzle.")
-  //#define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Heating nozzle")
-  //#define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Please wait...")
-  //#define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("filament load")
-  //#define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("filament purge")
-  //#define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Wait for print")
-  //#define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("to resume")
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Mesedez, itxaron...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Deskargatzen...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Sartu eta click egin")
-  #define MSG_FILAMENT_CHANGE_HEATING_1       _UxGT("Berotzen...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Kargatzen...")
-  //#define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purging...")
-  //#define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Resuming...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Mugitzen...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Askatu XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mugitu X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mugitu Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mugitu Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Estrusorea");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Estrusorea ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Estrusorea ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Estrusorea ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Estrusorea ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Estrusorea ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Estrusorea ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mugitu %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mugitu 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mugitu 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mugitu 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Abiadura");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Z Ohea");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Pita");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Pita ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Pita ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Pita ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Pita ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Pita ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Pita ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Ohea");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Haizagailu abiadura");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Haizagailu abiadura 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Haizagailu abiadura 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Haizagailu abiadura 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Haiz.gehig. abiadura");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Haiz.gehig. abiadura 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Haiz.gehig. abiadura 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Haiz.gehig. abiadura 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxua");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Fluxua ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Fluxua ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Fluxua ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Fluxua ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Fluxua ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Fluxua ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrola");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Auto tenperatura");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Aukeratu");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Aukeratu ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Aukeratu ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Aukeratu ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Aukeratu ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Aukeratu ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Aukeratu ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Azelerazioa");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Astindua");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-astindua");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-astindua");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-astindua");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-astindua");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VBidaia min");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-retrakt");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-bidaia");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Pausoak/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E pausoak/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" pausoak/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Tenperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Mugimendua");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Harizpia");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E mm3-tan");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Hariz. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Hariz. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Hariz. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Hariz. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Hariz. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Hariz. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Hariz. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Deskargatu mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Kargatu mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K Aurrerapena");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K Aurrerapena ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K Aurrerapena ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K Aurrerapena ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K Aurrerapena ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K Aurrerapena ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K Aurrerapena ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrastea");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gorde memoria");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Kargatu memoria");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Larri. berriz.");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM-a hasieratu");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Berriz kargatu");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Pantaila info");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prestatu");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Doitu");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausatu inprimak.");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Jarraitu inprima.");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Gelditu inprima.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("SD-tik inprimatu");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Ez dago SD-rik");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Lo egin...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Aginduak zain...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Inprim. geldi.");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Inprim. deusezta.");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Mugimendu gabe.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("AKABATUTA. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("GELDITUTA. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Atzera egin mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Swap Atzera mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Atzera egin V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Igo mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Atzera egin mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Swap Atzera mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Atzera egin V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Atzera egin");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Aldatu harizpia");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Aldatu harizpia ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Aldatu harizpia ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Aldatu harizpia ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Aldatu harizpia ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Aldatu harizpia ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Aldatu harizpia ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Harizpia kargatu ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Harizpia kargatu ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Harizpia kargatu ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Harizpia kargatu ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Harizpia kargatu ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Harizpia kargatu ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Harizpia deskargatu ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Harizpia deskargatu ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Harizpia deskargatu ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Harizpia deskargatu ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Harizpia deskargatu ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Harizpia deskargatu ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Erabat deskargatu");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Hasieratu SD-a");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Aldatu txartela");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z zunda kanpora");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Okertze faktorea");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch AutoProba");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("BLTouch berrabia.");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("BLTouch jaitsi/luzatu");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("BLTouch igo/jaso");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Etxera %s%s%s lehenengo");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z Konpentsatu");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Mikro-urratsa X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Mikro-urratsa Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Mikro-urratsa Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Endstop deusezta.");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Err: Beroketa");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err: Tenperatura");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("TENP. KONTROL EZA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: Tenp Maximoa");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: Tenp Minimoa");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err: Ohe Tenp Max");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err: Ohe Tenp Min");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Etxera XY lehenengo");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("INPRIMA. GELDIRIK");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Berrabia. Mesedez");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Berotzen...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Ohea Berotzen...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibraketa");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibratu X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibratu Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibratu Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibratu Zentrua");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta ezarpenak");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto Kalibraketa");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Delta Alt. Ezar.");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Barra diagonala");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Altuera");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Erradioa");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Inprimagailu Inf.");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Inprimagailu Inf.");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3 puntuko berdinketa");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Berdinketa lineala");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Berdinketa bilinearra");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Sare berdinketa");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Inprima. estatis.");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Txartelaren Info.");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistoreak");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Estrusoreak");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baudioak");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokoloa");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Kabina Argia");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS
+  = ;
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Inprim. Zenbaketa");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Burututa");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Inprim. denbora");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Imprimatze luzeena");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Estruituta guztira");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Inprimatze");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Burututa");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Guztira");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Luzeena");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Estrusio");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Tenp. Minimoa");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Tenp. Maximoa");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Elikadura-iturria");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Driver-aren potentzia");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Idatzi DAC EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("HARIZPIA ALDATU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("HARIZPIA KARGATU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("HARIZPIA DESKARGATU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("ALDAKETA AUKERAK:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Inprima. jarraitu");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Pita: ");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Hasi. huts egin du");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Neurketak huts egin du");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: hotzegi");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Inprimagailu okerra");
+
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT            = _UxGT(MSG_1_LINE("Mesedez, itxaron..."));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD          = _UxGT(MSG_1_LINE("Deskargatzen..."));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT          = _UxGT(MSG_1_LINE("Sartu eta click egin"));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING         = _UxGT(MSG_1_LINE("Berotzen..."));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD            = _UxGT(MSG_1_LINE("Kargatzen..."));
+}
diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h
index 917496e200..0b6385c213 100644
--- a/Marlin/src/lcd/language/language_fi.h
+++ b/Marlin/src/lcd/language/language_fi.h
@@ -30,142 +30,136 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" valmis.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Kortti asetettu")
-#define MSG_MEDIA_REMOVED                   _UxGT("Kortti poistettu")
-#define MSG_MAIN                            _UxGT("Palaa")
-#define MSG_AUTOSTART                       _UxGT("Automaatti")
-#define MSG_DISABLE_STEPPERS                _UxGT("Vapauta moottorit")
-#define MSG_AUTO_HOME                       _UxGT("Aja referenssiin")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Click to Begin")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Leveling Done!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Set home offsets")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets applied")
-#define MSG_SET_ORIGIN                      _UxGT("Aseta origo")
-#define MSG_PREHEAT_1                       _UxGT("Esilämmitä " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Esilämmitä " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL                   _UxGT("Esilä. " PREHEAT_1_LABEL " Kaikki")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Esilä. " PREHEAT_1_LABEL " Alusta")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Esilämm. " PREHEAT_1_LABEL " konf")
-#define MSG_PREHEAT_2                       _UxGT("Esilämmitä " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Esilämmitä " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Esilä. " PREHEAT_2_LABEL " Kaikki")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Esilä. " PREHEAT_2_LABEL " Alusta")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Esilämm. " PREHEAT_2_LABEL " konf")
-#define MSG_COOLDOWN                        _UxGT("Jäähdytä")
-#define MSG_SWITCH_PS_ON                    _UxGT("Virta päälle")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Virta pois")
-#define MSG_EXTRUDE                         _UxGT("Pursota")
-#define MSG_RETRACT                         _UxGT("Vedä takaisin")
-#define MSG_MOVE_AXIS                       _UxGT("Liikuta akseleita")
-#define MSG_MOVE_X                          _UxGT("Liikuta X")
-#define MSG_MOVE_Y                          _UxGT("Liikuta Y")
-#define MSG_MOVE_Z                          _UxGT("Liikuta Z")
-#define MSG_MOVE_E                          _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST                     _UxGT("Liikuta %smm")
-#define MSG_MOVE_01MM                       _UxGT("Liikuta 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Liikuta 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Liikuta 10mm")
-#define MSG_SPEED                           _UxGT("Nopeus")
-#define MSG_NOZZLE                          _UxGT("Suutin")
-#define MSG_BED                             _UxGT("Alusta")
-#define MSG_FAN_SPEED                       _UxGT("Tuul. nopeus")
-#define MSG_FLOW                            _UxGT("Virtaus")
-#define MSG_CONTROL                         _UxGT("Kontrolli")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Kerr")
-#define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_ACC                             _UxGT("Kiihtyv")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VLiike min")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-peruuta")
-#define MSG_STEPS_PER_MM                    _UxGT("Steps/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Asteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Bsteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Csteps/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xsteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Ysteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Esteps/mm")
-#define MSG_E0_STEPS                        _UxGT("E1steps/mm")
-#define MSG_E1_STEPS                        _UxGT("E2steps/mm")
-#define MSG_E2_STEPS                        _UxGT("E3steps/mm")
-#define MSG_E3_STEPS                        _UxGT("E4steps/mm")
-#define MSG_E4_STEPS                        _UxGT("E5steps/mm")
-#define MSG_E5_STEPS                        _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("Lämpötila")
-#define MSG_MOTION                          _UxGT("Liike")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_CONTRAST                        _UxGT("LCD kontrasti")
-#define MSG_STORE_EEPROM                    _UxGT("Tallenna muistiin")
-#define MSG_LOAD_EEPROM                     _UxGT("Lataa muistista")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Palauta oletus")
-#define MSG_REFRESH                         _UxGT("Päivitä")
-#define MSG_WATCH                           _UxGT("Seuraa")
-#define MSG_PREPARE                         _UxGT("Valmistele")
-#define MSG_TUNE                            _UxGT("Säädä")
-#define MSG_PAUSE_PRINT                     _UxGT("Keskeytä tulostus")
-#define MSG_RESUME_PRINT                    _UxGT("Jatka tulostusta")
-#define MSG_STOP_PRINT                      _UxGT("Pysäytä tulostus")
-#define MSG_MEDIA_MENU                      _UxGT("Korttivalikko")
-#define MSG_NO_MEDIA                        _UxGT("Ei korttia")
-#define MSG_DWELL                           _UxGT("Nukkumassa...")
-#define MSG_USERWAIT                        _UxGT("Odotet. valintaa")
-#define MSG_PRINT_ABORTED                   _UxGT("Print aborted")
-#define MSG_NO_MOVE                         _UxGT("Ei liiketta.")
-#define MSG_KILLED                          _UxGT("KILLED. ")
-#define MSG_STOPPED                         _UxGT("STOPPED. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Vedä mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Va. Vedä mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Vedä V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Va. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_AUTORETRACT                     _UxGT("AutoVeto.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Change filament")
-#define MSG_INIT_MEDIA                      _UxGT("Init. SD-Card")
-#define MSG_CHANGE_MEDIA                    _UxGT("Change SD-Card")
-#define MSG_ZPROBE_OUT                      _UxGT("Z probe out. bed")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Offset")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop abort")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibrointi")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibroi X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibroi Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibroi Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibroi Center")
+namespace Language_fi {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Väärä tulostin")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Finnish");
+
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" valmis.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Kortti asetettu");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Kortti poistettu");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Palaa");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Automaatti");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Vapauta moottorit");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Aja referenssiin");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Aseta origo");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Esilämmitä ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Kaikki");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Alusta");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Esilämm. ") PREHEAT_1_LABEL _UxGT(" konf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Esilämmitä ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT(" Kaikki");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT(" Alusta");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Esilämm. ") PREHEAT_2_LABEL _UxGT(" konf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Jäähdytä");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Virta päälle");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Virta pois");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Pursota");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Vedä takaisin");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Liikuta akseleita");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Liikuta X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Liikuta Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Liikuta Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extruder");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extruder ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extruder ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extruder ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extruder ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extruder ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extruder ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Liikuta %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Liikuta 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Liikuta 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Liikuta 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Nopeus");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Suutin");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Suutin ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Suutin ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Suutin ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Suutin ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Suutin ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Suutin ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Alusta");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Tuul. nopeus");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Tuul. nopeus 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Tuul. nopeus 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Tuul. nopeus 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Virtaus");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Virtaus ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Virtaus ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Virtaus ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Virtaus ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Virtaus ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Virtaus ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrolli");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Kerr");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autotemp");
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Kiihtyv");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VLiike min");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-peruuta");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Lämpötila");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Liike");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm³");
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrasti");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Tallenna muistiin");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Lataa muistista");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Palauta oletus");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Päivitä");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Seuraa");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Valmistele");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Säädä");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Keskeytä tulostus");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Jatka tulostusta");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Pysäytä tulostus");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Korttivalikko");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Ei korttia");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Nukkumassa...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Odotet. valintaa");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Ei liiketta.");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Vedä mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Va. Vedä mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Vedä V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Va. UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoVeto.");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibrointi");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibroi X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibroi Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibroi Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibroi Center");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Väärä tulostin");
+}
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index e23c55de94..a770fe46b8 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -30,533 +30,586 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" prête.")
-#define MSG_YES                             _UxGT("Oui")
-#define MSG_NO                              _UxGT("Non")
-#define MSG_BACK                            _UxGT("Retour")
-#define MSG_MEDIA_ABORTING                  _UxGT("Annulation...")
-#define MSG_MEDIA_INSERTED                  _UxGT("Média inséré")
-#define MSG_MEDIA_REMOVED                   _UxGT("Média retiré")
-#define MSG_MEDIA_RELEASED                  _UxGT("Média libéré")
-#define MSG_MEDIA_WAITING                   _UxGT("Attente média")
-#define MSG_MEDIA_READ_ERROR                _UxGT("Err lecture média")
-#define MSG_MEDIA_USB_REMOVED               _UxGT("USB débranché")
-#define MSG_MEDIA_USB_FAILED                _UxGT("Erreur média USB")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Butées")
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Butées SW")
-#define MSG_MAIN                            _UxGT("Menu principal")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Config. avancée")
-#define MSG_CONFIGURATION                   _UxGT("Configuration")
-#define MSG_AUTOSTART                       _UxGT("Exéc. auto#.gcode")
-#define MSG_DISABLE_STEPPERS                _UxGT("Arrêter moteurs")
-#define MSG_DEBUG_MENU                      _UxGT("Menu debug")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Test barre progress.")
-#define MSG_AUTO_HOME                       _UxGT("Origine auto")
-#define MSG_AUTO_HOME_X                     _UxGT("Origine X auto")
-#define MSG_AUTO_HOME_Y                     _UxGT("Origine Y auto")
-#define MSG_AUTO_HOME_Z                     _UxGT("Origine Z auto")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Align. Z auto")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Origine XYZ...")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Clic pour commencer")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Point suivant")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Mise à niveau OK!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Hauteur lissée")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Régl. décal origine")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Décalages appliqués")
-#define MSG_SET_ORIGIN                      _UxGT("Régler origine")
-#define MSG_PREHEAT_1                       _UxGT("Préchauffage " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Préchauff. " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL                   _UxGT("Préch. " PREHEAT_1_LABEL " Tout")
-#define MSG_PREHEAT_1_END                   _UxGT("Préch. " PREHEAT_1_LABEL " buse")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Préch. " PREHEAT_1_LABEL " lit")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Régler préch. " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2                       _UxGT("Préchauffage " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Préchauff. " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Préch. " PREHEAT_2_LABEL " Tout")
-#define MSG_PREHEAT_2_END                   _UxGT("Préch. " PREHEAT_2_LABEL " buse")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Préch. " PREHEAT_2_LABEL " lit")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Régler préch. " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Préchauffage perso")
-#define MSG_COOLDOWN                        _UxGT("Refroidir")
-#define MSG_LASER_MENU                      _UxGT("Contrôle Laser")
-#define MSG_LASER_OFF                       _UxGT("Laser Off")
-#define MSG_LASER_ON                        _UxGT("Laser On")
-#define MSG_LASER_POWER                     _UxGT("Puissance")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Inverser broches")
-#define MSG_SWITCH_PS_ON                    _UxGT("Allumer alim.")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Eteindre alim.")
-#define MSG_EXTRUDE                         _UxGT("Extrusion")
-#define MSG_RETRACT                         _UxGT("Retrait")
-#define MSG_MOVE_AXIS                       _UxGT("Déplacer un axe")
-#define MSG_BED_LEVELING                    _UxGT("Régler Niv. lit")
-#define MSG_LEVEL_BED                       _UxGT("Niveau du lit")
-#define MSG_LEVEL_CORNERS                   _UxGT("Niveau des coins")
-#define MSG_NEXT_CORNER                     _UxGT("Coin suivant")
-#define MSG_MESH_EDITOR                     _UxGT("Edition Maillage")
-#define MSG_EDIT_MESH                       _UxGT("Modifier maille")
-#define MSG_EDITING_STOPPED                 _UxGT("Arrêt édit. maillage")
-#define MSG_PROBING_MESH                    _UxGT("Mesure point")
-#define MSG_MESH_X                          _UxGT("Index X")
-#define MSG_MESH_Y                          _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Valeur Z")
-#define MSG_USER_MENU                       _UxGT("Commandes perso")
+namespace Language_fr {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_LCD_TILTING_MESH                _UxGT("Touche point")
-#define MSG_M48_TEST                        _UxGT("Ecart sonde Z M48")
-#define MSG_M48_DEVIATION                   _UxGT("Ecart")
-#define MSG_M48_POINT                       _UxGT("Point M48")
-#define MSG_IDEX_MENU                       _UxGT("Mode IDEX")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplication")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copie miroir")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Contrôle complet")
-#define MSG_OFFSETS_MENU                    _UxGT("Offsets Outil")
-#define MSG_X_OFFSET                        _UxGT("Buse 2 X")
-#define MSG_Y_OFFSET                        _UxGT("Buse 2 Y")
-#define MSG_Z_OFFSET                        _UxGT("Buse 2 Z")
-#define MSG_G26_HEATING_BED                 _UxGT("G26 Chauffe lit")
-#define MSG_G26_HEATING_NOZZLE              _UxGT("G26 Chauffe buse")
-#define MSG_G26_MANUAL_PRIME                _UxGT("Amorce manuelle...")
-#define MSG_G26_FIXED_LENGTH                _UxGT("Amorce longueur fixe")
-#define MSG_G26_PRIME_DONE                  _UxGT("Amorce terminée")
-#define MSG_G26_CANCELED                    _UxGT("G26 annulé")
-#define MSG_G26_LEAVING                     _UxGT("Sortie G26")
-#define MSG_UBL_DOING_G29                   _UxGT("G29 en cours")
-#define MSG_UBL_TOOLS                       _UxGT("Outils UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Niveau lit unifié")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Maillage manuel")
-#define MSG_UBL_BC_INSERT                   _UxGT("Poser câle & mesurer")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Mesure")
-#define MSG_UBL_BC_REMOVE                   _UxGT("ôter et mesurer lit")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Aller au suivant")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Activer l'UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Désactiver l'UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Température lit")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Température buse")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Editer maille")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Editer maille perso")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Réglage fin maille")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Terminer maille")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Créer maille perso")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Créer maille")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Créer maille " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Créer maille " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Créer maille froide")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Ajuster haut. maille")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Hauteur")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Valider maille")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Valider maille " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Valider maille " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Valider maille perso")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Continuer maille")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Niveau par maille")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Niveau à 3 points")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Niveau grille")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Maille de niveau")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Point latéral")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Type de carte")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Voir maille")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Voir pour hôte")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Voir pour CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Voir pour sauveg.")
-#define MSG_UBL_INFO_UBL                    _UxGT("Voir info UBL")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Taux de remplissage")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Remplissage manuel")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Remplissage auto")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Maille remplissage")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Tout annuler")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Annuler le plus près")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Réglage fin (tous)")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Réglage fin (proche)")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Stockage maille")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Slot mémoire")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Charger maille")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Sauver maille")
-#define MSG_MESH_LOADED                     _UxGT("Maille %i chargée")
-#define MSG_MESH_SAVED                      _UxGT("Maille %i enreg.")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Pas de mémoire")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Err: Enreg. UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Err: Ouvrir UBL")
-#define MSG_UBL_Z_OFFSET                    _UxGT("Z-Offset: ")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Décal. Z arrêté")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("UBL Pas à pas")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Français");
 
-#define MSG_LED_CONTROL                     _UxGT("Contrôle LED")
-#define MSG_LEDS                            _UxGT("Lumière")
-#define MSG_LED_PRESETS                     _UxGT("Préregl. LED")
-#define MSG_SET_LEDS_RED                    _UxGT("Rouge")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Orange")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Jaune")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Vert")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Bleu")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Violet")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Blanc")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Defaut")
-#define MSG_CUSTOM_LEDS                     _UxGT("LEDs perso.")
-#define MSG_INTENSITY_R                     _UxGT("Intensité rouge")
-#define MSG_INTENSITY_G                     _UxGT("Intensité vert")
-#define MSG_INTENSITY_B                     _UxGT("Intensité bleu")
-#define MSG_INTENSITY_W                     _UxGT("Intensité blanc")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Luminosité")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" prête.");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("Oui");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("Non");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Retour");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Annulation...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Média inséré");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Média retiré");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("Média libéré");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Attente média");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Err lecture média");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("USB débranché");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("Erreur média USB");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Butées");
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Butées SW");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu principal");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Config. avancée");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Configuration");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Exéc. auto#.gcode");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Arrêter moteurs");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menu debug");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Test barre progress.");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Origine auto");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Origine X auto");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Origine Y auto");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Origine Z auto");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Align. Z auto");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Origine XYZ...");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Clic pour commencer");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Point suivant");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Mise à niveau OK!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Hauteur lissée");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Régl. décal origine");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Décalages appliqués");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Régler origine");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Préchauffage ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" Tout");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" lit");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Régler préch. ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Préchauffage ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" Tout");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" lit");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Régler préch. ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Préchauffage perso");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Refroidir");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Contrôle Laser");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Puissance");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Inverser broches");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Allumer alim.");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Eteindre alim.");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrusion");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retrait");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Déplacer un axe");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Régler Niv. lit");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Niveau du lit");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Niveau des coins");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Coin suivant");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Edition Maillage");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Modifier maille");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Arrêt édit. maillage");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Mesure point");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Index X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Index Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Valeur Z");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Commandes perso");
 
-#define MSG_MOVING                          _UxGT("Déplacement...")
-#define MSG_FREE_XY                         _UxGT("Débloquer XY")
-#define MSG_MOVE_X                          _UxGT("Déplacer X")
-#define MSG_MOVE_Y                          _UxGT("Déplacer Y")
-#define MSG_MOVE_Z                          _UxGT("Déplacer Z")
-#define MSG_MOVE_E                          _UxGT("Extrudeur")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Buse trop froide")
-#define MSG_MOVE_Z_DIST                     _UxGT("Déplacer %smm")
-#define MSG_MOVE_01MM                       _UxGT("Déplacer 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Déplacer 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Déplacer 10mm")
-#define MSG_SPEED                           _UxGT("Vitesse")
-#define MSG_BED_Z                           _UxGT("Lit Z")
-#define MSG_NOZZLE                          _UxGT("Buse")
-#define MSG_BED                             _UxGT("Lit")
-#define MSG_CHAMBER                         _UxGT("Caisson")
-#define MSG_FAN_SPEED                       _UxGT("Vitesse ventil.")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Extra V ventil.")
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Touche point");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("Ecart sonde Z M48");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Ecart");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("Point M48");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("Mode IDEX");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Park");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplication");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Copie miroir");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Contrôle complet");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Offsets Outil");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("Buse 2 X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("Buse 2 Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("Buse 2 Z");
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 Chauffe lit");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 Chauffe buse");
+  PROGMEM Language_Str MSG_G26_MANUAL_PRIME                = _UxGT("Amorce manuelle...");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Amorce longueur fixe");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Amorce terminée");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 annulé");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("Sortie G26");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("G29 en cours");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Outils UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Niveau lit unifié");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Maillage manuel");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Poser câle & mesurer");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Mesure");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("ôter et mesurer lit");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Aller au suivant");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Activer l'UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Désactiver l'UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Température lit");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Température lit");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Température buse");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Température buse");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Editer maille");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Editer maille perso");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Réglage fin maille");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Terminer maille");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Créer maille perso");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Créer maille");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Créer maille ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Créer maille ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Créer maille froide");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Ajuster haut. maille");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Hauteur");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Valider maille");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Valider maille ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Valider maille ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Valider maille perso");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Continuer maille");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Niveau par maille");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Niveau à 3 points");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Niveau grille");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Maille de niveau");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Point latéral");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Type de carte");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Voir maille");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Voir pour hôte");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Voir pour CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Voir pour sauveg.");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Voir info UBL");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Taux de remplissage");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Remplissage manuel");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Remplissage auto");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Maille remplissage");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Tout annuler");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Annuler le plus près");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Réglage fin (tous)");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Réglage fin (proche)");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Stockage maille");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot mémoire");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Charger maille");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Sauver maille");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Maille %i chargée");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Maille %i enreg.");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Pas de mémoire");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: Enreg. UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: Ouvrir UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Z-Offset: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Décal. Z arrêté");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("UBL Pas à pas");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Créer maille froide");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Remplissage auto");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Valider maille");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Réglage fin (tous)");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Valider maille");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Réglage fin (tous)");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Sauver maille");
 
-#define MSG_FLOW                            _UxGT("Flux")
-#define MSG_CONTROL                         _UxGT("Contrôler")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Facteur")
-#define MSG_AUTOTEMP                        _UxGT("Temp. Auto.")
-#define MSG_LCD_ON                          _UxGT("Marche")
-#define MSG_LCD_OFF                         _UxGT("Arrêt")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Sélectionner")
-#define MSG_ACC                             _UxGT("Accélération")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve jerk")
-#define MSG_VELOCITY                        _UxGT("Vélocité")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Déviat. jonct.")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin ")
-#define MSG_VTRAV_MIN                       _UxGT("V dépl. min")
-#define MSG_ACCELERATION                    _UxGT("Accélération")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A retrait")
-#define MSG_A_TRAVEL                        _UxGT("A dépl.")
-#define MSG_STEPS_PER_MM                    _UxGT("Pas/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A pas/mm")
-  #define MSG_BSTEPS                        _UxGT("B pas/mm")
-  #define MSG_CSTEPS                        _UxGT("C pas/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X pas/mm")
-  #define MSG_BSTEPS                        _UxGT("Y pas/mm")
-  #define MSG_CSTEPS                        _UxGT("Z pas/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E pas/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 pas/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 pas/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 pas/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 pas/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 pas/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 pas/mm")
-#define MSG_TEMPERATURE                     _UxGT("Température")
-#define MSG_MOTION                          _UxGT("Mouvement")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Diamètre fil.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Retrait mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Charger mm")
-#define MSG_ADVANCE_K                       _UxGT("Avance K")
-#define MSG_CONTRAST                        _UxGT("Contraste LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Enregistrer config.")
-#define MSG_LOAD_EEPROM                     _UxGT("Charger config.")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Restaurer défauts")
-#define MSG_INIT_EEPROM                     _UxGT("Initialiser EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("MaJ Firmware SD")
-#define MSG_RESET_PRINTER                   _UxGT("RaZ imprimante")
-#define MSG_REFRESH                         _UxGT("Actualiser")
-#define MSG_WATCH                           _UxGT("Surveiller")
-#define MSG_PREPARE                         _UxGT("Préparer")
-#define MSG_TUNE                            _UxGT("Régler")
-#define MSG_START_PRINT                     _UxGT("Démarrer impression")
-#define MSG_BUTTON_NEXT                     _UxGT("Suivant")
-#define MSG_BUTTON_INIT                     _UxGT("Init.")
-#define MSG_BUTTON_STOP                     _UxGT("Stop")
-#define MSG_BUTTON_PRINT                    _UxGT("Imprimer")
-#define MSG_BUTTON_RESET                    _UxGT("Reset")
-#define MSG_BUTTON_CANCEL                   _UxGT("Annuler")
-#define MSG_BUTTON_DONE                     _UxGT("Terminé")
-#define MSG_PAUSE_PRINT                     _UxGT("Pause impression")
-#define MSG_RESUME_PRINT                    _UxGT("Reprendre impr.")
-#define MSG_STOP_PRINT                      _UxGT("Arrêter impr.")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Récupér. coupure")
-#define MSG_MEDIA_MENU                      _UxGT("Impression SD")
-#define MSG_NO_MEDIA                        _UxGT("Pas de média")
-#define MSG_DWELL                           _UxGT("Repos...")
-#define MSG_USERWAIT                        _UxGT("Attente utilis.")
-#define MSG_PRINT_PAUSED                    _UxGT("Impr. en pause")
-#define MSG_PRINTING                        _UxGT("Impression")
-#define MSG_PRINT_ABORTED                   _UxGT("Impr. annulée")
-#define MSG_NO_MOVE                         _UxGT("Moteurs bloqués")
-#define MSG_KILLED                          _UxGT("KILLED")
-#define MSG_STOPPED                         _UxGT("STOPPÉ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retrait mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Ech. Retr. mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retrait V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Saut Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Rappel mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Ech. Rappel mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Rappel V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("Ech. Rappel V")
-#define MSG_AUTORETRACT                     _UxGT("Retrait auto")
-#define MSG_TOOL_CHANGE                     _UxGT("Changement outil")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Augmenter Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Vitesse primaire")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Vitesse retrait")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Attente buse")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Distance retrait")
-#define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Longueur de purge")
-#define MSG_FILAMENTCHANGE                  _UxGT("Changer filament")
-#define MSG_FILAMENTLOAD                    _UxGT("Charger filament")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Retrait filament")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Décharger tout")
-#define MSG_INIT_MEDIA                      _UxGT("Charger le média")
-#define MSG_CHANGE_MEDIA                    _UxGT("Actualiser média")
-#define MSG_RELEASE_MEDIA                   _UxGT("Retirer le média")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonde Z hors lit")
-#define MSG_SKEW_FACTOR                     _UxGT("Facteur écart")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Cmd: Self-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Cmd: Reset")
-#define MSG_BLTOUCH_STOW                    _UxGT("Cmd: Ranger")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Cmd: Déployer")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("Cmd: Mode SW")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("Cmd: Mode 5V")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("Cmd: Mode OD")
-#define MSG_BLTOUCH_MODE_STORE              _UxGT("Appliquer Mode")
-#define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("Mise en 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("Mise en OD")
-#define MSG_BLTOUCH_MODE_ECHO               _UxGT("Afficher Mode")
-#define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT                    _UxGT("Init. TouchMI")
-#define MSG_TOUCHMI_ZTEST                   _UxGT("Test décalage Z")
-#define MSG_TOUCHMI_SAVE                    _UxGT("Sauvegarde")
-#define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("Déployer TouchMI")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Déployer Sonde Z")
-#define MSG_MANUAL_STOW                     _UxGT("Ranger Sonde Z")
-#define MSG_HOME_FIRST                      _UxGT("Origine %s%s%s Premier")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Décalage Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Total")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Butée abandon")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Err de chauffe")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Err de chauffe lit")
-#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Err chauffe caisson")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err TEMP. REDONDANTE")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Err THERMIQUE")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("Err THERMIQUE LIT")
-#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("Err THERMIQUE CAISSON")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err TEMP. MAX")
-#define MSG_ERR_MINTEMP                     _UxGT("Err TEMP. MIN")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err TEMP. MAX LIT")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err TEMP. MIN LIT")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err MAXTEMP CAISSON")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err MINTEMP CAISSON")
-#define MSG_ERR_Z_HOMING                    _UxGT("Origine XY Premier")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Contrôle LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Lumière");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Préregl. LED");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Rouge");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Orange");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Jaune");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Vert");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Bleu");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Violet");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Blanc");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Defaut");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("LEDs perso.");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intensité rouge");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intensité vert");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intensité bleu");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intensité blanc");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Luminosité");
 
-#define MSG_HALTED                          _UxGT("IMPR. STOPPÉE")
-#define MSG_PLEASE_RESET                    _UxGT("Redémarrer SVP")
-#define MSG_SHORT_DAY                       _UxGT("j") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Déplacement...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Débloquer XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Déplacer X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Déplacer Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Déplacer Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrudeur");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrudeur ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrudeur ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrudeur ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrudeur ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrudeur ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrudeur ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Buse trop froide");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Déplacer %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Déplacer 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Déplacer 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Déplacer 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Vitesse");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Lit Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Buse");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Buse ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Buse ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Buse ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Buse ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Buse ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Buse ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Lit");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Caisson");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vitesse ventil.");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Vitesse ventil. 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Vitesse ventil. 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Vitesse ventil. 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra V ventil.");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Extra V ventil. 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Extra V ventil. 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Extra V ventil. 3");
 
-#define MSG_HEATING                         _UxGT("En chauffe...")
-#define MSG_COOLING                         _UxGT("Refroidissement")
-#define MSG_BED_HEATING                     _UxGT("Lit en chauffe...")
-#define MSG_BED_COOLING                     _UxGT("Refroid. du lit...")
-#define MSG_CHAMBER_HEATING                 _UxGT("Chauffe caisson...")
-#define MSG_CHAMBER_COOLING                 _UxGT("Refroid. caisson...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibration Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrer X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrer Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrer Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrer centre")
-#define MSG_DELTA_SETTINGS                  _UxGT("Réglages Delta")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Calibration Auto")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Hauteur Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Delta Z sonde")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Diagonale")
-#define MSG_DELTA_HEIGHT                    _UxGT("Hauteur")
-#define MSG_DELTA_RADIUS                    _UxGT("Rayon")
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flux");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flux ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flux ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flux ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flux ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flux ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flux ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Contrôler");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Temp. Auto.");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Marche");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Arrêt");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Sélectionner");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Sélectionner ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Sélectionner ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Sélectionner ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Sélectionner ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Sélectionner ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Sélectionner ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Accélération");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Jerk");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT(" jerk");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT(" jerk");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT(" jerk");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve jerk");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Vélocité");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Déviat. jonct.");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("V dépl. min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accélération");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A retrait");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A dépl.");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Pas/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E pas/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" pas/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Température");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Mouvement");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E en mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Diamètre fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Diamètre fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Diamètre fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Diamètre fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Diamètre fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Diamètre fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Diamètre fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Retrait mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Charger mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Avance K");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("Avance K ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("Avance K ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("Avance K ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("Avance K ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("Avance K ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("Avance K ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Enregistrer config.");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Charger config.");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaurer défauts");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialiser EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("MaJ Firmware SD");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("RaZ imprimante");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Actualiser");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Surveiller");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Préparer");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Régler");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Démarrer impression");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Suivant");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Init.");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Stop");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Imprimer");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Reset");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Annuler");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Terminé");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pause impression");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Reprendre impr.");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Arrêter impr.");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Récupér. coupure");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Impression SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Pas de média");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Repos...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Attente utilis.");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Impr. en pause");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Impression");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impr. annulée");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Moteurs bloqués");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("KILLED");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("STOPPÉ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retrait mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Ech. Retr. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retrait V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Saut Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Rappel mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Ech. Rappel mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Rappel V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("Ech. Rappel V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Retrait auto");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Changement outil");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Augmenter Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Vitesse primaire");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Vitesse retrait");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Attente buse");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Distance retrait");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Longueur de purge");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Changer filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Changer filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Changer filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Changer filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Changer filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Changer filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Changer filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Charger filament");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Charger filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Charger filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Charger filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Charger filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Charger filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Charger filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Retrait filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Retrait filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Retrait filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Retrait filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Retrait filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Retrait filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Décharger tout");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Charger le média");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Actualiser média");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Retirer le média");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonde Z hors lit");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Facteur écart");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Cmd: Self-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Cmd: Reset");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Cmd: Ranger");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Cmd: Déployer");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("Cmd: Mode SW");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("Cmd: Mode 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("Cmd: Mode OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("Appliquer Mode");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("Mise en 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("Mise en OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("Afficher Mode");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("Init. TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Test décalage Z");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Sauvegarde");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("Déployer TouchMI");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Déployer Sonde Z");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Ranger Sonde Z");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Origine %s%s%s Premier");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Décalage Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Total");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Butée abandon");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Err de chauffe");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err TEMP. REDONDANTE");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Err THERMIQUE");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err TEMP. MAX");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err TEMP. MIN");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Origine XY Premier");
 
-#define MSG_INFO_MENU                       _UxGT("Infos imprimante")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Infos imprimante")
-#define MSG_3POINT_LEVELING                 _UxGT("Niveau à 3 points")
-#define MSG_LINEAR_LEVELING                 _UxGT("Niveau linéaire")
-#define MSG_BILINEAR_LEVELING               _UxGT("Niveau bilinéaire")
-#define MSG_UBL_LEVELING                    _UxGT("Niveau lit unifié")
-#define MSG_MESH_LEVELING                   _UxGT("Niveau maillage")
-#define MSG_INFO_STATS_MENU                 _UxGT("Stats. imprimante")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Infos carte")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistances")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrudeurs")
-#define MSG_INFO_BAUDRATE                   _UxGT("Bauds")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocole")
-#define MSG_CASE_LIGHT                      _UxGT("Lumière caisson")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Luminosité")
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("IMPR. STOPPÉE");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Redémarrer SVP");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("j"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Imprimante incorrecte")
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("En chauffe...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Refroidissement");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Lit en chauffe...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Refroid. du lit...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Chauffe caisson...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Refroid. caisson...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibration Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrer X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrer Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrer Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrer centre");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Réglages Delta");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Calibration Auto");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Hauteur Delta");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Delta Z sonde");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Diagonale");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Hauteur");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Rayon");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Nbre impressions")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Terminées")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tps impr. total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Impr. la + longue")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total filament")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Impressions")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Terminées")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Total")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("+ long")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Filament")
-#endif
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Infos imprimante");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Infos imprimante");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("Niveau à 3 points");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Niveau linéaire");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Niveau bilinéaire");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Niveau lit unifié");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Niveau maillage");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Stats. imprimante");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Infos carte");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistances");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrudeurs");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Bauds");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocole");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Lumière caisson");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Luminosité");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temp Min")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temp Max")
-#define MSG_INFO_PSU                        _UxGT("Alimentation")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Puiss. moteur ")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM sauv.")
-#define MSG_ERROR_TMC                       _UxGT("ERREUR CONNEXION TMC")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Imprimante incorrecte");
 
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("IMPR. PAUSE")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("CHARGER FIL")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("DECHARGER FIL")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("OPTIONS REPRISE:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Purger encore")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Reprendre impr.")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Buse: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Capteur fil.")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Echec origine")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Echec sonde")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Trop froid")
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("CHANGER FILAMENT")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("CHOISIR FILAMENT")
-#define MSG_MMU2_MENU                       _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Update MMU firmware!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU ne répond plus")
-#define MSG_MMU2_RESUME                     _UxGT("Continuer impr.")
-#define MSG_MMU2_RESUMING                   _UxGT("Reprise...")
-#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Charger filament")
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Charger tous")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Charger dans buse")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Ejecter filament")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Ejecter fil. 1")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Ejecter fil. 2")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Ejecter fil. 3")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Ejecter fil. 4")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Ejecter fil. 5")
-#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Retrait filament")
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Chargem. fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Ejection fil...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Retrait fil....")
-#define MSG_MMU2_ALL                        _UxGT("Tous")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
-#define MSG_MMU2_RESET                      _UxGT("Réinit. MMU")
-#define MSG_MMU2_RESETTING                  _UxGT("Réinit. MMU...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Retrait, click")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Nbre impressions");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Terminées");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tps impr. total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Impr. la + longue");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total filament");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Impressions");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Terminées");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Total");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("+ long");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Filament");
+  #endif
 
-#define MSG_MIX                             _UxGT("Mix")
-#define MSG_MIX_COMPONENT                   _UxGT("Composante")
-#define MSG_MIXER                           _UxGT("Mixeur")
-#define MSG_GRADIENT                        _UxGT("Dégradé")
-#define MSG_FULL_GRADIENT                   _UxGT("Dégradé complet")
-#define MSG_TOGGLE_MIX                      _UxGT("Toggle mix")
-#define MSG_CYCLE_MIX                       _UxGT("Cycle mix")
-#define MSG_GRADIENT_MIX                    _UxGT("Mix dégradé")
-#define MSG_REVERSE_GRADIENT                _UxGT("Inverser dégradé")
-#define MSG_ACTIVE_VTOOL                    _UxGT("Active V-tool")
-#define MSG_START_VTOOL                     _UxGT("Début V-tool")
-#define MSG_END_VTOOL                       _UxGT("  Fin V-tool")
-#define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-tool")
-#define MSG_RESET_VTOOLS                    _UxGT("Réinit. V-tools")
-#define MSG_COMMIT_VTOOL                    _UxGT("Valider Mix V-tool")
-#define MSG_VTOOLS_RESET                    _UxGT("V-tools réinit. ok")
-#define MSG_START_Z                         _UxGT("Début Z")
-#define MSG_END_Z                           _UxGT("  Fin Z")
-#define MSG_GAMES                           _UxGT("Jeux")
-#define MSG_BRICKOUT                        _UxGT("Casse-briques")
-#define MSG_INVADERS                        _UxGT("Invaders")
-#define MSG_SNAKE                           _UxGT("Sn4k3")
-#define MSG_MAZE                            _UxGT("Labyrinthe")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temp Min");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temp Max");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Alimentation");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Puiss. moteur ");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC EEPROM sauv.");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("ERREUR CONNEXION TMC");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Presser bouton")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("pour reprendre")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parking...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Attente filament")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("pour démarrer")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insérer filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("et app. bouton")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("pour continuer...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Presser le bouton")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("pour chauffer...")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Buse en chauffe")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Patienter SVP...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Attente")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("retrait du filament")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Attente")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("chargement filament")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Attente")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("Purge filament")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Presser pour finir")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("la purge du filament")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Attente reprise")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("impression")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Clic pour continuer")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Patience...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insérer fil.")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Chauffer ?")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Chauffage...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Retrait fil...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Chargement...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purge...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Terminer ?")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Reprise...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("CHANGER FILAMENT");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("IMPR. PAUSE");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("CHARGER FIL");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("DECHARGER FIL");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("OPTIONS REPRISE:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Purger encore");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Reprendre impr.");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Buse: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Capteur fil.");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Echec origine");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Echec sonde");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Trop froid");
 
-#define MSG_TMC_DRIVERS                     _UxGT("Drivers TMC")
-#define MSG_TMC_CURRENT                     _UxGT("Courant driver")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Seuil hybride")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Home sans capteur")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Mode pas à pas")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop activé")
-#define MSG_SERVICE_RESET                   _UxGT("Réinit.")
-#define MSG_SERVICE_IN                      _UxGT("  dans:")
-#define MSG_BACKLASH                        _UxGT("Backlash")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Correction")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Lissage")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("CHOISIR FILAMENT");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU ne répond plus");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Continuer impr.");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Reprise...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Charger filament");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Charger tous");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Charger dans buse");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Ejecter filament");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Ejecter fil. 1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Ejecter fil. 2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Ejecter fil. 3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Ejecter fil. 4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Ejecter fil. 5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Retrait filament");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Chargem. fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Ejection fil...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Retrait fil....");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("Tous");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filament 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filament 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filament 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filament 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filament 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Réinit. MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Réinit. MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Retrait, click");
+
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Composante 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Composante 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Composante 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Composante 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Composante 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Composante 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Mixeur");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Dégradé");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Dégradé complet");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Toggle mix");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Cycle mix");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Mix dégradé");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Inverser dégradé");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("Active V-tool");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("Début V-tool");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("  Fin V-tool");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("Alias V-tool");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("Réinit. V-tools");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("Valider Mix V-tool");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("V-tools réinit. ok");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Début Z:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("  Fin Z:");
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Jeux");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Casse-briques");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Labyrinthe");
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parking..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_2_LINE("Attente filament", "pour démarrer"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Insérer filament", "et app. bouton", "pour continuer..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
+  #else // LCD_HEIGHT < 4
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Clic pour continuer"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Patience..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Insérer fil."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Chauffer ?"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Chauffage..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Retrait fil..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Chargement..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Purge..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Terminer ?"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Reprise..."));
+  #endif // LCD_HEIGHT < 4
+
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Courant driver");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Seuil hybride");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Home sans capteur");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Mode pas à pas");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop activé");
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Réinit.");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT("  dans:");
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Correction");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Lissage");
+}
diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h
index c1fcc9a12a..554230ca35 100644
--- a/Marlin/src/lcd/language/language_gl.h
+++ b/Marlin/src/lcd/language/language_gl.h
@@ -32,222 +32,241 @@
 #define DISPLAY_CHARSET_ISO10646_1
 #define NOT_EXTENDED_ISO10646_1_5X7
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" lista.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Tarxeta inserida")
-#define MSG_MEDIA_REMOVED                   _UxGT("Tarxeta retirada")
-#define MSG_LCD_ENDSTOPS                    _UxGT("FinCarro")
-#define MSG_MAIN                            _UxGT("Menu principal")
-#define MSG_AUTOSTART                       _UxGT("Autoarranque")
-#define MSG_DISABLE_STEPPERS                _UxGT("Apagar motores")
-#define MSG_AUTO_HOME                       _UxGT("Ir a orixe")
-#define MSG_AUTO_HOME_X                     _UxGT("Ir orixe X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Ir orixe Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Ir orixe Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Ir orixes XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Prema pulsador")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Seguinte punto")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Nivelado feito")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Offsets na orixe")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets fixados")
-#define MSG_SET_ORIGIN                      _UxGT("Fixar orixe")
-#define MSG_PREHEAT_1                       _UxGT("Prequentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Prequentar " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL                   _UxGT("Preque. " PREHEAT_1_LABEL " Todo")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Preque. " PREHEAT_1_LABEL " Cama")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Preque. " PREHEAT_1_LABEL " conf")
-#define MSG_PREHEAT_2                       _UxGT("Prequentar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Prequentar " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Preque. " PREHEAT_2_LABEL " Todo")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Preque. " PREHEAT_2_LABEL " Cama")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Preque. " PREHEAT_2_LABEL " conf")
-#define MSG_COOLDOWN                        _UxGT("Arrefriar")
-#define MSG_SWITCH_PS_ON                    _UxGT("Acender")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Apagar")
-#define MSG_EXTRUDE                         _UxGT("Extrudir")
-#define MSG_RETRACT                         _UxGT("Retraer")
-#define MSG_MOVE_AXIS                       _UxGT("Mover eixe")
-#define MSG_BED_LEVELING                    _UxGT("Nivelar cama")
-#define MSG_LEVEL_BED                       _UxGT("Nivelar cama")
-#define MSG_MOVE_X                          _UxGT("Mover X")
-#define MSG_MOVE_Y                          _UxGT("Mover Y")
-#define MSG_MOVE_Z                          _UxGT("Mover Z")
-#define MSG_MOVE_E                          _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mover %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mover 10mm")
-#define MSG_SPEED                           _UxGT("Velocidade")
-#define MSG_BED_Z                           _UxGT("Cama Z")
-#define MSG_NOZZLE                          _UxGT("Bico")
-#define MSG_BED                             _UxGT("Cama")
-#define MSG_FAN_SPEED                       _UxGT("Velocidade vent.")
-#define MSG_FLOW                            _UxGT("Fluxo")
-//#define MSG_CONTROL                       _UxGT("Control")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP                      _UxGT("Autotemp")
-//#define MSG_LCD_ON                        _UxGT("On")
-//#define MSG_LCD_OFF                       _UxGT("Off")
-//#define MSG_PID_P                         _UxGT("PID-P")
-//#define MSG_PID_I                         _UxGT("PID-I")
-//#define MSG_PID_D                         _UxGT("PID-D")
-//#define MSG_PID_C                         _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Escolla")
-#define MSG_ACC                             _UxGT("Acel")
-//#define MSG_JERK                          _UxGT("Jerk")
-//#if IS_KINEMATIC
-//  #define MSG_VA_JERK                     _UxGT("Va-jerk")
-//  #define MSG_VB_JERK                     _UxGT("Vb-jerk")
-//  #define MSG_VC_JERK                     _UxGT("Vc-jerk")
-//#else
-//  #define MSG_VA_JERK                     _UxGT("Vx-jerk")
-//  #define MSG_VB_JERK                     _UxGT("Vy-jerk")
-//  #define MSG_VC_JERK                     _UxGT("Vz-jerk")
-//#endif
-//#define MSG_VE_JERK                       _UxGT("Ve-jerk")
-//#define MSG_VMAX                          _UxGT("Vmax ")
-//#define MSG_VMIN                          _UxGT("Vmin")
-//#define MSG_VTRAV_MIN                     _UxGT("VTrav min")
-//#define MSG_AMAX                          _UxGT("Amax ")
-//#define MSG_A_RETRACT                     _UxGT("A-retract")
-//#define MSG_A_TRAVEL                      _UxGT("A-travel")
-#define MSG_STEPS_PER_MM                    _UxGT("Pasos/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A pasos/mm")
-  #define MSG_BSTEPS                        _UxGT("B pasos/mm")
-  #define MSG_CSTEPS                        _UxGT("C pasos/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X pasos/mm")
-  #define MSG_BSTEPS                        _UxGT("Y pasos/mm")
-  #define MSG_CSTEPS                        _UxGT("Z pasos/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E pasos/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 pasos/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 pasos/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 pasos/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 pasos/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 pasos/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 pasos/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movemento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Diam. fil.")
-#define MSG_CONTRAST                        _UxGT("Constraste LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Gardar en memo.")
-#define MSG_LOAD_EEPROM                     _UxGT("Cargar de memo.")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Cargar de firm.")
-#define MSG_REFRESH                         _UxGT("Volver a cargar")
-#define MSG_WATCH                           _UxGT("Monitorizacion")
-#define MSG_PREPARE                         _UxGT("Preparar")
-#define MSG_TUNE                            _UxGT("Axustar")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausar impres.")
-#define MSG_RESUME_PRINT                    _UxGT("Seguir impres.")
-#define MSG_STOP_PRINT                      _UxGT("Deter impres.")
-#define MSG_MEDIA_MENU                      _UxGT("Tarxeta SD")
-#define MSG_NO_MEDIA                        _UxGT("Sen tarxeta SD")
-#define MSG_DWELL                           _UxGT("En repouso...")
-#define MSG_USERWAIT                        _UxGT("A espera...")
-#define MSG_PRINT_ABORTED                   _UxGT("Impre. cancelada")
-#define MSG_NO_MOVE                         _UxGT("Sen movemento.")
-#define MSG_KILLED                          _UxGT("PROGRAMA MORTO")
-#define MSG_STOPPED                         _UxGT("PROGRAMA PARADO")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retraccion mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Cambio retra. mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retraccion V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Alzar Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Recup. retra. mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Cambio recup. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Recuperacion V")
-#define MSG_AUTORETRACT                     _UxGT("Retraccion auto.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Cambiar filamen.")
-#define MSG_INIT_MEDIA                      _UxGT("Iniciando SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Cambiar SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda-Z sen cama")
-//#define MSG_HOME_FIRST                    _UxGT("Home %s%s%s first")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Comprobar BLTouch")
-#define MSG_BLTOUCH_RESET                   _UxGT("Iniciar BLTouch")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Offset Z")
-#define MSG_BABYSTEP_X                      _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y                      _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Micropaso Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Erro fin carro")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Fallo quentando")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Erro temperatura")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Temp. excesiva")
-//#define MSG_ERR_MAXTEMP                   _UxGT("Err: temp. max.")
-//#define MSG_ERR_MINTEMP                   _UxGT("Err: temp. min.")
-//#define MSG_ERR_MAXTEMP_BED               _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED               _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING                  _UxGT("Home XY first")
-#define MSG_HALTED                          _UxGT("SISTEMA MORTO")
-#define MSG_PLEASE_RESET                    _UxGT("Debe reiniciar!")
-//#define MSG_SHORT_DAY                     _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR                    _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE                  _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Quentando...")
-#define MSG_BED_HEATING                     _UxGT("Quentando cama...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibracion Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrar Centro")
-#define MSG_INFO_MENU                       _UxGT("Acerca de...")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Informacion")
-#define MSG_INFO_STATS_MENU                 _UxGT("Estadisticas")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Placa nai")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrusores")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocolo")
-#define MSG_CASE_LIGHT                      _UxGT("Luz")
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Total traballos")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Total completos")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tempo impresion")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Traballo +longo")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total extruido")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Traballos")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completos")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tempo")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("O +longo")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extruido")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("Fonte alime.")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Potencia motor")
-#define MSG_DAC_PERCENT                     _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Garda DAC EEPROM")
+namespace Language_gl {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Segue traballo")
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Galician");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Impresora incorrecta")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" lista.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Tarxeta inserida");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Tarxeta retirada");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("FinCarro");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu principal");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autoarranque");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Apagar motores");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Ir a orixe");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Ir orixe X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Ir orixe Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Ir orixe Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Ir orixes XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Prema pulsador");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Seguinte punto");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Nivelado feito");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Offsets na orixe");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offsets fixados");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Fixar orixe");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Prequentar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Todo");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Cama");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Prequentar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Todo");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Cama");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Arrefriar");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Acender");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Apagar");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrudir");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retraer");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mover eixe");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Nivelar cama");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Nivelar cama");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mover X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mover Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mover Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mover %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mover 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mover 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mover 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocidade");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Cama Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Bico");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Cama");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Velocidade vent.");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Velocidade vent. 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Velocidade vent. 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Velocidade vent. 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxo");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Fluxo ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Fluxo ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Fluxo ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Fluxo ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Fluxo ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Fluxo ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Escolla");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Escolla ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Escolla ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Escolla ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Escolla ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Escolla ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Escolla ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Acel");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Pasos/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E pasos/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" pasos/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movemento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E en mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Diam. fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Diam. fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Diam. fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Diam. fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Diam. fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Diam. fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Diam. fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Constraste LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gardar en memo.");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar de memo.");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Cargar de firm.");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Volver a cargar");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Monitorizacion");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Axustar");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausar impres.");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Seguir impres.");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Deter impres.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Tarxeta SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Sen tarxeta SD");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("En repouso...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("A espera...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impre. cancelada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sen movemento.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("PROGRAMA MORTO");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("PROGRAMA PARADO");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retraccion mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Cambio retra. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retraccion V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Alzar Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Recup. retra. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Cambio recup. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Recuperacion V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Retraccion auto.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Cambiar filamen.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Cambiar filamen. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Cambiar filamen. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Cambiar filamen. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Cambiar filamen. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Cambiar filamen. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Cambiar filamen. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Iniciando SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambiar SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda-Z sen cama");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Comprobar BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Iniciar BLTouch");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Offset Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Micropaso X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Micropaso Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Micropaso Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Erro fin carro");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Fallo quentando");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Erro temperatura");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Temp. excesiva");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("SISTEMA MORTO");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Debe reiniciar!");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Quentando...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Quentando cama...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibracion Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrar X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrar Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrar Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrar Centro");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Acerca de...");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Informacion");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Estadisticas");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Placa nai");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistores");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrusores");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baudios");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocolo");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Luz");
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Total traballos");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Total completos");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tempo impresion");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Traballo +longo");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total extruido");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Traballos");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completos");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tempo");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("O +longo");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extruido");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Temp");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Temp");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Fonte alime.");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Potencia motor");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Garda DAC EEPROM");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Agarde para")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("iniciar troco")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("de filamento")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Agarde pola")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("descarga do")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("filamento")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Introduza o")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("filamento e")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("faga click")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Agarde pola")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("carga do")
-  #define MSG_FILAMENT_CHANGE_LOAD_3        _UxGT("filamento")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Agarde para")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("seguir co")
-  #define MSG_FILAMENT_CHANGE_RESUME_3      _UxGT("traballo")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Agarde...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Descargando...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Introduza e click")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Cargando...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Seguindo...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Segue traballo");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Impresora incorrecta");
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Agarde para", "iniciar troco", "de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Agarde para", "seguir co", "traballo"));
+  #else // LCD_HEIGHT < 4
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Agarde..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Descargando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Introduza e click"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Cargando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Seguindo..."));
+  #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h
index ef65e09fee..06822b3ccf 100644
--- a/Marlin/src/lcd/language/language_hr.h
+++ b/Marlin/src/lcd/language/language_hr.h
@@ -30,223 +30,181 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" spreman.")
-#define MSG_MEDIA_INSERTED                  _UxGT("SD kartica umetnuta")
-#define MSG_MEDIA_REMOVED                   _UxGT("SD kartica uklonjena")
-//#define MSG_LCD_ENDSTOPS                  _UxGT("Endstops") // Max length 8 characters
-//#define MSG_MAIN                          _UxGT("Main")
-#define MSG_AUTOSTART                       _UxGT("Auto pokretanje")
-#define MSG_DISABLE_STEPPERS                _UxGT("Ugasi steppere")
-#define MSG_AUTO_HOME                       _UxGT("Automatski homing")
-#define MSG_AUTO_HOME_X                     _UxGT("Home-aj X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Home-aj Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Home-aj Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Home-aj XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Klikni za početak")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Sljedeća točka")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Niveliranje gotovo!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Postavi home offsete")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets postavljeni")
-#define MSG_SET_ORIGIN                      _UxGT("Postavi ishodište")
-#define MSG_PREHEAT_1                       _UxGT("Predgrij " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Sve")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Bed")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" conf")
-#define MSG_PREHEAT_2                       _UxGT("Predgrij " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Sve")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Bed")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" conf")
-#define MSG_COOLDOWN                        _UxGT("Hlađenje")
-#define MSG_SWITCH_PS_ON                    _UxGT("Uključi napajanje")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Isključi napajanje")
-//#define MSG_EXTRUDE                       _UxGT("Extrude")
-//#define MSG_RETRACT                       _UxGT("Retract")
-#define MSG_MOVE_AXIS                       _UxGT("Miči os")
-#define MSG_BED_LEVELING                    _UxGT("Niveliraj bed")
-#define MSG_LEVEL_BED                       _UxGT("Niveliraj bed")
-#define MSG_MOVE_X                          _UxGT("Miči X")
-#define MSG_MOVE_Y                          _UxGT("Miči Y")
-#define MSG_MOVE_Z                          _UxGT("Miči Z")
-//#define MSG_MOVE_E                        _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST                     _UxGT("Miči %smm")
-#define MSG_MOVE_01MM                       _UxGT("Miči 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Miči 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Miči 10mm")
-#define MSG_SPEED                           _UxGT("Brzina")
-#define MSG_BED_Z                           _UxGT("Bed Z")
-#define MSG_NOZZLE                          _UxGT("Dizna")
-#define MSG_BED                             _UxGT("Bed")
-#define MSG_FAN_SPEED                       _UxGT("Brzina ventilatora")
-//#define MSG_FLOW                          _UxGT("Flow")
-//#define MSG_CONTROL                       _UxGT("Control")
-//#define MSG_MIN                           _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-//#define MSG_MAX                           _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-//#define MSG_FACTOR                        _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP                      _UxGT("Autotemp")
-//#define MSG_LCD_ON                        _UxGT("On")
-//#define MSG_LCD_OFF                       _UxGT("Off")
-//#define MSG_PID_P                         _UxGT("PID-P")
-//#define MSG_PID_I                         _UxGT("PID-I")
-//#define MSG_PID_D                         _UxGT("PID-D")
-//#define MSG_PID_C                         _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Odaberi")
-//#define MSG_ACC                           _UxGT("Accel")
-//#define MSG_JERK                          _UxGT("Jerk")
-//#if IS_KINEMATIC
-//  #define MSG_VA_JERK                     _UxGT("Va-jerk")
-//  #define MSG_VB_JERK                     _UxGT("Vb-jerk")
-//  #define MSG_VC_JERK                     _UxGT("Vc-jerk")
-//#else
-//  #define MSG_VA_JERK                     _UxGT("Vx-jerk")
-//  #define MSG_VB_JERK                     _UxGT("Vy-jerk")
-//  #define MSG_VC_JERK                     _UxGT("Vz-jerk")
-//#endif
-//#define MSG_VE_JERK                       _UxGT("Ve-jerk")
-//#define MSG_VMAX                          _UxGT("Vmax ")
-//#define MSG_VMIN                          _UxGT("Vmin")
-//#define MSG_VTRAV_MIN                     _UxGT("VTrav min")
-//#define MSG_AMAX                          _UxGT("Amax ")
-//#define MSG_A_RETRACT                     _UxGT("A-retract")
-//#define MSG_A_TRAVEL                      _UxGT("A-travel")
-//#define MSG_STEPS_PER_MM                  _UxGT("Steps/mm")
-//#if IS_KINEMATIC
-//  #define MSG_ASTEPS                      _UxGT("Asteps/mm")
-//  #define MSG_BSTEPS                      _UxGT("Bsteps/mm")
-//  #define MSG_CSTEPS                      _UxGT("Csteps/mm")
-//#else
-//  #define MSG_ASTEPS                      _UxGT("Xsteps/mm")
-//  #define MSG_BSTEPS                      _UxGT("Ysteps/mm")
-//  #define MSG_CSTEPS                      _UxGT("Zsteps/mm")
-//#endif
-//#define MSG_ESTEPS                        _UxGT("Esteps/mm")
-//#define MSG_E0_STEPS                      _UxGT("E1steps/mm")
-//#define MSG_E1_STEPS                      _UxGT("E2steps/mm")
-//#define MSG_E2_STEPS                      _UxGT("E3steps/mm")
-//#define MSG_E3_STEPS                      _UxGT("E4steps/mm")
-//#define MSG_E4_STEPS                      _UxGT("E5steps/mm")
-//#define MSG_E5_STEPS                      _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperature")
-#define MSG_MOTION                          _UxGT("Gibanje")
-//#define MSG_FILAMENT                      _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_CONTRAST                        _UxGT("Kontrast LCD-a")
-#define MSG_STORE_EEPROM                    _UxGT("Pohrani u memoriju")
-#define MSG_LOAD_EEPROM                     _UxGT("Učitaj memoriju")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Učitaj failsafe")
-#define MSG_REFRESH                         _UxGT("Osvježi")
-#define MSG_WATCH                           _UxGT("Info screen")
-#define MSG_PREPARE                         _UxGT("Pripremi")
-//#define MSG_TUNE                          _UxGT("Tune")
-#define MSG_PAUSE_PRINT                     _UxGT("Pauziraj print")
-#define MSG_RESUME_PRINT                    _UxGT("Nastavi print")
-#define MSG_STOP_PRINT                      _UxGT("Zaustavi print")
-#define MSG_MEDIA_MENU                      _UxGT("Printaj s SD kartice")
-#define MSG_NO_MEDIA                        _UxGT("Nema SD kartice")
-//#define MSG_DWELL                         _UxGT("Sleep...")
-#define MSG_USERWAIT                        _UxGT("ÄŒekaj korisnika...")
-#define MSG_PRINT_ABORTED                   _UxGT("Print otkazan")
-//#define MSG_NO_MOVE                       _UxGT("No move.")
-//#define MSG_KILLED                        _UxGT("KILLED. ")
-#define MSG_STOPPED                         _UxGT("ZAUSTAVLJEN. ")
-//#define MSG_CONTROL_RETRACT               _UxGT("Retract mm")
-//#define MSG_CONTROL_RETRACT_SWAP          _UxGT("Swap Re.mm")
-//#define MSG_CONTROL_RETRACTF              _UxGT("Retract  V")
-//#define MSG_CONTROL_RETRACT_ZHOP          _UxGT("Hop mm")
-//#define MSG_CONTROL_RETRACT_RECOVER       _UxGT("UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAP  _UxGT("S UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVERF      _UxGT("UnRet  V")
-//#define MSG_AUTORETRACT                   _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Promijeni filament")
-#define MSG_INIT_MEDIA                      _UxGT("Init. SD karticu")
-#define MSG_CHANGE_MEDIA                    _UxGT("Promijeni SD karticu")
-//#define MSG_ZPROBE_OUT                    _UxGT("Z probe out. bed")
-//#define MSG_BLTOUCH_SELFTEST              _UxGT("BLTouch Self-Test")
-//#define MSG_BLTOUCH_RESET                 _UxGT("Reset BLTouch")
-//#define MSG_HOME_FIRST                    _UxGT("Home %s%s%s first")
-//#define MSG_ZPROBE_ZOFFSET                _UxGT("Z Offset")
-//#define MSG_BABYSTEP_X                    _UxGT("Babystep X")
-//#define MSG_BABYSTEP_Y                    _UxGT("Babystep Y")
-//#define MSG_BABYSTEP_Z                    _UxGT("Babystep Z")
-//#define MSG_ENDSTOP_ABORT                 _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Grijanje neuspješno")
-//#define MSG_ERR_REDUNDANT_TEMP            _UxGT("Err: REDUNDANT TEMP")
-//#define MSG_THERMAL_RUNAWAY               _UxGT("THERMAL RUNAWAY")
-//#define MSG_ERR_MAXTEMP                   _UxGT("Err: MAXTEMP")
-//#define MSG_ERR_MINTEMP                   _UxGT("Err: MINTEMP")
-//#define MSG_ERR_MAXTEMP_BED               _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED               _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING                  _UxGT("Home XY first")
-//#define MSG_HALTED                        _UxGT("PRINTER HALTED")
-//#define MSG_PLEASE_RESET                  _UxGT("Please reset")
-//#define MSG_SHORT_DAY                     _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR                    _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE                  _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Grijanje...")
-#define MSG_BED_HEATING                     _UxGT("Grijanje Bed-a...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibracija")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibriraj X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibriraj Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibriraj Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibriraj Središte")
-#define MSG_INFO_MENU                       _UxGT("O printeru")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Podaci o printeru")
-#define MSG_INFO_STATS_MENU                 _UxGT("Statistika printera")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Podaci o elektronici")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistori")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extruderi")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokol")
-#define MSG_CASE_LIGHT                      _UxGT("Osvjetljenje")
+namespace Language_hr {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Neispravan pisač")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Croatian");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Broj printova")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Završeni")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Ukupno printanja")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najduži print")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrudirano ukupno")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Printovi")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Završeni")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Ukupno")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najduži")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrudirano")
-#endif
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" spreman.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("SD kartica umetnuta");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("SD kartica uklonjena");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Main");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Auto pokretanje");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Ugasi steppere");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Automatski homing");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Home-aj X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Home-aj Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Home-aj Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Home-aj XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Klikni za početak");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Sljedeća točka");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Niveliranje gotovo!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Postavi home offsete");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offsets postavljeni");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Postavi ishodište");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Predgrij ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Sve");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Predgrij ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Sve");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Bed");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Hlađenje");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Uključi napajanje");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Isključi napajanje");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Miči os");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Niveliraj bed");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Niveliraj bed");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Miči X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Miči Y");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Miči %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Miči 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Miči 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Miči 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Brzina");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Bed Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Dizna");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Dizna ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Dizna ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Dizna ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Dizna ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Dizna ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Dizna ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Bed");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Brzina ventilatora");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Brzina ventilatora 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Brzina ventilatora 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Brzina ventilatora 3");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Odaberi");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Odaberi ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Odaberi ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Odaberi ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Odaberi ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Odaberi ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Odaberi ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperature");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Gibanje");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD-a");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Pohrani u memoriju");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Učitaj memoriju");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Učitaj failsafe");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Osvježi");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info screen");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Pripremi");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pauziraj print");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Nastavi print");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Zaustavi print");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Printaj s SD kartice");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Nema SD kartice");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("ÄŒekaj korisnika...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Print otkazan");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ZAUSTAVLJEN. ");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Promijeni filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Promijeni filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Promijeni filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Promijeni filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Promijeni filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Promijeni filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Promijeni filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Init. SD karticu");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Promijeni SD karticu");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Grijanje neuspješno");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Grijanje...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Grijanje Bed-a...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibracija");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibriraj X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibriraj Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibriraj Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibriraj Središte");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("O printeru");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Podaci o printeru");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Statistika printera");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Podaci o elektronici");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistori");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extruderi");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokol");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Osvjetljenje");
 
-//#define MSG_INFO_MIN_TEMP                 _UxGT("Min Temp")
-//#define MSG_INFO_MAX_TEMP                 _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("Napajanje")
-//#define MSG_DRIVE_STRENGTH                _UxGT("Drive Strength")
-//#define MSG_DAC_PERCENT                   _UxGT("Driver %")
-//#define MSG_DAC_EEPROM_WRITE              _UxGT("DAC EEPROM Write")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Neispravan pisač");
 
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Nastavi print")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Broj printova");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Završeni");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Ukupno printanja");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najduži print");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrudirano ukupno");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Printovi");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Završeni");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Ukupno");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najduži");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrudirano");
+  #endif
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Čekaj početak")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("filamenta")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("promijeni")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("ÄŒekaj")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("filament unload")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Umetni filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("i pritisni tipku")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("za nastavak...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Pričekaj")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("filament load")
-  //#define MSG_FILAMENT_CHANGE_RESUME_1    _UxGT("Wait for print")
-  //#define MSG_FILAMENT_CHANGE_RESUME_2    _UxGT("to resume")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Pričekaj...")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_1    _UxGT("Ejecting...")
-  //#define MSG_FILAMENT_CHANGE_INSERT_1    _UxGT("Insert and Click")
-  //#define MSG_FILAMENT_CHANGE_LOAD_1      _UxGT("Loading...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Nastavljam...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Napajanje");
+
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Nastavi print");
+
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD          = _UxGT(MSG_2_LINE("ÄŒekaj", "filament unload"));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD            = _UxGT(MSG_2_LINE("Pričekaj", "filament load"));
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME          = _UxGT(MSG_1_LINE("Nastavljam..."));
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Čekaj početak", "filamenta", "promijeni"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Umetni filament", "i pritisni tipku", "za nastavak..."));
+  #else
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT("Pričekaj...");
+    //PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT      = _UxGT(MSG_2_LINE("?", "?"));
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 3a0654633c..51adadb7a4 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -31,544 +31,637 @@
 
 #define DISPLAY_CHARSET_ISO10646_1
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" pronto.")
-#define MSG_YES                             _UxGT("SI")
-#define MSG_NO                              _UxGT("NO")
-#define MSG_BACK                            _UxGT("Indietro")
-#define MSG_MEDIA_ABORTING                  _UxGT("Annullando...")
-#define MSG_MEDIA_INSERTED                  _UxGT("Media inserito")
-#define MSG_MEDIA_REMOVED                   _UxGT("Media rimosso")
-#define MSG_MEDIA_RELEASED                  _UxGT("Media rilasciato")
-#define MSG_MEDIA_WAITING                   _UxGT("Aspettando media")
-#define MSG_MEDIA_READ_ERROR                _UxGT("Err.leggendo media")
-#define MSG_MEDIA_USB_REMOVED               _UxGT("Dispos.USB rimosso")
-#define MSG_MEDIA_USB_FAILED                _UxGT("Avvio USB fallito")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Finecor.") // Max 8 caratteri
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Finecorsa Soft")
-#define MSG_MAIN                            _UxGT("Menu principale")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Impostaz. avanzate")
-#define MSG_CONFIGURATION                   _UxGT("Configurazione")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Disabilita Motori")
-#define MSG_DEBUG_MENU                      _UxGT("Menu di debug")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Test barra avanzam.")
-#define MSG_AUTO_HOME                       _UxGT("Auto Home")
-#define MSG_AUTO_HOME_X                     _UxGT("Home asse X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Home asse Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Home asse Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Allineam.automat. Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Home assi XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Premi per iniziare")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Punto successivo")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Livel. terminato!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Fade Height")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Imp. offset home")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offset applicato")
-#define MSG_SET_ORIGIN                      _UxGT("Imposta Origine")
-#define MSG_PREHEAT_1                       _UxGT("Preriscalda " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Preris." PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1_N _UxGT("Tutto")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1_N _UxGT("Ugello")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1_N _UxGT("Piatto")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1_N _UxGT("conf")
-#define MSG_PREHEAT_2                       _UxGT("Preriscalda " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Preris." PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2_N _UxGT("Tutto")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2_N _UxGT("Ugello")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2_N _UxGT("Piatto")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2_N _UxGT("conf")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Prerisc.personal.")
-#define MSG_COOLDOWN                        _UxGT("Raffredda")
-#define MSG_LASER_MENU                      _UxGT("Controllo laser")
-#define MSG_LASER_OFF                       _UxGT("Laser Off")
-#define MSG_LASER_ON                        _UxGT("Laser On")
-#define MSG_LASER_POWER                     _UxGT("Potenza laser")
-#define MSG_SPINDLE_MENU                    _UxGT("Controllo mandrino")
-#define MSG_SPINDLE_OFF                     _UxGT("Mandrino Off")
-#define MSG_SPINDLE_ON                      _UxGT("Mandrino On")
-#define MSG_SPINDLE_POWER                   _UxGT("Potenza mandrino")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Inverti mandrino")
-#define MSG_SWITCH_PS_ON                    _UxGT("Accendi aliment.")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Spegni aliment.")
-#define MSG_EXTRUDE                         _UxGT("Estrudi")
-#define MSG_RETRACT                         _UxGT("Ritrai")
-#define MSG_MOVE_AXIS                       _UxGT("Muovi Asse")
-#define MSG_BED_LEVELING                    _UxGT("Livella piano")
-#define MSG_LEVEL_BED                       MSG_BED_LEVELING
-#define MSG_LEVEL_CORNERS                   _UxGT("Livella spigoli")
-#define MSG_NEXT_CORNER                     _UxGT("Prossimo spigolo")
-#define MSG_MESH_EDITOR                     _UxGT("Editor Mesh")
-#define MSG_EDIT_MESH                       _UxGT("Modifica Mesh")
-#define MSG_EDITING_STOPPED                 _UxGT("Modif. Mesh Fermata")
-#define MSG_PROBING_MESH                    _UxGT("Punto sondato")
-#define MSG_MESH_X                          _UxGT("Indice X")
-#define MSG_MESH_Y                          _UxGT("Indice Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Valore di Z")
-#define MSG_USER_MENU                       _UxGT("Comandi personaliz.")
-#define MSG_LCD_TILTING_MESH                _UxGT("Punto inclinaz.")
-#define MSG_M48_TEST                        _UxGT("Test sonda M48")
-#define MSG_M48_POINT                       _UxGT("Punto M48")
-#define MSG_M48_DEVIATION                   _UxGT("Deviazione")
-#define MSG_IDEX_MENU                       _UxGT("Modo IDEX")
-#define MSG_OFFSETS_MENU                    _UxGT("Strumenti Offsets")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicazione")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copia speculare")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Pieno controllo")
-#define MSG_X_OFFSET                        _UxGT("2° ugello X")
-#define MSG_Y_OFFSET                        _UxGT("2° ugello Y")
-#define MSG_Z_OFFSET                        _UxGT("2° ugello Z")
-#define MSG_UBL_DOING_G29                   _UxGT("G29 in corso")
-#define MSG_UBL_TOOLS                       _UxGT("Strumenti UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Mesh Manuale")
-#define MSG_UBL_BC_INSERT                   _UxGT("Metti spes. e misura")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Misura")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Rimuovi e mis.piatto")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Spostamento succes.")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Attiva UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Disattiva UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Temp. Piatto")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Temp. Ugello")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Modifica Mesh")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Modif.Mesh personal.")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Ritocca Mesh")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Modif.Mesh fatta")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Crea Mesh personal.")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Crea Mesh")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Crea Mesh " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Crea Mesh " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Crea Mesh a freddo")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Aggiusta Alt. Mesh")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Altezza")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Valida Mesh")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Valida Mesh " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Valida Mesh " PREHEAT_2_LABEL)
-#define MSG_G26_HEATING_BED                 _UxGT("G26 riscald.letto")
-#define MSG_G26_HEATING_NOZZLE              _UxGT("G26 riscald.ugello")
-#define MSG_G26_MANUAL_PRIME                _UxGT("Priming manuale...")
-#define MSG_G26_FIXED_LENGTH                _UxGT("Prime a lung.fissa")
-#define MSG_G26_PRIME_DONE                  _UxGT("Priming terminato")
-#define MSG_G26_CANCELED                    _UxGT("G26 Annullato")
-#define MSG_G26_LEAVING                     _UxGT("Uscita da G26")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Valida Mesh pers.")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Continua Mesh")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Livell. Mesh")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Livell. 3 Punti")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Livell. Griglia Mesh")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Livella Mesh")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Punti laterali")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Tipo di Mappa")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Esporta Mappa")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Esporta per Host")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Esporta in CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Backup esterno")
-#define MSG_UBL_INFO_UBL                    _UxGT("Esporta Info UBL")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Riempimento")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Riempimento Manuale")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Riempimento Smart")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Riempimento Mesh")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Invalida Tutto")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Invalid.Punto Vicino")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Ritocca All")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Ritocca Punto Vicino")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Mesh Salvate")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Slot di memoria")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Carica Mesh Piatto")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Salva Mesh Piatto")
-#define MSG_MESH_LOADED                     _UxGT("Mesh %i caricata")
-#define MSG_MESH_SAVED                      _UxGT("Mesh %i salvata")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Nessuna memoria")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Err: Salvataggio UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Err: Ripristino UBL")
-#define MSG_UBL_Z_OFFSET                    _UxGT("Z-Offset: ")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z-Offset Fermato")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("UBL passo passo")
+namespace Language_it {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_LED_CONTROL                     _UxGT("Controllo LED")
-#define MSG_LEDS                            _UxGT("Luci")
-#define MSG_LED_PRESETS                     _UxGT("Preset luce")
-#define MSG_SET_LEDS_RED                    _UxGT("Rosso")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Arancione")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Giallo")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Verde")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Blu")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indaco")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Viola")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Bianco")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Predefinito")
-#define MSG_CUSTOM_LEDS                     _UxGT("Luci personalizzate")
-#define MSG_INTENSITY_R                     _UxGT("Intensità rosso")
-#define MSG_INTENSITY_G                     _UxGT("Intensità verde")
-#define MSG_INTENSITY_B                     _UxGT("Intensità blu")
-#define MSG_INTENSITY_W                     _UxGT("Intensità bianco")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Luminosità")
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Italian");
 
-#define MSG_MOVING                          _UxGT("In movimento...")
-#define MSG_FREE_XY                         _UxGT("XY liberi")
-#define MSG_MOVE_X                          _UxGT("Muovi X")
-#define MSG_MOVE_Y                          _UxGT("Muovi Y")
-#define MSG_MOVE_Z                          _UxGT("Muovi Z")
-#define MSG_MOVE_E                          _UxGT("Estrusore")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Ugello freddo")
-#define MSG_MOVE_Z_DIST                     _UxGT("Muovi di %smm")
-#define MSG_MOVE_01MM                       _UxGT("Muovi di 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Muovi di 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Muovi di 10mm")
-#define MSG_SPEED                           _UxGT("Velocità")
-#define MSG_BED_Z                           _UxGT("Piatto Z")
-#define MSG_NOZZLE                          _UxGT("Ugello")
-#define MSG_BED                             _UxGT("Piatto")
-#define MSG_CHAMBER                         _UxGT("Camera")
-#define MSG_FAN_SPEED                       _UxGT("Vel. ventola") // Max 15 caratteri
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Extra vel.vent.") // Max 15 caratteri
-#define MSG_FLOW                            _UxGT("Flusso")
-#define MSG_CONTROL                         _UxGT("Controllo")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Seleziona")
-#define MSG_ACC                             _UxGT("Accel")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Deviaz. giunzioni")
-#define MSG_VELOCITY                        _UxGT("Velocità")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_ACCELERATION                    _UxGT("Accelerazione")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-Ritrazione")
-#define MSG_A_TRAVEL                        _UxGT("A-Spostamento")
-#define MSG_STEPS_PER_MM                    _UxGT("Passi/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Apassi/mm")
-  #define MSG_BSTEPS                        _UxGT("Bpassi/mm")
-  #define MSG_CSTEPS                        _UxGT("Cpassi/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xpassi/mm")
-  #define MSG_BSTEPS                        _UxGT("Ypassi/mm")
-  #define MSG_CSTEPS                        _UxGT("Zpassi/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Epassi/mm")
-#define MSG_E0_STEPS                        _UxGT("E1passi/mm")
-#define MSG_E1_STEPS                        _UxGT("E2passi/mm")
-#define MSG_E2_STEPS                        _UxGT("E3passi/mm")
-#define MSG_E3_STEPS                        _UxGT("E4passi/mm")
-#define MSG_E4_STEPS                        _UxGT("E5passi/mm")
-#define MSG_E5_STEPS                        _UxGT("E6passi/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movimento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("Diam. filo")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Rimuovi mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Carica mm")
-#define MSG_ADVANCE_K                       _UxGT("K Avanzamento")
-#define MSG_CONTRAST                        _UxGT("Contrasto LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Salva impostazioni")
-#define MSG_LOAD_EEPROM                     _UxGT("Carica impostazioni")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Ripristina imp.")
-#define MSG_INIT_EEPROM                     _UxGT("Inizializza EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Aggiorna media")
-#define MSG_RESET_PRINTER                   _UxGT("Resetta stampante")
-#define MSG_REFRESH                         _UxGT("Aggiorna")
-#define MSG_WATCH                           _UxGT("Schermata info")
-#define MSG_PREPARE                         _UxGT("Prepara")
-#define MSG_TUNE                            _UxGT("Regola")
-#define MSG_START_PRINT                     _UxGT("Avvia stampa")
-#define MSG_BUTTON_NEXT                     _UxGT("Prossimo")
-#define MSG_BUTTON_INIT                     _UxGT("Inizializza")
-#define MSG_BUTTON_STOP                     _UxGT("Stop")
-#define MSG_BUTTON_PRINT                    _UxGT("Stampa")
-#define MSG_BUTTON_RESET                    _UxGT("Resetta")
-#define MSG_BUTTON_CANCEL                   _UxGT("Annulla")
-#define MSG_BUTTON_DONE                     _UxGT("Fatto")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausa stampa")
-#define MSG_RESUME_PRINT                    _UxGT("Riprendi stampa")
-#define MSG_STOP_PRINT                      _UxGT("Arresta stampa")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Ripresa da PowerLoss")
-#define MSG_MEDIA_MENU                      _UxGT("Stampa da media")
-#define MSG_NO_MEDIA                        _UxGT("Media non presente")
-#define MSG_DWELL                           _UxGT("Sospensione...")
-#define MSG_USERWAIT                        _UxGT("Premi tasto..")
-#define MSG_PRINT_PAUSED                    _UxGT("Stampa sospesa")
-#define MSG_PRINTING                        _UxGT("Stampa...")
-#define MSG_PRINT_ABORTED                   _UxGT("Stampa annullata")
-#define MSG_NO_MOVE                         _UxGT("Nessun Movimento")
-#define MSG_KILLED                          _UxGT("UCCISO. ")
-#define MSG_STOPPED                         _UxGT("ARRESTATO. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Ritrai mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Scamb. Ritrai mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Ritrai  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Salta mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Scamb. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("AutoRitrai")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Dist. ritrazione")
-#define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Lunghezza spurgo")
-#define MSG_TOOL_CHANGE                     _UxGT("Cambio utensile")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Risalita Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Velocità innesco")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Velocità retrazione")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Standby ugello")
-#define MSG_FILAMENTCHANGE                  _UxGT("Cambia filamento")
-#define MSG_FILAMENTLOAD                    _UxGT("Carica filamento")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Rimuovi filamento")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Rimuovi tutto")
-#define MSG_INIT_MEDIA                      _UxGT("Inizializ. media")
-#define MSG_CHANGE_MEDIA                    _UxGT("Cambia media")
-#define MSG_RELEASE_MEDIA                   _UxGT("Rilascia media")
-#define MSG_ZPROBE_OUT                      _UxGT("Z probe fuori piatto")
-#define MSG_SKEW_FACTOR                     _UxGT("Fattore distorsione")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Autotest BLTouch")
-#define MSG_BLTOUCH_RESET                   _UxGT("Resetta BLTouch")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Estendi BLTouch")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("BLTouch modo SW")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("BLTouch modo 5V")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("BLTouch modo OD")
-#define MSG_BLTOUCH_MODE_STORE              _UxGT("BLTouch modo mem.")
-#define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("Metti BLTouch a 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("Metti BLTouch a OD")
-#define MSG_BLTOUCH_MODE_ECHO               _UxGT("Segnala modo")
-#define MSG_BLTOUCH_MODE_CHANGE             _UxGT("PERICOLO: Impostazioni errate possono cause danni! Procedo comunque?")
-#define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT                    _UxGT("Inizializ.TouchMI")
-#define MSG_TOUCHMI_ZTEST                   _UxGT("Test Z offset")
-#define MSG_TOUCHMI_SAVE                    _UxGT("Memorizzare")
-#define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("Estendi TouchMI")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Estendi Sonda-Z")
-#define MSG_BLTOUCH_STOW                    _UxGT("Ritrai BLTouch")
-#define MSG_MANUAL_STOW                     _UxGT("Ritrai Sonda-Z")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s prima")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Offset sonda Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Totali")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Finecorsa annullati")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Riscald. Fallito")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Risc. piatto fallito")
-#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Risc. camera fallito")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: TEMP RIDONDANTE")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("TEMP FUORI CONTROLLO")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("TEMP PIAT.FUORI CTRL")
-#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("T.CAMERA FUORI CTRL")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err: TEMP MASSIMA")
-#define MSG_ERR_MINTEMP                     _UxGT("Err: TEMP MINIMA")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: TEMP MAX PIATTO")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err: TEMP MIN PIATTO")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Err: TEMP MAX CAMERA")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Err: TEMP MIN CAMERA")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY prima")
-#define MSG_HALTED                          _UxGT("STAMPANTE FERMATA")
-#define MSG_PLEASE_RESET                    _UxGT("Riavviare prego")
-#define MSG_SHORT_DAY                       _UxGT("g") // Un solo carattere
-#define MSG_SHORT_HOUR                      _UxGT("h") // Un solo carattere
-#define MSG_SHORT_MINUTE                    _UxGT("m") // Un solo carattere
-#define MSG_HEATING                         _UxGT("Riscaldamento...")
-#define MSG_COOLING                         _UxGT("Raffreddamento..")
-#define MSG_BED_HEATING                     _UxGT("Risc. piatto...")
-#define MSG_BED_COOLING                     _UxGT("Raffr. piatto...")
-#define MSG_CHAMBER_HEATING                 _UxGT("Risc. camera...")
-#define MSG_CHAMBER_COOLING                 _UxGT("Raffr. camera...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibraz. Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibra X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibra Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibra Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibra centro")
-#define MSG_DELTA_SETTINGS                  _UxGT("Impostaz. Delta")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto calibrazione")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Imp. altezza Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Offset sonda-Z")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Barra Diagonale")
-#define MSG_DELTA_HEIGHT                    _UxGT("Altezza")
-#define MSG_DELTA_RADIUS                    _UxGT("Raggio")
-#define MSG_INFO_MENU                       _UxGT("Riguardo stampante")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info. stampante")
-#define MSG_3POINT_LEVELING                 _UxGT("Livel. a 3 punti")
-#define MSG_LINEAR_LEVELING                 _UxGT("Livel. Lineare")
-#define MSG_BILINEAR_LEVELING               _UxGT("Livel. Bilineare")
-#define MSG_UBL_LEVELING                    _UxGT("Livel.piatto unific.")
-#define MSG_MESH_LEVELING                   _UxGT("Livel. Mesh")
-#define MSG_INFO_STATS_MENU                 _UxGT("Statistiche")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info. scheda")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistori")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Estrusori")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocollo")
-#define MSG_INFO_RUNAWAY_OFF                _UxGT("Controllo fuga: OFF")
-#define MSG_INFO_RUNAWAY_ON                 _UxGT("Controllo fuga: ON")
-#define MSG_CASE_LIGHT                      _UxGT("Luci Case")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Luminosità Luci")
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Contat. stampa")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completati")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tempo totale")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Lavoro più lungo")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Totale estruso")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Stampe")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Completati")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Durata")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Più lungo")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Estruso")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temp min")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temp max")
-#define MSG_INFO_PSU                        _UxGT("Alimentatore")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Potenza Drive")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_ERROR_TMC                       _UxGT("ERR.CONNESSIONE TMC")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Scrivi DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CAMBIO FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("STAMPA IN PAUSA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("CARICA FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("RIMUOVI FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("OPZIONI RIPRESA:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Spurga di più")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Riprendi stampa")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Ugello: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Sens.filo termin.")  // Max 17 caratteri
-#define MSG_RUNOUT_DISTANCE_MM              _UxGT("Dist mm filo term.")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Home fallito")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Sondaggio fallito")
-#define MSG_M600_TOO_COLD                   _UxGT("M600:Troppo freddo")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" pronto.");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("SI");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NO");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Indietro");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Annullando...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Media inserito");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Media rimosso");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("Media rilasciato");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Aspettando media");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Err.leggendo media");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("Dispos.USB rimosso");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("Avvio USB fallito");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Finecor."); // Max 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Finecorsa Soft");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu principale");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Impostaz. avanzate");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Configurazione");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Disabilita Motori");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menu di debug");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Test barra avanzam.");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Auto Home");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Home asse X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Home asse Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Home asse Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Allineam.automat. Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Home assi XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Premi per iniziare");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Punto successivo");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Livel. terminato!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Fade Height");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Imp. offset home");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offset applicato");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Imposta Origine");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Preriscalda ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Tutto");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Piatto");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Preriscalda ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Tutto");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Piatto");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" conf");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Prerisc.personal.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Raffredda");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Controllo laser");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Laser Off");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Laser On");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Potenza laser");
+  PROGMEM Language_Str MSG_SPINDLE_MENU                    = _UxGT("Controllo mandrino");
+  PROGMEM Language_Str MSG_SPINDLE_OFF                     = _UxGT("Mandrino Off");
+  PROGMEM Language_Str MSG_SPINDLE_ON                      = _UxGT("Mandrino On");
+  PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Potenza mandrino");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Inverti mandrino");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Accendi aliment.");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Spegni aliment.");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Estrudi");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Ritrai");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Muovi Asse");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Livella piano");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Livella piano");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Livella spigoli");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Prossimo spigolo");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Editor Mesh");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Modifica Mesh");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Modif. Mesh Fermata");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Punto sondato");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Indice X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Indice Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Valore di Z");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Comandi personaliz.");
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Punto inclinaz.");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("Test sonda M48");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("Punto M48");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Deviazione");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("Modo IDEX");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Strumenti Offsets");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Park");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplicazione");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Copia speculare");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Pieno controllo");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2° ugello X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2° ugello Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2° ugello Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("G29 in corso");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Strumenti UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Unified Bed Leveling");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Mesh Manuale");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Metti spes. e misura");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Misura");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Rimuovi e mis.piatto");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Spostamento succes.");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Attiva UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Disattiva UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Temp. Piatto");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Temp. Piatto");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Temp. Ugello");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Temp. Ugello");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Modifica Mesh");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Modif.Mesh personal.");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Ritocca Mesh");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Modif.Mesh fatta");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Crea Mesh personal.");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Crea Mesh");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Crea Mesh ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Crea Mesh ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Crea Mesh a freddo");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Aggiusta Alt. Mesh");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Altezza");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Valida Mesh");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Valida Mesh ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Valida Mesh ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 riscald.letto");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 riscald.ugello");
+  PROGMEM Language_Str MSG_G26_MANUAL_PRIME                = _UxGT("Priming manuale...");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Prime a lung.fissa");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Priming terminato");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 Annullato");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("Uscita da G26");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Valida Mesh pers.");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Continua Mesh");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Livell. Mesh");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Livell. 3 Punti");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Livell. Griglia Mesh");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Livella Mesh");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Punti laterali");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Tipo di Mappa");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Esporta Mappa");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Esporta per Host");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Esporta in CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Backup esterno");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Esporta Info UBL");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Riempimento");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Riempimento Manuale");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Riempimento Smart");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Riempimento Mesh");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Invalida Tutto");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Invalid.Punto Vicino");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Ritocca All");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Ritocca Punto Vicino");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Mesh Salvate");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot di memoria");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Carica Mesh Piatto");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salva Mesh Piatto");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i caricata");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i salvata");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nessuna memoria");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: Salvataggio UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: Ripristino UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Z-Offset: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z-Offset Fermato");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("UBL passo passo");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Crea Mesh a freddo");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Riempimento Smart");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Valida Mesh");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Ritocca All");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Valida Mesh");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Ritocca All");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Salva Mesh Piatto");
 
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("CAMBIO FILAMENTO")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("SCELTA FILAMENTO")
-#define MSG_MMU2_MENU                       _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Agg.firmware MMU!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU chiede attenz.")
-#define MSG_MMU2_RESUME                     _UxGT("Riprendi stampa")
-#define MSG_MMU2_RESUMING                   _UxGT("Ripresa...")
-#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Carica filamento")
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Carica tutto")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Carica fino ugello")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Espelli filamento")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Espelli filam.1")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Espelli filam.2")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Espelli filam.3")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Espelli filam.4")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Espelli filam.5")
-#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Scarica filamento")
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Caric.fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Esplus.filam. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Scaric.filam. ...")
-#define MSG_MMU2_ALL                        _UxGT("Tutto")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filamento 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filamento 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filamento 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filamento 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filamento 5")
-#define MSG_MMU2_RESET                      _UxGT("Azzera MMU")
-#define MSG_MMU2_RESETTING                  _UxGT("Azzeramento MMU...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Rimuovi, click")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Controllo LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Luci");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Preset luce");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Rosso");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Arancione");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Giallo");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Verde");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Blu");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indaco");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Viola");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Bianco");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Predefinito");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Luci personalizzate");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intensità rosso");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intensità verde");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intensità blu");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intensità bianco");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Luminosità");
 
-#define MSG_MIX                             _UxGT("Miscela")
-#define MSG_MIX_COMPONENT                   _UxGT("Componente")
-#define MSG_MIXER                           _UxGT("Miscelatore")
-#define MSG_GRADIENT                        _UxGT("Gradiente")
-#define MSG_FULL_GRADIENT                   _UxGT("Gradiente pieno")
-#define MSG_TOGGLE_MIX                      _UxGT("Alterna miscela")
-#define MSG_CYCLE_MIX                       _UxGT("Ciclo miscela")
-#define MSG_GRADIENT_MIX                    _UxGT("Miscela gradiente")
-#define MSG_REVERSE_GRADIENT                _UxGT("Inverti gradiente")
-#define MSG_ACTIVE_VTOOL                    _UxGT("V-tool attivo")
-#define MSG_START_VTOOL                     _UxGT("V-tool iniziale")
-#define MSG_END_VTOOL                       _UxGT("V-tool finale")
-#define MSG_GRADIENT_ALIAS                  _UxGT("V-tool alias")
-#define MSG_RESET_VTOOLS                    _UxGT("Ripristina V-tools")
-#define MSG_COMMIT_VTOOL                    _UxGT("Commit mix V-tool")
-#define MSG_VTOOLS_RESET                    _UxGT("V-tools ripristin.")
-#define MSG_START_Z                         _UxGT("Z inizio")
-#define MSG_END_Z                           _UxGT("Z fine")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("In movimento...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("XY liberi");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Muovi X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Muovi Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Muovi Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Estrusore");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Estrusore ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Estrusore ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Estrusore ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Estrusore ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Estrusore ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Estrusore ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Ugello freddo");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Muovi di %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Muovi di 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Muovi di 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Muovi di 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocità");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Piatto Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Ugello");
+  PROGMEM Language_Str MSG_NOZZLE_E0                       = _UxGT("Ugello ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_NOZZLE_E1                       = _UxGT("Ugello ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_NOZZLE_E2                       = _UxGT("Ugello ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_NOZZLE_E3                       = _UxGT("Ugello ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_NOZZLE_E4                       = _UxGT("Ugello ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_NOZZLE_E5                       = _UxGT("Ugello ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Piatto");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Camera");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. ventola"); // Max 15 characters
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Vel. ventola 1"); // Max 15 characters
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Vel. ventola 2"); // Max 15 characters
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Vel. ventola 3"); // Max 15 characters
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Extra vel.vent."); // Max 15 characters
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flusso");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flusso ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flusso ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flusso ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flusso ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flusso ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flusso ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controllo");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autotemp");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("On");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Off");
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Seleziona");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Seleziona ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Seleziona ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Seleziona ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Seleziona ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Seleziona ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Seleziona ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Accel");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Jerk");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-jerk");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-jerk");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-jerk");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-jerk");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Deviaz. giunzioni");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Velocità");
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vmin");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VTrav min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Accelerazione");
+  PROGMEM Language_Str MSG_AMAX                            = _UxGT("Amax ");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-Ritrazione");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-Spostamento");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Passi/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Epassi/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("passi/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movimento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Diam. filo");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Diam. filo ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Diam. filo ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Diam. filo ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Diam. filo ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Diam. filo ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Diam. filo ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Rimuovi mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Carica mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K Avanzamento");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K Avanzamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K Avanzamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K Avanzamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K Avanzamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K Avanzamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K Avanzamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrasto LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salva impostazioni");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carica impostazioni");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Ripristina imp.");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inizializza EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aggiorna media");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetta stampante");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Aggiorna");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Schermata info");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepara");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Regola");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Avvia stampa");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Prossimo");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Inizializza");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Stop");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Stampa");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Resetta");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Annulla");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Fatto");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausa stampa");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Riprendi stampa");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Arresta stampa");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Ripresa da PowerLoss");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Stampa da media");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Media non presente");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Sospensione...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Premi tasto..");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Stampa sospesa");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Stampa...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Stampa annullata");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Nessun Movimento");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("UCCISO. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ARRESTATO. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Ritrai mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Scamb. Ritrai mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Ritrai  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Salta mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Scamb. UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRitrai");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Dist. ritrazione");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Lunghezza spurgo");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Cambio utensile");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Risalita Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Velocità innesco");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Velocità retrazione");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Standby ugello");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Cambia filamento");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Cambia filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Cambia filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Cambia filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Cambia filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Cambia filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Cambia filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Carica filamento");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Carica filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Carica filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Carica filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Carica filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Carica filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Carica filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Rimuovi filamento");
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Rimuovi filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Rimuovi filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Rimuovi filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Rimuovi filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Rimuovi filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Rimuovi filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Rimuovi tutto");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Inizializ. media");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambia media");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Rilascia media");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z probe fuori piatto");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Fattore distorsione");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Autotest BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Resetta BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Estendi BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("BLTouch modo SW");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("BLTouch modo 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("BLTouch modo OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("BLTouch modo mem.");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("Metti BLTouch a 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("Metti BLTouch a OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("Segnala modo");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE             = _UxGT("PERICOLO: Impostazioni errate possono cause danni! Procedo comunque?");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("Inizializ.TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Test Z offset");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Memorizzare");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("Estendi TouchMI");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Estendi Sonda-Z");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Ritrai BLTouch");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Ritrai Sonda-Z");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s prima");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Offset sonda Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Totali");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Finecorsa annullati");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Riscald. Fallito");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Risc. piatto fallito");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER      = _UxGT("Risc. camera fallito");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Err: TEMP RIDONDANTE");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("TEMP FUORI CONTROLLO");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("TEMP PIAT.FUORI CTRL");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("T.CAMERA FUORI CTRL");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: TEMP MASSIMA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: TEMP MINIMA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err: TEMP MAX PIATTO");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err: TEMP MIN PIATTO");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Err: TEMP MAX CAMERA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Err: TEMP MIN CAMERA");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY prima");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("STAMPANTE FERMATA");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Riavviare prego");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("g"); // Un solo carattere
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); // Un solo carattere
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // Un solo carattere
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Riscaldamento...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Raffreddamento..");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Risc. piatto...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Raffr. piatto...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Risc. camera...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Raffr. camera...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibraz. Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibra X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibra Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibra Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibra centro");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Impostaz. Delta");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto calibrazione");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Imp. altezza Delta");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Offset sonda-Z");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Barra Diagonale");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Altezza");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Raggio");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Riguardo stampante");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info. stampante");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("Livel. a 3 punti");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Livel. Lineare");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Livel. Bilineare");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Livel.piatto unific.");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Livel. Mesh");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Statistiche");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info. scheda");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistori");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Estrusori");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocollo");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF                = _UxGT("Controllo fuga: OFF");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_ON                 = _UxGT("Controllo fuga: ON");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Luci Case");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Luminosità Luci");
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Contat. stampa");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completati");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tempo totale");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Lavoro più lungo");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Totale estruso");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Stampe");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Completati");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Durata");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Più lungo");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Estruso");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temp min");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temp max");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Alimentatore");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Potenza Drive");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("ERR.CONNESSIONE TMC");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Scrivi DAC EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("CAMBIO FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("STAMPA IN PAUSA");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("CARICA FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("RIMUOVI FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("OPZIONI RIPRESA:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Spurga di più");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Riprendi stampa");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Ugello: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Sens.filo termin.");  // Max 17 characters
+  PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM              = _UxGT("Dist mm filo term.");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Home fallito");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Sondaggio fallito");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600:Troppo freddo");
 
-#define MSG_GAMES                           _UxGT("Giochi")
-#define MSG_BRICKOUT                        _UxGT("Brickout")
-#define MSG_INVADERS                        _UxGT("Invaders")
-#define MSG_SNAKE                           _UxGT("Sn4k3")
-#define MSG_MAZE                            _UxGT("Maze")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("SCELTA FILAMENTO");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("Agg.firmware MMU!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU chiede attenz.");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Riprendi stampa");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Ripresa...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Carica filamento");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Carica tutto");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Carica fino ugello");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Espelli filamento");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Espelli filam.1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Espelli filam.2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Espelli filam.3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Espelli filam.4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Espelli filam.5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Scarica filamento");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Caric.fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Esplus.filam. ...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Scaric.filam. ...");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("Tutto");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filamento 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filamento 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filamento 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filamento 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filamento 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Azzera MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Azzeramento MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Rimuovi, click");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Stampante errata")
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Miscela");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Componente 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Componente 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Componente 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Componente 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Componente 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Componente 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Miscelatore");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Gradiente");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Gradiente pieno");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Alterna miscela");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Ciclo miscela");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Miscela gradiente");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Inverti gradiente");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("V-tool attivo");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("V-tool iniziale");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("V-tool finale");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("V-tool alias");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("Ripristina V-tools");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("Commit mix V-tool");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("V-tools ripristin.");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Z inizio:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("Z fine:");
 
-//
-// Le schermate di Cambio Filamento possono visualizzare fino a 3 linee su un display a 4 righe
-//                                                  ...o fino a 2 linee su un display a 3 righe.
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Premi per")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("riprendere")
-  #define MSG_ADVANCED_PAUSE_WAITING_3      _UxGT("la stampa")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parcheggiando...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Attendere avvio")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("del cambio")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("di filamento")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Inserisci il")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("filamento e premi")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("per continuare")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Premi per")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("riscaldare ugello")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Riscaldam. ugello")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Attendere prego...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Attendere")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("l'espulsione")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("del filamento")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Attendere")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("il caricamento")
-  #define MSG_FILAMENT_CHANGE_LOAD_3        _UxGT("del filamento")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Attendere")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("lo spurgo")
-  #define MSG_FILAMENT_CHANGE_PURGE_3       _UxGT("del filamento")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Premi x terminare")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("lo spurgo")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_3  _UxGT("del filamento")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Attendere")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("la ripresa")
-  #define MSG_FILAMENT_CHANGE_RESUME_3      _UxGT("della stampa...")
-#else // LCD_HEIGHT < 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Premi x continuare")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Attendere...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Inserisci e premi")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Riscalda ugello")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Riscaldamento...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Espulsione...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Caricamento...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Spurgo filamento")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Premi x terminare")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Ripresa...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Giochi");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Brickout");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Invaders");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Sn4k3");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Maze");
 
-#define MSG_TMC_DRIVERS                     _UxGT("Drivers TMC")
-#define MSG_TMC_CURRENT                     _UxGT("Driver in uso")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Soglia modo ibrido")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Azzer. sensorless")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Modo stepping")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop abil.")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Stampante errata");
 
-#define MSG_SERVICE_RESET                   _UxGT("Resetta")
-#define MSG_SERVICE_IN                      _UxGT(" tra:")
+  //
+  // Le schermate di Cambio Filamento possono visualizzare fino a 3 linee su un display a 4 righe
+  //                                                  ...o fino a 2 linee su un display a 3 righe.
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_3_LINE("Premi per", "riprendere", "la stampa"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parcheggiando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Attendere avvio", "del cambio", "di filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Inserisci il", "filamento e premi", "per continuare"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Premi per", "riscaldare ugello"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Riscaldam. ugello", "Attendere prego..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Attendere", "l'espulsione", "del filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Attendere", "il caricamento", "del filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_3_LINE("Attendere", "lo spurgo", "del filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_3_LINE("Premi x terminare", "lo spurgo", "del filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Attendere", "la ripresa", "della stampa..."));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Premi x continuare"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Attendere..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Inserisci e premi"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Riscalda ugello"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Riscaldamento..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Espulsione..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Caricamento..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Spurgo filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Premi x terminare"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Ripresa..."));
+  #endif // LCD_HEIGHT < 4
 
-#define MSG_BACKLASH                        _UxGT("Gioco")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Correzione")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Smoothing")
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("Drivers TMC");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Driver in uso");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Soglia modo ibrido");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Azzer. sensorless");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Modo stepping");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop abil.");
+
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Resetta");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" tra:");
+
+  PROGMEM Language_Str MSG_BACKLASH                        = _UxGT("Gioco");
+  PROGMEM Language_Str MSG_BACKLASH_A                      = LCD_STR_A;
+  PROGMEM Language_Str MSG_BACKLASH_B                      = LCD_STR_B;
+  PROGMEM Language_Str MSG_BACKLASH_C                      = LCD_STR_C;
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Correzione");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Smoothing");
+}
diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h
index 00403054db..d9538c5251 100644
--- a/Marlin/src/lcd/language/language_jp_kana.h
+++ b/Marlin/src/lcd/language/language_jp_kana.h
@@ -31,224 +31,284 @@
  */
 
 //#define DISPLAY_CHARSET_ISO10646_KANA
-#define CHARSIZE 3
 
-// This just to show the potential benefit of unicode.
-// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
+namespace Language_jp_kana {
+  using namespace Language_en; // Inherit undefined strings from English
 
-// 片仮名表示定義
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" ジュンビカンリョウ")
-#define MSG_MEDIA_INSERTED                  _UxGT("メディアガソウニュウサレマシタ")        // "Card inserted"
-#define MSG_MEDIA_REMOVED                   _UxGT("メディアガアリマセン")               // "Card removed"
-#define MSG_RELEASE_MEDIA                   _UxGT("メディアノトリダシ")
-#define MSG_MEDIA_RELEASED                  _UxGT("メディアガアリマセン")
-#define MSG_LCD_ENDSTOPS                    _UxGT("エンドストップ")                  // "Endstops" // Max length 8 characters
-#define MSG_MAIN                            _UxGT("メイン")                       // "Main"
-#define MSG_AUTOSTART                       _UxGT("ジドウカイシ")                   // "Autostart"
-#define MSG_DISABLE_STEPPERS                _UxGT("モーターデンゲン オフ")            // "Disable steppers"
-#define MSG_DEBUG_MENU                      _UxGT("デバッグメニュー")                // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST               _UxGT("プログレスバー テスト")            // "Progress Bar Test"
-#define MSG_AUTO_HOME                       _UxGT("ゲンテンフッキ")                  // "Auto home"
-#define MSG_AUTO_HOME_X                     _UxGT("Xジク ゲンテンフッキ")             // "Home X"
-#define MSG_AUTO_HOME_Y                     _UxGT("Yジク ゲンテンフッキ")             // "Home Y"
-#define MSG_AUTO_HOME_Z                     _UxGT("Zジク ゲンテンフッキ")             // "Home Z"
-#define MSG_LEVEL_BED_HOMING                _UxGT("ゲンテンフッキチュウ")              // "Homing XYZ"
-#define MSG_LEVEL_BED_WAITING               _UxGT("レベリングカイシ")                // "Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("ツギノソクテイテンヘ")             // "Next Point"
-#define MSG_LEVEL_BED_DONE                  _UxGT("レベリングカンリョウ")              // "Leveling Done!"
-#define MSG_SET_HOME_OFFSETS                _UxGT("キジュンオフセットセッテイ")         // "Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("オフセットガテキヨウサレマシタ")       // "Offsets applied"
-#define MSG_SET_ORIGIN                      _UxGT("キジュンセット")                 // "Set origin"
-#define MSG_PREHEAT_1                       _UxGT(PREHEAT_1_LABEL " ヨネツ")       // "Preheat " PREHEAT_1_LABEL
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   _UxGT(PREHEAT_1_LABEL " スベテヨネツ")  // " All"
-#define MSG_PREHEAT_1_BEDONLY               _UxGT(PREHEAT_1_LABEL " ベッドヨネツ")  // " Bed"
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT("セッテイ")       // " conf"
-#define MSG_PREHEAT_2                       _UxGT(PREHEAT_2_LABEL " ヨネツ")      // "Preheat " PREHEAT_2_LABEL
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   _UxGT(PREHEAT_2_LABEL " スベテヨネツ")  // " All"
-#define MSG_PREHEAT_2_BEDONLY               _UxGT(PREHEAT_2_LABEL " ベッドヨネツ")  // " Bed"
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT("セッテイ")       // " conf"
-#define MSG_COOLDOWN                        _UxGT("カネツテイシ")                  // "Cooldown"
-#define MSG_SWITCH_PS_ON                    _UxGT("デンゲン オン")                 // "Switch power on"
-#define MSG_SWITCH_PS_OFF                   _UxGT("デンゲン オフ")                 // "Switch power off"
-#define MSG_EXTRUDE                         _UxGT("オシダシ")                     // "Extrude"
-#define MSG_RETRACT                         _UxGT("ヒキコミセッテイ")                // "Retract"
-#define MSG_MOVE_AXIS                       _UxGT("ジクイドウ")                    // "Move axis"
-#define MSG_BED_LEVELING                    _UxGT("ベッドレベリング")                // "Bed leveling"
-#define MSG_LEVEL_BED                       _UxGT("ベッドレベリング")                // "Level bed"
+  constexpr uint8_t    CHARSIZE                            = 3;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Japanese");
 
-#define MSG_MOVING                          _UxGT("イドウチュウ")                   // "Moving..."
-#define MSG_FREE_XY                         _UxGT("XYジク カイホウ")                // "Free XY"
-#define MSG_MOVE_X                          _UxGT("Xジク イドウ")                  // "Move X"
-#define MSG_MOVE_Y                          _UxGT("Yジク イドウ")                  // "Move Y"
-#define MSG_MOVE_Z                          _UxGT("Zジク イドウ")                  // "Move Z"
-#define MSG_MOVE_E                          _UxGT("エクストルーダー")                // "Extruder"
-#define MSG_MOVE_Z_DIST                     _UxGT("%smm イドウ")                  // "Move 0.025mm"
-#define MSG_MOVE_01MM                       _UxGT("0.1mm イドウ")                 // "Move 0.1mm"
-#define MSG_MOVE_1MM                        _UxGT("  1mm イドウ")                 // "Move 1mm"
-#define MSG_MOVE_10MM                       _UxGT(" 10mm イドウ")                 // "Move 10mm"
-#define MSG_SPEED                           _UxGT("ソクド")                       // "Speed"
-#define MSG_BED_Z                           _UxGT("Zオフセット")                   // "Bed Z"
-#define MSG_NOZZLE                          _UxGT("ノズル")                       // "Nozzle"
-#define MSG_BED                             _UxGT("ベッド")                       // "Bed"
-#define MSG_FAN_SPEED                       _UxGT("ファンソクド")                    // "Fan speed"
-#define MSG_FLOW                            _UxGT("トシュツリョウ")                   // "Flow"
-#define MSG_CONTROL                         _UxGT("セイギョ")                      // "Control"
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" サイテイ") // " Min"
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" サイコウ") // " Max"
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" ファクター") // " Fact"
-#define MSG_AUTOTEMP                        _UxGT("ジドウオンドセイギョ")               // "Autotemp"
-#define MSG_LCD_ON                          _UxGT("オン")                         // "On"
-#define MSG_LCD_OFF                         _UxGT("オフ")                         // "Off"
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("センタク")                     // "Select"
-#define MSG_ACC                             _UxGT("カソクド mm/s²")               // "Accel"
-#define MSG_JERK                            _UxGT("ヤクドウ mm/s")                  // "Jerk"
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Aジク ヤクドウ mm/s")             // "Va-jerk"
-  #define MSG_VB_JERK                       _UxGT("Bジク ヤクドウ mm/s")             // "Vb-jerk"
-  #define MSG_VC_JERK                       _UxGT("Cジク ヤクドウ mm/s")             // "Vc-jerk"
-  #define MSG_ASTEPS                        _UxGT("Aステップ/mm")
-  #define MSG_BSTEPS                        _UxGT("Bステップ/mm")
-  #define MSG_CSTEPS                        _UxGT("Cステップ/mm")
-#else
-  #define MSG_VA_JERK                       _UxGT("Xジク ヤクドウ mm/s")             // "Vx-jerk"
-  #define MSG_VB_JERK                       _UxGT("Yジク ヤクドウ mm/s")             // "Vy-jerk"
-  #define MSG_VC_JERK                       _UxGT("Zジク ヤクドウ mm/s")             // "Vz-jerk"
-  #define MSG_ASTEPS                        _UxGT("Xステップ/mm")
-  #define MSG_BSTEPS                        _UxGT("Yステップ/mm")
-  #define MSG_CSTEPS                        _UxGT("Zステップ/mm")
-#endif
-#define MSG_VE_JERK                         _UxGT("エクストルーダー ヤクド")          // "Ve-jerk"
-#define MSG_VMAX                            _UxGT("サイダイオクリソクド ")            // "Vmax "
-#define MSG_VMIN                            _UxGT("サイショウオクリソクド")           // "Vmin"
-#define MSG_VTRAV_MIN                       _UxGT("サイショウイドウソクド")           // "VTrav min"
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("サイダイカソクド ")              // "Amax "
-#define MSG_A_RETRACT                       _UxGT("ヒキコミカソクド")               // "A-retract"
-#define MSG_A_TRAVEL                        _UxGT("イドウカソクド")                // "A-travel"
-#define MSG_TEMPERATURE                     _UxGT("オンド")                      // "Temperature"
-#define MSG_MOTION                          _UxGT("ウゴキセッテイ")                // "Motion"
-#define MSG_FILAMENT                        _UxGT("フィラメント")                   // "Filament"
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("フィラメントチョッケイ")            // "Fil. Dia."
-#define MSG_CONTRAST                        _UxGT("LCDコントラスト")               // "LCD contrast"
-#define MSG_STORE_EEPROM                    _UxGT("EEPROMヘホゾン")               // "Store memory"
-#define MSG_LOAD_EEPROM                     _UxGT("EEPROMカラヨミコミ")               // "Load memory"
-#define MSG_RESTORE_FAILSAFE                _UxGT("セッテイリセット")               // "Restore failsafe"
-#define MSG_REFRESH                         _UxGT("リフレッシュ")                  // "Refresh"
-#define MSG_WATCH                           _UxGT("ジョウホウガメン")               // "Info screen"
-#define MSG_PREPARE                         _UxGT("ジュンビセッテイ")               // "Prepare"
-#define MSG_TUNE                            _UxGT("チョウセイ")                    // "Tune"
-#define MSG_PAUSE_PRINT                     _UxGT("イチジテイシ")                  // "Pause print"
-#define MSG_RESUME_PRINT                    _UxGT("プリントサイカイ")                // "Resume print"
-#define MSG_STOP_PRINT                      _UxGT("プリントテイシ")                 // "Stop print"
-#define MSG_MEDIA_MENU                      _UxGT("メディアカラプリント")            // "Print from SD"
-#define MSG_NO_MEDIA                        _UxGT("メディアガアリマセン")            // "No SD card"
-#define MSG_DWELL                           _UxGT("キュウシ")                     // "Sleep..."
-#define MSG_USERWAIT                        _UxGT("シバラクオマチクダサイ")           // "Wait for user..."
-//#define MSG_USERWAIT                      _UxGT("ツヅケルニハクリックシテクダサイ")
-#define MSG_PRINT_ABORTED                   _UxGT("プリントガチュウシサレマシタ")       // "Print aborted"
-#define MSG_NO_MOVE                         _UxGT("ウゴキマセン")                  // "No move."
-#define MSG_KILLED                          _UxGT("ヒジョウテイシ")                  // "KILLED. "
-#define MSG_STOPPED                         _UxGT("テイシシマシタ")                  // "STOPPED. "
-#define MSG_CONTROL_RETRACT                 _UxGT("ヒキコミリョウ mm")                // "Retract mm"
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("ヒキコミリョウS mm")               // "Swap Re.mm"
-#define MSG_CONTROL_RETRACTF                _UxGT("ヒキコミソクド mm/s")             // "Retract  V"
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("ノズルタイヒ mm")                // "Hop mm"
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("ホショウリョウ mm")               // "UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("ホショウリョウS mm")              // "S UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("ホショウソクド mm/s")            // "UnRet  V"
-#define MSG_AUTORETRACT                     _UxGT("ジドウヒキコミ")                 // "AutoRetr."
-#define MSG_FILAMENTCHANGE                  _UxGT("フィラメントコウカン")              // "Change filament"
-#define MSG_INIT_MEDIA                      _UxGT("メディアサイヨミコミ")             // "Init. SD card"
-#define MSG_CHANGE_MEDIA                    _UxGT("メディアコウカン")               // "Change SD card"
-#define MSG_ZPROBE_OUT                      _UxGT("Zプローブ ベッドガイ")            // "Z probe out. bed"
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch ジコシンダン")          // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET                   _UxGT("BLTouch リセット")             // "Reset BLTouch"
-#define MSG_HOME_FIRST                      _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ") // "Home ... first"
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Zオフセット")                   // "Z Offset"
-#define MSG_BABYSTEP_X                      _UxGT("Xジク ビドウ")                  // "Babystep X"
-#define MSG_BABYSTEP_Y                      _UxGT("Yジク ビドウ")                  // "Babystep Y"
-#define MSG_BABYSTEP_Z                      _UxGT("Zジク ビドウ")                  // "Babystep Z"
-#define MSG_ENDSTOP_ABORT                   _UxGT("イドウゲンカイケンチキノウ")         // "Endstop abort"
-#define MSG_HEATING_FAILED_LCD              _UxGT("カネツシッパイ")                 // "Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("エラー:ジョウチョウサーミスターキノウ")  // "Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ネツボウソウ")                   // "THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP                     _UxGT("エラー:サイコウオンチョウカ")         // "Err: MAXTEMP"
-#define MSG_ERR_MINTEMP                     _UxGT("エラー:サイテイオンミマン")          // "Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("エラー:ベッド サイコウオンチョウカ")    // "Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED                 _UxGT("エラー:ベッド サイテイオンミマン")     // "Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING                    _UxGT("サキニ XY ヲフッキサセテクダサイ")     // "Home XY first"
-#define MSG_HALTED                          _UxGT("プリンターハテイシシマシタ")         // "PRINTER HALTED"
-#define MSG_PLEASE_RESET                    _UxGT("リセットシテクダサイ")              // "Please reset"
-#define MSG_SHORT_DAY                       _UxGT("d")                          // One character only
-#define MSG_SHORT_HOUR                      _UxGT("h")                          // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m")                          // One character only
-#define MSG_HEATING                         _UxGT("カネツチュウ")                   // "Heating..."
-#define MSG_BED_HEATING                     _UxGT("ベッド カネツチュウ")              // "Bed Heating..."
-#define MSG_DELTA_CALIBRATE                 _UxGT("デルタ コウセイ")                // "Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Xジク コウセイ")                 // "Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Yジク コウセイ")                 // "Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Zジク コウセイ")                 // "Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("チュウシン コウセイ")              // "Calibrate Center"
-#define MSG_INFO_MENU                       _UxGT("コノプリンターニツイテ")             // "About Printer"
-#define MSG_INFO_PRINTER_MENU               _UxGT("プリンタージョウホウ")              // "Printer Info"
-#define MSG_INFO_STATS_MENU                 _UxGT("プリントジョウキョウ")              // "Printer Stats"
-#define MSG_INFO_BOARD_MENU                 _UxGT("セイギョケイジョウホウ")            // "Board Info"
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("サーミスター")                   // "Thermistors"
-#define MSG_INFO_EXTRUDERS                  _UxGT("エクストルーダースウ")             // "Extruders"
-#define MSG_INFO_BAUDRATE                   _UxGT("ボーレート")                    // "Baud"
-#define MSG_INFO_PROTOCOL                   _UxGT("プロトコル")                    // "Protocol"
-#define MSG_CASE_LIGHT                      _UxGT("キョウタイナイショウメイ")       // "Case light"
-#define MSG_INFO_PRINT_COUNT                _UxGT("プリントスウ ")                  // "Print Count"
-#define MSG_INFO_COMPLETED_PRINTS           _UxGT("カンリョウスウ")                  // "Completed"
-#define MSG_INFO_PRINT_TIME                 _UxGT("プリントジカンルイケイ")            // "Total print time"
-#define MSG_INFO_PRINT_LONGEST              _UxGT("サイチョウプリントジカン")           // "Longest job time"
-#define MSG_INFO_PRINT_FILAMENT             _UxGT("フィラメントシヨウリョウルイケイ")       // "Extruded total"
-#define MSG_INFO_MIN_TEMP                   _UxGT("セッテイサイテイオン")              // "Min Temp"
-#define MSG_INFO_MAX_TEMP                   _UxGT("セッテイサイコウオン")              // "Max Temp"
-#define MSG_INFO_PSU                        _UxGT("デンゲンシュベツ")                // "Power Supply"
-#define MSG_DRIVE_STRENGTH                  _UxGT("モータークドウリョク")              // "Drive Strength"
-#define MSG_DAC_PERCENT                     _UxGT("DACシュツリョク %")               // "Driver %"
-#define MSG_DAC_EEPROM_WRITE                MSG_STORE_EEPROM                    // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("イチジテイシ")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("プリントサイカイ")                // "Resume print"
-#define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("コウカンヲカイシシマス")            // "Wait for start"
-#define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("シバラクオマチクダサイ")            // "of the filament"
-#define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("フィラメントヌキダシチュウ")          // "Wait for"
-#define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("シバラクオマチクダサイ")            // "filament unload"
-#define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("フィラメントヲソウニュウシ,")         // "Insert filament"
-#define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("クリックスルトゾッコウシマス")         // "and press button"
-#define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("フィラメントソウテンチュウ")          // "Wait for"
-#define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("シバラクオマチクダサイ")            // "filament load"
-#define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("プリントヲサイカイシマス")           // "Wait for print"
-#define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("シバラクオマチクダサイ")            // "to resume"
+  // This is just to show the potential benefit of Unicode.
+  // This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
 
-#define MSG_EXPECTED_PRINTER                _UxGT("マチガッタプリンター")               // "Wrong printer"
+  // 片仮名表示定義
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" ジュンビカンリョウ");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("メディアガソウニュウサレマシタ");        // "Card inserted"
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("メディアガアリマセン");               // "Card removed"
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("メディアノトリダシ");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("メディアガアリマセン");               // "Card removed"
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("エンドストップ");                  // "Endstops" // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("メイン");                       // "Main"
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("ジドウカイシ");                   // "Autostart"
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("モーターデンゲン オフ");            // "Disable steppers"
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("デバッグメニュー");                // "Debug Menu"
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("プログレスバー テスト");            // "Progress Bar Test"
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("ゲンテンフッキ");                  // "Auto home"
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Xジク ゲンテンフッキ");             // "Home X"
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Yジク ゲンテンフッキ");             // "Home Y"
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Zジク ゲンテンフッキ");             // "Home Z"
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("ゲンテンフッキチュウ");              // "Homing XYZ"
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("レベリングカイシ");                // "Click to Begin"
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("ツギノソクテイテンヘ");             // "Next Point"
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("レベリングカンリョウ");              // "Leveling Done!"
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("キジュンオフセットセッテイ");         // "Set home offsets"
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("オフセットガテキヨウサレマシタ");       // "Offsets applied"
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("キジュンセット");                 // "Set origin"
+  PROGMEM Language_Str MSG_PREHEAT_1                       = PREHEAT_1_LABEL _UxGT(" ヨネツ");       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N0;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N1;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N2;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N3;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N4;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N5;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = PREHEAT_1_LABEL _UxGT(" ヨネツノズル");  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N0;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N1;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N2;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N3;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N4;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N5;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = PREHEAT_1_LABEL _UxGT(" スベテヨネツ");  // " All"
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = PREHEAT_1_LABEL _UxGT(" ベッドヨネツ");  // " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = PREHEAT_1_LABEL _UxGT(" ヨネツセッテイ");  // " conf"
+  PROGMEM Language_Str MSG_PREHEAT_2                       = PREHEAT_2_LABEL _UxGT(" ヨネツ");       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N0;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N1;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N2;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N3;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N4;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N5;       // "Preheat " PREHEAT_1_LABEL
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = PREHEAT_2_LABEL _UxGT(" ヨネツノズル");  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N0;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N1;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N2;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N3;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N4;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N5;  // " Nozzle"
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = PREHEAT_2_LABEL _UxGT(" スベテヨネツ");  // " All"
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = PREHEAT_2_LABEL _UxGT(" ベッドヨネツ");  // " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = PREHEAT_2_LABEL _UxGT(" ヨネツセッテイ");  // " conf"
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("カネツテイシ");                  // "Cooldown"
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("デンゲン オン");                 // "Switch power on"
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("デンゲン オフ");                 // "Switch power off"
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("オシダシ");                     // "Extrude"
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("ヒキコミセッテイ");                // "Retract"
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("ジクイドウ");                    // "Move axis"
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("ベッドレベリング");                // "Bed leveling"
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("ベッドレベリング");                // "Level bed"
 
-#define MSG_CONFIGURATION                   _UxGT("セッテイカンリ")
-#define MSG_ADVANCED_SETTINGS               _UxGT("ショウサイセッテイ")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("コショカイフク")
-#define MSG_INIT_EEPROM                     _UxGT("EEPROMショキカ")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("イドウチュウ");                   // "Moving..."
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("XYジク カイホウ");                // "Free XY"
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Xジク イドウ");                  // "Move X"
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Yジク イドウ");                  // "Move Y"
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Zジク イドウ");                  // "Move Z"
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("エクストルーダー");                // "Extruder"
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("%smm イドウ");                  // "Move 0.025mm"
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("0.1mm イドウ");                 // "Move 0.1mm"
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("  1mm イドウ");                 // "Move 1mm"
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT(" 10mm イドウ");                 // "Move 10mm"
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("ソクド");                       // "Speed"
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Zオフセット");                   // "Bed Z"
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("ノズル");                       // "Nozzle"
+  PROGMEM Language_Str MSG_BED                             = _UxGT("ベッド");                       // "Bed"
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("ファンソクド");                    // "Fan speed"
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("トシュツリョウ");                   // "Flow"
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("セイギョ");                      // "Control"
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" サイテイ"); // " Min"
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" サイコウ"); // " Max"
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" ファクター"); // " Fact"
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("ジドウオンドセイギョ");               // "Autotemp"
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("オン");                         // "On"
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("オフ");                         // "Off"
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("センタク");                     // "Select"
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("センタク ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("センタク ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("センタク ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("センタク ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("センタク ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("センタク ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("カソクド mm/s²");               // "Accel"
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("ヤクドウ mm/s");                  // "Jerk"
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("ジク ヤクドウ mm/s") LCD_STR_A;             // "Va-jerk"
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("ジク ヤクドウ mm/s") LCD_STR_B;             // "Vb-jerk"
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("ジク ヤクドウ mm/s") LCD_STR_C;             // "Vc-jerk"
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("ステップ/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("ステップ/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("ステップ/mm");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("エクストルーダー ヤクド");          // "Ve-jerk"
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("サイダイオクリソクド ") LCD_STR_A;  // "Vmax A"
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("サイダイオクリソクド ") LCD_STR_A;  // "Vmax B"
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("サイダイオクリソクド ") LCD_STR_A;  // "Vmax C"
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("サイダイオクリソクド ") LCD_STR_A;  // "Vmax E"
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("サイダイオクリソクド ") LCD_STR_E0;  // "Vmax E1"
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("サイダイオクリソクド ") LCD_STR_E1;  // "Vmax E2"
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("サイダイオクリソクド ") LCD_STR_E2;  // "Vmax E3"
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("サイダイオクリソクド ") LCD_STR_E3;  // "Vmax E4"
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("サイダイオクリソクド ") LCD_STR_E4;  // "Vmax E5"
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("サイダイオクリソクド ") LCD_STR_E5;  // "Vmax E6"
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("サイショウオクリソクド");           // "Vmin"
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("サイショウイドウソクド");           // "VTrav min"
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("カソクド mm/s²");               // "Accel"
+  PROGMEM Language_Str MSG_AMAX                            = _UxGT("サイダイカソクド ");              // "Amax "
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("ヒキコミカソクド");               // "A-retract"
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("イドウカソクド");                // "A-travel"
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("オンド");                      // "Temperature"
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("ウゴキセッテイ");                // "Motion"
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("フィラメント");                   // "Filament"
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("フィラメントチョッケイ");            // "Fil. Dia."
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("フィラメントチョッケイ ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("フィラメントチョッケイ ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("フィラメントチョッケイ ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("フィラメントチョッケイ ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("フィラメントチョッケイ ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("フィラメントチョッケイ ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCDコントラスト");               // "LCD contrast"
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("EEPROMヘホゾン");               // "Store memory"
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("EEPROMカラヨミコミ");               // "Load memory"
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("セッテイリセット");               // "Restore failsafe"
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("リフレッシュ");                  // "Refresh"
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("ジョウホウガメン");               // "Info screen"
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("ジュンビセッテイ");               // "Prepare"
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("チョウセイ");                    // "Tune"
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("イチジテイシ");                  // "Pause print"
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("プリントサイカイ");                // "Resume print"
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("プリントテイシ");                 // "Stop print"
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("メディアカラプリント");            // "Print from SD"
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("メディアガアリマセン");               // "Card removed"
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("キュウシ");                     // "Sleep..."
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("ツヅケルニハクリックシテクダサイ");  // "Wait for user..."
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("プリントガチュウシサレマシタ");       // "Print aborted"
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("ウゴキマセン");                  // "No move."
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ヒジョウテイシ");                  // "KILLED. "
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("テイシシマシタ");                  // "STOPPED. "
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("ヒキコミリョウ mm");                // "Retract mm"
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("ヒキコミリョウS mm");               // "Swap Re.mm"
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("ヒキコミソクド mm/s");             // "Retract  V"
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("ノズルタイヒ mm");                // "Hop mm"
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("ホショウリョウ mm");               // "UnRet mm"
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("ホショウリョウS mm");              // "S UnRet mm"
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("ホショウソクド mm/s");            // "UnRet  V"
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("ジドウヒキコミ");                 // "AutoRetr."
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("フィラメントコウカン");              // "Change filament"
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("メディアサイヨミコミ");             // "Init. SD card"
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("メディアコウカン");               // "Change SD card"
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Zプローブ ベッドガイ");            // "Z probe out. bed"
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch ジコシンダン");          // "BLTouch Self-Test"
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("BLTouch リセット");             // "Reset BLTouch"
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ"); // "Home ... first"
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Zオフセット");                   // "Z Offset"
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Xジク ビドウ");                  // "Babystep X"
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Yジク ビドウ");                  // "Babystep Y"
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Zジク ビドウ");                  // "Babystep Z"
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("イドウゲンカイケンチキノウ");         // "Endstop abort"
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("カネツシッパイ");                 // "Heating failed"
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("エラー:ジョウチョウサーミスターキノウ");  // "Err: REDUNDANT TEMP"
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ネツボウソウ");                   // "THERMAL RUNAWAY"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("エラー:サイコウオンチョウカ");         // "Err: MAXTEMP"
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("エラー:サイテイオンミマン");          // "Err: MINTEMP"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("エラー:ベッド サイコウオンチョウカ");    // "Err: MAXTEMP BED"
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("エラー:ベッド サイテイオンミマン");     // "Err: MINTEMP BED"
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("サキニ XY ヲフッキサセテクダサイ");     // "Home XY first"
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("プリンターハテイシシマシタ");         // "PRINTER HALTED"
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("リセットシテクダサイ");              // "Please reset"
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d");                          // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h");                          // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m");                          // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("カネツチュウ");                   // "Heating..."
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("ベッド カネツチュウ");              // "Bed Heating..."
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("デルタ コウセイ");                // "Delta Calibration"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Xジク コウセイ");                 // "Calibrate X"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Yジク コウセイ");                 // "Calibrate Y"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Zジク コウセイ");                 // "Calibrate Z"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("チュウシン コウセイ");              // "Calibrate Center"
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("コノプリンターニツイテ");             // "About Printer"
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("プリンタージョウホウ");              // "Printer Info"
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("プリントジョウキョウ");              // "Printer Stats"
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("セイギョケイジョウホウ");            // "Board Info"
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("サーミスター");                   // "Thermistors"
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("エクストルーダースウ");             // "Extruders"
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("ボーレート");                    // "Baud"
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("プロトコル");                    // "Protocol"
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("キョウタイナイショウメイ");       // "Case light"
+  PROGMEM Language_Str MSG_INFO_PRINT_COUNT                = _UxGT("プリントスウ ");                  // "Print Count"
+  PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS           = _UxGT("カンリョウスウ");                  // "Completed"
+  PROGMEM Language_Str MSG_INFO_PRINT_TIME                 = _UxGT("プリントジカンルイケイ");            // "Total print time"
+  PROGMEM Language_Str MSG_INFO_PRINT_LONGEST              = _UxGT("サイチョウプリントジカン");           // "Longest job time"
+  PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT             = _UxGT("フィラメントシヨウリョウルイケイ");       // "Extruded total"
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("セッテイサイテイオン");              // "Min Temp"
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("セッテイサイコウオン");              // "Max Temp"
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("デンゲンシュベツ");                // "Power Supply"
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("モータークドウリョク");              // "Drive Strength"
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("DACシュツリョク %");               // "Driver %"
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("EEPROMヘホゾン");               // "Store memory"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("イチジテイシ");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("プリントサイカイ");                // "Resume print"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT            = _UxGT(MSG_2_LINE("コウカンヲカイシシマス", "シバラクオマチクダサイ"));   // "Wait for start of the filament"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD          = _UxGT(MSG_2_LINE("フィラメントヌキダシチュウ", "シバラクオマチクダサイ"));   // "Wait for filament unload"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT          = _UxGT(MSG_2_LINE("フィラメントヲソウニュウシ,", "クリックスルトゾッコウシマス"));   // "Insert filament and press button"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD            = _UxGT(MSG_2_LINE("フィラメントソウテンチュウ", "シバラクオマチクダサイ"));   // "Wait for filament load"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME          = _UxGT(MSG_2_LINE("プリントヲサイカイシマス", "シバラクオマチクダサイ"));   // "Wait for print to resume"
 
-#define MSG_BUTTON_NEXT                     _UxGT("ツギヘ")
-#define MSG_BUTTON_INIT                     _UxGT("ショキカ")
-#define MSG_BUTTON_STOP                     _UxGT("ストップ")
-#define MSG_BUTTON_PRINT                    _UxGT("プリント")
-#define MSG_BUTTON_RESET                    _UxGT("リセット")
-#define MSG_BUTTON_CANCEL                   _UxGT("キャンセル")
-#define MSG_BUTTON_DONE                     _UxGT("カンリョウ")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("マチガッタプリンター");               // "Wrong printer"
 
-#define MSG_YES                             _UxGT("ハイ")
-#define MSG_NO                              _UxGT("イイエ")
-#define MSG_BACK                            _UxGT("モドリ")
-#define MSG_VELOCITY                        _UxGT("ソクド")
-#define MSG_STEPS_PER_MM                    _UxGT("ステップ/mm")
-#define MSG_USER_MENU                       _UxGT("ユーザーコマンド")
-#define MSG_PRINT_PAUSED                    _UxGT("プリントガイチジテイシサレマシタ")
-#define MSG_PRINTING                        _UxGT("プリントチュウ...")
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("セッテイカンリ");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("ショウサイセッテイ");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("コショカイフク");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROMショキカ");
+
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("ツギヘ");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("ショキカ");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("ストップ");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("プリント");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("リセット");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("キャンセル");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("カンリョウ");
+
+  PROGMEM Language_Str MSG_YES                             = _UxGT("ハイ");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("イイエ");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("モドリ");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("ソクド");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("ステップ/mm");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("ユーザーコマンド");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("プリントガイチジテイシサレマシタ");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("プリントチュウ...");
+}
diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h
index 574490c7f5..15173a93d5 100644
--- a/Marlin/src/lcd/language/language_ko_KR.h
+++ b/Marlin/src/lcd/language/language_ko_KR.h
@@ -28,386 +28,106 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_ko_KR {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define CHARSIZE 1
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Korean");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" 준비.")
-#define MSG_BACK                            _UxGT("뒤로")
-#define MSG_MEDIA_INSERTED                  _UxGT("카드 삽입됨")
-#define MSG_MEDIA_REMOVED                   _UxGT("카드 제거됨")
-#define MSG_LCD_ENDSTOPS                    _UxGT("엔드스탑")
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("소프트 엔드스탑")
-#define MSG_MAIN                            _UxGT("뒤로")
-#define MSG_ADVANCED_SETTINGS               _UxGT("고급 설정")
-#define MSG_CONFIGURATION                   _UxGT("설정")
-#define MSG_AUTOSTART                       _UxGT("자동 시작")
-#define MSG_DISABLE_STEPPERS                _UxGT("모터 정지")
-#define MSG_DEBUG_MENU                      _UxGT("디버깅 메뉴")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("프로그레스바 테스트")
-#define MSG_AUTO_HOME                       _UxGT("오토홈")
-#define MSG_AUTO_HOME_X                     _UxGT("X 홈으로")
-#define MSG_AUTO_HOME_Y                     _UxGT("Y 홈으로")
-#define MSG_AUTO_HOME_Z                     _UxGT("Z 홈으로")
-#define MSG_LEVEL_BED_HOMING                _UxGT("XYZ 홈으로")
-#define MSG_LEVEL_BED_WAITING               _UxGT("누르면 시작합니다")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("다음 Point")
-#define MSG_LEVEL_BED_DONE                  _UxGT("레벨링 완료!")
-//#define MSG_Z_FADE_HEIGHT                 _UxGT("Fade Height")
-//#define MSG_SET_HOME_OFFSETS              _UxGT("Set home offsets")
-//#define MSG_HOME_OFFSETS_APPLIED          _UxGT("Offsets applied")
-//#define MSG_SET_ORIGIN                    _UxGT("Set origin")
-#define MSG_PREHEAT_1                       _UxGT("예열하기 - " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" 모두")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" 노즐만")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" 베드만")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" conf")
-#define MSG_PREHEAT_2                       _UxGT("예열하기 - " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" 모두")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" 노즐만")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" 베드만")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" conf")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Custom 예열")
-#define MSG_COOLDOWN                        _UxGT("식히기")
-#define MSG_SWITCH_PS_ON                    _UxGT("스위치 전원 켜기")
-#define MSG_SWITCH_PS_OFF                   _UxGT("스위치 전원 끄기")
-#define MSG_EXTRUDE                         _UxGT("밀어내기")
-#define MSG_RETRACT                         _UxGT("당기기")
-#define MSG_MOVE_AXIS                       _UxGT("축 이동")
-#define MSG_BED_LEVELING                    _UxGT("베드 레벨링")
-//#define MSG_LEVEL_BED                     _UxGT("Level bed")
-//#define MSG_LEVEL_CORNERS                 _UxGT("Level corners")
-//#define MSG_NEXT_CORNER                   _UxGT("Next corner")
-//#define MSG_EDIT_MESH                     _UxGT("Edit Mesh")
-//#define MSG_EDITING_STOPPED               _UxGT("Mesh Editing Stopped")
-//#define MSG_USER_MENU                     _UxGT("Custom User Commands")
-//#define MSG_IDEX_MENU                     _UxGT("IDEX Mode")
-//#define MSG_IDEX_MODE_AUTOPARK            _UxGT("Auto-Park")
-//#define MSG_IDEX_MODE_DUPLICATE           _UxGT("Duplication")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("미러 사본")
-//#define MSG_IDEX_MODE_FULL_CTRL           _UxGT("Full control")
-//#define MSG_X_OFFSET                      _UxGT("2nd nozzle X")
-//#define MSG_Y_OFFSET                      _UxGT("2nd nozzle Y")
-//#define MSG_Z_OFFSET                      _UxGT("2nd nozzle Z")
-#define MSG_UBL_DOING_G29                   _UxGT("오토레벨링 하기")
-//#define MSG_UBL_TOOLS                     _UxGT("UBL Tools")
-//#define MSG_UBL_LEVEL_BED                 _UxGT("Unified Bed Leveling")
-//#define MSG_UBL_MANUAL_MESH               _UxGT("Manually Build Mesh")
-//#define MSG_UBL_BC_INSERT                 _UxGT("Place shim & measure")
-//#define MSG_UBL_BC_INSERT2                _UxGT("Measure")
-//#define MSG_UBL_BC_REMOVE                 _UxGT("Remove & measure bed")
-//#define MSG_UBL_MOVING_TO_NEXT            _UxGT("Moving to next")
-//#define MSG_UBL_ACTIVATE_MESH             _UxGT("Activate UBL")
-//#define MSG_UBL_DEACTIVATE_MESH           _UxGT("Deactivate UBL")
-//#define MSG_UBL_SET_TEMP_BED              _UxGT("Bed Temp")
-//#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-//#define MSG_UBL_SET_TEMP_HOTEND           _UxGT("Hotend Temp")
-//#define MSG_UBL_HOTEND_TEMP_CUSTOM        MSG_UBL_SET_TEMP_HOTEND
-//#define MSG_UBL_MESH_EDIT                 _UxGT("Mesh Edit")
-//#define MSG_UBL_EDIT_CUSTOM_MESH          _UxGT("Edit Custom Mesh")
-//#define MSG_UBL_FINE_TUNE_MESH            _UxGT("Fine Tuning Mesh")
-//#define MSG_UBL_DONE_EDITING_MESH         _UxGT("Done Editing Mesh")
-//#define MSG_UBL_BUILD_CUSTOM_MESH         _UxGT("Build Custom Mesh")
-//#define MSG_UBL_BUILD_MESH_MENU           _UxGT("Build Mesh")
-//#define MSG_UBL_BUILD_MESH_M1             _UxGT("Build Mesh (" PREHEAT_1_LABEL ")")
-//#define MSG_UBL_BUILD_MESH_M2             _UxGT("Build Mesh (" PREHEAT_2_LABEL ")")
-//#define MSG_UBL_BUILD_COLD_MESH           _UxGT("Build Cold Mesh")
-//#define MSG_UBL_MESH_HEIGHT_ADJUST        _UxGT("Adjust Mesh Height")
-//#define MSG_UBL_MESH_HEIGHT_AMOUNT        _UxGT("Height Amount")
-//#define MSG_UBL_VALIDATE_MESH_MENU        _UxGT("Validate Mesh")
-//#define MSG_UBL_VALIDATE_MESH_M1          _UxGT("Validate " PREHEAT_1_LABEL " Mesh")
-//#define MSG_UBL_VALIDATE_MESH_M2          _UxGT("Validate Mesh (" PREHEAT_2_LABEL ")")
-//#define MSG_UBL_VALIDATE_CUSTOM_MESH      _UxGT("Validate Custom Mesh")
-//#define MSG_UBL_CONTINUE_MESH             _UxGT("Continue Bed Mesh")
-//#define MSG_UBL_MESH_LEVELING             _UxGT("Mesh Leveling")
-//#define MSG_UBL_3POINT_MESH_LEVELING      _UxGT("3-Point Leveling")
-//#define MSG_UBL_GRID_MESH_LEVELING        _UxGT("Grid Mesh Leveling")
-//#define MSG_UBL_MESH_LEVEL                _UxGT("Level Mesh")
-//#define MSG_UBL_SIDE_POINTS               _UxGT("Side Points")
-//#define MSG_UBL_MAP_TYPE                  _UxGT("Map Type")
-//#define MSG_UBL_OUTPUT_MAP                _UxGT("Output Mesh Map")
-//#define MSG_UBL_OUTPUT_MAP_HOST           _UxGT("Output for Host")
-//#define MSG_UBL_OUTPUT_MAP_CSV            _UxGT("Output for CSV")
-//#define MSG_UBL_OUTPUT_MAP_BACKUP         _UxGT("Off Printer Backup")
-//#define MSG_UBL_INFO_UBL                  _UxGT("Output UBL Info")
-//#define MSG_UBL_FILLIN_AMOUNT             _UxGT("Fill-in Amount")
-//#define MSG_UBL_MANUAL_FILLIN             _UxGT("Manual Fill-in")
-//#define MSG_UBL_SMART_FILLIN              _UxGT("Smart Fill-in")
-//#define MSG_UBL_FILLIN_MESH               _UxGT("Fill-in Mesh")
-//#define MSG_UBL_INVALIDATE_ALL            _UxGT("Invalidate All")
-//#define MSG_UBL_INVALIDATE_CLOSEST        _UxGT("Invalidate Closest")
-//#define MSG_UBL_FINE_TUNE_ALL             _UxGT("Fine Tune All")
-//#define MSG_UBL_FINE_TUNE_CLOSEST         _UxGT("Fine Tune Closest")
-//#define MSG_UBL_STORAGE_MESH_MENU         _UxGT("Mesh Storage")
-//#define MSG_UBL_STORAGE_SLOT              _UxGT("Memory Slot")
-//#define MSG_UBL_LOAD_MESH                 _UxGT("Load Bed Mesh")
-//#define MSG_UBL_SAVE_MESH                 _UxGT("Save Bed Mesh")
-//#define MSG_MESH_LOADED                   _UxGT("Mesh %i loaded")
-//#define MSG_MESH_SAVED                    _UxGT("Mesh %i saved")
-//#define MSG_UBL_NO_STORAGE                _UxGT("No storage")
-//#define MSG_UBL_SAVE_ERROR                _UxGT("Err: UBL Save")
-//#define MSG_UBL_RESTORE_ERROR             _UxGT("Err: UBL Restore")
-//#define MSG_UBL_Z_OFFSET_STOPPED          _UxGT("Z-Offset Stopped")
-//#define MSG_UBL_STEP_BY_STEP_MENU         _UxGT("Step-By-Step UBL")
-
-//#define MSG_LED_CONTROL                   _UxGT("LED Control")
-//#define MSG_LEDS                          _UxGT("Lights")
-//#define MSG_LED_PRESETS                   _UxGT("Light Presets")
-//#define MSG_SET_LEDS_RED                  _UxGT("Red")
-//#define MSG_SET_LEDS_ORANGE               _UxGT("Orange")
-//#define MSG_SET_LEDS_YELLOW               _UxGT("Yellow")
-//#define MSG_SET_LEDS_GREEN                _UxGT("Green")
-//#define MSG_SET_LEDS_BLUE                 _UxGT("Blue")
-//#define MSG_SET_LEDS_INDIGO               _UxGT("Indigo")
-//#define MSG_SET_LEDS_VIOLET               _UxGT("Violet")
-//#define MSG_SET_LEDS_WHITE                _UxGT("White")
-//#define MSG_SET_LEDS_DEFAULT              _UxGT("Default")
-//#define MSG_CUSTOM_LEDS                   _UxGT("Custom Lights")
-//#define MSG_INTENSITY_R                   _UxGT("Red Intensity")
-//#define MSG_INTENSITY_G                   _UxGT("Green Intensity")
-//#define MSG_INTENSITY_B                   _UxGT("Blue Intensity")
-//#define MSG_INTENSITY_W                   _UxGT("White Intensity")
-//#define MSG_LED_BRIGHTNESS                _UxGT("Brightness")
-
-//#define MSG_MOVING                        _UxGT("Moving...")
-//#define MSG_FREE_XY                       _UxGT("Free XY")
-//#define MSG_MOVE_X                        _UxGT("Move X")
-//#define MSG_MOVE_Y                        _UxGT("Move Y")
-//#define MSG_MOVE_Z                        _UxGT("Move Z")
-//#define MSG_MOVE_E                        _UxGT("Extruder")
-//#define MSG_MOVE_Z_DIST                   _UxGT("Move %smm")
-//#define MSG_MOVE_01MM                     _UxGT("Move 0.1mm")
-//#define MSG_MOVE_1MM                      _UxGT("Move 1mm")
-//#define MSG_MOVE_10MM                     _UxGT("Move 10mm")
-//#define MSG_SPEED                         _UxGT("Speed")
-//#define MSG_BED_Z                         _UxGT("Bed Z")
-#define MSG_NOZZLE                          _UxGT("노즐")
-#define MSG_BED                             _UxGT("베드")
-#define MSG_FAN_SPEED                       _UxGT("펜 속도")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("엑스트라 펜 속도")
-//#define MSG_FLOW                          _UxGT("Flow")
-//#define MSG_CONTROL                       _UxGT("Control")
-//#define MSG_MIN                           _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-//#define MSG_MAX                           _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-//#define MSG_FACTOR                        _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP                      _UxGT("Autotemp")
-//#define MSG_LCD_ON                        _UxGT("On")
-//#define MSG_LCD_OFF                       _UxGT("Off")
-//#define MSG_PID_P                         _UxGT("PID-P")
-//#define MSG_PID_I                         _UxGT("PID-I")
-//#define MSG_PID_D                         _UxGT("PID-D")
-//#define MSG_PID_C                         _UxGT("PID-C")
-//#define MSG_SELECT                        _UxGT("Select")
-//#define MSG_ACC                           _UxGT("Accel")
-//#define MSG_JERK                          _UxGT("Jerk")
-#if IS_KINEMATIC
-  //#define MSG_VA_JERK                     _UxGT("Va-jerk")
-  //#define MSG_VB_JERK                     _UxGT("Vb-jerk")
-  //#define MSG_VC_JERK                     _UxGT("Vc-jerk")
-#else
-  //#define MSG_VA_JERK                     _UxGT("Vx-jerk")
-  //#define MSG_VB_JERK                     _UxGT("Vy-jerk")
-  //#define MSG_VC_JERK                     _UxGT("Vz-jerk")
-#endif
-//#define MSG_VE_JERK                       _UxGT("Ve-jerk")
-//#define MSG_JUNCTION_DEVIATION            _UxGT("Junction Dev")
-//#define MSG_VELOCITY                      _UxGT("Velocity")
-//#define MSG_VMAX                          _UxGT("Vmax ")
-//#define MSG_VMIN                          _UxGT("Vmin")
-//#define MSG_VTRAV_MIN                     _UxGT("VTrav min")
-//#define MSG_ACCELERATION                  _UxGT("Acceleration")
-//#define MSG_AMAX                          _UxGT("Amax ")
-//#define MSG_A_RETRACT                     _UxGT("A-retract")
-//#define MSG_A_TRAVEL                      _UxGT("A-travel")
-//#define MSG_STEPS_PER_MM                  _UxGT("Steps/mm")
-#if IS_KINEMATIC
-  //#define MSG_ASTEPS                      _UxGT("Asteps/mm")
-  //#define MSG_BSTEPS                      _UxGT("Bsteps/mm")
-  //#define MSG_CSTEPS                      _UxGT("Csteps/mm")
-#else
-  //#define MSG_ASTEPS                      _UxGT("Xsteps/mm")
-  //#define MSG_BSTEPS                      _UxGT("Ysteps/mm")
-  //#define MSG_CSTEPS                      _UxGT("Zsteps/mm")
-#endif
-//#define MSG_ESTEPS                        _UxGT("Esteps/mm")
-//#define MSG_E0_STEPS                      _UxGT("E1steps/mm")
-//#define MSG_E1_STEPS                      _UxGT("E2steps/mm")
-//#define MSG_E2_STEPS                      _UxGT("E3steps/mm")
-//#define MSG_E3_STEPS                      _UxGT("E4steps/mm")
-//#define MSG_E4_STEPS                      _UxGT("E5steps/mm")
-//#define MSG_E5_STEPS                      _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("온도")
-#define MSG_MOTION                          _UxGT("동작")
-//#define MSG_FILAMENT                      _UxGT("Filament")
-//#define MSG_VOLUMETRIC_ENABLED            _UxGT("E in mm3")
-//#define MSG_FILAMENT_DIAM                 _UxGT("Fil. Dia.")
-//#define MSG_FILAMENT_UNLOAD               _UxGT("Unload mm")
-//#define MSG_FILAMENT_LOAD                 _UxGT("Load mm")
-//#define MSG_ADVANCE_K                     _UxGT("Advance K")
-//#define MSG_CONTRAST                      _UxGT("LCD contrast")
-#define MSG_STORE_EEPROM                    _UxGT("설정 저장하기")
-#define MSG_LOAD_EEPROM                     _UxGT("설정 읽어오기")
-#define MSG_RESTORE_FAILSAFE                _UxGT("설정 되돌리기")
-#define MSG_INIT_EEPROM                     _UxGT("EEPROM 초기화")
-#define MSG_REFRESH                         _UxGT("새로고침")
-#define MSG_WATCH                           _UxGT("처음으로")
-#define MSG_PREPARE                         _UxGT("준비하기")
-//#define MSG_TUNE                          _UxGT("Tune")
-#define MSG_PAUSE_PRINT                     _UxGT("일시정지")
-#define MSG_RESUME_PRINT                    _UxGT("재시작")
-#define MSG_STOP_PRINT                      _UxGT("출력중지")
-//#define MSG_OUTAGE_RECOVERY               _UxGT("Outage Recovery")
-#define MSG_MEDIA_MENU                      _UxGT("SD 카드출력")
-#define MSG_NO_MEDIA                        _UxGT("SD 카드없음")
-#define MSG_DWELL                           _UxGT("슬립모드...")
-//#define MSG_USERWAIT                      _UxGT("Click to resume...")
-#define MSG_PRINT_PAUSED                    _UxGT("일시 정지됨")
-#define MSG_PRINTING                        _UxGT("출력중...")
-#define MSG_PRINT_ABORTED                   _UxGT("취소됨")
-//#define MSG_NO_MOVE                       _UxGT("No move.")
-#define MSG_KILLED                          _UxGT("죽음. ")
-#define MSG_STOPPED                         _UxGT("멈춤. ")
-//#define MSG_CONTROL_RETRACT               _UxGT("Retract mm")
-//#define MSG_CONTROL_RETRACT_SWAP          _UxGT("Swap Re.mm")
-//#define MSG_CONTROL_RETRACTF              _UxGT("Retract  V")
-//#define MSG_CONTROL_RETRACT_ZHOP          _UxGT("Hop mm")
-//#define MSG_CONTROL_RETRACT_RECOVER       _UxGT("UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAP  _UxGT("S UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVERF      _UxGT("UnRet V")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-//#define MSG_AUTORETRACT                   _UxGT("AutoRetr.")
-//#define MSG_FILAMENTCHANGE                _UxGT("Change filament")
-//#define MSG_FILAMENTLOAD                  _UxGT("Load filament")
-//#define MSG_FILAMENTUNLOAD                _UxGT("Unload filament")
-//#define MSG_FILAMENTUNLOAD_ALL            _UxGT("Unload All")
-//#define MSG_INIT_MEDIA                    _UxGT("Init. SD card")
-//#define MSG_CHANGE_MEDIA                  _UxGT("Change SD card")
-//#define MSG_ZPROBE_OUT                    _UxGT("Z Probe past bed")
-//#define MSG_SKEW_FACTOR                   _UxGT("Skew Factor")
-//#define MSG_BLTOUCH                       _UxGT("BLTouch")
-//#define MSG_BLTOUCH_SELFTEST              _UxGT("BLTouch Self-Test")
-//#define MSG_BLTOUCH_RESET                 _UxGT("Reset BLTouch")
-//#define MSG_BLTOUCH_DEPLOY                _UxGT("Deploy BLTouch")
-//#define MSG_BLTOUCH_STOW                  _UxGT("Stow BLTouch")
-//#define MSG_MANUAL_DEPLOY                 _UxGT("Deploy Z-Probe")
-//#define MSG_MANUAL_STOW                   _UxGT("Stow Z-Probe")
-//#define MSG_HOME_FIRST                    _UxGT("Home %s%s%s first")
-//#define MSG_ZPROBE_ZOFFSET                _UxGT("Probe Z Offset")
-//#define MSG_BABYSTEP_X                    _UxGT("Babystep X")
-//#define MSG_BABYSTEP_Y                    _UxGT("Babystep Y")
-//#define MSG_BABYSTEP_Z                    _UxGT("Babystep Z")
-//#define MSG_ENDSTOP_ABORT                 _UxGT("Endstop abort")
-//#define MSG_HEATING_FAILED_LCD            _UxGT("Heating failed")
-//#define MSG_HEATING_FAILED_LCD_BED        _UxGT("Bed heating failed")
-//#define MSG_ERR_REDUNDANT_TEMP            _UxGT("Err: REDUNDANT TEMP")
-//#define MSG_THERMAL_RUNAWAY               _UxGT("THERMAL RUNAWAY")
-//#define MSG_THERMAL_RUNAWAY_BED           _UxGT("BED THERMAL RUNAWAY")
-//#define MSG_ERR_MAXTEMP                   _UxGT("Err: MAXTEMP")
-//#define MSG_ERR_MINTEMP                   _UxGT("Err: MINTEMP")
-//#define MSG_ERR_MAXTEMP_BED               _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED               _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING                  _UxGT("Home XY first")
-//#define MSG_HALTED                        _UxGT("PRINTER HALTED")
-//#define MSG_PLEASE_RESET                  _UxGT("Please reset")
-//#define MSG_SHORT_DAY                     _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR                    _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE                  _UxGT("m") // One character only
-//#define MSG_HEATING                       _UxGT("Heating...")
-//#define MSG_COOLING                       _UxGT("Cooling...")
-//#define MSG_BED_HEATING                   _UxGT("Bed heating...")
-//#define MSG_BED_COOLING                   _UxGT("Bed cooling...")
-//#define MSG_DELTA_CALIBRATE               _UxGT("Delta Calibration")
-//#define MSG_DELTA_CALIBRATE_X             _UxGT("Calibrate X")
-//#define MSG_DELTA_CALIBRATE_Y             _UxGT("Calibrate Y")
-//#define MSG_DELTA_CALIBRATE_Z             _UxGT("Calibrate Z")
-//#define MSG_DELTA_CALIBRATE_CENTER        _UxGT("Calibrate Center")
-//#define MSG_DELTA_SETTINGS                _UxGT("Delta Settings")
-//#define MSG_DELTA_AUTO_CALIBRATE          _UxGT("Auto Calibration")
-//#define MSG_DELTA_HEIGHT_CALIBRATE        _UxGT("Set Delta Height")
-//#define MSG_DELTA_Z_OFFSET_CALIBRATE      _UxGT("Probe Z-offset")
-//#define MSG_DELTA_DIAG_ROD                _UxGT("Diag Rod")
-//#define MSG_DELTA_HEIGHT                  _UxGT("Height")
-//#define MSG_DELTA_RADIUS                  _UxGT("Radius")
-//#define MSG_INFO_MENU                     _UxGT("About Printer")
-//#define MSG_INFO_PRINTER_MENU             _UxGT("Printer Info")
-//#define MSG_3POINT_LEVELING               _UxGT("3-Point Leveling")
-//#define MSG_LINEAR_LEVELING               _UxGT("Linear Leveling")
-//#define MSG_BILINEAR_LEVELING             _UxGT("Bilinear Leveling")
-//#define MSG_UBL_LEVELING                  _UxGT("Unified Bed Leveling")
-//#define MSG_MESH_LEVELING                 _UxGT("Mesh Leveling")
-//#define MSG_INFO_STATS_MENU               _UxGT("Printer Stats")
-//#define MSG_INFO_BOARD_MENU               _UxGT("Board Info")
-//#define MSG_INFO_THERMISTOR_MENU          _UxGT("Thermistors")
-//#define MSG_INFO_EXTRUDERS                _UxGT("Extruders")
-//#define MSG_INFO_BAUDRATE                 _UxGT("Baud")
-//#define MSG_INFO_PROTOCOL                 _UxGT("Protocol")
-//#define MSG_CASE_LIGHT                    _UxGT("Case light")
-//#define MSG_CASE_LIGHT_BRIGHTNESS         _UxGT("Light Brightness")
-
-#define MSG_EXPECTED_PRINTER                _UxGT("잘못된 프린터")
-
-#if LCD_WIDTH >= 20
-  //#define MSG_INFO_PRINT_COUNT            _UxGT("Print Count")
-  //#define MSG_INFO_COMPLETED_PRINTS       _UxGT("Completed")
-  //#define MSG_INFO_PRINT_TIME             _UxGT("Total print time")
-  //#define MSG_INFO_PRINT_LONGEST          _UxGT("Longest job time")
-  //#define MSG_INFO_PRINT_FILAMENT         _UxGT("Extruded total")
-#else
-  //#define MSG_INFO_PRINT_COUNT            _UxGT("Prints")
-  //#define MSG_INFO_COMPLETED_PRINTS       _UxGT("Completed")
-  //#define MSG_INFO_PRINT_TIME             _UxGT("Total")
-  //#define MSG_INFO_PRINT_LONGEST          _UxGT("Longest")
-  //#define MSG_INFO_PRINT_FILAMENT         _UxGT("Extruded")
-#endif
-//#define MSG_INFO_MIN_TEMP                 _UxGT("Min Temp")
-//#define MSG_INFO_MAX_TEMP                 _UxGT("Max Temp")
-//#define MSG_INFO_PSU                      _UxGT("PSU")
-//#define MSG_DRIVE_STRENGTH                _UxGT("Drive Strength")
-//#define MSG_DAC_PERCENT                   _UxGT("Driver %")
-//#define MSG_DAC_EEPROM_WRITE              _UxGT("DAC EEPROM Write")
-//#define MSG_FILAMENT_CHANGE_HEADER_PAUSE  _UxGT("PRINT PAUSED")
-//#define MSG_FILAMENT_CHANGE_HEADER_LOAD   _UxGT("LOAD FILAMENT")
-//#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("UNLOAD FILAMENT")
-//#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
-//#define MSG_FILAMENT_CHANGE_OPTION_PURGE  _UxGT("Purge more")
-//#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continue")
-//#define MSG_FILAMENT_CHANGE_NOZZLE        _UxGT("  Nozzle: ")
-//#define MSG_RUNOUT_SENSOR                 _UxGT("Runout Sensor")
-//#define MSG_ERR_HOMING_FAILED             _UxGT("Homing failed")
-//#define MSG_ERR_PROBING_FAILED            _UxGT("Probing failed")
-//#define MSG_M600_TOO_COLD                 _UxGT("M600: Too cold")
-
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  //#define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Wait for start")
-  //#define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("of the filament")
-  //#define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("change")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("filament unload")
-  //#define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insert filament")
-  //#define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("and press button")
-  //#define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("to continue...")
-  //#define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Press button to")
-  //#define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("heat nozzle.")
-  //#define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Heating nozzle")
-  //#define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Please wait...")
-  //#define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("filament load")
-  //#define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Wait for")
-  //#define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("filament purge")
-  //#define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Wait for print")
-  //#define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("to resume")
-#else // LCD_HEIGHT < 4
-  //#define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Please wait...")
-  //#define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ejecting...")
-  //#define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insert and Click")
-  //#define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Click to heat")
-  //#define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Heating...")
-  //#define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Loading...")
-  //#define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purging...")
-  //#define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Resuming...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" 준비.");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("뒤로");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("카드 삽입됨");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("카드 제거됨");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("엔드스탑");
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("소프트 엔드스탑");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("뒤로");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("고급 설정");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("설정");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("자동 시작");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("모터 정지");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("디버깅 메뉴");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("프로그레스바 테스트");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("오토홈");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("X 홈으로");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Y 홈으로");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Z 홈으로");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("XYZ 홈으로");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("누르면 시작합니다");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("다음 Point");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("레벨링 완료!");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("예열하기 - ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("예열하기 - ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Custom 예열");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("식히기");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("스위치 전원 켜기");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("스위치 전원 끄기");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("밀어내기");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("당기기");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("축 이동");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("베드 레벨링");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("미러 사본");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("오토레벨링 하기");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("노즐");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("노즐 ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("노즐 ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("노즐 ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("노즐 ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("노즐 ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("노즐 ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("베드");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("펜 속도");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("펜 속도 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("펜 속도 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("펜 속도 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("엑스트라 펜 속도");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("엑스트라 펜 속도 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("엑스트라 펜 속도 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("엑스트라 펜 속도 3");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("온도");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("동작");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("설정 저장하기");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("설정 읽어오기");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("설정 되돌리기");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM 초기화");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("새로고침");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("처음으로");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("준비하기");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("일시정지");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("재시작");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("출력중지");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("SD 카드출력");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("SD 카드없음");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("슬립모드...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("일시 정지됨");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("출력중...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("취소됨");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("죽음. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("멈춤. ");
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("잘못된 프린터");
+}
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index bcfbc73fe8..7555194eb8 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -32,252 +32,270 @@
 #define DISPLAY_CHARSET_ISO10646_1
 #define NOT_EXTENDED_ISO10646_1_5X7
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" gereed.")
-#define MSG_BACK                            _UxGT("Terug")
-#define MSG_MEDIA_INSERTED                  _UxGT("Kaart ingestoken")
-#define MSG_MEDIA_REMOVED                   _UxGT("Kaart verwijderd")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Hoofdmenu")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Motoren uit")
-#define MSG_DEBUG_MENU                      _UxGT("Debug Menu") //accepted English terms
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Vooruitgang Test")
-#define MSG_AUTO_HOME                       _UxGT("Auto home")
-#define MSG_AUTO_HOME_X                     _UxGT("Home X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Home Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Klik voor begin")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Volgende Plaats")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Bed level kompl.")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Zet home offsets")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("H offset toegep.")
-#define MSG_SET_ORIGIN                      _UxGT("Nulpunt instellen")
-#define MSG_PREHEAT_1                       _UxGT(PREHEAT_1_LABEL " voorverwarmen")
-#define MSG_PREHEAT_1_N                     _UxGT(PREHEAT_1_LABEL " voorverw. ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1_N _UxGT("aan")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" Einde")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1_N _UxGT("Bed")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT(PREHEAT_1_LABEL " verw. conf")
-#define MSG_PREHEAT_2                       _UxGT(PREHEAT_2_LABEL " voorverwarmen")
-#define MSG_PREHEAT_2_N                     _UxGT(PREHEAT_2_LABEL " voorverw. ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2_N _UxGT("aan")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" Einde")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2_N _UxGT("Bed")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT(PREHEAT_2_LABEL " verw. conf")
-#define MSG_COOLDOWN                        _UxGT("Afkoelen")
-#define MSG_SWITCH_PS_ON                    _UxGT("Stroom aan")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Stroom uit")
-#define MSG_EXTRUDE                         _UxGT("Extrude")
-#define MSG_RETRACT                         _UxGT("Retract")
-#define MSG_MOVE_AXIS                       _UxGT("As verplaatsen")
-#define MSG_BED_LEVELING                    _UxGT("Bed Leveling")
-#define MSG_LEVEL_BED                       _UxGT("Level bed")
+namespace Language_nl {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_MOVING                          _UxGT("Verplaatsen...")
-#define MSG_FREE_XY                         _UxGT("Vrij XY")
-#define MSG_MOVE_X                          _UxGT("Verplaats X")
-#define MSG_MOVE_Y                          _UxGT("Verplaats Y")
-#define MSG_MOVE_Z                          _UxGT("Verplaats Z")
-#define MSG_MOVE_E                          _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST                     _UxGT("Verplaats %smm")
-#define MSG_MOVE_01MM                       _UxGT("Verplaats 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Verplaats 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Verplaats 10mm")
-#define MSG_SPEED                           _UxGT("Snelheid")
-#define MSG_BED_Z                           _UxGT("Bed Z")
-#define MSG_NOZZLE                          _UxGT("Nozzle")
-#define MSG_BED                             _UxGT("Bed")
-#define MSG_FAN_SPEED                       _UxGT("Fan snelheid")
-#define MSG_FLOW                            _UxGT("Flow")
-#define MSG_CONTROL                         _UxGT("Control")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Autotemp")
-#define MSG_LCD_ON                          _UxGT("Aan")
-#define MSG_LCD_OFF                         _UxGT("Uit")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Selecteer")
-#define MSG_ACC                             _UxGT("Versn")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retract")
-#define MSG_A_TRAVEL                        _UxGT("A-travel")
-#define MSG_STEPS_PER_MM                    _UxGT("Steps/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Asteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Bsteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Csteps/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xsteps/mm")
-  #define MSG_BSTEPS                        _UxGT("Ysteps/mm")
-  #define MSG_CSTEPS                        _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Esteps/mm")
-#define MSG_E0_STEPS                        _UxGT("E1steps/mm")
-#define MSG_E1_STEPS                        _UxGT("E2steps/mm")
-#define MSG_E2_STEPS                        _UxGT("E3steps/mm")
-#define MSG_E3_STEPS                        _UxGT("E4steps/mm")
-#define MSG_E4_STEPS                        _UxGT("E5steps/mm")
-#define MSG_E5_STEPS                        _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatuur")
-#define MSG_MOTION                          _UxGT("Beweging")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_ADVANCE_K                       _UxGT("Advance K") //accepted english dutch
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Dia.")
-#define MSG_CONTRAST                        _UxGT("LCD contrast")
-#define MSG_STORE_EEPROM                    _UxGT("Geheugen opslaan")
-#define MSG_LOAD_EEPROM                     _UxGT("Geheugen laden")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Noodstop reset")
-#define MSG_REFRESH                         _UxGT("Ververs")
-#define MSG_WATCH                           _UxGT("Info scherm")
-#define MSG_PREPARE                         _UxGT("Voorbereiden")
-#define MSG_TUNE                            _UxGT("Afstellen")
-#define MSG_PAUSE_PRINT                     _UxGT("Print pauzeren")
-#define MSG_RESUME_PRINT                    _UxGT("Print hervatten")
-#define MSG_STOP_PRINT                      _UxGT("Print stoppen")
-#define MSG_MEDIA_MENU                      _UxGT("Print van SD")
-#define MSG_NO_MEDIA                        _UxGT("Geen SD kaart")
-#define MSG_DWELL                           _UxGT("Slapen...")
-#define MSG_USERWAIT                        _UxGT("Wachten...")
-#define MSG_PRINT_ABORTED                   _UxGT("Print afgebroken")
-#define MSG_NO_MOVE                         _UxGT("Geen beweging.")
-#define MSG_KILLED                          _UxGT("Afgebroken. ")
-#define MSG_STOPPED                         _UxGT("Gestopt. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retract mm")  //accepted English term in Dutch
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Ruil Retract mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retract  F")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Hop mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Ruil UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  F")
-#define MSG_AUTORETRACT                     _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Verv. Filament")
-#define MSG_INIT_MEDIA                      _UxGT("Init. SD kaart")
-#define MSG_CHANGE_MEDIA                    _UxGT("Verv. SD Kaart")
-#define MSG_ZPROBE_OUT                      _UxGT("Z probe uit. bed")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Zelf-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s Eerst")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Offset")  //accepted English term in Dutch
-#define MSG_BABYSTEP_X                      _UxGT("Babystap X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystap Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystap Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop afbr.")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Voorverw. fout")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Redun. temp fout")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Therm. wegloop")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err: Max. temp")
-#define MSG_ERR_MINTEMP                     _UxGT("Err: Min. temp")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: Max.tmp bed")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err: Min.tmp bed")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY Eerst")
-#define MSG_HALTED                          _UxGT("PRINTER GESTOPT")
-#define MSG_PLEASE_RESET                    _UxGT("Reset A.U.B.")
-#define MSG_SHORT_DAY                       _UxGT("d") //  One character only. Keep English standard
-#define MSG_SHORT_HOUR                      _UxGT("h") //  One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") //  One character only
-#define MSG_HEATING                         _UxGT("Voorwarmen...")
-#define MSG_BED_HEATING                     _UxGT("Bed voorverw...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Calibratie")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibreer X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibreer Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibreer Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibreer Midden")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto Calibratie")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Zet Delta Hoogte")
+  constexpr uint8_t    CHARSIZE                            = 1;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Dutch");
 
-#define MSG_INFO_STATS_MENU                 _UxGT("Printer Stats")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Board Info") //accepted English term in Dutch
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extruders")
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")
-#define MSG_INFO_MENU                       _UxGT("Over Printer")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Printer Info")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocol")
-#define MSG_CASE_LIGHT                      _UxGT("Case licht")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" gereed.");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Terug");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Kaart ingestoken");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Kaart verwijderd");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Hoofdmenu");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Motoren uit");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Debug Menu"); //accepted English terms
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Vooruitgang Test");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Auto home");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Home X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Home Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Home Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Homing XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Klik voor begin");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Volgende Plaats");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Bed level kompl.");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Zet home offsets");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("H offset toegep.");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Nulpunt instellen");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = PREHEAT_1_LABEL _UxGT(" voorverwarmen");
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = PREHEAT_1_LABEL _UxGT(" voorverw. Einde");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = PREHEAT_1_LABEL _UxGT(" voorverw. aan");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = PREHEAT_1_LABEL _UxGT(" voorverw. Bed");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = PREHEAT_1_LABEL _UxGT(" verw. conf");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = PREHEAT_2_LABEL _UxGT(" voorverwarmen");
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = PREHEAT_2_LABEL _UxGT(" voorverw. Einde");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = PREHEAT_2_LABEL _UxGT(" voorverw. aan");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = PREHEAT_2_LABEL _UxGT(" voorverw. Bed");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = PREHEAT_2_LABEL _UxGT(" verw. conf");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Afkoelen");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Stroom aan");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Stroom uit");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrude");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retract");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("As verplaatsen");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Bed Leveling");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Level bed");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Onjuiste printer")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Verplaatsen...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Vrij XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Verplaats X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Verplaats Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Verplaats Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extruder");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extruder ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extruder ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extruder ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extruder ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extruder ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extruder ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Verplaats %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Verplaats 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Verplaats 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Verplaats 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Snelheid");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Bed Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Nozzle");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Nozzle ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Nozzle ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Nozzle ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Nozzle ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Nozzle ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Nozzle ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Bed");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan snelheid");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Fan snelheid 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Fan snelheid 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Fan snelheid 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Flow");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Flow ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Flow ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Flow ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Flow ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Flow ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Flow ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Control");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Autotemp");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Aan");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Uit");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Selecteer");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Selecteer ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Selecteer ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Selecteer ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Selecteer ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Selecteer ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Selecteer ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Versn");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatuur");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Beweging");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Advance K");        //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("Advance K ") LCD_STR_E0; //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("Advance K ") LCD_STR_E1; //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("Advance K ") LCD_STR_E2; //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("Advance K ") LCD_STR_E3; //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("Advance K ") LCD_STR_E4; //accepted english dutch
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("Advance K ") LCD_STR_E5; //accepted english dutch
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E in mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Dia.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Dia. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Dia. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Dia. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Dia. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Dia. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Dia. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD contrast");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Geheugen opslaan");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Geheugen laden");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Noodstop reset");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ververs");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info scherm");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Voorbereiden");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Afstellen");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Print pauzeren");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Print hervatten");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Print stoppen");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Print van SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Geen SD kaart");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Slapen...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Wachten...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Print afgebroken");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Geen beweging.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("Afgebroken. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("Gestopt. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retract mm");  //accepted English term in Dutch
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Ruil Retract mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retract  F");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Hop mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Ruil UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  F");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Verv. Filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Verv. Filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Verv. Filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Verv. Filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Verv. Filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Verv. Filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Verv. Filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Init. SD kaart");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Verv. SD Kaart");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z probe uit. bed");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Zelf-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Reset BLTouch");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s Eerst");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z Offset");  //accepted English term in Dutch
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystap X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystap Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystap Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Endstop afbr.");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Voorverw. fout");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Redun. temp fout");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Therm. wegloop");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: Max. temp");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: Min. temp");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err: Max.tmp bed");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err: Min.tmp bed");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY Eerst");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("PRINTER GESTOPT");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Reset A.U.B.");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); //  One character only. Keep English standard
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h"); //  One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); //  One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Voorwarmen...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Bed voorverw...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Calibratie");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibreer X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibreer Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibreer Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibreer Midden");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto Calibratie");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Zet Delta Hoogte");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Printed Aantal")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Totaal Voltooid")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Totale Printtijd")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Langste Printtijd")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Totaal Extrudeert")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Aantal")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Voltooid")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Printtijd ")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Langste")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Extrud.")
-#endif
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Printer Stats");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Board Info"); //accepted English term in Dutch
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistors");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extruders");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Over Printer");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Printer Info");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocol");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Case licht");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("PSU")  //accepted English term in Dutch
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Onjuiste printer");
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Motorstroom")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")  //accepted English term in Dutch
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC Opslaan")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Hervat print")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT(" Nozzle: ") //accepeted English term
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Wacht voor start")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("filament te")
-  #define MSG_FILAMENT_CHANGE_INIT_3          _UxGT("verwisselen")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("filament uit")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3        _UxGT("te laden")
-  #define MSG_FILAMENT_CHANGE_HEAT_1          _UxGT("Klik knop om...")
-  #define MSG_FILAMENT_CHANGE_HEAT_2          _UxGT("verw. nozzle.") //nozzle accepted English term
-  #define MSG_FILAMENT_CHANGE_HEATING_1       _UxGT("Nozzle verw.")
-  #define MSG_FILAMENT_CHANGE_HEATING_2       _UxGT("Wacht a.u.b.")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Laad filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("en druk knop")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("om verder...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("filament te")
-  #define MSG_FILAMENT_CHANGE_LOAD_3          _UxGT("laden")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Wacht voor print")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("om verder")
-  #define MSG_FILAMENT_CHANGE_RESUME_3        _UxGT("te gaan")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("start...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("uitladen...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1          _UxGT("Klik knop om...")
-  #define MSG_FILAMENT_CHANGE_HEAT_2          _UxGT("verw. nozzle.") //nozzle accepted English term
-  #define MSG_FILAMENT_CHANGE_HEATING_1       _UxGT("Verwarmen...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Laad filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("en druk knop")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("inladen...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Wacht voor")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("printing...")
-#endif // LCD_HEIGHT < 4
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Printed Aantal");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Totaal Voltooid");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Totale Printtijd");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Langste Printtijd");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Totaal Extrudeert");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Aantal");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Voltooid");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Printtijd ");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Langste");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Extrud.");
+  #endif
+
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Temp");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Temp");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("PSU");  //accepted English term in Dutch
+
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Motorstroom");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Driver %");  //accepted English term in Dutch
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC Opslaan");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Hervat print");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT(" Nozzle: "); //accepeted English term
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Wacht voor start", "filament te", "verwisselen"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Wacht voor", "filament uit", "te laden"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Nozzle verw.", "Wacht a.u.b."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Laad filament", "en druk knop", "om verder..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Wacht voor", "filament te", "laden"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Wacht voor print", "om verder", "te gaan"));
+  #else
+    // Up to 2 lines
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_2_LINE("Wacht voor", "start..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Wacht voor", "uitladen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Verwarmen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_2_LINE("Laad filament", "en druk knop"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Wacht voor", "inladen..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Wacht voor", "printing..."));
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index 52bb419337..1acee61f24 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -27,228 +27,263 @@
 
 #define DISPLAY_CHARSET_ISO10646_PL
 
-#define CHARSIZE 2
+namespace Language_pl {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" gotowy.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Karta włożona")
-#define MSG_MEDIA_REMOVED                   _UxGT("Karta usunięta")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Kranców.") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Menu główne")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Wyłącz silniki")
-#define MSG_AUTO_HOME                       _UxGT("Pozycja zerowa")
-#define MSG_AUTO_HOME_X                     _UxGT("Zeruj X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Zeruj Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Zeruj Z")
-#define MSG_LEVEL_BED                       _UxGT("Poziom. stołu")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Pozycja zerowa")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Kliknij by rozp.")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Następny punkt")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Wypoziomowano!")
-#define MSG_USER_MENU                       _UxGT("WÅ‚asne Polecenia")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Ust. poz. zer.")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Poz. zerowa ust.")
-#define MSG_SET_ORIGIN                      _UxGT("Ustaw punkt zero")
-#define MSG_PREHEAT_1                       _UxGT("Rozgrzej " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" wsz.")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Rozgrzej stół " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Ustaw. rozg. " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2                       _UxGT("Rozgrzej " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" wsz.")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Rozgrzej stół " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Ustaw. rozg. " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN                        _UxGT("Chłodzenie")
-#define MSG_SWITCH_PS_ON                    _UxGT("WÅ‚Ä…cz zasilacz")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Wyłącz zasilacz")
-#define MSG_EXTRUDE                         _UxGT("Ekstruzja")
-#define MSG_RETRACT                         _UxGT("Wycofanie")
-#define MSG_MOVE_AXIS                       _UxGT("Ruch osi")
-#define MSG_BED_LEVELING                    _UxGT("Poziom. stołu")
-#define MSG_MOVE_X                          _UxGT("Przesuń w X")
-#define MSG_MOVE_Y                          _UxGT("Przesuń w Y")
-#define MSG_MOVE_Z                          _UxGT("Przesuń w Z")
-#define MSG_MOVE_E                          _UxGT("Ekstruzja (os E)")
-#define MSG_MOVE_Z_DIST                     _UxGT("Przesuń co %smm")
-#define MSG_MOVE_01MM                       _UxGT("Przesuń co .1mm")
-#define MSG_MOVE_1MM                        _UxGT("Przesuń co 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Przesuń co 10mm")
-#define MSG_SPEED                           _UxGT("Predkość")
-#define MSG_BED_Z                           _UxGT("Stół Z")
-#define MSG_NOZZLE                          _UxGT("Dysza")
-#define MSG_BED                             _UxGT("Stół")
-#define MSG_FAN_SPEED                       _UxGT("Obroty wiatraka")
-#define MSG_FLOW                            _UxGT("Przepływ")
-#define MSG_CONTROL                         _UxGT("Ustawienia")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Mnożnik")
-#define MSG_AUTOTEMP                        _UxGT("Auto. temperatura")
-#define MSG_LCD_ON                          _UxGT("WÅ‚.")
-#define MSG_LCD_OFF                         _UxGT("Wył.")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Select")
-#define MSG_ACC                             _UxGT("Przyśpieszenie")
-#define MSG_JERK                            _UxGT("Zryw")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Zryw Va")
-  #define MSG_VB_JERK                       _UxGT("Zryw Vb")
-  #define MSG_VC_JERK                       _UxGT("Zryw Vc")
-#else
-  #define MSG_VA_JERK                       _UxGT("Zryw Vx")
-  #define MSG_VB_JERK                       _UxGT("Zryw Vy")
-  #define MSG_VC_JERK                       _UxGT("Zryw Vz")
-#endif
-#define MSG_VE_JERK                         _UxGT("Zryw Ve")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("Vskok min")
-#define MSG_ACCELERATION                    MSG_ACC
-#define MSG_AMAX                            _UxGT("Amax")
-#define MSG_A_RETRACT                       _UxGT("A-wycofanie")
-#define MSG_A_TRAVEL                        _UxGT("A-przesuń.")
-#define MSG_STEPS_PER_MM                    _UxGT("kroki/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("krokiA/mm")
-  #define MSG_BSTEPS                        _UxGT("krokiB/mm")
-  #define MSG_CSTEPS                        _UxGT("krokiC/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("krokiX/mm")
-  #define MSG_BSTEPS                        _UxGT("krokiY/mm")
-  #define MSG_CSTEPS                        _UxGT("krokiZ/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("krokiE/mm")
-#define MSG_E0_STEPS                        _UxGT("krokiE1/mm")
-#define MSG_E1_STEPS                        _UxGT("krokiE2/mm")
-#define MSG_E2_STEPS                        _UxGT("krokiE3/mm")
-#define MSG_E3_STEPS                        _UxGT("krokiE4/mm")
-#define MSG_E4_STEPS                        _UxGT("krokiE5/mm")
-#define MSG_E5_STEPS                        _UxGT("krokiE6/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Ruch")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E w mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Åšr. fil.")
-#define MSG_CONTRAST                        _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Zapisz w pamięci")
-#define MSG_LOAD_EEPROM                     _UxGT("Wczytaj z pamięci")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Ustaw. fabryczne")
-#define MSG_REFRESH                         _UxGT("Odswież")
-#define MSG_WATCH                           _UxGT("Ekran główny")
-#define MSG_PREPARE                         _UxGT("Przygotuj")
-#define MSG_TUNE                            _UxGT("Strojenie")
-#define MSG_PAUSE_PRINT                     _UxGT("Pauza")
-#define MSG_RESUME_PRINT                    _UxGT("Wznowienie")
-#define MSG_STOP_PRINT                      _UxGT("Stop")
-#define MSG_MEDIA_MENU                      _UxGT("Karta SD")
-#define MSG_NO_MEDIA                        _UxGT("Brak karty")
-#define MSG_DWELL                           _UxGT("Uśpij...")
-#define MSG_USERWAIT                        _UxGT("Oczekiwanie...")
-#define MSG_PRINT_ABORTED                   _UxGT("Druk przerwany")
-#define MSG_NO_MOVE                         _UxGT("Brak ruchu")
-#define MSG_KILLED                          _UxGT("Ubity. ")
-#define MSG_STOPPED                         _UxGT("Zatrzymany. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Wycofaj mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Z Wycof. mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Wycofaj  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Skok Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Cof. wycof. mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Z Cof. wyc. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Cof. wycof.  V")
-#define MSG_AUTORETRACT                     _UxGT("Auto. wycofanie")
-#define MSG_FILAMENTCHANGE                  _UxGT("Zmień filament")
-#define MSG_INIT_MEDIA                      _UxGT("Inicjal. karty SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Zmiana karty SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z za stołem")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Offset Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Błąd krańcówki")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Rozgrz. nieudane")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("BÅ‚Ä…d temperatury")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Zanik temp.")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err max temp")
-#define MSG_ERR_MINTEMP                     _UxGT("Err min temp")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err max temp stołu")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err min temp stołu")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY first")
-#define MSG_HALTED                          _UxGT("Drukarka zatrzym.")
-#define MSG_PLEASE_RESET                    _UxGT("Proszę zresetować")
-#define MSG_SHORT_DAY                       _UxGT("d") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("g") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("m") // One character only
-#define MSG_HEATING                         _UxGT("Rozgrzewanie...")
-#define MSG_BED_HEATING                     _UxGT("Rozgrzewanie stołu...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Kalibrowanie Delty")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibruj X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibruj Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibruj Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibruj środek")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Polish");
 
-#define MSG_INFO_MENU                       _UxGT("O drukarce")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info drukarki")
-#define MSG_INFO_STATS_MENU                 _UxGT("Statystyki")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Board Info")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Thermistory")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Ekstrudery")
-#define MSG_INFO_BAUDRATE                   _UxGT("Predkość USB")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokół")
-#define MSG_CASE_LIGHT                      _UxGT("Oświetlenie")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" gotowy.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Karta włożona");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Karta usunięta");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Kranców."); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu główne");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Autostart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Wyłącz silniki");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Pozycja zerowa");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Zeruj X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Zeruj Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Zeruj Z");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Poziom. stołu");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Pozycja zerowa");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Kliknij by rozp.");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Następny punkt");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Wypoziomowano!");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("WÅ‚asne Polecenia");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Ust. poz. zer.");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Poz. zerowa ust.");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Ustaw punkt zero");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" wsz.");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Rozgrzej stół ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Ustaw. rozg. ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Rozgrzej ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" wsz.");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Rozgrzej stół ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Ustaw. rozg. ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Chłodzenie");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("WÅ‚Ä…cz zasilacz");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Wyłącz zasilacz");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Ekstruzja");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Wycofanie");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Ruch osi");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Poziom. stołu");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Przesuń w X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Przesuń w Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Przesuń w Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Ekstruzja (os E)");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Ekstruzja (os E) ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Przesuń co %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Przesuń co .1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Przesuń co 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Przesuń co 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Predkość");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Stół Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Dysza");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Dysza ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Dysza ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Dysza ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Dysza ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Dysza ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Dysza ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Stół");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Obroty wiatraka");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Obroty wiatraka 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Obroty wiatraka 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Obroty wiatraka 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Przepływ");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Przepływ ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Przepływ ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Przepływ ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Przepływ ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Przepływ ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Przepływ ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ustawienia");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Auto. temperatura");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("WÅ‚.");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Wył.");
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Przyśpieszenie");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Zryw");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("Zryw V") LCD_STR_A;
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("Zryw V") LCD_STR_B;
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("Zryw V") LCD_STR_C;
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Zryw Ve");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vskok min");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-wycofanie");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-przesuń.");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("kroki/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = _UxGT("kroki") LCD_MSG_A _UxGT("/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = _UxGT("kroki") LCD_MSG_B _UxGT("/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = _UxGT("kroki") LCD_MSG_C _UxGT("/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("krokiE/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("kroki ") LCD_STR_E0 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("kroki ") LCD_STR_E1 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("kroki ") LCD_STR_E2 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("kroki ") LCD_STR_E3 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("kroki ") LCD_STR_E4 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("kroki ") LCD_STR_E5 _UxGT("/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Ruch");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E w mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Åšr. fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Åšr. fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Åšr. fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Åšr. fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Åšr. fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Åšr. fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Åšr. fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Zapisz w pamięci");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Wczytaj z pamięci");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Ustaw. fabryczne");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Odswież");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Ekran główny");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Przygotuj");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Strojenie");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pauza");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Wznowienie");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Stop");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Karta SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Brak karty");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Uśpij...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Oczekiwanie...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Druk przerwany");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Brak ruchu");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("Ubity. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("Zatrzymany. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Wycofaj mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Z Wycof. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Wycofaj  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Skok Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Cof. wycof. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Z Cof. wyc. mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Cof. wycof.  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Auto. wycofanie");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Zmień filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Zmień filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Zmień filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Zmień filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Zmień filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Zmień filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Zmień filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Inicjal. karty SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Zmiana karty SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z za stołem");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Self-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Reset BLTouch");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s first");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Offset Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Błąd krańcówki");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Rozgrz. nieudane");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("BÅ‚Ä…d temperatury");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Zanik temp.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err max temp");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err min temp");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err max temp stołu");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err min temp stołu");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY first");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("Drukarka zatrzym.");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Proszę zresetować");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("g"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Rozgrzewanie...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Rozgrzewanie stołu...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Kalibrowanie Delty");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibruj X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibruj Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibruj Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibruj środek");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Niepoprawna drukarka")
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("O drukarce");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info drukarki");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Statystyki");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Board Info");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Thermistory");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Ekstrudery");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Predkość USB");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokół");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Oświetlenie");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Wydrukowano")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Ukończono")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Czas druku")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najdł. druk")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Użyty fil.")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Wydrukowano")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Ukończono")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Razem")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najdł. druk")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Użyty fil.")
-#endif
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Niepoprawna drukarka");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Temp")
-#define MSG_INFO_PSU                        _UxGT("Zasilacz")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Wydrukowano");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Ukończono");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Czas druku");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najdł. druk");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Użyty fil.");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Wydrukowano");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Ukończono");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Razem");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najdł. druk");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Użyty fil.");
+  #endif
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Siła silnika")
-#define MSG_DAC_PERCENT                     _UxGT("Siła %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Zapisz DAC EEPROM")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Temp");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Temp");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Zasilacz");
 
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("ZMIEŃ FILAMENT")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ZMIEŃ OPCJE:")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Wznów drukowanie")
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Siła silnika");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Siła %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Zapisz DAC EEPROM");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Czekam na ")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("zmianÄ™ filamentu")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Czekam na")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("wyjęcie filamentu")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Włóz filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("i naciśnij przycisk")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("aby kontynuować...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Czekam na")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("włożenie filamentu")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Czekam na")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("wznowienie druku")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Proszę czekać...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Wysuwanie...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Włóż i naciśnij prz.")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Ładowanie...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Wznowienie...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("ZMIEŃ FILAMENT");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("ZMIEŃ OPCJE:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Wznów drukowanie");
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_2_LINE("Czekam na ", "zmianÄ™ filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Czekam na", "wyjęcie filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Włóz filament", "i naciśnij przycisk", "aby kontynuować..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Czekam na", "włożenie filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Czekam na", "wznowienie druku"));
+  #else
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Proszę czekać..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Wysuwanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Włóż i naciśnij prz."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Ładowanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Wznowienie..."));
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index f90999a357..7f3288f155 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -30,159 +30,186 @@
  *
  */
 
-#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
+ #define DISPLAY_CHARSET_ISO10646_1
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" pronta.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Cartão inserido")
-#define MSG_MEDIA_REMOVED                   _UxGT("Cartão removido")
-#define MSG_MAIN                            _UxGT("Menu principal")
-#define MSG_AUTOSTART                       _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Desactivar motores")
-#define MSG_AUTO_HOME                       _UxGT("Ir para origem")
-#define MSG_AUTO_HOME_X                     _UxGT("Ir para origem X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Ir para origem Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Ir para origem Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Indo para origem")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Click para iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Próximo ponto")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Pronto !")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Definir desvio")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offsets aplicados")
-#define MSG_SET_ORIGIN                      _UxGT("Definir origem")
-#define MSG_PREHEAT_1                       _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_ALL                   _UxGT("Pre-aq. " PREHEAT_1_LABEL " Tudo")
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Pre-aq. " PREHEAT_1_LABEL " ") LCD_STR_THERMOMETER _UxGT("Base")
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Definições " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2                       _UxGT("Pre-aquecer " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     _UxGT("Pre-aquecer " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Pre-aq. " PREHEAT_2_LABEL " Tudo")
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Pre-aq. " PREHEAT_2_LABEL " ") LCD_STR_THERMOMETER _UxGT("Base")
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Definições " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN                        _UxGT("Arrefecer")
-#define MSG_SWITCH_PS_ON                    _UxGT("Ligar")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Desligar")
-#define MSG_EXTRUDE                         _UxGT("Extrudir")
-#define MSG_RETRACT                         _UxGT("Retrair")
-#define MSG_MOVE_AXIS                       _UxGT("Mover eixo")
-#define MSG_MOVE_X                          _UxGT("Mover X")
-#define MSG_MOVE_Y                          _UxGT("Mover Y")
-#define MSG_MOVE_Z                          _UxGT("Mover Z")
-#define MSG_MOVE_E                          _UxGT("Mover Extrusor")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mover %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mover 10mm")
-#define MSG_SPEED                           _UxGT("Velocidade")
-#define MSG_BED_Z                           _UxGT("Base Z")
-#define MSG_NOZZLE                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Bico")
-#define MSG_BED                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Base")
-#define MSG_FAN_SPEED                       _UxGT("Vel. ventoinha")
-#define MSG_FLOW                            _UxGT("Fluxo")
-#define MSG_CONTROL                         _UxGT("Controlo")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP                        _UxGT("Temp. Automática")
-#define MSG_LCD_ON                          _UxGT("On")
-#define MSG_LCD_OFF                         _UxGT("Off")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_ACC                             _UxGT("Acc")
-#define MSG_JERK                            _UxGT("Jerk")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vb-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vc-jerk")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-jerk")
-  #define MSG_VB_JERK                       _UxGT("Vy-jerk")
-  #define MSG_VC_JERK                       _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-jerk")
-#define MSG_VMAX                            _UxGT(" Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retracção")
-#define MSG_A_TRAVEL                        _UxGT("A-movimento")
-#define MSG_STEPS_PER_MM                    _UxGT("Passo/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A passo/mm")
-  #define MSG_BSTEPS                        _UxGT("B passo/mm")
-  #define MSG_CSTEPS                        _UxGT("C passo/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X passo/mm")
-  #define MSG_BSTEPS                        _UxGT("Y passo/mm")
-  #define MSG_CSTEPS                        _UxGT("Z passo/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E passo/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 passo/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 passo/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 passo/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 passo/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 passo/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 passo/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movimento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E em mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Fil. Diam.")
-#define MSG_CONTRAST                        _UxGT("Contraste")
-#define MSG_STORE_EEPROM                    _UxGT("Guardar na memoria")
-#define MSG_LOAD_EEPROM                     _UxGT("Carregar da memoria")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Rest. de emergen.")
-#define MSG_REFRESH                         LCD_STR_REFRESH _UxGT(" Recarregar")
-#define MSG_WATCH                           _UxGT("Monitorizar")
-#define MSG_PREPARE                         _UxGT("Preparar")
-#define MSG_TUNE                            _UxGT("Afinar")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausar impressão")
-#define MSG_RESUME_PRINT                    _UxGT("Retomar impressão")
-#define MSG_STOP_PRINT                      _UxGT("Parar impressão")
-#define MSG_MEDIA_MENU                      _UxGT("Imprimir do SD")
-#define MSG_NO_MEDIA                        _UxGT("Sem cartão SD")
-#define MSG_DWELL                           _UxGT("Em espera...")
-#define MSG_USERWAIT                        _UxGT("Á espera de ordem")
-#define MSG_PRINT_ABORTED                   _UxGT("Impressão cancelada")
-#define MSG_NO_MOVE                         _UxGT("Sem movimento")
-#define MSG_KILLED                          _UxGT("EMERGÊNCIA. ")
-#define MSG_STOPPED                         _UxGT("PARADO. ")
-#define MSG_CONTROL_RETRACT                 _UxGT(" Retrair mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Troca Retrair mm")
-#define MSG_CONTROL_RETRACTF                _UxGT(" Retrair  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT(" Levantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT(" DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Troca DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT(" DesRet  V")
-#define MSG_AUTORETRACT                     _UxGT(" AutoRetr.")
-#define MSG_FILAMENTCHANGE                  _UxGT("Trocar filamento")
-#define MSG_INIT_MEDIA                      _UxGT("Inici. cartão SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Trocar cartão SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Sensor fora/base")
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Desvio Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Fim de curso")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Aquecimento falhou")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Err: REDUNDANT TEMP")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("THERMAL RUNAWAY")
-#define MSG_ERR_MAXTEMP                     _UxGT("Err: T Máxima")
-#define MSG_ERR_MINTEMP                     _UxGT("Err: T Mínima")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Err: T Base Máxima")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Err: T Base Mínima")
-#define MSG_HEATING                         _UxGT("Aquecendo...")
-#define MSG_BED_HEATING                     _UxGT("Aquecendo base...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibração Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrar Centro")
+namespace Language_pt {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_LCD_ENDSTOPS                    _UxGT("Fim de curso")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Portuguese");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Impressora Incorreta")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" pronta.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Cartão inserido");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Cartão removido");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu principal");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Desactivar motores");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Ir para origem");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Ir para origem X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Ir para origem Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Ir para origem Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Indo para origem");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Click para iniciar");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Próximo ponto");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Pronto !");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Definir desvio");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offsets aplicados");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Definir origem");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" Tudo");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Definições ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Pre-aq. ") PREHEAT_2_LABEL _UxGT(" Tudo");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Pre-aq. ") PREHEAT_2_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Definições ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Arrefecer");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Ligar");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Desligar");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrudir");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retrair");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mover eixo");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mover X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mover Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mover Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Mover Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Mover Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Mover Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Mover Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Mover Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Mover Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Mover Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mover %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mover 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mover 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mover 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocidade");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Base Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = " " LCD_STR_THERMOMETER _UxGT(" Bico");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" Base");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. ventoinha");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Vel. ventoinha 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Vel. ventoinha 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Vel. ventoinha 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Fluxo");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Fluxo ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Fluxo ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Fluxo ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Fluxo ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Fluxo ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Fluxo ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controlo");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-retracção");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-movimento");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Passo/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E passo/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" passo/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movimento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E em mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Fil. Diam.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Fil. Diam. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Fil. Diam. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Fil. Diam. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Fil. Diam. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Fil. Diam. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Fil. Diam. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar na memoria");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carregar da memoria");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Rest. de emergen.");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT(" Recarregar");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Monitorizar");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Afinar");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausar impressão");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Retomar impressão");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Parar impressão");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Imprimir do SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Sem cartão SD");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Em espera...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Á espera de ordem");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impressão cancelada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sem movimento");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("EMERGÊNCIA. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("PARADO. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT(" Retrair mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Troca Retrair mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT(" Retrair  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT(" Levantar mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT(" DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Troca DesRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT(" DesRet  V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT(" AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Trocar filamento");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Trocar filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Trocar filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Trocar filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Trocar filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Trocar filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Trocar filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Inici. cartão SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Trocar cartão SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sensor fora/base");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Desvio Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Fim de curso");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Aquecimento falhou");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Err: T Máxima");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Err: T Mínima");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Err: T Base Máxima");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Err: T Base Mínima");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Aquecendo...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Aquecendo base...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibração Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrar X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrar Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrar Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrar Centro");
+
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Fim de curso");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Impressora Incorreta");
+}
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
index f6da0b700f..548ba4cd97 100644
--- a/Marlin/src/lcd/language/language_pt_br.h
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -29,416 +29,464 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_pt_br {
+  using namespace Language_en; // Inherit undefined strings from English
 
-// Put characters here that should be displayed with M117
-//_UxGT("áãàçÉéêíóõ")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Portuguese (BR)");
 
-#define CHARSIZE 2
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" pronto.");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" pronto.")
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Voltar");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Cartão inserido");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Cartão removido");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Fins de curso");
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Soft Fins curso");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Menu principal");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Config. Avançada");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Configuração");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Início automático");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Desabilit. motores");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menu Debug");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Testar Barra Progres");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Ir a origem XYZ");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Ir na origem X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Ir na origem Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Ir na origem Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto alinhar Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Indo para origem");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Clique para Iniciar");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Próximo Ponto");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Fim nivelação!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Suavizar altura");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Compensar origem");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Alteração aplicada");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Ajustar Origem");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Extrusora ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Pre-aq.Todo ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Pre-aq.Mesa ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Ajustar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Extrusora ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Pre-aq.Todo ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Pre-aq.Mesa ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Ajustar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Customizar Pre-aq.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Esfriar");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Ligar");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Desligar");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Extrusar");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Retrair");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Mover eixo");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Nivelação Mesa");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Nivelar Mesa");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Nivelar Cantos");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Próximo Canto");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Editar Malha");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Fim da Edição");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Índice X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Índice Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Valor Z");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Comando customizado");
 
-#define MSG_BACK                            _UxGT("Voltar")
-#define MSG_MEDIA_INSERTED                  _UxGT("Cartão inserido")
-#define MSG_MEDIA_REMOVED                   _UxGT("Cartão removido")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Fins de curso")
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Soft Fins curso")
-#define MSG_MAIN                            _UxGT("Menu principal")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Config. Avançada")
-#define MSG_CONFIGURATION                   _UxGT("Configuração")
-#define MSG_AUTOSTART                       _UxGT("Início automático")
-#define MSG_DISABLE_STEPPERS                _UxGT("Desabilit. motores")
-#define MSG_DEBUG_MENU                      _UxGT("Menu Debug")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Testar Barra Progres")
-#define MSG_AUTO_HOME                       _UxGT("Ir a origem XYZ")
-#define MSG_AUTO_HOME_X                     _UxGT("Ir na origem X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Ir na origem Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Ir na origem Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Auto alinhar Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Indo para origem")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Clique para Iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Próximo Ponto")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Fim nivelação!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Suavizar altura")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Compensar origem")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Alteração aplicada")
-#define MSG_SET_ORIGIN                      _UxGT("Ajustar Origem")
-#define MSG_PREHEAT_1                       _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   _UxGT("Pre-aq.Todo " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_END                   _UxGT("Extrusora " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_BEDONLY               _UxGT("Pre-aq.Mesa " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_SETTINGS              _UxGT("Ajustar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2                       _UxGT("Pre-aquecer " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   _UxGT("Pre-aq.Todo " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_END                   _UxGT("Extrusora " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_BEDONLY               _UxGT("Pre-aq.Mesa " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_SETTINGS              _UxGT("Ajustar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Customizar Pre-aq.")
-#define MSG_COOLDOWN                        _UxGT("Esfriar")
-#define MSG_SWITCH_PS_ON                    _UxGT("Ligar")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Desligar")
-#define MSG_EXTRUDE                         _UxGT("Extrusar")
-#define MSG_RETRACT                         _UxGT("Retrair")
-#define MSG_MOVE_AXIS                       _UxGT("Mover eixo")
-#define MSG_BED_LEVELING                    _UxGT("Nivelação Mesa")
-#define MSG_LEVEL_BED                       _UxGT("Nivelar Mesa")
-#define MSG_LEVEL_CORNERS                   _UxGT("Nivelar Cantos")
-#define MSG_NEXT_CORNER                     _UxGT("Próximo Canto")
-#define MSG_EDIT_MESH                       _UxGT("Editar Malha")
-#define MSG_EDITING_STOPPED                 _UxGT("Fim da Edição")
-#define MSG_MESH_X                          _UxGT("Índice X")
-#define MSG_MESH_Y                          _UxGT("Índice Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Valor Z")
-#define MSG_USER_MENU                       _UxGT("Comando customizado")
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("Modo IDEX");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-Estacionar");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplicação");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Cópia espelhada");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Controle Total");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2o bico X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2o bico Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2o bico Z");
 
-#define MSG_IDEX_MENU                       _UxGT("Modo IDEX")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Estacionar")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicação")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Cópia espelhada")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Controle Total")
-#define MSG_X_OFFSET                        _UxGT("2o bico X")
-#define MSG_Y_OFFSET                        _UxGT("2o bico Y")
-#define MSG_Z_OFFSET                        _UxGT("2o bico Z")
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Executando G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Ferramentas UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Nivel. Mesa Unif.");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Fazer malha manual");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Calçar e calibrar");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Medir");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Remover e calibrar");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Movendo para Próximo");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Ativar UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Desativar UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Temp. Mesa");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Temp. Extrusora");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Editar Malha");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Editar Malha Custom");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Ajuste Fino da Malha");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Fim da Edição");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Montar Malha Custom");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Montar ");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Montar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Montar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Montar Malha fria");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Ajustar Altura");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Quant. de Altura");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Validar Malha");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Checar ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Checar ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Validar Malha Custom");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Continuar Malha");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Nivelação da Malha");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Nivelação 3 pontos");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Nivelação Grid");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Nivelar Malha");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Cantos");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Tipo de Mapa");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Salvar Mapa da Malha");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Enviar Para Host");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Salvar Malha CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Salvar Backup");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Informação do UBL");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Qtd de Enchimento");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Enchimento Manual");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Enchimento Smart");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Preencher malha");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Invalidar tudo");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Invalidar próximo");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Ajuste Fino de Todos");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Ajustar Mais Próximo");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Armazenamento Malha");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot de Memória");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Ler Malha");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salvar Malha");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Malha %i carregada");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Malha %i salva");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sem armazenamento");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Erro ao salvar UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Erro no restauro UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Compensação Z parou");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("UBL passo a passo");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Montar Malha fria");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Enchimento Smart");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Validar Malha");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Ajuste Fino de Todos");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Validar Malha");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Ajuste Fino de Todos");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Salvar Malha");
 
-#define MSG_UBL_DOING_G29                   _UxGT("Executando G29")
-#define MSG_UBL_TOOLS                       _UxGT("Ferramentas UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Nivel. Mesa Unif.")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Fazer malha manual")
-#define MSG_UBL_BC_INSERT                   _UxGT("Calçar e calibrar")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Medir")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Remover e calibrar")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Movendo para Próximo")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Ativar UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Desativar UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Temp. Mesa")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Temp. Extrusora")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Editar Malha")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Editar Malha Custom")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Ajuste Fino da Malha")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Fim da Edição")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Montar Malha Custom")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Montar ")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Montar " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Montar " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Montar Malha fria")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Ajustar Altura")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Quant. de Altura")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Validar Malha")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Checar " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Checar " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Validar Malha Custom")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Continuar Malha")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Nivelação da Malha")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Nivelação 3 pontos")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Nivelação Grid")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Nivelar Malha")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Cantos")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Tipo de Mapa")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Salvar Mapa da Malha")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Enviar Para Host")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Salvar Malha CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Salvar Backup")
-#define MSG_UBL_INFO_UBL                    _UxGT("Informação do UBL")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Qtd de Enchimento")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Enchimento Manual")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Enchimento Smart")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Preencher malha")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Invalidar tudo")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Invalidar próximo")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Ajuste Fino de Todos")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Ajustar Mais Próximo")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Armazenamento Malha")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Slot de Memória")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Ler Malha")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Salvar Malha")
-#define MSG_MESH_LOADED                     _UxGT("Malha %i carregada")
-#define MSG_MESH_SAVED                      _UxGT("Malha %i salva")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Sem armazenamento")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Erro ao salvar UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Erro no restauro UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Compensação Z parou")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("UBL passo a passo")
-#define MSG_LED_CONTROL                     _UxGT("Controle do LED")
-#define MSG_LEDS                            _UxGT("Luz")
-#define MSG_LED_PRESETS                     _UxGT("Configuração da Luz")
-#define MSG_SET_LEDS_RED                    _UxGT("Luz Vermelha")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Luz Laranja")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Luz Amarela")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Luz Verde")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Luz Azul")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Luz Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Luz Violeta")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Luz Branca")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Luz Padrão")
-#define MSG_CUSTOM_LEDS                     _UxGT("Luz Customizada")
-#define MSG_INTENSITY_R                     _UxGT("Intensidade Vermelho")
-#define MSG_INTENSITY_G                     _UxGT("Intensidade Verde")
-#define MSG_INTENSITY_B                     _UxGT("Intensidade Azul")
-#define MSG_INTENSITY_W                     _UxGT("Intensidade Branco")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Brilho")
-#define MSG_MOVING                          _UxGT("Movendo...")
-#define MSG_FREE_XY                         _UxGT("Liberar XY")
-#define MSG_MOVE_X                          _UxGT("Mover X")
-#define MSG_MOVE_Y                          _UxGT("Mover Y")
-#define MSG_MOVE_Z                          _UxGT("Mover Z")
-#define MSG_MOVE_E                          _UxGT("Mover Extrusor")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Extrus. mto fria")
-#define MSG_MOVE_Z_DIST                     _UxGT("Mover %smm")
-#define MSG_MOVE_01MM                       _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Mover 10mm")
-#define MSG_SPEED                           _UxGT("Velocidade")
-#define MSG_BED_Z                           _UxGT("Base Z")
-#define MSG_NOZZLE                          _UxGT("Bocal")
-#define MSG_BED                             _UxGT("Mesa")
-#define MSG_FAN_SPEED                       _UxGT("Vel. Ventoinha")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("+Vel. Ventoinha")
-#define MSG_FLOW                            _UxGT("Vazão")
-#define MSG_CONTROL                         _UxGT("Controle")
-#define MSG_MIN                             LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             LCD_STR_THERMOMETER _UxGT(" Máx")
-#define MSG_FACTOR                          LCD_STR_THERMOMETER _UxGT(" Fator")
-#define MSG_AUTOTEMP                        _UxGT("Temp. Automática")
-#define MSG_LCD_ON                          _UxGT("Ligado")
-#define MSG_LCD_OFF                         _UxGT("Desligado")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Selecionar")
-#define MSG_ACC                             _UxGT("Acel.")
-#define MSG_JERK                            _UxGT("Arrancada")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("arrancada VA")
-  #define MSG_VB_JERK                       _UxGT("arrancada VB")
-  #define MSG_VC_JERK                       _UxGT("arrancada VC")
-#else
-  #define MSG_VA_JERK                       _UxGT("arrancada VX")
-  #define MSG_VB_JERK                       _UxGT("arrancada VY")
-  #define MSG_VC_JERK                       _UxGT("arrancada VZ")
-#endif
-#define MSG_VE_JERK                         _UxGT("arrancada VE")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Desv. Junção")
-#define MSG_VELOCITY                        _UxGT("Velocidade")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VDeslocamento min")
-#define MSG_ACCELERATION                    _UxGT("Aceleração")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("Retrair A")
-#define MSG_A_TRAVEL                        _UxGT("Movimento A")
-#define MSG_STEPS_PER_MM                    _UxGT("Passo/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Passo A/mm")
-  #define MSG_BSTEPS                        _UxGT("Passo B/mm")
-  #define MSG_CSTEPS                        _UxGT("Passo C/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Passo X/mm")
-  #define MSG_BSTEPS                        _UxGT("Passo Y/mm")
-  #define MSG_CSTEPS                        _UxGT("Passo Z/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E/mm")
-#define MSG_E0_STEPS                        _UxGT("E1/mm")
-#define MSG_E1_STEPS                        _UxGT("E2/mm")
-#define MSG_E2_STEPS                        _UxGT("E3/mm")
-#define MSG_E3_STEPS                        _UxGT("E4/mm")
-#define MSG_E4_STEPS                        _UxGT("E5/mm")
-#define MSG_E5_STEPS                        _UxGT("E6/mm")
-#define MSG_TEMPERATURE                     _UxGT("Temperatura")
-#define MSG_MOTION                          _UxGT("Movimento")
-#define MSG_FILAMENT                        _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("Extrusão em mm3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Diâmetro Fil.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Descarr. mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Carregar mm")
-#define MSG_ADVANCE_K                       _UxGT("Avanço K")
-#define MSG_CONTRAST                        _UxGT("Contraste")
-#define MSG_STORE_EEPROM                    _UxGT("Salvar Configuração")
-#define MSG_LOAD_EEPROM                     _UxGT("Ler Configuração")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Restauro seguro")
-#define MSG_INIT_EEPROM                     _UxGT("Iniciar EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Atualiz. SD")
-#define MSG_RESET_PRINTER                   _UxGT("Resetar Impressora")
-#define MSG_REFRESH                         _UxGT("Atualização")
-#define MSG_WATCH                           _UxGT("Informações")
-#define MSG_PREPARE                         _UxGT("Preparar")
-#define MSG_TUNE                            _UxGT("Ajustar")
-#define MSG_PAUSE_PRINT                     _UxGT("Pausar impressão")
-#define MSG_RESUME_PRINT                    _UxGT("Resumir impressão")
-#define MSG_STOP_PRINT                      _UxGT("Parar impressão")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Recuperar Impressão")
-#define MSG_MEDIA_MENU                      _UxGT("Imprimir do SD")
-#define MSG_NO_MEDIA                        _UxGT("Sem cartão SD")
-#define MSG_DWELL                           _UxGT("Dormindo...")
-#define MSG_USERWAIT                        _UxGT("Clique para retomar")
-#define MSG_PRINT_PAUSED                    _UxGT("Impressão Pausada")
-#define MSG_PRINTING                        _UxGT("Imprimindo...")
-#define MSG_PRINT_ABORTED                   _UxGT("Impressão Abortada")
-#define MSG_NO_MOVE                         _UxGT("Sem movimento")
-#define MSG_KILLED                          _UxGT("PARADA DE EMERGÊNCIA")
-#define MSG_STOPPED                         _UxGT("PAROU. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retrair mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Retrair Troca mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retrair V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Saltar mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Des-Retrair mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Des-RetTroca mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Des-Retrair  V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("Des-RetTroca V")
-#define MSG_AUTORETRACT                     _UxGT("Retração Automática")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Distancia Retração")
-#define MSG_TOOL_CHANGE                     _UxGT("Mudar Ferramenta")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Levantar Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Preparar Veloc.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Veloc. Retração")
-#define MSG_FILAMENTCHANGE                  _UxGT("Trocar Filamento")
-#define MSG_FILAMENTLOAD                    _UxGT("Carregar Filamento")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Descarreg. Filamento")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Descarregar Todos")
-#define MSG_INIT_MEDIA                      _UxGT("Iniciar SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Trocar SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda fora da mesa")
-#define MSG_SKEW_FACTOR                     _UxGT("Fator de Cisalho")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Testar BLTouch")
-#define MSG_BLTOUCH_RESET                   _UxGT("Reiniciar BLTouch")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Estender BLTouch")
-#define MSG_BLTOUCH_STOW                    _UxGT("Recolher BLTouch")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Estender Sonda-Z")
-#define MSG_MANUAL_STOW                     _UxGT("Recolher Sonda-Z")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Controle do LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Luz");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Configuração da Luz");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Luz Vermelha");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Luz Laranja");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Luz Amarela");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Luz Verde");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Luz Azul");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Luz Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Luz Violeta");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Luz Branca");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Luz Padrão");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Luz Customizada");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Intensidade Vermelho");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Intensidade Verde");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Intensidade Azul");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Intensidade Branco");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Brilho");
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Movendo...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Liberar XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Mover X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Mover Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Mover Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Mover Extrusor");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Mover Extrusor ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Mover Extrusor ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Mover Extrusor ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Mover Extrusor ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Mover Extrusor ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Mover Extrusor ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Extrus. mto fria");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Mover %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Mover 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Mover 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Mover 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Velocidade");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Base Z");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Bocal");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Bocal ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Bocal ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Bocal ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Bocal ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Bocal ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Bocal ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Mesa");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Vel. Ventoinha");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Vel. Ventoinha 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Vel. Ventoinha 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Vel. Ventoinha 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("+Vel. Ventoinha");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("+Vel. Ventoinha 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("+Vel. Ventoinha 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("+Vel. Ventoinha 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Vazão");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Vazão ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Vazão ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Vazão ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Vazão ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Vazão ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Vazão ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Controle");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Máx");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fator");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Temp. Automática");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Ligado");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Desligado");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Selecionar");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Selecionar ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Selecionar ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Selecionar ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Selecionar ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Selecionar ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Selecionar ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Acel.");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Arrancada");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("arrancada V") LCD_STR_A;
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("arrancada V") LCD_STR_B;
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("arrancada V") LCD_STR_C;
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("arrancada VE");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Desv. Junção");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Velocidade");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("VDeslocamento min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Aceleração");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Retrair A");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Movimento A");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Passo/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = _UxGT("Passo ") LCD_STR_A _UxGT("/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = _UxGT("Passo ") LCD_STR_B _UxGT("/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = _UxGT("Passo ") LCD_STR_C _UxGT("/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperatura");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Movimento");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filamento");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("Extrusão em mm3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Diâmetro Fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Diâmetro Fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Diâmetro Fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Diâmetro Fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Diâmetro Fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Diâmetro Fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Diâmetro Fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Descarr. mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Carregar mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("Avanço K");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("Avanço K ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("Avanço K ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("Avanço K ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("Avanço K ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("Avanço K ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("Avanço K ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salvar Configuração");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Ler Configuração");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restauro seguro");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Iniciar EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Atualiz. SD");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetar Impressora");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Atualização");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Informações");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Ajustar");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pausar impressão");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Resumir impressão");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Parar impressão");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Recuperar Impressão");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Imprimir do SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Sem cartão SD");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Dormindo...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Clique para retomar");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Impressão Pausada");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Imprimindo...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Impressão Abortada");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Sem movimento");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("PARADA DE EMERGÊNCIA");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("PAROU. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retrair mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Retrair Troca mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retrair V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Saltar mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Des-Retrair mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Des-RetTroca mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Des-Retrair  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("Des-RetTroca V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Retração Automática");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Distancia Retração");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Mudar Ferramenta");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Levantar Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Preparar Veloc.");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Veloc. Retração");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Trocar Filamento");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Trocar Filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Trocar Filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Trocar Filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Trocar Filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Trocar Filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Trocar Filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Carregar Filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Carregar Filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Carregar Filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Carregar Filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Carregar Filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Carregar Filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Descarreg. Filamento ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Descarreg. Filamento ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Descarreg. Filamento ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Descarreg. Filamento ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Descarreg. Filamento ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Descarreg. Filamento ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Descarregar Todos");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Iniciar SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Trocar SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda fora da mesa");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Fator de Cisalho");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Testar BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Reiniciar BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Estender BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Recolher BLTouch");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Estender Sonda-Z");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Recolher Sonda-Z");
 
-#define MSG_HOME_FIRST                      _UxGT("Home %s%s%s Primeiro")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Compensar Sonda em Z")
-#define MSG_BABYSTEP_X                      _UxGT("Passinho X")
-#define MSG_BABYSTEP_Y                      _UxGT("Passinho Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Passinho Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Abortar Fim de Curso")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Aquecimento falhou")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Aquecer mesa falhou")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Erro:Temp Redundante")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ESCAPE TÉRMICO")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("ESCAPE TÉRMICO MESA")
-#define MSG_ERR_MAXTEMP                     _UxGT("Erro:Temp Máxima")
-#define MSG_ERR_MINTEMP                     _UxGT("Erro:Temp Mínima")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Erro:Temp Mesa Máx")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Erro:Temp Mesa Mín")
-#define MSG_ERR_Z_HOMING                    _UxGT("Home XY Primeiro")
-#define MSG_HALTED                          _UxGT("IMPRESSORA PAROU")
-#define MSG_PLEASE_RESET                    _UxGT("Favor resetar")
-#define MSG_SHORT_DAY                       _UxGT("d")
-#define MSG_SHORT_HOUR                      _UxGT("h")
-#define MSG_SHORT_MINUTE                    _UxGT("m")
-#define MSG_HEATING                         _UxGT("Aquecendo...")
-#define MSG_COOLING                         _UxGT("Resfriando...")
-#define MSG_BED_HEATING                     _UxGT("Aquecendo mesa...")
-#define MSG_BED_COOLING                     _UxGT("Esfriando mesa...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Calibrar Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Calibrar Centro")
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Home %s%s%s Primeiro");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Compensar Sonda em Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Passinho X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Passinho Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Passinho Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Abortar Fim de Curso");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Aquecimento falhou");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Aquecer mesa falhou");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Erro:Temp Redundante");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ESCAPE TÉRMICO");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("ESCAPE TÉRMICO MESA");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Erro:Temp Máxima");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Erro:Temp Mínima");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Erro:Temp Mesa Máx");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Erro:Temp Mesa Mín");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Home XY Primeiro");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("IMPRESSORA PAROU");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Favor resetar");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d");
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h");
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Aquecendo...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Resfriando...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Aquecendo mesa...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Esfriando mesa...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Calibrar Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Calibrar X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Calibrar Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Calibrar Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Calibrar Centro");
 
-#define MSG_DELTA_SETTINGS                  _UxGT("Configuração Delta")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto-Calibração")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Calibrar Altura")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Desloc. Sonda Z")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Haste Diagonal")
-#define MSG_DELTA_HEIGHT                    _UxGT("Altura")
-#define MSG_DELTA_RADIUS                    _UxGT("Raio")
-#define MSG_INFO_MENU                       _UxGT("Sobre")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Impressora")
-#define MSG_3POINT_LEVELING                 _UxGT("Nivelamento 3 pontos")
-#define MSG_LINEAR_LEVELING                 _UxGT("Nivelamento Linear")
-#define MSG_BILINEAR_LEVELING               _UxGT("Nivelamento Bilinear")
-#define MSG_UBL_LEVELING                    _UxGT("Nivelamento UBL")
-#define MSG_MESH_LEVELING                   _UxGT("Nivelamento da Malha")
-#define MSG_INFO_STATS_MENU                 _UxGT("Estatísticas")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info. da Placa")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrusoras")
-#define MSG_INFO_BAUDRATE                   _UxGT("Taxa de Transmissão")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protocolo")
-#define MSG_CASE_LIGHT                      _UxGT("Luz da Impressora")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Intensidade Brilho")
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Configuração Delta");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto-Calibração");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Calibrar Altura");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Desloc. Sonda Z");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Haste Diagonal");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Altura");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Raio");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Sobre");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Impressora");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("Nivelamento 3 pontos");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Nivelamento Linear");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Nivelamento Bilinear");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Nivelamento UBL");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Nivelamento da Malha");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Estatísticas");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info. da Placa");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistores");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrusoras");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Taxa de Transmissão");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protocolo");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Luz da Impressora");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Intensidade Brilho");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Impressora Incorreta")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Impressora Incorreta");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Total de Impressões")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Realizadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tempo de Impressão")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Trabalho Mais longo")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Total de Extrusão")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Qtd de Impressões")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Realizadas")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tempo de Impressão")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Maior trabalho")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("T. Extrusão")
-#endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Total de Impressões");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Realizadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tempo de Impressão");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Trabalho Mais longo");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Total de Extrusão");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Qtd de Impressões");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Realizadas");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tempo de Impressão");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Maior trabalho");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("T. Extrusão");
+  #endif
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Temp Mín")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Temp Máx")
-#define MSG_INFO_PSU                        _UxGT("PSU")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Força do Motor")
-#define MSG_DAC_PERCENT                     _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Escrever EEPROM DAC")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Temp Mín");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Temp Máx");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("PSU");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Força do Motor");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Escrever EEPROM DAC");
 
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("IMPRESSÃO PAUSADA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("CARREGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("DESCARREG. FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Config. de Retomada")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Purgar mais")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Continuar Impressão")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Bocal: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Sensor filamento")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Falha ao ir à origem")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Falha ao sondar")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Muito frio")
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("IMPRESSÃO PAUSADA");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("CARREGAR FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("DESCARREG. FILAMENTO");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("Config. de Retomada");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Purgar mais");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Continuar Impressão");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Bocal: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Sensor filamento");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Falha ao ir à origem");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Falha ao sondar");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Muito frio");
 
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Aperte o botão para")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("continuar impressão")
-
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Esperando o")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("inicio da")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("troca de filamento")
-
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Coloque filamento")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("pressione o botão")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("para continuar...")
-
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Pressione o botão")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("p/ aquecer o bocal")
-
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Aquecendo o bocal")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Aguarde...")
-
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Esperando")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("remoção de filamento")
-
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Esperando")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("filamento")
-
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Espere pela")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("purga de filamento")
-
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Clique para finaliz.")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("purga de filamento")
-
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Esperando impressão")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("continuar")
-#else // LCD_HEIGHT < 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Clique p. continuar")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Aguarde...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Insira e Clique")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Aquecendo...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ejetando...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Carregando...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Purgando...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Clique p. finalizar")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Continuando...")
-#endif
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Aperte o botão para", "continuar impressão"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Esperando o", "inicio da", "troca de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Coloque filamento", "pressione o botão", "para continuar..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Pressione o botão", "p/ aquecer o bocal"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Aquecendo o bocal", "Aguarde..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Esperando", "remoção de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Esperando", "filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Espere pela", "purga de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Clique para finaliz.", "purga de filamento"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Esperando impressão", "continuar"));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Clique p. continuar"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Aguarde..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Insira e Clique"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Aquecendo..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Ejetando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Carregando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Purgando..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Clique p. finalizar"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Continuando..."));
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index dc32b8d8e1..f19b33dd0c 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -28,434 +28,544 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
-
 #define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" готов.")
-#define MSG_BACK                            _UxGT("Назад")
-#define MSG_MEDIA_INSERTED                  _UxGT("Карта вставлена")
-#define MSG_MEDIA_REMOVED                   _UxGT("Карта извлечена")
-#define MSG_MEDIA_RELEASED                  _UxGT("SD карта не активна")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Эндстопы") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Прогр. эндстопы")
-#define MSG_MAIN                            _UxGT("Меню")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Другие настройки")
-#define MSG_CONFIGURATION                   _UxGT("Настройки")
-#define MSG_AUTOSTART                       _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS                _UxGT("Выкл. двигатели")
-#define MSG_DEBUG_MENU                      _UxGT("Меню отладки")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Тест индикатора")
-#define MSG_AUTO_HOME                       _UxGT("Авто парковка")
-#define MSG_AUTO_HOME_X                     _UxGT("Парковка X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Парковка Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Парковка Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Нулевое положение")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Нажмите чтобы начать")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Следующая точка")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Выравнивание готово!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Высота спада")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Запомнить парковку")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Коррекции применены")
-#define MSG_SET_ORIGIN                      _UxGT("Запомнить ноль")
-#define MSG_PREHEAT_1                       _UxGT("Преднагрев " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" всё")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" сопло")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" стол")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" настр.")
-#define MSG_PREHEAT_2                       _UxGT("Преднагрев " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" всё")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" сопло")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" стол")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" настр.")
-#define MSG_COOLDOWN                        _UxGT("Охлаждение")
-#define MSG_SWITCH_PS_ON                    _UxGT("Включить питание")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Выключить питание")
-#define MSG_EXTRUDE                         _UxGT("Экструзия")
-#define MSG_RETRACT                         _UxGT("Втягивание")
-#define MSG_MOVE_AXIS                       _UxGT("Движение по осям")
-#define MSG_BED_LEVELING                    _UxGT("Калибровка стола")
-#define MSG_LEVEL_BED                       _UxGT("Калибровать стол")
-#define MSG_LEVEL_CORNERS                   _UxGT("Выровнять углы")
-#define MSG_NEXT_CORNER                     _UxGT("Следующий угол")
-#define MSG_EDIT_MESH                       _UxGT("Редактировать сетку")
-#define MSG_EDITING_STOPPED                 _UxGT("Ред. сетки завершено")
-#define MSG_USER_MENU                       _UxGT("Свои команды")
+namespace Language_ru {
+  using namespace Language_en; // Inherit undefined strings from English
+
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Russian");
+
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" готов.");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Назад");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Карта вставлена");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Карта извлечена");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("SD карта не активна");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Эндстопы"); // Max length 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Прогр. эндстопы");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Меню");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Другие настройки");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Настройки");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Автостарт");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Выкл. двигатели");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Меню отладки");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Тест индикатора");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Авто парковка");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Парковка X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Парковка Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Парковка Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Нулевое положение");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Нажмите чтобы начать");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Следующая точка");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Выравнивание готово!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Высота спада");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Запомнить парковку");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Коррекции применены");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Запомнить ноль");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" всё");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" стол");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" настр.");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Преднагрев ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" всё");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" стол");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" настр.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Охлаждение");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Включить питание");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Выключить питание");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Экструзия");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Втягивание");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Движение по осям");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Калибровка стола");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Калибровать стол");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Выровнять углы");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Следующий угол");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Редактировать сетку");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Ред. сетки завершено");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Свои команды");
 
-#define MSG_M48_TEST                        _UxGT("Проверка датчика Z")
-#define MSG_M48_DEVIATION                   _UxGT("Отклонение")
-#define MSG_M48_POINT                       _UxGT("Измерение")
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("Проверка датчика Z");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Отклонение");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("Измерение");
 
-// TODO: IDEX Menu
-#define MSG_OFFSETS_MENU                    _UxGT("Размещение сопел")
+  // TODO: IDEX Menu
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Размещение сопел");
 
-#define MSG_X_OFFSET                        _UxGT("2-е сопло X")
-#define MSG_Y_OFFSET                        _UxGT("2-е сопло Y")
-#define MSG_Z_OFFSET                        _UxGT("2-е сопло Z")
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2-е сопло X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2-е сопло Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2-е сопло Z");
 
-#define MSG_UBL_DOING_G29                   _UxGT("Выполняем G29")
-#define MSG_UBL_TOOLS                       _UxGT("Утилиты UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("Калибровка UBL")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Постр. сетку от руки")
-#define MSG_UBL_BC_INSERT                   _UxGT("Пост. шимм и измер.")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Измерение")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Удал. и измер. стол")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Двигаемся дальше")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Активировать UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Деактивировать UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Температура стола")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Температура сопла")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Редактор сеток")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Редакт. свою сетку")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Точная настр. сетки")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Ред. сетки завершено")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Построить свою сетку")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Построить сетку")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Построить сетку " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Построить сетку " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Построить хол. сетку")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Устан. высоту сетки")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Высота")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Проверить сетку")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Проверить сетку " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Проверить сетку " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Проверить свою сетку")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Продолжить сетку")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Калибровка сетки")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Калибровка 3-х точек")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Калибровка растера")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Выровнить сетку")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Крайние точки")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Тип карты")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Вывести карту сетки")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Вывести на хост")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Вывести в CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Забекапить сетку")
-#define MSG_UBL_INFO_UBL                    _UxGT("Вывод информации UBL")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Кол-во заполнителя")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Ручное заполнение")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Умное заполнение")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Заполнить сетку")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Аннулировать всё")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Аннулир. ближ. точку")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Точная настр. всего")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Настр. ближ. точки")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Хранилище сетей")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Слот памяти")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Загрузить сетку стола")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Сохранить сетку стола")
-#define MSG_MESH_LOADED                     _UxGT("Сетка %i загружена")
-#define MSG_MESH_SAVED                      _UxGT("Сетка %i сохранена")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Нет хранилища")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Ошибка: Сохран. UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Ошибка: Восстан. UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Смещение Z останов.")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Пошаговое UBL")
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Выполняем G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Утилиты UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("Калибровка UBL");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Постр. сетку от руки");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Пост. шимм и измер.");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Измерение");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Удал. и измер. стол");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Двигаемся дальше");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Активировать UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Деактивировать UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Температура стола");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Температура сопла");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Редактор сеток");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Редакт. свою сетку");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Точная настр. сетки");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Ред. сетки завершено");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Построить свою сетку");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Построить сетку");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Построить сетку ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Построить сетку ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Построить хол. сетку");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Устан. высоту сетки");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Высота");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Проверить сетку");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Проверить сетку ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Проверить сетку ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Проверить свою сетку");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Продолжить сетку");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Калибровка сетки");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Калибровка 3-х точек");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Калибровка растера");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Выровнить сетку");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Крайние точки");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Тип карты");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Вывести карту сетки");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Вывести на хост");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Вывести в CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Забекапить сетку");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Вывод информации UBL");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Кол-во заполнителя");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ручное заполнение");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Умное заполнение");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Заполнить сетку");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Аннулировать всё");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Аннулир. ближ. точку");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Точная настр. всего");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Настр. ближ. точки");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Хранилище сетей");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Слот памяти");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Загрузить сетку стола");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Сохранить сетку стола");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Сетка %i загружена");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Сетка %i сохранена");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Нет хранилища");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ошибка: Сохран. UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ошибка: Восстан. UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Смещение Z останов.");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Пошаговое UBL");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Построить хол. сетку");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Умное заполнение");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Проверить сетку");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Точная настр. всего");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Проверить сетку");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Точная настр. всего");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Сохранить сетку стола");
 
-#define MSG_LED_CONTROL                     _UxGT("Настройки LED")
-#define MSG_LEDS                            _UxGT("Подсветку")
-#define MSG_LED_PRESETS                     _UxGT("Предустановки света")
-#define MSG_SET_LEDS_RED                    _UxGT("Красный свет")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Оранжевый свет")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Жёлтый свет")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Зелёный свет")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Синий свет")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Индиго свет")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Фиолетовый свет")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Белый свет")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Свет по умолчанию")
-#define MSG_CUSTOM_LEDS                     _UxGT("Свои настр. света")
-#define MSG_INTENSITY_R                     _UxGT("Интенсивн. красного")
-#define MSG_INTENSITY_G                     _UxGT("Интенсивн. зелёного")
-#define MSG_INTENSITY_B                     _UxGT("Интенсивн. синего")
-#define MSG_INTENSITY_W                     _UxGT("Интенсивн. белого")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Яркость")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Настройки LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Подсветку");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Предустановки света");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Красный свет");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Оранжевый свет");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Жёлтый свет");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Зелёный свет");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Синий свет");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Индиго свет");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Фиолетовый свет");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Белый свет");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Свет по умолчанию");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Свои настр. света");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Интенсивн. красного");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Интенсивн. зелёного");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Интенсивн. синего");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Интенсивн. белого");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Яркость");
 
-#define MSG_MOVING                          _UxGT("Движемся...")
-#define MSG_FREE_XY                         _UxGT("Освобождаем XY")
-#define MSG_MOVE_X                          _UxGT("Движение по X")
-#define MSG_MOVE_Y                          _UxGT("Движение по Y")
-#define MSG_MOVE_Z                          _UxGT("Движение по Z")
-#define MSG_MOVE_E                          _UxGT("Экструдер")
-#define MSG_MOVE_Z_DIST                     _UxGT("Движение %sмм")
-#define MSG_MOVE_01MM                       _UxGT("Движение 0.1мм")
-#define MSG_MOVE_1MM                        _UxGT("Движение 1мм")
-#define MSG_MOVE_10MM                       _UxGT("Движение 10мм")
-#define MSG_SPEED                           _UxGT("Скорость")
-#define MSG_BED_Z                           _UxGT("Z стола")
-#define MSG_NOZZLE                          _UxGT("Сопло")
-#define MSG_BED                             _UxGT("Стол")
-#define MSG_FAN_SPEED                       _UxGT("Кулер")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Кулер доп.")
-#define MSG_FLOW                            _UxGT("Поток")
-#define MSG_CONTROL                         _UxGT("Настройки")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Мин")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Макс")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Фактор")
-#define MSG_AUTOTEMP                        _UxGT("Автотемпература")
-#define MSG_LCD_ON                          _UxGT("Вкл.")
-#define MSG_LCD_OFF                         _UxGT("Выкл.")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Выбор")
-#define MSG_ACC                             _UxGT("Ускорение")
-#define MSG_JERK                            _UxGT("Рывок")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-рывок")
-  #define MSG_VB_JERK                       _UxGT("Vb-рывок")
-  #define MSG_VC_JERK                       _UxGT("Vc-рывок")
-#else
-  #define MSG_VX_JERK                       _UxGT("Vx-рывок")
-  #define MSG_VY_JERK                       _UxGT("Vy-рывок")
-  #define MSG_VZ_JERK                       _UxGT("Vz-рывок")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-рывок")
-#define MSG_VELOCITY                        _UxGT("Быстрота")
-#define MSG_VMAX                            _UxGT("Vмакс ")
-#define MSG_VMIN                            _UxGT("Vмин")
-#define MSG_VTRAV_MIN                       _UxGT("Vпутеш. мин")
-#define MSG_ACCELERATION                    _UxGT("Ускорение")
-#define MSG_AMAX                            _UxGT("Aмакс ")
-#define MSG_A_RETRACT                       _UxGT("A-втягивание")
-#define MSG_A_TRAVEL                        _UxGT("A-путеш.")
-#define MSG_STEPS_PER_MM                    _UxGT("Шаг/мм")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Aшаг/мм")
-  #define MSG_BSTEPS                        _UxGT("Bшаг/мм")
-  #define MSG_CSTEPS                        _UxGT("Cшаг/мм")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xшаг/мм")
-  #define MSG_BSTEPS                        _UxGT("Yшаг/мм")
-  #define MSG_CSTEPS                        _UxGT("Zшаг/мм")
-#endif
-#define MSG_ESTEPS                          _UxGT("Eшаг/мм")
-#define MSG_E0_STEPS                        _UxGT("E1шаг/мм")
-#define MSG_E1_STEPS                        _UxGT("E2шаг/мм")
-#define MSG_E2_STEPS                        _UxGT("E3шаг/мм")
-#define MSG_E3_STEPS                        _UxGT("E4шаг/мм")
-#define MSG_E4_STEPS                        _UxGT("E5шаг/мм")
-#define MSG_E5_STEPS                        _UxGT("E6шаг/мм")
-#define MSG_TEMPERATURE                     _UxGT("Температура")
-#define MSG_MOTION                          _UxGT("Движение")
-#define MSG_FILAMENT                        _UxGT("Филамент")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E в мм3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Диаметр филамента")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Загрузка мм")
-#define MSG_FILAMENT_LOAD                   _UxGT("Выгрузка мм")
-#define MSG_ADVANCE_K                       _UxGT("K продвижения")
-#define MSG_CONTRAST                        _UxGT("Контраст LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Сохранить настройки")
-#define MSG_LOAD_EEPROM                     _UxGT("Загрузить настройки")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Вернуть настройки")
-#define MSG_INIT_EEPROM                     _UxGT("Инициализация EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Обновление прошивки")
-#define MSG_RESET_PRINTER                   _UxGT("Сброс принтера")
-#define MSG_REFRESH                         _UxGT("Обновить")
-#define MSG_WATCH                           _UxGT("Информационный экран")
-#define MSG_PREPARE                         _UxGT("Подготовить")
-#define MSG_TUNE                            _UxGT("Настроить")
-#define MSG_START_PRINT                     _UxGT("Начало печати")
-#define MSG_BUTTON_NEXT                     _UxGT("Дальше")
-#define MSG_BUTTON_INIT                     _UxGT("Инициализация")
-#define MSG_BUTTON_STOP                     _UxGT("Остановить")
-#define MSG_BUTTON_PRINT                    _UxGT("Печать")
-#define MSG_BUTTON_RESET                    _UxGT("Сброс")
-#define MSG_BUTTON_CANCEL                   _UxGT("Отмена")
-#define MSG_BUTTON_DONE                     _UxGT("Готово")
-#define MSG_PAUSE_PRINT                     _UxGT("Пауза печати")
-#define MSG_RESUME_PRINT                    _UxGT("Продолжить печать")
-#define MSG_STOP_PRINT                      _UxGT("Остановить печать")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Восстановение сбоя")
-#define MSG_MEDIA_MENU                      _UxGT("Печать с SD карты")
-#define MSG_NO_MEDIA                        _UxGT("Нет SD карты")
-#define MSG_DWELL                           _UxGT("Сон...")
-#define MSG_USERWAIT                        _UxGT("Продолжить...")
-#define MSG_PRINT_PAUSED                    _UxGT("Печать на паузе")
-#define MSG_PRINT_ABORTED                   _UxGT("Печать отменена")
-#define MSG_NO_MOVE                         _UxGT("Нет движения.")
-#define MSG_KILLED                          _UxGT("УБИТО. ")
-#define MSG_STOPPED                         _UxGT("ОСТАНОВЛЕНО. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Втягивание мм")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Втягивание смены мм")
-#define MSG_CONTROL_RETRACTF                _UxGT("Втягивание V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Втяг. прыжка мм")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("Возврат мм")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("Возврат смены мм")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("Возврат V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("Возврат смены V")
-#define MSG_AUTORETRACT                     _UxGT("Авто Втягивание")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Движемся...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Освобождаем XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Движение по X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Движение по Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Движение по Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Экструдер");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Экструдер ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Экструдер ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Экструдер ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Экструдер ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Экструдер ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Экструдер ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Движение %sмм");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Движение 0.1мм");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Движение 1мм");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Движение 10мм");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Скорость");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Z стола");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Сопло");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Стол");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Кулер");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Кулер 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Кулер 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Кулер 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Кулер доп.");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Кулер доп. 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Кулер доп. 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Кулер доп. 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Поток");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Поток ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Поток ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Поток ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Поток ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Поток ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Поток ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Настройки");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Мин");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Макс");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Автотемпература");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Вкл.");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Выкл.");
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Выбор");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Выбор ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Выбор ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Выбор ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Выбор ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Выбор ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Выбор ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Ускорение");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Рывок");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-рывок");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-рывок");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-рывок");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-рывок");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Быстрота");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("Vмакс ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("Vмакс ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("Vмакс ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("Vмакс ") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("Vмакс ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("Vмакс ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("Vмакс ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("Vмакс ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("Vмакс ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("Vмакс ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vмин");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vпутеш. мин");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Ускорение");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Aмакс ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Aмакс ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Aмакс ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Aмакс ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Aмакс ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Aмакс ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Aмакс ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Aмакс ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Aмакс ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Aмакс ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-втягивание");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-путеш.");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Шаг/мм");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Eшаг/мм");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("шаг/мм");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Температура");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Движение");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Филамент");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E в мм3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Диаметр филамента");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Диаметр филамента ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Диаметр филамента ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Диаметр филамента ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Диаметр филамента ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Диаметр филамента ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Диаметр филамента ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Загрузка мм");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Выгрузка мм");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K продвижения");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K продвижения ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K продвижения ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K продвижения ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K продвижения ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K продвижения ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K продвижения ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Контраст LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Сохранить настройки");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Загрузить настройки");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Вернуть настройки");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Инициализация EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Обновление прошивки");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Сброс принтера");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Обновить");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Информационный экран");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Подготовить");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Настроить");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Начало печати");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Дальше");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Инициализация");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Остановить");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Печать");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Сброс");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Отмена");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Готово");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Пауза печати");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Продолжить печать");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Остановить печать");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Восстановение сбоя");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Печать с SD карты");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Нет SD карты");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Сон...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Продолжить...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Печать на паузе");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Печать отменена");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Нет движения.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("УБИТО. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ОСТАНОВЛЕНО. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Втягивание мм");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Втягивание смены мм");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Втягивание V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Втяг. прыжка мм");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("Возврат мм");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("Возврат смены мм");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("Возврат V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("Возврат смены V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Авто Втягивание");
 
-// TODO: Filament Change Swap / Purge Length
+  // TODO: Filament Change Swap / Purge Length
 
-#define MSG_TOOL_CHANGE                     _UxGT("Смена сопел")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Поднятие по Z")
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Смена сопел");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Поднятие по Z");
 
-// TODO: Singlenozzle, nozzle standby
+  // TODO: Singlenozzle, nozzle standby
 
-#define MSG_FILAMENTCHANGE                  _UxGT("Смена филамента")
-#define MSG_FILAMENTLOAD                    _UxGT("Загрузка филамента")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Выгрузка филамента")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Выгрузить всё")
-#define MSG_INIT_MEDIA                      _UxGT("Активировать SD")
-#define MSG_CHANGE_MEDIA                    _UxGT("Сменить SD карту")
-#define MSG_RELEASE_MEDIA                   _UxGT("Деактивировать SD")
-#define MSG_ZPROBE_OUT                      _UxGT("Z датчик вне стола")
-#define MSG_SKEW_FACTOR                     _UxGT("Фактор наклона")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Тестирование BLTouch")
-#define MSG_BLTOUCH_RESET                   _UxGT("Сброс BLTouch")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Установка BLTouch")
-#define MSG_BLTOUCH_STOW                    _UxGT("Набивка BLTouch")
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Смена филамента");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Смена филамента ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Смена филамента ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Смена филамента ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Смена филамента ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Смена филамента ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Смена филамента ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Загрузка филамента");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Загрузка филамента ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Загрузка филамента ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Загрузка филамента ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Загрузка филамента ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Загрузка филамента ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Загрузка филамента ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Выгрузка филамента ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Выгрузка филамента ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Выгрузка филамента ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Выгрузка филамента ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Выгрузка филамента ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Выгрузка филамента ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Выгрузить всё");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Активировать SD");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Сменить SD карту");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Деактивировать SD");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z датчик вне стола");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Фактор наклона");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Тестирование BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Сброс BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Установка BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Набивка BLTouch");
 
-// TODO: TouchMI Probe, Manual deploy/stow
+  // TODO: TouchMI Probe, Manual deploy/stow
 
-#define MSG_HOME_FIRST                      _UxGT("Паркуй %s%s%s сначала")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Смещение Z")
-#define MSG_BABYSTEP_X                      _UxGT("Микрошаг X")
-#define MSG_BABYSTEP_Y                      _UxGT("Микрошаг Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Микрошаг Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Сработал концевик")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Разогрев не удался")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Неудача нагрева стола")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Ошибка: Избыточная Т")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("УБЕГАНИЕ ТЕПЛА")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("УБЕГАНИЕ ТЕПЛА СТОЛА")
-// TODO: Heated chamber
-#define MSG_ERR_MAXTEMP                     _UxGT("Ошибка: Т макс.")
-#define MSG_ERR_MINTEMP                     _UxGT("Ошибка: Т мин.")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Ошибка: Т стола макс")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Ошибка: Т стола мин.")
-// TODO: Heated chamber
-#define MSG_ERR_Z_HOMING                    _UxGT("Паркуй XY сначала")
-#define MSG_HALTED                          _UxGT("ПРИНТЕР ОСТАНОВЛЕН")
-#define MSG_PLEASE_RESET                    _UxGT("Сделайте сброс")
-#define MSG_SHORT_DAY                       _UxGT("д") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("ч") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("м") // One character only
-#define MSG_HEATING                         _UxGT("Нагрев...")
-#define MSG_COOLING                         _UxGT("Охлаждение...")
-#define MSG_BED_HEATING                     _UxGT("Нагрев стола...")
-#define MSG_BED_COOLING                     _UxGT("Охлаждение стола...")
-// TODO: Heated chamber
-#define MSG_DELTA_CALIBRATE                 _UxGT("Калибровка Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Калибровать X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Калибровать Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Калибровать Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Калибровать центр")
-#define MSG_DELTA_SETTINGS                  _UxGT("Настройки Delta")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Авто калибровка")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Задать высоту Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Задать Z-смещение")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Диаг. стержень")
-#define MSG_DELTA_HEIGHT                    _UxGT("Высота")
-#define MSG_DELTA_RADIUS                    _UxGT("Радиус")
-#define MSG_INFO_MENU                       _UxGT("О принтере")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Инф. о принтере")
-#define MSG_3POINT_LEVELING                 _UxGT("Калибровка 3-х точек")
-#define MSG_LINEAR_LEVELING                 _UxGT("Линейная калибровка")
-#define MSG_BILINEAR_LEVELING               _UxGT("Билинейная калибр.")
-#define MSG_UBL_LEVELING                    _UxGT("Калибровка UBL")
-#define MSG_MESH_LEVELING                   _UxGT("Калибровка сетки")
-#define MSG_INFO_STATS_MENU                 _UxGT("Статистика принтера")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Информация о плате")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Термисторы")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Экструдеры")
-#define MSG_INFO_BAUDRATE                   _UxGT("Бод")
-#define MSG_INFO_PROTOCOL                   _UxGT("Протокол")
-#define MSG_CASE_LIGHT                      _UxGT("Подсветка корпуса")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Яркость подсветки")
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Паркуй %s%s%s сначала");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Смещение Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Микрошаг X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Микрошаг Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Микрошаг Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Сработал концевик");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Разогрев не удался");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Неудача нагрева стола");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Ошибка: Избыточная Т");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("УБЕГАНИЕ ТЕПЛА");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("УБЕГАНИЕ ТЕПЛА СТОЛА");
+  // TODO: Heated chamber
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Ошибка: Т макс.");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Ошибка: Т мин.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Ошибка: Т стола макс");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Ошибка: Т стола мин.");
+  // TODO: Heated chamber
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Паркуй XY сначала");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Сделайте сброс");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("д"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("ч"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("м"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Нагрев...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Охлаждение...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Нагрев стола...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Охлаждение стола...");
+  // TODO: Heated chamber
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Калибровка Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Калибровать X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Калибровать Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Калибровать Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Калибровать центр");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Настройки Delta");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Авто калибровка");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Задать высоту Delta");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Задать Z-смещение");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Диаг. стержень");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Высота");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Радиус");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("О принтере");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Инф. о принтере");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("Калибровка 3-х точек");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Линейная калибровка");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Билинейная калибр.");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("Калибровка UBL");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Калибровка сетки");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Статистика принтера");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Информация о плате");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Термисторы");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Экструдеры");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Бод");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Протокол");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Подсветка корпуса");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Яркость подсветки");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Неверный принтер")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Неверный принтер");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Счётчик печати")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Закончено")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Общее время печати")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Наидольшее задание")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Длина филамента")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Отпечатков")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Закончено")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Всего")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Наидольшее")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Выдавлено")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Мин. Т")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Макс. Т")
-#define MSG_INFO_PSU                        _UxGT("БП")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Сила привода")
-#define MSG_DAC_PERCENT                     _UxGT("Привод %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Запись DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("ПЕЧАТЬ НА ПАУЗЕ")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("ЗАГРУЗКА ФИЛАМЕНТА")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("ВЫГРУЗКА ФИЛАМЕНТА")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ОПЦИИ ВОЗОБНОВЛЕНИЯ:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Выдавить ещё")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Возобновить печать")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Сопла: ")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Возврат не удался")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Не удалось прощупать")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Низкая Т")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Счётчик печати");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Закончено");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Общее время печати");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Наидольшее задание");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Длина филамента");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Отпечатков");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Закончено");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Всего");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Наидольшее");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Выдавлено");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Мин. Т");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Макс. Т");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("БП");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Сила привода");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Привод %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Запись DAC EEPROM");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("ПЕЧАТЬ НА ПАУЗЕ");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("ЗАГРУЗКА ФИЛАМЕНТА");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("ВЫГРУЗКА ФИЛАМЕНТА");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("ОПЦИИ ВОЗОБНОВЛЕНИЯ:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Выдавить ещё");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Возобновить печать");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Сопла: ");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Возврат не удался");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Не удалось прощупать");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Низкая Т");
 
-// TODO: MMU2
+  // TODO: MMU2
 
-// TODO: Mixing
+  // TODO: Mixing
 
-#define MSG_GAMES                           _UxGT("Игры")
-#define MSG_BRICKOUT                        _UxGT("Кирпичи")
-#define MSG_INVADERS                        _UxGT("Вторжение")
-#define MSG_SNAKE                           _UxGT("Змейка")
-#define MSG_MAZE                            _UxGT("Лабиринт")
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Игры");
+  PROGMEM Language_Str MSG_BRICKOUT                        = _UxGT("Кирпичи");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Вторжение");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Змейка");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Лабиринт");
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Ожидайте")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("начала смены")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("филамента")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Ожидайте")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("выгрузки")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("филамента")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Вставьте пруток")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("и нажмите кнопку")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("для продолжения")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Нажмите кнопку для")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("нагрева сопла...")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Нагрев сопла")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Ждите...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Ожидайте")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("загрузки прутка")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Ожидайте")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("экструзии")
-  #define MSG_FILAMENT_CHANGE_PURGE_3       _UxGT("филамента")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Ожидайте")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("возобновления")
-  #define MSG_FILAMENT_CHANGE_RESUME_3      _UxGT("печати")
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Ожидайте...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Выгрузка...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Вставь и нажми")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Нагрев...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Загрузка...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Выдавливание...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Возобновление...")
-#endif // LCD_HEIGHT < 4
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Ожидайте", "начала смены", "филамента"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Вставьте пруток", "и нажмите кнопку", "для продолжения"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Нажмите кнопку для", "нагрева сопла..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Нагрев сопла", "Ждите..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Ожидайте", "загрузки прутка"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
+  #else
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Ожидайте..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Выгрузка..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Вставь и нажми"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Нагрев..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Загрузка..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Выдавливание..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Возобновление..."));
+  #endif
 
-#define MSG_TMC_DRIVERS                     _UxGT("Драйвера TMC")
-#define MSG_TMC_CURRENT                     _UxGT("Текущие настройки")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Гибридный режим")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Режим без эндстопов")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Режим шага")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("Тихий режим вкл")
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("Драйвера TMC");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Текущие настройки");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Гибридный режим");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Режим без эндстопов");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Режим шага");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("Тихий режим вкл");
 
-// TODO: Service
+  // TODO: Service
 
-// TODO: Backlash
+  // TODO: Backlash
+}
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index 55d2b6e4bf..fa92d72c51 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -32,552 +32,612 @@
  * http://www.facebook.com/farmamam
  *
  */
-
 #define DISPLAY_CHARSET_ISO10646_SK
-#define CHARSIZE 2
 
-// Characters that can be displayed with M117
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("äÄáÁčČďĎéÉíÍĺĹľĽňŇóÓôÔŕŔšŠťŤúÚýÝžŽ³")
+namespace Language_sk {
+  using namespace Language_en; // Inherit undefined strings from English
+
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Slovak");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" pripravená.")
-#define MSG_YES                             _UxGT("ÁNO")
-#define MSG_NO                              _UxGT("NIE")
-#define MSG_BACK                            _UxGT("Naspäť")
-#define MSG_MEDIA_ABORTING                  _UxGT("Ruším...")
-#define MSG_MEDIA_INSERTED                  _UxGT("Karta vložená")
-#define MSG_MEDIA_REMOVED                   _UxGT("Karta vybraná")
-#define MSG_MEDIA_RELEASED                  _UxGT("Karta odpojená")
-#define MSG_MEDIA_WAITING                   _UxGT("Čakám na kartu")
-#define MSG_MEDIA_READ_ERROR                _UxGT("Chyba čítania karty")
-#define MSG_MEDIA_USB_REMOVED               _UxGT("USB zaria. odstrán.")
-#define MSG_MEDIA_USB_FAILED                _UxGT("Chyba spúšťania USB")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Endstopy") // max 8 znakov
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Soft. endstopy")
-#define MSG_MAIN                            _UxGT("Hlavná ponuka")
-#define MSG_ADVANCED_SETTINGS               _UxGT("Pokročilé nastav.")
-#define MSG_CONFIGURATION                   _UxGT("Konfigurácia")
-#define MSG_AUTOSTART                       _UxGT("Auto-Å¡tart")
-#define MSG_DISABLE_STEPPERS                _UxGT("Uvolniť motory")
-#define MSG_DEBUG_MENU                      _UxGT("Ponuka ladenia")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Test uk. priebehu")
-#define MSG_AUTO_HOME                       _UxGT("Domovská pozícia")
-#define MSG_AUTO_HOME_X                     _UxGT("Domov os X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Domov os Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Domov os Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Auto-zarovn. Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Parkovanie XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Kliknutím spusťte")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Ďalší bod")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Meranie hotové!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Výška rovnania")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Nastaviť ofsety")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Ofsety nastavené")
-#define MSG_SET_ORIGIN                      _UxGT("Nastaviť začiatok")
-#define MSG_PREHEAT_1                       _UxGT("Zahriať " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" všetko")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" hotend")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" podlož")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" nast.")
-#define MSG_PREHEAT_2                       _UxGT("Zahriať " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" všetko")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" hotend")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" podlož")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" nast.")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Vlastná teplota")
-#define MSG_COOLDOWN                        _UxGT("Schladiť")
-#define MSG_LASER_MENU                      _UxGT("Nastavenie lasera")
-#define MSG_LASER_OFF                       _UxGT("Vypnúť laser")
-#define MSG_LASER_ON                        _UxGT("Zapnúť laser")
-#define MSG_LASER_POWER                     _UxGT("Výkon lasera")
-#define MSG_SPINDLE_MENU                    _UxGT("Nastavenie vretena")
-#define MSG_SPINDLE_OFF                     _UxGT("Vypnúť vreteno")
-#define MSG_SPINDLE_ON                      _UxGT("Zapnúť vreteno")
-#define MSG_SPINDLE_POWER                   _UxGT("Výkon vretena")
-#define MSG_SPINDLE_REVERSE                 _UxGT("Spätný chod")
-#define MSG_SWITCH_PS_ON                    _UxGT("Zapnúť napájanie")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Vypnúť napájanie")
-#define MSG_EXTRUDE                         _UxGT("Vytlačiť (extr.)")
-#define MSG_RETRACT                         _UxGT("Vytiahnuť (retr.)")
-#define MSG_MOVE_AXIS                       _UxGT("Posunúť osy")
-#define MSG_BED_LEVELING                    _UxGT("Vyrovnanie podložky")
-#define MSG_LEVEL_BED                       _UxGT("Vyrovnať podložku")
-#define MSG_LEVEL_CORNERS                   _UxGT("Vyrovnať rohy")
-#define MSG_NEXT_CORNER                     _UxGT("Ďalší roh")
-#define MSG_MESH_EDITOR                     _UxGT("Editor sieťe bodov")
-#define MSG_EDIT_MESH                       _UxGT("Upraviť sieť bodov")
-#define MSG_EDITING_STOPPED                 _UxGT("Koniec úprav siete")
-#define MSG_PROBING_MESH                    _UxGT("Skúšam bod")
-#define MSG_MESH_X                          _UxGT("Index X")
-#define MSG_MESH_Y                          _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Hodnota Z")
-#define MSG_USER_MENU                       _UxGT("Vlastné príkazy")
-#define MSG_M48_TEST                        _UxGT("M48 Test sondy")
-#define MSG_M48_POINT                       _UxGT("M48 Bod")
-#define MSG_M48_DEVIATION                   _UxGT("Odchýlka")
-#define MSG_IDEX_MENU                       _UxGT("IDEX režim")
-#define MSG_OFFSETS_MENU                    _UxGT("Ofset nástrojov")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-parkovanie")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplikácia")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Zrkadlená kópia")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Plná kontrola")
-#define MSG_X_OFFSET                        _UxGT("2. tryska X")
-#define MSG_Y_OFFSET                        _UxGT("2. tryska Y")
-#define MSG_Z_OFFSET                        _UxGT("2. tryska Z")
-#define MSG_UBL_DOING_G29                   _UxGT("Vykonávam G29")
-#define MSG_UBL_TOOLS                       _UxGT("Nástroje UBL")
-#define MSG_UBL_LEVEL_BED                   _UxGT("UBL rovnanie")
-#define MSG_LCD_TILTING_MESH                _UxGT("Vyrovnávam bod")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Manuálna sieť bodov")
-#define MSG_UBL_BC_INSERT                   _UxGT("Položte a zmerajte")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Zmerajte")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Odstráňte a zmerajte")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Presun na ďalší")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Aktivovať UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Deaktivovať UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Teplota podložky")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Teplota hotendu")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Úprava siete bodov")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Upraviť vlastnú sieť")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Doladiť sieť bodov")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Koniec úprav siete")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Vlastná sieť")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Vytvoriť sieť")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Sieť bodov " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Sieť bodov " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Studená sieť bodov")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Upraviť výšku siete")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Výška")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Skontrolovať sieť")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Kontrola siete " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Kontrola siete " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Kontrola vlast.siete")
-#define MSG_G26_HEATING_BED                 _UxGT("G26 ohrev podlž.")
-#define MSG_G26_HEATING_NOZZLE              _UxGT("G26 ohrev trysky")
-#define MSG_G26_MANUAL_PRIME                _UxGT("Ručné čistenie...")
-#define MSG_G26_FIXED_LENGTH                _UxGT("Čistenie pevn. dĺž.")
-#define MSG_G26_PRIME_DONE                  _UxGT("Čistenie dokončené")
-#define MSG_G26_CANCELED                    _UxGT("G26 zrušený")
-#define MSG_G26_LEAVING                     _UxGT("Opúšťam G26")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Pokračovať v sieti")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Sieťové rovnanie")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3-bodové rovnanie")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Mriežkové rovnanie")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Vyrovnať podložku")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Postranné body")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Typ siete bodov")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Exportovať sieť")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Exportovať do PC")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Exportovať do CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Záloha do PC")
-#define MSG_UBL_INFO_UBL                    _UxGT("Info. o UBL do PC")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Hustota mriežky")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Ručné vyplnenie")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Chytré vyplnenie")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Vyplniť mriežku")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Zrušiť všetko")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Zrušiť najbližší")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Upraviť všetky")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Upraviť najbližší")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Úložisko sietí")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Pamäťový slot")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Načítať sieť bodov")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Uložiť sieť bodov")
-#define MSG_MESH_LOADED                     _UxGT("Sieť %i načítaná")
-#define MSG_MESH_SAVED                      _UxGT("Sieť %i uložená")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Nedostatok miesta")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Chyba: Ukladanie UBL")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Chyba: Obnovenie UBL")
-#define MSG_UBL_Z_OFFSET                    _UxGT("Z-Ofset: ")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Koniec kompenz. Z")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Postupné UBL")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" pripravená.");
+  PROGMEM Language_Str MSG_YES                             = _UxGT("ÁNO");
+  PROGMEM Language_Str MSG_NO                              = _UxGT("NIE");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Naspäť");
+  PROGMEM Language_Str MSG_MEDIA_ABORTING                  = _UxGT("Ruším...");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Karta vložená");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Karta vybraná");
+  PROGMEM Language_Str MSG_MEDIA_RELEASED                  = _UxGT("Karta odpojená");
+  PROGMEM Language_Str MSG_MEDIA_WAITING                   = _UxGT("Čakám na kartu");
+  PROGMEM Language_Str MSG_MEDIA_READ_ERROR                = _UxGT("Chyba čítania karty");
+  PROGMEM Language_Str MSG_MEDIA_USB_REMOVED               = _UxGT("USB zaria. odstrán.");
+  PROGMEM Language_Str MSG_MEDIA_USB_FAILED                = _UxGT("Chyba spúšťania USB");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Endstopy") // max 8 znakov;
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Soft. endstopy");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Hlavná ponuka");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Pokročilé nastav.");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Konfigurácia");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Auto-Å¡tart");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Uvolniť motory");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Ponuka ladenia");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Test uk. priebehu");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Domovská pozícia");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Domov os X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Domov os Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Domov os Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto-zarovn. Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Parkovanie XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Kliknutím spusťte");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Ďalší bod");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Meranie hotové!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Výška rovnania");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Nastaviť ofsety");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Ofsety nastavené");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Nastaviť začiatok");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Zahriať ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" trysky ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" všetko");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" podlož");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" nast.");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Zahriať ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" trysky ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" všetko");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" podlož");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" nast.");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Vlastná teplota");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Schladiť");
+  PROGMEM Language_Str MSG_LASER_MENU                      = _UxGT("Nastavenie lasera");
+  PROGMEM Language_Str MSG_LASER_OFF                       = _UxGT("Vypnúť laser");
+  PROGMEM Language_Str MSG_LASER_ON                        = _UxGT("Zapnúť laser");
+  PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Výkon lasera");
+  PROGMEM Language_Str MSG_SPINDLE_MENU                    = _UxGT("Nastavenie vretena");
+  PROGMEM Language_Str MSG_SPINDLE_OFF                     = _UxGT("Vypnúť vreteno");
+  PROGMEM Language_Str MSG_SPINDLE_ON                      = _UxGT("Zapnúť vreteno");
+  PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Výkon vretena");
+  PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spätný chod");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Zapnúť napájanie");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Vypnúť napájanie");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Vytlačiť (extr.)");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Vytiahnuť (retr.)");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Posunúť osy");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Vyrovnanie podložky");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Vyrovnať podložku");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Vyrovnať rohy");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Ďalší roh");
+  PROGMEM Language_Str MSG_MESH_EDITOR                     = _UxGT("Editor sieťe bodov");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Upraviť sieť bodov");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Koniec úprav siete");
+  PROGMEM Language_Str MSG_PROBING_MESH                    = _UxGT("Skúšam bod");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Index X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Index Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Hodnota Z");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Vlastné príkazy");
+  PROGMEM Language_Str MSG_M48_TEST                        = _UxGT("M48 Test sondy");
+  PROGMEM Language_Str MSG_M48_POINT                       = _UxGT("M48 Bod");
+  PROGMEM Language_Str MSG_M48_DEVIATION                   = _UxGT("Odchýlka");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("IDEX režim");
+  PROGMEM Language_Str MSG_OFFSETS_MENU                    = _UxGT("Ofset nástrojov");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Auto-parkovanie");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Duplikácia");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Zrkadlená kópia");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Plná kontrola");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2. tryska X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2. tryska Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2. tryska Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Vykonávam G29");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Nástroje UBL");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("UBL rovnanie");
+  PROGMEM Language_Str MSG_LCD_TILTING_MESH                = _UxGT("Vyrovnávam bod");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Manuálna sieť bodov");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Položte a zmerajte");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Zmerajte");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Odstráňte a zmerajte");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Presun na ďalší");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Aktivovať UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Deaktivovať UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Teplota podložky");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Teplota podložky");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Teplota hotendu");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Teplota hotendu");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Úprava siete bodov");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Upraviť vlastnú sieť");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Doladiť sieť bodov");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Koniec úprav siete");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Vlastná sieť");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Vytvoriť sieť");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Sieť bodov ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Sieť bodov ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Studená sieť bodov");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Upraviť výšku siete");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Výška");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Skontrolovať sieť");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Kontrola siete ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Kontrola siete ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Kontrola vlast.siete");
+  PROGMEM Language_Str MSG_G26_HEATING_BED                 = _UxGT("G26 ohrev podlž.");
+  PROGMEM Language_Str MSG_G26_HEATING_NOZZLE              = _UxGT("G26 ohrev trysky");
+  PROGMEM Language_Str MSG_G26_MANUAL_PRIME                = _UxGT("Ručné čistenie...");
+  PROGMEM Language_Str MSG_G26_FIXED_LENGTH                = _UxGT("Čistenie pevn. dĺž.");
+  PROGMEM Language_Str MSG_G26_PRIME_DONE                  = _UxGT("Čistenie dokončené");
+  PROGMEM Language_Str MSG_G26_CANCELED                    = _UxGT("G26 zrušený");
+  PROGMEM Language_Str MSG_G26_LEAVING                     = _UxGT("Opúšťam G26");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Pokračovať v sieti");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Sieťové rovnanie");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3-bodové rovnanie");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Mriežkové rovnanie");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Vyrovnať podložku");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Postranné body");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Typ siete bodov");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Exportovať sieť");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Exportovať do PC");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Exportovať do CSV");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Záloha do PC");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Info. o UBL do PC");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Hustota mriežky");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ručné vyplnenie");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Chytré vyplnenie");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Vyplniť mriežku");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Zrušiť všetko");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Zrušiť najbližší");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Upraviť všetky");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Upraviť najbližší");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Úložisko sietí");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Pamäťový slot");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načítať sieť bodov");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložiť sieť bodov");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Sieť %i načítaná");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Sieť %i uložená");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatok miesta");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Chyba: Ukladanie UBL");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Chyba: Obnovenie UBL");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET                    = _UxGT("Z-Ofset: ");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Koniec kompenz. Z");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Postupné UBL");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Studená sieť bodov");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Chytré vyplnenie");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Skontrolovať sieť");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Точная настр. всего");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Skontrolovať sieť");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Точная настр. всего");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Uložiť sieť bodov");
 
-#define MSG_LED_CONTROL                     _UxGT("Nastavenie LED")
-#define MSG_LEDS                            _UxGT("Svetlo")
-#define MSG_LED_PRESETS                     _UxGT("Prednastavené farby")
-#define MSG_SET_LEDS_RED                    _UxGT("Červená")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Oranžová")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Žltá")
-#define MSG_SET_LEDS_GREEN                  _UxGT("Zelená")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Modrá")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Fialová")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Biela")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Obnoviť nastavenie")
-#define MSG_CUSTOM_LEDS                     _UxGT("Vlastná farba")
-#define MSG_INTENSITY_R                     _UxGT("Inten. červenej")
-#define MSG_INTENSITY_G                     _UxGT("Inten. zelenej")
-#define MSG_INTENSITY_B                     _UxGT("Inten. modrej")
-#define MSG_INTENSITY_W                     _UxGT("Inten. bielej")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Jas")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Nastavenie LED");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Svetlo");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Prednastavené farby");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Červená");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Oranžová");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Žltá");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Zelená");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Modrá");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Indigo");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Fialová");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Biela");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Obnoviť nastavenie");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Vlastná farba");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Inten. červenej");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Inten. zelenej");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Inten. modrej");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Inten. bielej");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Jas");
 
-#define MSG_MOVING                          _UxGT("Posúvam...")
-#define MSG_FREE_XY                         _UxGT("Uvolniť XY")
-#define MSG_MOVE_X                          _UxGT("Posunúť X")
-#define MSG_MOVE_Y                          _UxGT("Posunúť Y")
-#define MSG_MOVE_Z                          _UxGT("Posunúť Z")
-#define MSG_MOVE_E                          _UxGT("Extrudér")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Hotend je studený")
-#define MSG_MOVE_Z_DIST                     _UxGT("Posunúť o %smm")
-#define MSG_MOVE_01MM                       _UxGT("Posunúť o 0,1mm")
-#define MSG_MOVE_1MM                        _UxGT("Posunúť o 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Posunúť o 10mm")
-#define MSG_SPEED                           _UxGT("Rýchlosť")
-#define MSG_BED_Z                           _UxGT("Výška podl.")
-#define MSG_NOZZLE                          _UxGT("Tryska")
-#define MSG_BED                             _UxGT("Podložka")
-#define MSG_CHAMBER                         _UxGT("Komora")
-#define MSG_FAN_SPEED                       _UxGT("Rýchlosť vent.")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Rýchlosť ex. vent.")
-#define MSG_FLOW                            _UxGT("Prietok")
-#define MSG_CONTROL                         _UxGT("Ovládanie")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP                        _UxGT("Auto-teplota")
-#define MSG_LCD_ON                          _UxGT("Zap")
-#define MSG_LCD_OFF                         _UxGT("Vyp")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Vybrať")
-#define MSG_ACC                             _UxGT("Zrýchlenie")
-#define MSG_JERK                            _UxGT("Skok")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-skok")
-  #define MSG_VB_JERK                       _UxGT("Vb-skok")
-  #define MSG_VC_JERK                       _UxGT("Vc-skok")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-skok")
-  #define MSG_VB_JERK                       _UxGT("Vy-skok")
-  #define MSG_VC_JERK                       _UxGT("Vz-skok")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-skok")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Junction Dev")
-#define MSG_VELOCITY                        _UxGT("Rýchlosť")
-#define MSG_VMAX                            _UxGT("Vmax ")
-#define MSG_VMIN                            _UxGT("Vmin")
-#define MSG_VTRAV_MIN                       _UxGT("VTrav min")
-#define MSG_ACCELERATION                    _UxGT("Akcelerácia")
-#define MSG_AMAX                            _UxGT("Amax ")
-#define MSG_A_RETRACT                       _UxGT("A-retrakt")
-#define MSG_A_TRAVEL                        _UxGT("A-prejazd")
-#define MSG_STEPS_PER_MM                    _UxGT("Kroky/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Akrokov/mm")
-  #define MSG_BSTEPS                        _UxGT("Bkrokov/mm")
-  #define MSG_CSTEPS                        _UxGT("Ckrokov/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xkrokov/mm")
-  #define MSG_BSTEPS                        _UxGT("Ykrokov/mm")
-  #define MSG_CSTEPS                        _UxGT("Zkrokov/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("Ekrokov/mm")
-#define MSG_E0_STEPS                        _UxGT("E1krokov/mm")
-#define MSG_E1_STEPS                        _UxGT("E2krokov/mm")
-#define MSG_E2_STEPS                        _UxGT("E3krokov/mm")
-#define MSG_E3_STEPS                        _UxGT("E4krokov/mm")
-#define MSG_E4_STEPS                        _UxGT("E5krokov/mm")
-#define MSG_E5_STEPS                        _UxGT("E6krokov/mm")
-#define MSG_TEMPERATURE                     _UxGT("Teplota")
-#define MSG_MOTION                          _UxGT("Pohyb")
-#define MSG_FILAMENT                        _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E na mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("Priem. fil.")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Vysunúť mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Zaviesť mm")
-#define MSG_ADVANCE_K                       _UxGT("K pre posun")
-#define MSG_CONTRAST                        _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Uložiť nastavenie")
-#define MSG_LOAD_EEPROM                     _UxGT("Načítať nastavenie")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Obnoviť nastavenie")
-#define MSG_INIT_EEPROM                     _UxGT("Inicializ. EEPROM")
-#define MSG_MEDIA_UPDATE                    _UxGT("Aktualizovať z SD")
-#define MSG_RESET_PRINTER                   _UxGT("Reštart. tlačiar.")
-#define MSG_REFRESH                         _UxGT("Obnoviť")
-#define MSG_WATCH                           _UxGT("Info. obrazovka")
-#define MSG_PREPARE                         _UxGT("Príprava tlače")
-#define MSG_TUNE                            _UxGT("Doladenie tlače")
-#define MSG_START_PRINT                     _UxGT("Spustiť tlač")
-#define MSG_BUTTON_NEXT                     _UxGT("Ďalší")
-#define MSG_BUTTON_INIT                     _UxGT("Inicial.")
-#define MSG_BUTTON_STOP                     _UxGT("Zastaviť")
-#define MSG_BUTTON_PRINT                    _UxGT("Tlačiť")
-#define MSG_BUTTON_RESET                    _UxGT("Vynulovať")
-#define MSG_BUTTON_CANCEL                   _UxGT("Zrušiť")
-#define MSG_BUTTON_DONE                     _UxGT("Hotovo")
-#define MSG_PAUSE_PRINT                     _UxGT("Pozastaviť tlač")
-#define MSG_RESUME_PRINT                    _UxGT("Obnoviť tlač")
-#define MSG_STOP_PRINT                      _UxGT("Zastaviť tlač")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Obnova po výp. nap.")
-#define MSG_MEDIA_MENU                      _UxGT("Tlačiť z SD")
-#define MSG_NO_MEDIA                        _UxGT("Žiadna SD karta")
-#define MSG_DWELL                           _UxGT("Spím...")
-#define MSG_USERWAIT                        _UxGT("Pokrač. kliknutím...")
-#define MSG_PRINT_PAUSED                    _UxGT("Tlač pozastavená")
-#define MSG_PRINTING                        _UxGT("Tlačím...")
-#define MSG_PRINT_ABORTED                   _UxGT("Tlač zrušená")
-#define MSG_NO_MOVE                         _UxGT("Žiadny pohyb.")
-#define MSG_KILLED                          _UxGT("PRERUŠENÉ. ")
-#define MSG_STOPPED                         _UxGT("ZASTAVENÉ. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Retrakt mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Výmena Re.mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Retraktovať  V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Zdvih Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("AutoRetr.")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Dĺžka výmeny")
-#define MSG_FILAMENT_PURGE_LENGTH           _UxGT("Dĺžka vytlačenia")
-#define MSG_TOOL_CHANGE                     _UxGT("Výmena nástroja")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Zdvihnúť Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Primárna rýchl.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Rýchl. retrakcie")
-#define MSG_NOZZLE_STANDBY                  _UxGT("Záložná tryska")
-#define MSG_FILAMENTCHANGE                  _UxGT("Vymeniť filament")
-#define MSG_FILAMENTLOAD                    _UxGT("Zaviesť filament")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Vysunúť filament")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Vysunúť všetko")
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Posúvam...");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Uvolniť XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Posunúť X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Posunúť Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Posunúť Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Extrudér");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Extrudér ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Extrudér ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Extrudér ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Extrudér ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Extrudér ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Extrudér ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Hotend je studený");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Posunúť o %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Posunúť o 0,1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Posunúť o 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Posunúť o 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Rýchlosť");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Výška podl.");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Tryska");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Tryska ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Tryska ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Tryska ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Tryska ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Tryska ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Tryska ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Podložka");
+  PROGMEM Language_Str MSG_CHAMBER                         = _UxGT("Komora");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Rýchlosť vent.");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Rýchlosť vent. 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Rýchlosť vent. 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Rýchlosť vent. 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Rýchlosť ex. vent.");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Rýchlosť ex. vent. 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Rýchlosť ex. vent. 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Rýchlosť ex. vent. 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Prietok");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Prietok ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Prietok ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Prietok ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Prietok ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Prietok ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Prietok ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Ovládanie");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Auto-teplota");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Zap");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Vyp");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Vybrať");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Vybrať ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Vybrať ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Vybrať ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Vybrať ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Vybrať ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Vybrať ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Zrýchlenie");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Skok");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-skok");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-skok");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-skok");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-skok");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Junction Dev");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Rýchlosť");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Akcelerácia");
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-retrakt");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-prejazd");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Kroky/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Ekrokov/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("krokov/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Teplota");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Pohyb");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E na mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Priem. fil.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Priem. fil. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Priem. fil. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Priem. fil. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Priem. fil. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Priem. fil. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Priem. fil. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Vysunúť mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Zaviesť mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K pre posun");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K pre posun ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K pre posun ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K pre posun ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K pre posun ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K pre posun ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K pre posun ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložiť nastavenie");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načítať nastavenie");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Obnoviť nastavenie");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializ. EEPROM");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizovať z SD");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reštart. tlačiar.");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Obnoviť");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Info. obrazovka");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Príprava tlače");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Doladenie tlače");
+  PROGMEM Language_Str MSG_START_PRINT                     = _UxGT("Spustiť tlač");
+  PROGMEM Language_Str MSG_BUTTON_NEXT                     = _UxGT("Ďalší");
+  PROGMEM Language_Str MSG_BUTTON_INIT                     = _UxGT("Inicial.");
+  PROGMEM Language_Str MSG_BUTTON_STOP                     = _UxGT("Zastaviť");
+  PROGMEM Language_Str MSG_BUTTON_PRINT                    = _UxGT("Tlačiť");
+  PROGMEM Language_Str MSG_BUTTON_RESET                    = _UxGT("Vynulovať");
+  PROGMEM Language_Str MSG_BUTTON_CANCEL                   = _UxGT("Zrušiť");
+  PROGMEM Language_Str MSG_BUTTON_DONE                     = _UxGT("Hotovo");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Pozastaviť tlač");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Obnoviť tlač");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Zastaviť tlač");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Obnova po výp. nap.");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Tlačiť z SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Žiadna SD karta");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Spím...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Pokrač. kliknutím...");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Tlač pozastavená");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Tlačím...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Tlač zrušená");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Žiadny pohyb.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("PRERUŠENÉ. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ZASTAVENÉ. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Retrakt mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Výmena Re.mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Retraktovať  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Zdvih Z mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("AutoRetr.");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Dĺžka výmeny");
+  PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH           = _UxGT("Dĺžka vytlačenia");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Výmena nástroja");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Zdvihnúť Z");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Primárna rýchl.");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Rýchl. retrakcie");
+  PROGMEM Language_Str MSG_NOZZLE_STANDBY                  = _UxGT("Záložná tryska");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Vymeniť filament");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Vymeniť filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Vymeniť filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Vymeniť filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Vymeniť filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Vymeniť filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Vymeniť filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Zaviesť filament");
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Zaviesť filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Zaviesť filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Zaviesť filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Zaviesť filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Zaviesť filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Zaviesť filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Vysunúť filament ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Vysunúť filament ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Vysunúť filament ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Vysunúť filament ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Vysunúť filament ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Vysunúť filament ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Vysunúť všetko");
 
-#define MSG_INIT_MEDIA                      _UxGT("Načítať SD kartu")
-#define MSG_CHANGE_MEDIA                    _UxGT("Vymeniť SD kartu")
-#define MSG_RELEASE_MEDIA                   _UxGT("Odpojiť SD kartu")
-#define MSG_ZPROBE_OUT                      _UxGT("Sonda Z mimo podl.")
-#define MSG_SKEW_FACTOR                     _UxGT("Faktor skosenia")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Cmd: Self-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Cmd: Reset")
-#define MSG_BLTOUCH_STOW                    _UxGT("Cmd: Zasunúť")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Cmd: Vysunúť")
-#define MSG_BLTOUCH_SW_MODE                 _UxGT("Cmd: Režim SW")
-#define MSG_BLTOUCH_5V_MODE                 _UxGT("Cmd: Režim 5V")
-#define MSG_BLTOUCH_OD_MODE                 _UxGT("Cmd: Režim OD")
-#define MSG_BLTOUCH_MODE_STORE              _UxGT("Cmd: Ulož. režim")
-#define MSG_BLTOUCH_MODE_STORE_5V           _UxGT("Prepnúť do 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD           _UxGT("Prepnúť do OD")
-#define MSG_BLTOUCH_MODE_ECHO               _UxGT("Zobraziť režim")
-#define MSG_BLTOUCH_MODE_CHANGE             _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?")
-#define MSG_TOUCHMI_PROBE                   _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT                    _UxGT("Inicializ. TouchMI")
-#define MSG_TOUCHMI_ZTEST                   _UxGT("Test ofsetu Z")
-#define MSG_TOUCHMI_SAVE                    _UxGT("Uložiť")
-#define MSG_MANUAL_DEPLOY_TOUCHMI           _UxGT("Zasunúť TouchMI")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Zasunúť sondu Z")
-#define MSG_MANUAL_STOW                     _UxGT("Vysunúť sondu Z")
-#define MSG_HOME_FIRST                      _UxGT("Najskôr os %s%s%s domov")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Ofset sondy Z")
-#define MSG_BABYSTEP_X                      _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y                      _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL                  _UxGT("Celkom")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Zastavenie Endstop")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Chyba ohrevu")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Chyba ohrevu podl.")
-#define MSG_HEATING_FAILED_LCD_CHAMBER      _UxGT("Chyba ohrevu komory")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Chyba: REDUND. TEP.")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("TEPLOTNÝ SKOK")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("TEPLOTNÝ SKOK PODL.")
-#define MSG_THERMAL_RUNAWAY_CHAMBER         _UxGT("TEPLOTNÝ SKOK KOMO.")
-#define MSG_ERR_MAXTEMP                     _UxGT("Chyba: MAXTEMP")
-#define MSG_ERR_MINTEMP                     _UxGT("Chyba: MINTEMP")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Chyba: MAXTEMP PODL.")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Chyba: MINTEMP PODL.")
-#define MSG_ERR_MAXTEMP_CHAMBER             _UxGT("Chyba: MAXTEMP KOMO.")
-#define MSG_ERR_MINTEMP_CHAMBER             _UxGT("Chyba: MINTEMP KOMO.")
-#define MSG_ERR_Z_HOMING                    _UxGT("Najskôr os XY domov")
-#define MSG_HALTED                          _UxGT("TLAČIAREŇ ZASTAVENÁ")
-#define MSG_PLEASE_RESET                    _UxGT("Reštartuje ju")
-#define MSG_SHORT_DAY                       _UxGT("d")
-#define MSG_SHORT_HOUR                      _UxGT("h")
-#define MSG_SHORT_MINUTE                    _UxGT("m")
-#define MSG_HEATING                         _UxGT("Ohrev...")
-#define MSG_COOLING                         _UxGT("Ochladzovanie...")
-#define MSG_BED_HEATING                     _UxGT("Ohrev podložky...")
-#define MSG_BED_COOLING                     _UxGT("Ochladz. podložky...")
-#define MSG_CHAMBER_HEATING                 _UxGT("Ohrev komory...")
-#define MSG_CHAMBER_COOLING                 _UxGT("Ochladz. komory...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta kalibrácia")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Kalibrovať X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Kalibrovať Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Kalibrovať Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Kalibrovať stred")
-#define MSG_DELTA_SETTINGS                  _UxGT("Delta nastavenia")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Auto-kalibrácia")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Nast. výšku delty")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Ofset sondy Z")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Diag. rameno")
-#define MSG_DELTA_HEIGHT                    _UxGT("Výška")
-#define MSG_DELTA_RADIUS                    _UxGT("Polomer")
-#define MSG_INFO_MENU                       _UxGT("O tlačiarni")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Info. o tlačiarni")
-#define MSG_3POINT_LEVELING                 _UxGT("3-bodové rovnanie")
-#define MSG_LINEAR_LEVELING                 _UxGT("Lineárne rovnanie")
-#define MSG_BILINEAR_LEVELING               _UxGT("Bilineárne rovnanie")
-#define MSG_UBL_LEVELING                    _UxGT("UBL rovnanie")
-#define MSG_MESH_LEVELING                   _UxGT("Mriežkové rovnanie")
-#define MSG_INFO_STATS_MENU                 _UxGT("Å tatistika")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Info. o doske")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistory")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Extrudéry")
-#define MSG_INFO_BAUDRATE                   _UxGT("Rýchlosť")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokol")
-#define MSG_INFO_RUNAWAY_OFF                _UxGT("Tepl. ochrana: VYP")
-#define MSG_INFO_RUNAWAY_ON                 _UxGT("Tepl. ochrana: ZAP")
-#define MSG_CASE_LIGHT                      _UxGT("Osvetlenie")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Jas svetla")
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Načítať SD kartu");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Vymeniť SD kartu");
+  PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Odpojiť SD kartu");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Sonda Z mimo podl.");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Faktor skosenia");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Cmd: Self-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Cmd: Reset");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Cmd: Zasunúť");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Cmd: Vysunúť");
+  PROGMEM Language_Str MSG_BLTOUCH_SW_MODE                 = _UxGT("Cmd: Režim SW");
+  PROGMEM Language_Str MSG_BLTOUCH_5V_MODE                 = _UxGT("Cmd: Režim 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_OD_MODE                 = _UxGT("Cmd: Režim OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE              = _UxGT("Cmd: Ulož. režim");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V           = _UxGT("Prepnúť do 5V");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD           = _UxGT("Prepnúť do OD");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO               = _UxGT("Zobraziť režim");
+  PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE             = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
+  PROGMEM Language_Str MSG_TOUCHMI_PROBE                   = _UxGT("TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_INIT                    = _UxGT("Inicializ. TouchMI");
+  PROGMEM Language_Str MSG_TOUCHMI_ZTEST                   = _UxGT("Test ofsetu Z");
+  PROGMEM Language_Str MSG_TOUCHMI_SAVE                    = _UxGT("Uložiť");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI           = _UxGT("Zasunúť TouchMI");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Zasunúť sondu Z");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Vysunúť sondu Z");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Najskôr os %s%s%s domov");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Ofset sondy Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Babystep X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Babystep Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Babystep Z");
+  PROGMEM Language_Str MSG_BABYSTEP_TOTAL                  = _UxGT("Celkom");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Zastavenie Endstop");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Chyba ohrevu");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Chyba ohrevu podl.");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER      = _UxGT("Chyba ohrevu komory");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Chyba: REDUND. TEP.");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("TEPLOTNÝ SKOK");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("TEPLOTNÝ SKOK PODL.");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER         = _UxGT("TEPLOTNÝ SKOK KOMO.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Chyba: MAXTEMP");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Chyba: MINTEMP");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Chyba: MAXTEMP PODL.");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Chyba: MINTEMP PODL.");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER             = _UxGT("Chyba: MAXTEMP KOMO.");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER             = _UxGT("Chyba: MINTEMP KOMO.");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Najskôr os XY domov");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("TLAČIAREŇ ZASTAVENÁ");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Reštartuje ju");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("d");
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("h");
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("m");
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Ohrev...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Ochladzovanie...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Ohrev podložky...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Ochladz. podložky...");
+  PROGMEM Language_Str MSG_CHAMBER_HEATING                 = _UxGT("Ohrev komory...");
+  PROGMEM Language_Str MSG_CHAMBER_COOLING                 = _UxGT("Ochladz. komory...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta kalibrácia");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Kalibrovať X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Kalibrovať Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Kalibrovať Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Kalibrovať stred");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta nastavenia");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Auto-kalibrácia");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Nast. výšku delty");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Ofset sondy Z");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Diag. rameno");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Výška");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Polomer");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("O tlačiarni");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Info. o tlačiarni");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3-bodové rovnanie");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("Lineárne rovnanie");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("Bilineárne rovnanie");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("UBL rovnanie");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Mriežkové rovnanie");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Å tatistika");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Info. o doske");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistory");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Extrudéry");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Rýchlosť");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokol");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF                = _UxGT("Tepl. ochrana: VYP");
+  PROGMEM Language_Str MSG_INFO_RUNAWAY_ON                 = _UxGT("Tepl. ochrana: ZAP");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Osvetlenie");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Jas svetla");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Nesprávna tlačiareň")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Nesprávna tlačiareň");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Počet tlačí")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Dokončené")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Celkový čas")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najdlhšia tlač")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Celkom vytlačené")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Tlače")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Hotovo")
-  #define MSG_INFO_PRINT_TIME               _UxGT("ÄŒas")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Najdlhšia")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Vytlačené")
-#endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Počet tlačí");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Dokončené");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Celkový čas");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najdlhšia tlač");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Celkom vytlačené");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Tlače");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Hotovo");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("ÄŒas");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Najdlhšia");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Vytlačené");
+  #endif
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Teplota min")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Teplota max")
-#define MSG_INFO_PSU                        _UxGT("Nap. zdroj")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Budenie motorov")
-#define MSG_DAC_PERCENT                     _UxGT("Motor %")
-#define MSG_ERROR_TMC                       _UxGT("CHYBA KOMUNIKÁ. TMC")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Uložiť do EEPROM")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Teplota min");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Teplota max");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Nap. zdroj");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Budenie motorov");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Motor %");
+  PROGMEM Language_Str MSG_ERROR_TMC                       = _UxGT("CHYBA KOMUNIKÁ. TMC");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Uložiť do EEPROM");
 
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("VÝMENA FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("PAUZA TLAÄŒE")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("ZAVEDENIE FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("VYSUNUTIE FILAMENTU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("MOŽNOSTI POKRAČ.:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Vytlačiť viacej")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Obnoviť tlač")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Tryska: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Senzor filamentu")
-#define MSG_RUNOUT_DISTANCE_MM              _UxGT("Vzd. mm fil. senz.")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Parkovanie zlyhalo")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Kalibrácia zlyhala")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Príliš studený")
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER          = _UxGT("VÝMENA FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("PAUZA TLAÄŒE");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("ZAVEDENIE FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("VYSUNUTIE FILAMENTU");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("MOŽNOSTI POKRAČ.:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Vytlačiť viacej");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Obnoviť tlač");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Tryska: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Senzor filamentu");
+  PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM              = _UxGT("Vzd. mm fil. senz.");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Parkovanie zlyhalo");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Kalibrácia zlyhala");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Príliš studený");
 
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER     _UxGT("VÝMENA FILAMENTU")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER     _UxGT("VYBERTE FILAMENT")
-#define MSG_MMU2_MENU                       _UxGT("MMU2")
-#define MSG_MMU2_WRONG_FIRMWARE             _UxGT("Aktualizujte FW MMU!")
-#define MSG_MMU2_NOT_RESPONDING             _UxGT("MMU potrebuje zásah.")
-#define MSG_MMU2_RESUME                     _UxGT("Obnoviť tlač")
-#define MSG_MMU2_RESUMING                   _UxGT("Obnovovanie...")
-#define MSG_MMU2_LOAD_FILAMENT              _UxGT("Zaviesť filament")
-#define MSG_MMU2_LOAD_ALL                   _UxGT("Zaviesť všetky")
-#define MSG_MMU2_LOAD_TO_NOZZLE             _UxGT("Zaviesť po trysku")
-#define MSG_MMU2_EJECT_FILAMENT             _UxGT("Vysunúť filament")
-#define MSG_MMU2_EJECT_FILAMENT0            _UxGT("Vysunúť filament 1")
-#define MSG_MMU2_EJECT_FILAMENT1            _UxGT("Vysunúť filament 2")
-#define MSG_MMU2_EJECT_FILAMENT2            _UxGT("Vysunúť filament 3")
-#define MSG_MMU2_EJECT_FILAMENT3            _UxGT("Vysunúť filament 4")
-#define MSG_MMU2_EJECT_FILAMENT4            _UxGT("Vysunúť filament 5")
-#define MSG_MMU2_UNLOAD_FILAMENT            _UxGT("Vyňať filament")
-#define MSG_MMU2_LOADING_FILAMENT           _UxGT("Zavádzanie fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT          _UxGT("Vysúvanie fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT         _UxGT("Vysúvanie fil. ...")
-#define MSG_MMU2_ALL                        _UxGT("VÅ¡etky")
-#define MSG_MMU2_FILAMENT0                  _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1                  _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2                  _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3                  _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4                  _UxGT("Filament 5")
-#define MSG_MMU2_RESET                      _UxGT("Reštartovať MMU")
-#define MSG_MMU2_RESETTING                  _UxGT("Reštart MMU...")
-#define MSG_MMU2_EJECT_RECOVER              _UxGT("Odstráňte, kliknite")
+  PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER     = _UxGT("VYBERTE FILAMENT");
+  PROGMEM Language_Str MSG_MMU2_MENU                       = _UxGT("MMU2");
+  PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE             = _UxGT("Aktualizujte FW MMU!");
+  PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING             = _UxGT("MMU potrebuje zásah.");
+  PROGMEM Language_Str MSG_MMU2_RESUME                     = _UxGT("Obnoviť tlač");
+  PROGMEM Language_Str MSG_MMU2_RESUMING                   = _UxGT("Obnovovanie...");
+  PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT              = _UxGT("Zaviesť filament");
+  PROGMEM Language_Str MSG_MMU2_LOAD_ALL                   = _UxGT("Zaviesť všetky");
+  PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE             = _UxGT("Zaviesť po trysku");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT             = _UxGT("Vysunúť filament");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0            = _UxGT("Vysunúť filament 1");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1            = _UxGT("Vysunúť filament 2");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2            = _UxGT("Vysunúť filament 3");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3            = _UxGT("Vysunúť filament 4");
+  PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4            = _UxGT("Vysunúť filament 5");
+  PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT            = _UxGT("Vyňať filament");
+  PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT           = _UxGT("Zavádzanie fil. %i...");
+  PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT          = _UxGT("Vysúvanie fil. ...");
+  PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT         = _UxGT("Vysúvanie fil. ...");
+  PROGMEM Language_Str MSG_MMU2_ALL                        = _UxGT("VÅ¡etky");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT0                  = _UxGT("Filament 1");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT1                  = _UxGT("Filament 2");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT2                  = _UxGT("Filament 3");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT3                  = _UxGT("Filament 4");
+  PROGMEM Language_Str MSG_MMU2_FILAMENT4                  = _UxGT("Filament 5");
+  PROGMEM Language_Str MSG_MMU2_RESET                      = _UxGT("Reštartovať MMU");
+  PROGMEM Language_Str MSG_MMU2_RESETTING                  = _UxGT("Reštart MMU...");
+  PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER              = _UxGT("Odstráňte, kliknite");
 
-#define MSG_MIX                             _UxGT("Mix")
-#define MSG_MIX_COMPONENT                   _UxGT("Zložka")
-#define MSG_MIXER                           _UxGT("Mixér")
-#define MSG_GRADIENT                        _UxGT("Gradient")
-#define MSG_FULL_GRADIENT                   _UxGT("Plný gradient")
-#define MSG_TOGGLE_MIX                      _UxGT("Prepnúť mix")
-#define MSG_CYCLE_MIX                       _UxGT("Cyklický mix")
-#define MSG_GRADIENT_MIX                    _UxGT("Gradientný mix")
-#define MSG_REVERSE_GRADIENT                _UxGT("Otočiť gradient")
-#define MSG_ACTIVE_VTOOL                    _UxGT("Aktívny V-tool")
-#define MSG_START_VTOOL                     _UxGT("Počiat. V-tool")
-#define MSG_END_VTOOL                       _UxGT("Konečn. V-tool")
-#define MSG_GRADIENT_ALIAS                  _UxGT("Alias V-tool")
-#define MSG_RESET_VTOOLS                    _UxGT("Vynulovať V-tools")
-#define MSG_COMMIT_VTOOL                    _UxGT("Uložiť V-tool Mix")
-#define MSG_VTOOLS_RESET                    _UxGT("V-tools vynulované")
-#define MSG_START_Z                         _UxGT("Počiat.Z")
-#define MSG_END_Z                           _UxGT("Konečn.Z")
-#define MSG_GAMES                           _UxGT("Hry")
-#define MSG_BRICKOUT                        _UxGT("Brickout")
-#define MSG_INVADERS                        _UxGT("Nájazdníci")
-#define MSG_SNAKE                           _UxGT("Had")
-#define MSG_MAZE                            _UxGT("Bludisko")
+  PROGMEM Language_Str MSG_MIX                             = _UxGT("Mix");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_1                 = _UxGT("Zložka 1");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_2                 = _UxGT("Zložka 2");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_3                 = _UxGT("Zložka 3");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_4                 = _UxGT("Zložka 4");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_5                 = _UxGT("Zložka 5");
+  PROGMEM Language_Str MSG_MIX_COMPONENT_6                 = _UxGT("Zložka 6");
+  PROGMEM Language_Str MSG_MIXER                           = _UxGT("Mixér");
+  PROGMEM Language_Str MSG_GRADIENT                        = _UxGT("Gradient");
+  PROGMEM Language_Str MSG_FULL_GRADIENT                   = _UxGT("Plný gradient");
+  PROGMEM Language_Str MSG_TOGGLE_MIX                      = _UxGT("Prepnúť mix");
+  PROGMEM Language_Str MSG_CYCLE_MIX                       = _UxGT("Cyklický mix");
+  PROGMEM Language_Str MSG_GRADIENT_MIX                    = _UxGT("Gradientný mix");
+  PROGMEM Language_Str MSG_REVERSE_GRADIENT                = _UxGT("Otočiť gradient");
+  PROGMEM Language_Str MSG_ACTIVE_VTOOL                    = _UxGT("Aktívny V-tool");
+  PROGMEM Language_Str MSG_START_VTOOL                     = _UxGT("Počiat. V-tool");
+  PROGMEM Language_Str MSG_END_VTOOL                       = _UxGT("Konečn. V-tool");
+  PROGMEM Language_Str MSG_GRADIENT_ALIAS                  = _UxGT("Alias V-tool");
+  PROGMEM Language_Str MSG_RESET_VTOOLS                    = _UxGT("Vynulovať V-tools");
+  PROGMEM Language_Str MSG_COMMIT_VTOOL                    = _UxGT("Uložiť V-tool Mix");
+  PROGMEM Language_Str MSG_VTOOLS_RESET                    = _UxGT("V-tools vynulované");
+  PROGMEM Language_Str MSG_START_Z                         = _UxGT("Počiat.Z:");
+  PROGMEM Language_Str MSG_END_Z                           = _UxGT("Konečn.Z:");
+  PROGMEM Language_Str MSG_GAMES                           = _UxGT("Hry");
+  PROGMEM Language_Str MSG_INVADERS                        = _UxGT("Nájazdníci");
+  PROGMEM Language_Str MSG_SNAKE                           = _UxGT("Had");
+  PROGMEM Language_Str MSG_MAZE                            = _UxGT("Bludisko");
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Stlačte tlačidlo")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("pre obnovu tlače")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parkovanie...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Čakajte prosím")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("na spustenie")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("výmeny filamentu")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Vložte filament")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("a stlačte tlačidlo")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("pre pokračovanie")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Stlačte tlačidlo")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("pre ohrev trysky")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Ohrev trysky")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Čakajte prosím...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Čakajte prosím")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("na vysunutie")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_3      _UxGT("filamentu")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Čakajte prosím")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("na zavedenie")
-  #define MSG_FILAMENT_CHANGE_LOAD_3        _UxGT("filamentu")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Čakajte prosím")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("na vytlačenie")
-  #define MSG_FILAMENT_CHANGE_PURGE_3       _UxGT("filamentu")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Stlačte tlačidlo")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("pre dokončenie")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_3  _UxGT("vytláčania filam.")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Čakajte prosím na")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("obnovenie tlače...")
-#else // LCD_HEIGHT < 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Kliknite pre pokr.")
-  #define MSG_PAUSE_PRINT_INIT_1            _UxGT("Parkovanie...")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Čakajte prosím...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Vložte a kliknite")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Kliknite pre ohrev")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Ohrev...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Vysúvanie...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Zavádzanie...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Vytlačovanie...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Klik. pre dokonč.")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Pokračovanie...")
-#endif // LCD_HEIGHT < 4
-#define MSG_TMC_DRIVERS                     _UxGT("Ovládače TMC")
-#define MSG_TMC_CURRENT                     _UxGT("Prúd ovládača")
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Hybridný prah")
-#define MSG_TMC_HOMING_THRS                 _UxGT("Bezsenzor. domov")
-#define MSG_TMC_STEPPING_MODE               _UxGT("Režim krokovania")
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("StealthChop zapnutý")
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre obnovu tlače"));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parkovanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Čakajte prosím", "na spustenie", "výmeny filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Vložte filament", "a stlačte tlačidlo", "pre pokračovanie"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre ohrev trysky"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Ohrev trysky", "Čakajte prosím..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_3_LINE("Čakajte prosím", "na vysunutie", "filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_3_LINE("Čakajte prosím", "na zavedenie", "filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_3_LINE("Čakajte prosím", "na vytlačenie", "filamentu"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_3_LINE("Stlačte tlačidlo", "pre dokončenie", "vytláčania filam."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Čakajte prosím na", "obnovenie tlače..."));
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Kliknite pre pokr."));
+    PROGMEM Language_Str MSG_PAUSE_PRINT_INIT              = _UxGT(MSG_1_LINE("Parkovanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Čakajte prosím..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Vložte a kliknite"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Kliknite pre ohrev"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Ohrev..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Vysúvanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Zavádzanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Vytlačovanie..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Klik. pre dokonč."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Pokračovanie..."));
+  #endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("Ovládače TMC");
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Prúd ovládača");
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Hybridný prah");
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Bezsenzor. domov");
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Režim krokovania");
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("StealthChop zapnutý");
 
-#define MSG_SERVICE_RESET                   _UxGT("Vynulovať")
-#define MSG_SERVICE_IN                      _UxGT(" za:")
-#define MSG_BACKLASH                        _UxGT("Kompenz. vôle")
-#define MSG_BACKLASH_CORRECTION             _UxGT("Korekcia")
-#define MSG_BACKLASH_SMOOTHING              _UxGT("Vyhladzovanie")
+  PROGMEM Language_Str MSG_SERVICE_RESET                   = _UxGT("Vynulovať");
+  PROGMEM Language_Str MSG_SERVICE_IN                      = _UxGT(" za:");
+  PROGMEM Language_Str MSG_BACKLASH                        = _UxGT("Kompenz. vôle");
+  PROGMEM Language_Str MSG_BACKLASH_A                      = LCD_STR_A;
+  PROGMEM Language_Str MSG_BACKLASH_B                      = LCD_STR_B;
+  PROGMEM Language_Str MSG_BACKLASH_C                      = LCD_STR_C;
+  PROGMEM Language_Str MSG_BACKLASH_CORRECTION             = _UxGT("Korekcia");
+  PROGMEM Language_Str MSG_BACKLASH_SMOOTHING              = _UxGT("Vyhladzovanie");
+}
diff --git a/Marlin/src/lcd/language/language_test.h b/Marlin/src/lcd/language/language_test.h
index b2be749a00..8098fdd872 100644
--- a/Marlin/src/lcd/language/language_test.h
+++ b/Marlin/src/lcd/language/language_test.h
@@ -114,114 +114,145 @@
 #define STRG_OKTAL_e "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
 #define STRG_OKTAL_f "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
 
-#if ENABLED(DISPLAYTEST)
-  #define WELCOME_MSG                         _UxGT("Language TEST")
-
-  #define MSG_WATCH                           _UxGT("Display test")
-  #define MSG_PREPARE                         STRG_OKTAL_b
-  #define MSG_CONTROL                         STRG_OKTAL_c
-#endif
-
-#if ENABLED(WEST)
-  #define WELCOME_MSG                         _UxGT("Language TEST")
-
-  #define MSG_WATCH                           _UxGT("\001\002\003\004\005\006\007\010\011")
-  #define MSG_PREPARE                         _UxGT("UTF8")
-  #define MSG_CONTROL                         _UxGT("ASCII")
-
-  //#define MSG_MAIN                            _UxGT("..")
-  #define MSG_DISABLE_STEPPERS                STRG_C2_8
-  #define MSG_AUTO_HOME                       STRG_C2_9
-  #define MSG_SET_HOME_OFFSETS                STRG_C2_a
-  #define MSG_PREHEAT_1                       STRG_C2_b
-  #define MSG_PREHEAT_2                       STRG_C3_8
-  #define MSG_COOLDOWN                        STRG_C3_9
-  #define MSG_SWITCH_PS_OFF                   STRG_C3_a
-  #define MSG_MOVE_AXIS                       STRG_C3_b
-
-  #define MSG_MAIN                            STRG_OKTAL_2
-  #define MSG_TEMPERATURE                     STRG_OKTAL_3
-  #define MSG_MOTION                          STRG_OKTAL_4
-  #define MSG_FILAMENT                        STRG_OKTAL_5
-  #define MSG_CONTRAST                        STRG_OKTAL_6
-  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
-
-  #define MSG_NOZZLE                          STRG_OKTAL_8
-  #define MSG_FAN_SPEED                       STRG_OKTAL_9
-  #define MSG_AUTOTEMP                        STRG_OKTAL_a
-  #define MSG_MIN                             STRG_OKTAL_b
-  #define MSG_MAX                             STRG_OKTAL_c
-  #define MSG_FACTOR                          STRG_OKTAL_d
-  #define MSG_PID_P                           STRG_OKTAL_e
-  #define MSG_PID_I                           STRG_OKTAL_f
-
-#endif
-
-#if ENABLED(CYRIL)
-  #define WELCOME_MSG                         _UxGT("Language TEST")
-
-  #define MSG_WATCH                           _UxGT("\001\002\003\004\005\006\007\010\011")
-  #define MSG_PREPARE                         _UxGT("UTF8")
-  #define MSG_CONTROL                         _UxGT("ASCII")
-
-  //#define MSG_MAIN                            _UxGT("..")
-  #define MSG_DISABLE_STEPPERS                STRG_D0_8
-  #define MSG_AUTO_HOME                       STRG_D0_9
-  #define MSG_SET_HOME_OFFSETS                STRG_D0_a
-  #define MSG_PREHEAT_1                       STRG_D0_b
-  #define MSG_PREHEAT_2                       STRG_D1_8
-  #define MSG_COOLDOWN                        STRG_D1_9
-  #define MSG_SWITCH_PS_OFF                   STRG_D1_a
-  #define MSG_MOVE_AXIS                       STRG_D1_b
-
-  #define MSG_MAIN                            STRG_OKTAL_2
-  #define MSG_TEMPERATURE                     STRG_OKTAL_3
-  #define MSG_MOTION                          STRG_OKTAL_4
-  #define MSG_FILAMENT                        STRG_OKTAL_5
-  #define MSG_CONTRAST                        STRG_OKTAL_6
-  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
-
-  #define MSG_NOZZLE                          STRG_OKTAL_8
-  #define MSG_FAN_SPEED                       STRG_OKTAL_9
-  #define MSG_AUTOTEMP                        STRG_OKTAL_a
-  #define MSG_MIN                             STRG_OKTAL_b
-  #define MSG_MAX                             STRG_OKTAL_c
-  #define MSG_FACTOR                          STRG_OKTAL_d
-  #define MSG_PID_P                           STRG_OKTAL_e
-  #define MSG_PID_I                           STRG_OKTAL_f
-
-#endif
-
-#if ENABLED(KANA)
-  #define WELCOME_MSG                         _UxGT("Language TEST")
-
-  #define MSG_WATCH                           _UxGT("\001\002\003\004\005\006\007\010\011")
-  #define MSG_PREPARE                         _UxGT("UTF8")
-  #define MSG_CONTROL                         _UxGT("ASCII")
-
-  //#define MSG_MAIN                            _UxGT("..")
-  #define MSG_DISABLE_STEPPERS                STRG_E382_8
-  #define MSG_AUTO_HOME                       STRG_E382_9
-  #define MSG_SET_HOME_OFFSETS                STRG_E382_a
-  #define MSG_PREHEAT_1                       STRG_E382_b
-  #define MSG_PREHEAT_2                       STRG_E383_8
-  #define MSG_COOLDOWN                        STRG_E383_9
-  #define MSG_SWITCH_PS_OFF                   STRG_E383_a
-  #define MSG_MOVE_AXIS                       STRG_E383_b
-
-  #define MSG_MAIN                            STRG_OKTAL_2
-  #define MSG_TEMPERATURE                     STRG_OKTAL_3
-  #define MSG_MOTION                          STRG_OKTAL_4
-  #define MSG_FILAMENT                        STRG_OKTAL_5
-  #define MSG_CONTRAST                        STRG_OKTAL_6
-  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
-
-  #define MSG_NOZZLE                          STRG_OKTAL_8
-  #define MSG_FAN_SPEED                       STRG_OKTAL_9
-  #define MSG_AUTOTEMP                        STRG_OKTAL_a
-  #define MSG_MIN                             STRG_OKTAL_b
-  #define MSG_MAX                             STRG_OKTAL_c
-  #define MSG_FACTOR                          STRG_OKTAL_d
-  #define MSG_PID_P                           STRG_OKTAL_e
-  #define MSG_PID_I                           STRG_OKTAL_f
-#endif
+namespace Language_test {
+  using namespace Language_en; // Inherit undefined strings from English
+
+  constexpr uint8_t    CHARSIZE                              = 1;
+
+  #if ENABLED(DISPLAYTEST)
+    PROGMEM Language_Str WELCOME_MSG                         = _UxGT("Language TEST");
+
+    PROGMEM Language_Str MSG_WATCH                           = _UxGT("Display test");
+    PROGMEM Language_Str MSG_PREPARE                         = STRG_OKTAL_b;
+    PROGMEM Language_Str MSG_CONTROL                         = STRG_OKTAL_c;
+  #endif
+
+  #if ENABLED(WEST)
+    PROGMEM Language_Str WELCOME_MSG                         = _UxGT("Language TEST");
+
+    PROGMEM Language_Str MSG_WATCH                           = _UxGT("\001\002\003\004\005\006\007\010\011");
+    PROGMEM Language_Str MSG_PREPARE                         = _UxGT("UTF8");
+    PROGMEM Language_Str MSG_CONTROL                         = _UxGT("ASCII");
+
+    PROGMEM Language_Str MSG_MAIN                            = _UxGT("..");
+    PROGMEM Language_Str MSG_DISABLE_STEPPERS                = STRG_C2_8;
+    PROGMEM Language_Str MSG_AUTO_HOME                       = STRG_C2_9;
+    PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = STRG_C2_a;
+    PROGMEM Language_Str MSG_PREHEAT_1                       = STRG_C2_b;
+    PROGMEM Language_Str MSG_PREHEAT_2                       = STRG_C3_8;
+    PROGMEM Language_Str MSG_COOLDOWN                        = STRG_C3_9;
+    PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = STRG_C3_a;
+    PROGMEM Language_Str MSG_MOVE_AXIS                       = STRG_C3_b;
+
+    PROGMEM Language_Str MSG_MAIN                            = STRG_OKTAL_2;
+    PROGMEM Language_Str MSG_TEMPERATURE                     = STRG_OKTAL_3;
+    PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
+    PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
+    PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
+    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
+
+    PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
+    PROGMEM Language_Str MSG_NOZZLE_0                        = STRG_OKTAL_8 " " LCD_STR_N0;
+    PROGMEM Language_Str MSG_NOZZLE_1                        = STRG_OKTAL_8 " " LCD_STR_N1;
+    PROGMEM Language_Str MSG_NOZZLE_2                        = STRG_OKTAL_8 " " LCD_STR_N2;
+    PROGMEM Language_Str MSG_NOZZLE_3                        = STRG_OKTAL_8 " " LCD_STR_N3;
+    PROGMEM Language_Str MSG_NOZZLE_4                        = STRG_OKTAL_8 " " LCD_STR_N4;
+    PROGMEM Language_Str MSG_NOZZLE_5                        = STRG_OKTAL_8 " " LCD_STR_N5;
+    PROGMEM Language_Str MSG_FAN_SPEED                       = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_1                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_2                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_3                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_AUTOTEMP                        = STRG_OKTAL_a;
+    PROGMEM Language_Str MSG_MIN                             = STRG_OKTAL_b;
+    PROGMEM Language_Str MSG_MAX                             = STRG_OKTAL_c;
+    PROGMEM Language_Str MSG_FACTOR                          = STRG_OKTAL_d;
+    PROGMEM Language_Str MSG_PID_P                           = STRG_OKTAL_e;
+    PROGMEM Language_Str MSG_PID_I                           = STRG_OKTAL_f;
+
+  #endif
+
+  #if ENABLED(CYRIL)
+    PROGMEM Language_Str WELCOME_MSG                         = _UxGT("Language TEST");
+
+    PROGMEM Language_Str MSG_WATCH                           = _UxGT("\001\002\003\004\005\006\007\010\011");
+    PROGMEM Language_Str MSG_PREPARE                         = _UxGT("UTF8");
+    PROGMEM Language_Str MSG_CONTROL                         = _UxGT("ASCII");
+
+    PROGMEM Language_Str MSG_MAIN                            = _UxGT("..");
+    PROGMEM Language_Str MSG_DISABLE_STEPPERS                = STRG_D0_8;
+    PROGMEM Language_Str MSG_AUTO_HOME                       = STRG_D0_9;
+    PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = STRG_D0_a;
+    PROGMEM Language_Str MSG_PREHEAT_1                       = STRG_D0_b;
+    PROGMEM Language_Str MSG_PREHEAT_2                       = STRG_D1_8;
+    PROGMEM Language_Str MSG_COOLDOWN                        = STRG_D1_9;
+    PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = STRG_D1_a;
+    PROGMEM Language_Str MSG_MOVE_AXIS                       = STRG_D1_b;
+
+    PROGMEM Language_Str MSG_MAIN                            = STRG_OKTAL_2;
+    PROGMEM Language_Str MSG_TEMPERATURE                     = STRG_OKTAL_3;
+    PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
+    PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
+    PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
+    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
+
+    PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
+    PROGMEM Language_Str MSG_NOZZLE_0                        = STRG_OKTAL_8 " " LCD_STR_N0;
+    PROGMEM Language_Str MSG_NOZZLE_1                        = STRG_OKTAL_8 " " LCD_STR_N1;
+    PROGMEM Language_Str MSG_NOZZLE_2                        = STRG_OKTAL_8 " " LCD_STR_N2;
+    PROGMEM Language_Str MSG_NOZZLE_3                        = STRG_OKTAL_8 " " LCD_STR_N3;
+    PROGMEM Language_Str MSG_NOZZLE_4                        = STRG_OKTAL_8 " " LCD_STR_N4;
+    PROGMEM Language_Str MSG_NOZZLE_5                        = STRG_OKTAL_8 " " LCD_STR_N5;
+    PROGMEM Language_Str MSG_FAN_SPEED_1                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_2                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_3                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_AUTOTEMP                        = STRG_OKTAL_a;
+    PROGMEM Language_Str MSG_MIN                             = STRG_OKTAL_b;
+    PROGMEM Language_Str MSG_MAX                             = STRG_OKTAL_c;
+    PROGMEM Language_Str MSG_FACTOR                          = STRG_OKTAL_d;
+    PROGMEM Language_Str MSG_PID_P                           = STRG_OKTAL_e;
+    PROGMEM Language_Str MSG_PID_I                           = STRG_OKTAL_f;
+
+  #endif
+
+  #if ENABLED(KANA)
+    PROGMEM Language_Str WELCOME_MSG                         = _UxGT("Language TEST");
+
+    PROGMEM Language_Str MSG_WATCH                           = _UxGT("\001\002\003\004\005\006\007\010\011");
+    PROGMEM Language_Str MSG_PREPARE                         = _UxGT("UTF8");
+    PROGMEM Language_Str MSG_CONTROL                         = _UxGT("ASCII");
+
+    PROGMEM Language_Str MSG_MAIN                            = _UxGT("..");
+    PROGMEM Language_Str MSG_DISABLE_STEPPERS                = STRG_E382_8;
+    PROGMEM Language_Str MSG_AUTO_HOME                       = STRG_E382_9;
+    PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = STRG_E382_a;
+    PROGMEM Language_Str MSG_PREHEAT_1                       = STRG_E382_b;
+    PROGMEM Language_Str MSG_PREHEAT_2                       = STRG_E383_8;
+    PROGMEM Language_Str MSG_COOLDOWN                        = STRG_E383_9;
+    PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = STRG_E383_a;
+    PROGMEM Language_Str MSG_MOVE_AXIS                       = STRG_E383_b;
+
+    PROGMEM Language_Str MSG_MAIN                            = STRG_OKTAL_2;
+    PROGMEM Language_Str MSG_TEMPERATURE                     = STRG_OKTAL_3;
+    PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
+    PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
+    PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
+    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
+
+    PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
+    PROGMEM Language_Str MSG_NOZZLE_0                        = STRG_OKTAL_8 " " LCD_STR_N0;
+    PROGMEM Language_Str MSG_NOZZLE_1                        = STRG_OKTAL_8 " " LCD_STR_N1;
+    PROGMEM Language_Str MSG_NOZZLE_2                        = STRG_OKTAL_8 " " LCD_STR_N2;
+    PROGMEM Language_Str MSG_NOZZLE_3                        = STRG_OKTAL_8 " " LCD_STR_N3;
+    PROGMEM Language_Str MSG_NOZZLE_4                        = STRG_OKTAL_8 " " LCD_STR_N4;
+    PROGMEM Language_Str MSG_NOZZLE_5                        = STRG_OKTAL_8 " " LCD_STR_N5;
+    PROGMEM Language_Str MSG_FAN_SPEED_1                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_2                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_FAN_SPEED_3                     = STRG_OKTAL_9;
+    PROGMEM Language_Str MSG_AUTOTEMP                        = STRG_OKTAL_a;
+    PROGMEM Language_Str MSG_MIN                             = STRG_OKTAL_b;
+    PROGMEM Language_Str MSG_MAX                             = STRG_OKTAL_c;
+    PROGMEM Language_Str MSG_FACTOR                          = STRG_OKTAL_d;
+    PROGMEM Language_Str MSG_PID_P                           = STRG_OKTAL_e;
+    PROGMEM Language_Str MSG_PID_I                           = STRG_OKTAL_f;
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index e45c4cd8b7..26ec1e35fe 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -34,402 +34,484 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_TR
-#define CHARSIZE 2
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("İÖÇğüşöç³")
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" hazır.")
-#define MSG_BACK                            _UxGT("Geri")
-#define MSG_MEDIA_INSERTED                  _UxGT("SD K. YerleÅŸtirildi.")
-#define MSG_MEDIA_REMOVED                   _UxGT("SD Kart Çıkarıldı.")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Enstops") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Yazılımsal Endstops")
-#define MSG_MAIN                            _UxGT("Ana")
-#define MSG_ADVANCED_SETTINGS               _UxGT("GeliÅŸmiÅŸ Ayarlar")
-#define MSG_CONFIGURATION                   _UxGT("Yapılandırma")
-#define MSG_AUTOSTART                       _UxGT("Oto. BaÅŸlat")
-#define MSG_DISABLE_STEPPERS                _UxGT("Motorları Durdur")
-#define MSG_DEBUG_MENU                      _UxGT("Hata Ayıklama")
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Durum Çubuğu Testi")
-#define MSG_AUTO_HOME                       _UxGT("Eksenleri Sıfırla")
-#define MSG_AUTO_HOME_X                     _UxGT("X Sıfırla")
-#define MSG_AUTO_HOME_Y                     _UxGT("Y Sıfırla")
-#define MSG_AUTO_HOME_Z                     _UxGT("Z Sıfırla")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Oto. Z-Hizalama")
-#define MSG_LEVEL_BED_HOMING                _UxGT("XYZ Sıfırlanıyor")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Başlatmak için tıkla")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Sonraki Nokta")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Hizalama Tamam!")
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Kaçınma Yüksekliği")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Offset Ayarla")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Offset Tamam")
-#define MSG_SET_ORIGIN                      _UxGT("Sıfır Belirle")
-#define MSG_PREHEAT_1                       _UxGT("Ön Isınma " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Tüm")
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" Nozul")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Tabla")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Ayarlar")
-#define MSG_PREHEAT_2                       _UxGT("Ön Isınma " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Tüm")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" Nozul")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Tabla")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Ayarlar")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Özel Ön Isınma")
-#define MSG_COOLDOWN                        _UxGT("SoÄŸut")
-#define MSG_SWITCH_PS_ON                    _UxGT("Gücü Aç")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Gücü Kapat")
-#define MSG_EXTRUDE                         _UxGT("Ekstrüzyon")
-#define MSG_RETRACT                         _UxGT("Geri Çek")
-#define MSG_MOVE_AXIS                       _UxGT("Eksen Hareketleri")
-#define MSG_BED_LEVELING                    _UxGT("Tabla Hizalama")
-#define MSG_LEVEL_BED                       _UxGT("Tabla Hizası")
-#define MSG_LEVEL_CORNERS                   _UxGT("Hizalama Köşeleri")
-#define MSG_NEXT_CORNER                     _UxGT("Sonraki Köşe")
-#define MSG_EDIT_MESH                       _UxGT("Mesh Düzenle")
-#define MSG_EDITING_STOPPED                 _UxGT("Mesh Düzenleme Durdu")
-#define MSG_MESH_X                          _UxGT("Ä°ndeks X")
-#define MSG_MESH_Y                          _UxGT("Ä°ndeks Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Z DeÄŸeri")
-#define MSG_USER_MENU                       _UxGT("Özel Komutlar")
-#define MSG_IDEX_MENU                       _UxGT("IDEX Modu")
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Oto-Park")
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Kopyala")
-#define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Yansıtılmış kopya")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Tam Kontrol")
-#define MSG_X_OFFSET                        _UxGT("2. nozul X")
-#define MSG_Y_OFFSET                        _UxGT("2. nozul Y")
-#define MSG_Z_OFFSET                        _UxGT("2. nozul Z")
-#define MSG_UBL_DOING_G29                   _UxGT("G29 Çalışıyor")
-#define MSG_UBL_TOOLS                       _UxGT("UBL Araçları")
-#define MSG_UBL_LEVEL_BED                   _UxGT("UBL Yatak Hizalama")
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Elle Mesh OluÅŸtur")
-#define MSG_UBL_BC_INSERT                   _UxGT("Altlık & Ölçü Ver")
-#define MSG_UBL_BC_INSERT2                  _UxGT("Ölçü")
-#define MSG_UBL_BC_REMOVE                   _UxGT("Yataktan Ölçü Kaldır")
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Sonrakine Git")
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("UBL'yi EtkinleÅŸtir")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("UBL'yi EtkisizleÅŸtir")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Yatak Sıcaklığı")
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Nozul Sıcaklığı")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Mesh Düzenleme")
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Özel Mesh Düzenleme")
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Ä°nce Ayar Mesh")
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Mesh Düzenleme Tamam")
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Özel Mesh Oluştur")
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Mesh OluÅŸtur")
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Mesh OluÅŸtur (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Mesh OluÅŸtur (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("SoÄŸuk Mesh OluÅŸtur")
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Mesh Yükseklik Ayarı")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Yükseklik miktarı")
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("DoÄŸrulama Mesh")
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("DoÄŸrulama Mesh (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("DoÄŸrulama Mesh (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Özel Mesh Doğrulama")
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Tabla Mesh Devam et")
-#define MSG_UBL_MESH_LEVELING               _UxGT("Mesh Hizalama")
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("3-Nokta Hizalama")
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Kafes Mesh Hizalama")
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Mesh Seviyesi")
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Yan Noktalar")
-#define MSG_UBL_MAP_TYPE                    _UxGT("Haritalama Türü")
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Mesh Çıkış Haritası")
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Host için Çıktı")
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("CSV için Çıktı")
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Yazıcıda Yedek Kpalı")
-#define MSG_UBL_INFO_UBL                    _UxGT("UBL Çıkış Bilgisi")
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Dolgu Miktarı")
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Manuel Dolgu")
-#define MSG_UBL_SMART_FILLIN                _UxGT("Akıllı Dogu")
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Mesh Dolgu")
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Tümünü Geçersiz Kıl")
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Yakını Geçersiz Kıl")
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Tümünü İnce Ayarla")
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Yakını İnce Ayarla")
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Mesh Depolama")
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Bellek Yuvası")
-#define MSG_UBL_LOAD_MESH                   _UxGT("Yatak Mesh Yükle")
-#define MSG_UBL_SAVE_MESH                   _UxGT("Yatak Mesh Kayıt Et")
-#define MSG_MESH_LOADED                     _UxGT("Mesh %i yüklendi")
-#define MSG_MESH_SAVED                      _UxGT("Mesh %i kayıtlandı")
-#define MSG_UBL_NO_STORAGE                  _UxGT("Depolama Yok")
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Hata: UBL Kayıt")
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Hata: UBL Yenileme")
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z-Ofset Durduruldu")
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Adım Adım UBL")
-#define MSG_LED_CONTROL                     _UxGT("LED Kontrolü")
-#define MSG_LEDS                            _UxGT("Işıklar")
-#define MSG_LED_PRESETS                     _UxGT("Işık Hazır Ayarları")
-#define MSG_SET_LEDS_RED                    _UxGT("Kırmızı")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Turuncu")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Sarı")
-#define MSG_SET_LEDS_GREEN                  _UxGT("YeÅŸil")
-#define MSG_SET_LEDS_BLUE                   _UxGT("Mavi")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Lacivert")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("MenekÅŸe")
-#define MSG_SET_LEDS_WHITE                  _UxGT("Beyaz")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Varsayılan")
-#define MSG_CUSTOM_LEDS                     _UxGT("Özel Işıklar")
-#define MSG_INTENSITY_R                     _UxGT("Kırmızı Şiddeti")
-#define MSG_INTENSITY_G                     _UxGT("YeÅŸil Åžiddeti")
-#define MSG_INTENSITY_B                     _UxGT("Mavi Åžiddeti")
-#define MSG_INTENSITY_W                     _UxGT("Beyaz Åžiddeti")
-#define MSG_LED_BRIGHTNESS                  _UxGT("Parlaklık")
-#define MSG_MOVING                          _UxGT("Hareket Ediyor..")
-#define MSG_FREE_XY                         _UxGT("Durdur XY")
-#define MSG_MOVE_X                          _UxGT("X Hareketi")
-#define MSG_MOVE_Y                          _UxGT("Y Hareketi")
-#define MSG_MOVE_Z                          _UxGT("Z Hareketi")
-#define MSG_MOVE_E                          _UxGT("Ekstruder")
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Nozul Çok Soğuk")
-#define MSG_MOVE_Z_DIST                     _UxGT("%smm")
-#define MSG_MOVE_01MM                       _UxGT("0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("1mm")
-#define MSG_MOVE_10MM                       _UxGT("10mm")
-#define MSG_SPEED                           _UxGT("Hız")
-#define MSG_BED_Z                           _UxGT("Z Mesafesi")
-#define MSG_NOZZLE                          _UxGT("Nozul")
-#define MSG_BED                             _UxGT("Tabla")
-#define MSG_FAN_SPEED                       _UxGT("Fan Hızı")
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Ekstra Fan Hızı")
-#define MSG_FLOW                            _UxGT("Akış")
-#define MSG_CONTROL                         _UxGT("Kontrol")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Çarpan")
-#define MSG_AUTOTEMP                        _UxGT("Oto. Sıcaklık")
-#define MSG_LCD_ON                          _UxGT("Açık")
-#define MSG_LCD_OFF                         _UxGT("Kapalı")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Seç")
-#define MSG_ACC                             _UxGT("Ä°vme")
-#define MSG_JERK                            _UxGT("Sarsım")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-Sarsım")
-  #define MSG_VB_JERK                       _UxGT("Vb-Sarsım")
-  #define MSG_VC_JERK                       _UxGT("Vc-Sarsım")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-Sarsım")
-  #define MSG_VB_JERK                       _UxGT("Vy-Sarsım")
-  #define MSG_VC_JERK                       _UxGT("Vz-Sarsım")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-Sarsım")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Jonksiyon Sapması")
-#define MSG_VELOCITY                        _UxGT("Hız Vektörü")
-#define MSG_VMAX                            _UxGT("HızVektör.max ")
-#define MSG_VMIN                            _UxGT("HızVektör.min")
-#define MSG_VTRAV_MIN                       _UxGT("HV.gezinme min")
-#define MSG_ACCELERATION                    _UxGT("Ivme")
-#define MSG_AMAX                            _UxGT("Max. ivme ")
-#define MSG_A_RETRACT                       _UxGT("Ivme-geri çekme")
-#define MSG_A_TRAVEL                        _UxGT("Ivme-gezinme")
-#define MSG_STEPS_PER_MM                    _UxGT("Adım/mm")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A adım/mm")
-  #define MSG_BSTEPS                        _UxGT("B adım/mm")
-  #define MSG_CSTEPS                        _UxGT("C adım/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("X adım/mm")
-  #define MSG_BSTEPS                        _UxGT("Y adım/mm")
-  #define MSG_CSTEPS                        _UxGT("Z adım/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("E adım/mm")
-#define MSG_E0_STEPS                        _UxGT("E1 adım/mm")
-#define MSG_E1_STEPS                        _UxGT("E2 adım/mm")
-#define MSG_E2_STEPS                        _UxGT("E3 adım/mm")
-#define MSG_E3_STEPS                        _UxGT("E4 adım/mm")
-#define MSG_E4_STEPS                        _UxGT("E5 adım/mm")
-#define MSG_E5_STEPS                        _UxGT("E6 adım/mm")
-#define MSG_TEMPERATURE                     _UxGT("Sıcaklık")
-#define MSG_MOTION                          _UxGT("Hareket")
-#define MSG_FILAMENT                        _UxGT("Filaman")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("Ekstrüzyon/mm³")
-#define MSG_FILAMENT_DIAM                   _UxGT("Filaman Çapı")
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Çıkart mm")
-#define MSG_FILAMENT_LOAD                   _UxGT("Yükle mm")
-#define MSG_ADVANCE_K                       _UxGT("K Ä°lerlet")
-#define MSG_CONTRAST                        _UxGT("LCD Kontrast")
-#define MSG_STORE_EEPROM                    _UxGT("Hafızaya Al")
-#define MSG_LOAD_EEPROM                     _UxGT("Hafızadan Yükle")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Fabrika Ayarları")
-#define MSG_INIT_EEPROM                     _UxGT("EEPROM'u baÅŸlat")
-#define MSG_MEDIA_UPDATE                    _UxGT("SD Güncellemesi")
-#define MSG_RESET_PRINTER                   _UxGT("Yazıcıyı Resetle")
-#define MSG_REFRESH                         _UxGT("Yenile")
-#define MSG_WATCH                           _UxGT("Bilgi Ekranı")
-#define MSG_PREPARE                         _UxGT("Hazırlık")
-#define MSG_TUNE                            _UxGT("Ayar")
-#define MSG_PAUSE_PRINT                     _UxGT("Duraklat")
-#define MSG_RESUME_PRINT                    _UxGT("Sürdür")
-#define MSG_STOP_PRINT                      _UxGT("Durdur")
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Kesinti Kurtarma")
-#define MSG_MEDIA_MENU                      _UxGT("SD Karttan Yazdır")
-#define MSG_NO_MEDIA                        _UxGT("SD Kart Yok!")
-#define MSG_DWELL                           _UxGT("Uyku...")
-#define MSG_USERWAIT                        _UxGT("Operatör bekleniyor.")
-#define MSG_PRINT_PAUSED                    _UxGT("Baskı Duraklatıldı")
-#define MSG_PRINTING                        _UxGT("Baskı Yapılıyor...")
-#define MSG_PRINT_ABORTED                   _UxGT("Baskı Durduruldu!")
-#define MSG_NO_MOVE                         _UxGT("Ä°ÅŸlem yok.")
-#define MSG_KILLED                          _UxGT("Kilitlendi. ")
-#define MSG_STOPPED                         _UxGT("Durdu. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Geri Çek mm")
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Swap Re.mm")
-#define MSG_CONTROL_RETRACTF                _UxGT("Geri Çekme V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Atlama mm")
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("UnRet  V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V")
-#define MSG_AUTORETRACT                     _UxGT("Oto. Geri Çekme")
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("G.Çekme Boyu")
-#define MSG_TOOL_CHANGE                     _UxGT("Takım Değişimi")
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Z Yükselt")
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Birincil Hız")
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Geri Çekme Hızı")
-#define MSG_FILAMENTCHANGE                  _UxGT("Filaman DeÄŸiÅŸtir")
-#define MSG_FILAMENTLOAD                    _UxGT("Filaman Yükle")
-#define MSG_FILAMENTUNLOAD                  _UxGT("Filaman Çıkart")
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Tümünü Çıkart")
-#define MSG_INIT_MEDIA                      _UxGT("SD Kart Başlatılıyor")
-#define MSG_CHANGE_MEDIA                    _UxGT("SD Kart DeÄŸiÅŸtir")
-#define MSG_ZPROBE_OUT                      _UxGT("Z Prob Açık. Tabla")
-#define MSG_SKEW_FACTOR                     _UxGT("Çarpıklık Faktörü")
-#define MSG_BLTOUCH                         _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET                   _UxGT("Sıfırla BLTouch")
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("BLTouch Aç")
-#define MSG_BLTOUCH_STOW                    _UxGT("BLTouch Kapat")
-#define MSG_MANUAL_DEPLOY                   _UxGT("Z-Prob Aç")
-#define MSG_MANUAL_STOW                     _UxGT("Z-Sensör Kapat")
-#define MSG_HOME_FIRST                      _UxGT("Sıfırla %s%s%s Önce")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z Offset")
-#define MSG_BABYSTEP_X                      _UxGT("Miniadım X")
-#define MSG_BABYSTEP_Y                      _UxGT("Miniadım Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Miniadım Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Endstop iptal")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Isınma başarısız")
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Yatak Isınma Başrsız")
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Hata: Sıcaklık Aşımı")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("TERMAL PROBLEM")
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("TABLA TERMAL PROBLEM")
-#define MSG_ERR_MAXTEMP                     _UxGT("Hata: MAX.SICAKLIK")
-#define MSG_ERR_MINTEMP                     _UxGT("Hata: MIN.SICAKLIK")
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Hata: MAX.SIC. TABLA")
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Hata: MIN.SIC. TABLA")
-#define MSG_ERR_Z_HOMING                    _UxGT("Önce XY Sıfırla")
-#define MSG_HALTED                          _UxGT("YAZICI DURDURULDU")
-#define MSG_PLEASE_RESET                    _UxGT("Lütfen Resetleyin")
-#define MSG_SHORT_DAY                       _UxGT("G") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("S") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("D") // One character only
-#define MSG_HEATING                         _UxGT("Isınıyor...")
-#define MSG_COOLING                         _UxGT("SoÄŸuyor...")
-#define MSG_BED_HEATING                     _UxGT("Tabla Isınıyor...")
-#define MSG_BED_COOLING                     _UxGT("Tabla SoÄŸuyor...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Delta Kalibrasyonu")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Ayarla X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Ayarla Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Ayarla Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Ayarla Merkez")
-#define MSG_DELTA_SETTINGS                  _UxGT("Delta Ayarları")
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Oto Kalibrasyon")
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Delta Yük. Ayarla")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Z Prob Ofseti")
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Çapral Mil")
-#define MSG_DELTA_HEIGHT                    _UxGT("Yükseklik")
-#define MSG_DELTA_RADIUS                    _UxGT("Yarıçap")
-#define MSG_INFO_MENU                       _UxGT("Yazıcı Hakkında")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Yazıcı Bilgisi")
-#define MSG_3POINT_LEVELING                 _UxGT("3-Nokta Hizalama")
-#define MSG_LINEAR_LEVELING                 _UxGT("DoÄŸrusal Hizalama")
-#define MSG_BILINEAR_LEVELING               _UxGT("İki Yönlü Doğ. Hiza.")
-#define MSG_UBL_LEVELING                    _UxGT("BirleÅŸik Tabla Hiza.")
-#define MSG_MESH_LEVELING                   _UxGT("Mesh Hizalama")
-#define MSG_INFO_STATS_MENU                 _UxGT("Ä°statistikler")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Kontrolcü Bilgisi")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Termistörler")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Ekstruderler")
-#define MSG_INFO_BAUDRATE                   _UxGT("İletişim Hızı")
-#define MSG_INFO_PROTOCOL                   _UxGT("Protokol")
-#define MSG_CASE_LIGHT                      _UxGT("Aydınlatmayı Aç")
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Aydınlatma Parlaklğı")
+namespace Language_tr {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Yanlış Yazıcı")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Turkish");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Baskı Sayısı")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Tamamlanan")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Toplam Baskı Süresi")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("En Uzun Baskı Süresi")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Toplam Filaman")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Baskı")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Tamamlanan")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Süre")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("En Uzun")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Filaman")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Min Sıc.")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Max Sıc.")
-#define MSG_INFO_PSU                        _UxGT("Güç Kaynağı")
-#define MSG_DRIVE_STRENGTH                  _UxGT("Sürücü Gücü")
-#define MSG_DAC_PERCENT                     _UxGT("Sürücü %")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Yaz")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("BASKI DURAKLATILDI")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("FILAMAN YüKLE")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("FILAMAN ÇIKART")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Seçenekler:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Daha Fazla Tasviye")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Baskıyı sürdür")
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Nozul: ")
-#define MSG_RUNOUT_SENSOR                   _UxGT("Runout Sensörü")
-#define MSG_ERR_HOMING_FAILED               _UxGT("Sıfırlama Başarısız")
-#define MSG_ERR_PROBING_FAILED              _UxGT("Probing Başarısız")
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Çok Soğuk")
-//
-// Filament Değiştirme ekranları, 4 satırlı bir ekranda 3 satıra kadar gösterilir
-//                        ...veya 3 satırlı ekranda 2 satıra kadar
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Baskıya devam etmek")
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("için Butona bas")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Filaman deÄŸiÅŸimi")
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("için başlama")
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("bekleniyor")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Filamanı yükle")
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("ve devam için")
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("tuÅŸa bas...")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Nozulü Isıtmak için")
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("Butona Bas.")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Nozul Isınıyor")
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Lütfen Bekleyin...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Filamanın çıkması")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("bekleniyor")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Filamanın yüklenmesi")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("bekleniyor..")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Filaman Temizlemesi")
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("için bekle")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Filaman Temizlemesi")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("bitirmek için tıkla")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Baskının devam ")
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("etmesi için bekle")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Sürdürmek İçin Tıkla")
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Lütfen bekleyiniz...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Yükle ve bas")
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Isıtmak için Tıkla")
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Isınıyor...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Çıkartılıyor...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Yüklüyor...")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Temizleniyor...")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Bitirmek için Tıkla")
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Sürdürülüyor...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" hazır.");
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Geri");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("SD K. YerleÅŸtirildi.");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("SD Kart Çıkarıldı.");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Enstops"); // Max length 8 characters
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Yazılımsal Endstops");
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Ana");
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("GeliÅŸmiÅŸ Ayarlar");
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Yapılandırma");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Oto. BaÅŸlat");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Motorları Durdur");
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Hata Ayıklama");
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Durum Çubuğu Testi");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Eksenleri Sıfırla");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("X Sıfırla");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Y Sıfırla");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Z Sıfırla");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Oto. Z-Hizalama");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("XYZ Sıfırlanıyor");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Başlatmak için tıkla");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Sonraki Nokta");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Hizalama Tamam!");
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Kaçınma Yüksekliği");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Offset Ayarla");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Offset Tamam");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Sıfır Belirle");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Ön Isınma ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Tüm");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Tabla");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Ayarlar");
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Özel Ön Isınma");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("SoÄŸut");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Gücü Aç");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Gücü Kapat");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Ekstrüzyon");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Geri Çek");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Eksen Hareketleri");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Tabla Hizalama");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Tabla Hizası");
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Hizalama Köşeleri");
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Sonraki Köşe");
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Mesh Düzenle");
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Mesh Düzenleme Durdu");
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Ä°ndeks X");
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Ä°ndeks Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Z DeÄŸeri");
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Özel Komutlar");
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("IDEX Modu");
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Oto-Park");
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Kopyala");
+  PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY         = _UxGT("Yansıtılmış kopya");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Tam Kontrol");
+  PROGMEM Language_Str MSG_X_OFFSET                        = _UxGT("2. nozul X");
+  PROGMEM Language_Str MSG_Y_OFFSET                        = _UxGT("2. nozul Y");
+  PROGMEM Language_Str MSG_Z_OFFSET                        = _UxGT("2. nozul Z");
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("G29 Çalışıyor");
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL Araçları");
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("UBL Yatak Hizalama");
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Elle Mesh OluÅŸtur");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Altlık & Ölçü Ver");
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Ölçü");
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Yataktan Ölçü Kaldır");
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Sonrakine Git");
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("UBL'yi EtkinleÅŸtir");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("UBL'yi EtkisizleÅŸtir");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Yatak Sıcaklığı");
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Yatak Sıcaklığı");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Nozul Sıcaklığı");
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Nozul Sıcaklığı");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Mesh Düzenleme");
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Özel Mesh Düzenleme");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Ä°nce Ayar Mesh");
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Mesh Düzenleme Tamam");
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Özel Mesh Oluştur");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Mesh OluÅŸtur");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Mesh OluÅŸtur (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Mesh OluÅŸtur (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("SoÄŸuk Mesh OluÅŸtur");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Mesh Yükseklik Ayarı");
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Yükseklik miktarı");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("DoÄŸrulama Mesh");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("DoÄŸrulama Mesh (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("DoÄŸrulama Mesh (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Özel Mesh Doğrulama");
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Tabla Mesh Devam et");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Mesh Hizalama");
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("3-Nokta Hizalama");
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Kafes Mesh Hizalama");
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Mesh Seviyesi");
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Yan Noktalar");
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Haritalama Türü");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Mesh Çıkış Haritası");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Host için Çıktı");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("CSV için Çıktı");
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Yazıcıda Yedek Kpalı");
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("UBL Çıkış Bilgisi");
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Dolgu Miktarı");
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Manuel Dolgu");
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Akıllı Dogu");
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Mesh Dolgu");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Tümünü Geçersiz Kıl");
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Yakını Geçersiz Kıl");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Tümünü İnce Ayarla");
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Yakını İnce Ayarla");
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Mesh Depolama");
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Bellek Yuvası");
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Yatak Mesh Yükle");
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Yatak Mesh Kayıt Et");
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i yüklendi");
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i kayıtlandı");
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Depolama Yok");
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Hata: UBL Kayıt");
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Hata: UBL Yenileme");
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z-Ofset Durduruldu");
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Adım Adım UBL");
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.SoÄŸuk Mesh OluÅŸtur");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Akıllı Dogu");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.DoÄŸrulama Mesh");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Tümünü İnce Ayarla");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.DoÄŸrulama Mesh");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Tümünü İnce Ayarla");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Yatak Mesh Kayıt Et");
+
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("LED Kontrolü");
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Işıklar");
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Işık Hazır Ayarları");
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Kırmızı");
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Turuncu");
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Sarı");
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("YeÅŸil");
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Mavi");
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Lacivert");
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("MenekÅŸe");
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Beyaz");
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Varsayılan");
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Özel Işıklar");
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Kırmızı Şiddeti");
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("YeÅŸil Åžiddeti");
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Mavi Åžiddeti");
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Beyaz Åžiddeti");
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("Parlaklık");
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Hareket Ediyor..");
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Durdur XY");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("X Hareketi");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Y Hareketi");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Z Hareketi");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Ekstruder");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Ekstruder ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Ekstruder ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Ekstruder ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Ekstruder ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Ekstruder ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Ekstruder ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Nozul Çok Soğuk");
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("%smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Hız");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Z Mesafesi");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Nozul");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Nozul ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Nozul ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Nozul ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Nozul ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Nozul ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Nozul ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Tabla");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Fan Hızı");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Fan Hızı 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Fan Hızı 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Fan Hızı 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Ekstra Fan Hızı");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Ekstra Fan Hızı 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Ekstra Fan Hızı 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Ekstra Fan Hızı 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Akış");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Akış ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Akış ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Akış ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Akış ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Akış ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Akış ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Kontrol");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Min");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Max");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Çarpan");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Oto. Sıcaklık");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Açık");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Kapalı");
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Seç");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Seç ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Seç ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Seç ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Seç ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Seç ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Seç ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Ä°vme");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Sarsım");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-Sarsım");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-Sarsım");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-Sarsım");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-Sarsım");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Jonksiyon Sapması");
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Hız Vektörü");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("HızVektör.max ") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("HızVektör.max ") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("HızVektör.max ") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("HızVektör.max ") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("HızVektör.max ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("HızVektör.max ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("HızVektör.max ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("HızVektör.max ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("HızVektör.max ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("HızVektör.max ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("HızVektör.min");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("HV.gezinme min");
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Ivme");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Max. ivme ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Max. ivme ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Max. ivme ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Max. ivme ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Max. ivme ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Max. ivme ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Max. ivme ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Max. ivme ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Max. ivme ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Max. ivme ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("Ivme-geri çekme");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("Ivme-gezinme");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Adım/mm");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E adım/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT(" adım/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Sıcaklık");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Hareket");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filaman");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("Ekstrüzyon/mm³");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Filaman Çapı");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Filaman Çapı ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Filaman Çapı ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Filaman Çapı ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Filaman Çapı ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Filaman Çapı ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Filaman Çapı ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Çıkart mm");
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Yükle mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K Ä°lerlet");
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K Ä°lerlet ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K Ä°lerlet ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K Ä°lerlet ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K Ä°lerlet ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K Ä°lerlet ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K Ä°lerlet ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Kontrast");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Hafızaya Al");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hafızadan Yükle");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Fabrika Ayarları");
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM'u baÅŸlat");
+  PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("SD Güncellemesi");
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Yazıcıyı Resetle");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Yenile");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Bilgi Ekranı");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Hazırlık");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Ayar");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Duraklat");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Sürdür");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Durdur");
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Kesinti Kurtarma");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("SD Karttan Yazdır");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("SD Kart Yok!");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Uyku...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Operatör bekleniyor.");
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("Baskı Duraklatıldı");
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Baskı Yapılıyor...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Baskı Durduruldu!");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Ä°ÅŸlem yok.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("Kilitlendi. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("Durdu. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Geri Çek mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Swap Re.mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Geri Çekme V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Atlama mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("S UnRet mm");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("UnRet  V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("Oto. Geri Çekme");
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("G.Çekme Boyu");
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Takım Değişimi");
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Z Yükselt");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Birincil Hız");
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Geri Çekme Hızı");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Filaman DeÄŸiÅŸtir");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Filaman DeÄŸiÅŸtir ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Filaman Yükle ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Filaman Yükle ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Filaman Yükle ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Filaman Yükle ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Filaman Yükle ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Filaman Yükle ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Filaman Çıkart ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Filaman Çıkart ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Filaman Çıkart ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Filaman Çıkart ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Filaman Çıkart ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Filaman Çıkart ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Tümünü Çıkart");
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("SD Kart Başlatılıyor");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("SD Kart DeÄŸiÅŸtir");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z Prob Açık. Tabla");
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Çarpıklık Faktörü");
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Self-Test");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Sıfırla BLTouch");
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("BLTouch Aç");
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("BLTouch Kapat");
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Z-Prob Aç");
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Z-Sensör Kapat");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Sıfırla %s%s%s Önce");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Miniadım X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Miniadım Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Miniadım Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Endstop iptal");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Isınma başarısız");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Yatak Isınma Başrsız");
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Hata: Sıcaklık Aşımı");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("TERMAL PROBLEM");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("TABLA TERMAL PROBLEM");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Hata: MAX.SICAKLIK");
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Hata: MIN.SICAKLIK");
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Hata: MAX.SIC. TABLA");
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Hata: MIN.SIC. TABLA");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Önce XY Sıfırla");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("YAZICI DURDURULDU");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Lütfen Resetleyin");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("G"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("S"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("D"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Isınıyor...");
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("SoÄŸuyor...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Tabla Isınıyor...");
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Tabla SoÄŸuyor...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Delta Kalibrasyonu");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Ayarla X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Ayarla Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Ayarla Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Ayarla Merkez");
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Delta Ayarları");
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Oto Kalibrasyon");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Delta Yük. Ayarla");
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Z Prob Ofseti");
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Çapral Mil");
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Yükseklik");
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Yarıçap");
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Yazıcı Hakkında");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Yazıcı Bilgisi");
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("3-Nokta Hizalama");
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("DoÄŸrusal Hizalama");
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("İki Yönlü Doğ. Hiza.");
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("BirleÅŸik Tabla Hiza.");
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Mesh Hizalama");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Ä°statistikler");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Kontrolcü Bilgisi");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Termistörler");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Ekstruderler");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("İletişim Hızı");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Protokol");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Aydınlatmayı Aç");
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Aydınlatma Parlaklğı");
+
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Yanlış Yazıcı");
+
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Baskı Sayısı");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Tamamlanan");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Toplam Baskı Süresi");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("En Uzun Baskı Süresi");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Toplam Filaman");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Baskı");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Tamamlanan");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Süre");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("En Uzun");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Filaman");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Min Sıc.");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Max Sıc.");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Güç Kaynağı");
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Sürücü Gücü");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("Sürücü %");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("DAC EEPROM Yaz");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("BASKI DURAKLATILDI");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("FILAMAN YüKLE");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("FILAMAN ÇIKART");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("Seçenekler:");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Daha Fazla Tasviye");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Baskıyı sürdür");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Nozul: ");
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR                   = _UxGT("Runout Sensörü");
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Sıfırlama Başarısız");
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("Probing Başarısız");
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Çok Soğuk");
+  //
+  // Filament Değiştirme ekranları, 4 satırlı bir ekranda 3 satıra kadar gösterilir
+  //                        ...veya 3 satırlı ekranda 2 satıra kadar
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Baskıya devam etmek", "için Butona bas"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Filaman değişimi", "için başlama", "bekleniyor"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Filamanı yükle", "ve devam için", "tuşa bas..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Nozulü Isıtmak için", "Butona Bas."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Nozul Isınıyor", "Lütfen Bekleyin..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Filamanın çıkması", "bekleniyor"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Filamanın yüklenmesi", "bekleniyor.."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "için bekle"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "bitirmek için tıkla"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Baskının devam ", "etmesi için bekle"));
+  #else // LCD_HEIGHT < 4
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Sürdürmek İçin Tıkla"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Lütfen bekleyiniz..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Yükle ve bas"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Isıtmak için Tıkla"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Isınıyor..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Çıkartılıyor..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Yüklüyor..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Temizleniyor..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Bitirmek için Tıkla"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Sürdürülüyor..."));
+  #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index 12fb53e672..769d1c97ef 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -30,213 +30,304 @@
  */
 
 #define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" готовий.")
-#define MSG_MEDIA_INSERTED                  _UxGT("Картка вставлена")
-#define MSG_MEDIA_REMOVED                   _UxGT("Картка видалена")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Кінцевик") // Max length 8 characters
-#define MSG_MAIN                            _UxGT("Меню")
-#define MSG_AUTOSTART                       _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS                _UxGT("Вимк. двигуни")
-#define MSG_AUTO_HOME                       _UxGT("Авто паркування")
-#define MSG_AUTO_HOME_X                     _UxGT("Паркування X")
-#define MSG_AUTO_HOME_Y                     _UxGT("Паркування Y")
-#define MSG_AUTO_HOME_Z                     _UxGT("Паркування Z")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Паркування XYZ")
-#define MSG_LEVEL_BED_WAITING               _UxGT("Почати")
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Слідуюча Точка")
-#define MSG_LEVEL_BED_DONE                  _UxGT("Завершено!")
-#define MSG_SET_HOME_OFFSETS                _UxGT("Зберегти паркув.")
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Зміщення застос.")
-#define MSG_SET_ORIGIN                      _UxGT("Встанов. початок")
-#define MSG_PREHEAT_1                       _UxGT("Нагрів " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Все")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Стіл")
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" нал.")
-#define MSG_PREHEAT_2                       _UxGT("Нагрів " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Все")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Стіл")
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" нал.")
-#define MSG_COOLDOWN                        _UxGT("Охолодження")
-#define MSG_SWITCH_PS_ON                    _UxGT("Увімкнути живлення")
-#define MSG_SWITCH_PS_OFF                   _UxGT("Вимкнути живлення")
-#define MSG_EXTRUDE                         _UxGT("Екструзія")
-#define MSG_RETRACT                         _UxGT("Втягування")
-#define MSG_MOVE_AXIS                       _UxGT("Рух по осям")
-#define MSG_BED_LEVELING                    _UxGT("Нівелювання столу")
-#define MSG_LEVEL_BED                       _UxGT("Нівелювання столу")
-#define MSG_MOVE_X                          _UxGT("Рух по X")
-#define MSG_MOVE_Y                          _UxGT("Рух по Y")
-#define MSG_MOVE_Z                          _UxGT("Рух по Z")
-#define MSG_MOVE_E                          _UxGT("Екструдер")
-#define MSG_MOVE_Z_DIST                     _UxGT("Рух по %smm")
-#define MSG_MOVE_01MM                       _UxGT("Рух по 0.1mm")
-#define MSG_MOVE_1MM                        _UxGT("Рух по 1mm")
-#define MSG_MOVE_10MM                       _UxGT("Рух по 10mm")
-#define MSG_SPEED                           _UxGT("Швидкість")
-#define MSG_BED_Z                           _UxGT("Z Столу")
-#define MSG_NOZZLE                          _UxGT("Сопло")
-#define MSG_BED                             _UxGT("Стіл")
-#define MSG_FAN_SPEED                       _UxGT("Охолодж.")
-#define MSG_FLOW                            _UxGT("Потік")
-#define MSG_CONTROL                         _UxGT("Налаштування")
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Мін")
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Макс")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Факт")
-#define MSG_AUTOTEMP                        _UxGT("Автотемпер.")
-#define MSG_LCD_ON                          _UxGT("Увімк.")
-#define MSG_LCD_OFF                         _UxGT("Вимк.")
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Вибрати")
-#define MSG_ACC                             _UxGT("Приск.")
-#define MSG_JERK                            _UxGT("Ривок")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Va-ривок")
-  #define MSG_VB_JERK                       _UxGT("Vb-ривок")
-  #define MSG_VC_JERK                       _UxGT("Vc-ривок")
-#else
-  #define MSG_VA_JERK                       _UxGT("Vx-ривок")
-  #define MSG_VB_JERK                       _UxGT("Vy-ривок")
-  #define MSG_VC_JERK                       _UxGT("Vz-ривок")
-#endif
-#define MSG_VE_JERK                         _UxGT("Ve-ривок")
-#define MSG_VMAX                            _UxGT("Vмакс")
-#define MSG_VMIN                            _UxGT("Vмін")
-#define MSG_VTRAV_MIN                       _UxGT("Vруху мін")
-#define MSG_AMAX                            _UxGT("Aмакс ")
-#define MSG_A_RETRACT                       _UxGT("A-втягув.")
-#define MSG_A_TRAVEL                        _UxGT("A-руху")
-#define MSG_STEPS_PER_MM                    _UxGT("Кроків/мм")
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("Aкроків/мм")
-  #define MSG_BSTEPS                        _UxGT("Bкроків/мм")
-  #define MSG_CSTEPS                        _UxGT("Cкроків/мм")
-#else
-  #define MSG_ASTEPS                        _UxGT("Xкроків/мм")
-  #define MSG_BSTEPS                        _UxGT("Yкроків/мм")
-  #define MSG_CSTEPS                        _UxGT("Zкроків/мм")
-#endif
-#define MSG_ESTEPS                          _UxGT("Eкроків/мм")
-#define MSG_E0_STEPS                        _UxGT("E1кроків/мм")
-#define MSG_E1_STEPS                        _UxGT("E2кроків/мм")
-#define MSG_E2_STEPS                        _UxGT("E3кроків/мм")
-#define MSG_E3_STEPS                        _UxGT("E4кроків/мм")
-#define MSG_E4_STEPS                        _UxGT("E5кроків/мм")
-#define MSG_E5_STEPS                        _UxGT("E6кроків/мм")
-#define MSG_TEMPERATURE                     _UxGT("Температура")
-#define MSG_MOTION                          _UxGT("Рух")
-#define MSG_FILAMENT                        _UxGT("Волокно")
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E в мм3")
-#define MSG_FILAMENT_DIAM                   _UxGT("Діам. волок.")
-#define MSG_CONTRAST                        _UxGT("контраст LCD")
-#define MSG_STORE_EEPROM                    _UxGT("Зберегти в ПЗП")
-#define MSG_LOAD_EEPROM                     _UxGT("Зчитати з ПЗП")
-#define MSG_RESTORE_FAILSAFE                _UxGT("Відновити базові")
-#define MSG_REFRESH                         _UxGT("Поновити")
-#define MSG_WATCH                           _UxGT("Інформація")
-#define MSG_PREPARE                         _UxGT("Підготувати")
-#define MSG_TUNE                            _UxGT("Підлаштування")
-#define MSG_PAUSE_PRINT                     _UxGT("Призупинити друк")
-#define MSG_RESUME_PRINT                    _UxGT("Відновити друк")
-#define MSG_STOP_PRINT                      _UxGT("Скасувати друк")
-#define MSG_MEDIA_MENU                      _UxGT("Друкувати з SD")
-#define MSG_NO_MEDIA                        _UxGT("Відсутня SD карт.")
-#define MSG_DWELL                           _UxGT("Сплячка...")
-#define MSG_USERWAIT                        _UxGT("Очікування дій...")
-#define MSG_PRINT_ABORTED                   _UxGT("Друк скасовано")
-#define MSG_NO_MOVE                         _UxGT("Немає руху.")
-#define MSG_KILLED                          _UxGT("ПЕРЕРВАНО. ")
-#define MSG_STOPPED                         _UxGT("ЗУПИНЕНО. ")
-#define MSG_FILAMENTCHANGE                  _UxGT("Зміна волокна")
-#define MSG_INIT_MEDIA                      _UxGT("Старт SD картки")
-#define MSG_CHANGE_MEDIA                    _UxGT("Заміна SD карти")
-#define MSG_ZPROBE_OUT                      _UxGT("Z дет. не в межах")
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch Само-Тест")
-#define MSG_BLTOUCH_RESET                   _UxGT("Скинути BLTouch")
-#define MSG_HOME_FIRST                      _UxGT("Дім %s%s%s перший")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Зміщення Z")
-#define MSG_BABYSTEP_X                      _UxGT("Мікрокрок X")
-#define MSG_BABYSTEP_Y                      _UxGT("Мікрокрок Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Мікрокрок Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("невдача кінцевика")
-#define MSG_HEATING_FAILED_LCD              _UxGT("Невдалий нагрів")
-#define MSG_THERMAL_RUNAWAY                 _UxGT("ЗБІЙ ТЕМПЕРАТУРИ")
-#define MSG_ERR_Z_HOMING                    _UxGT("Дім XY перший")
-#define MSG_HALTED                          _UxGT("ПРИНТЕР ЗУПИНЕНО")
-#define MSG_PLEASE_RESET                    _UxGT("Перезавантажте")
-#define MSG_SHORT_DAY                       _UxGT("д") // One character only
-#define MSG_SHORT_HOUR                      _UxGT("г") // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("Ñ…") // One character only
-#define MSG_HEATING                         _UxGT("Нагрівання...")
-#define MSG_BED_HEATING                     _UxGT("Нагрівання столу...")
-#define MSG_DELTA_CALIBRATE                 _UxGT("Калібр. Delta")
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Калібрування X")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Калібрування Y")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Калібрування Z")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Калібр. Центру")
+namespace Language_uk {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define MSG_INFO_MENU                       _UxGT("Про принтер")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Інформація")
-#define MSG_INFO_STATS_MENU                 _UxGT("Статистика")
-#define MSG_INFO_BOARD_MENU                 _UxGT("Про плату")
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Термістори")
-#define MSG_INFO_EXTRUDERS                  _UxGT("Екструдери")
-#define MSG_INFO_BAUDRATE                   _UxGT("біт/с")
-#define MSG_INFO_PROTOCOL                   _UxGT("Протокол")
-#define MSG_CASE_LIGHT                      _UxGT("Підсвітка")
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Ukranian");
 
-#define MSG_EXPECTED_PRINTER                _UxGT("Неправильний принтер")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" готовий.");
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("Картка вставлена");
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("Картка видалена");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Кінцевик"); // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Меню");
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Автостарт");
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Вимк. двигуни");
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Авто паркування");
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Паркування X");
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Паркування Y");
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Паркування Z");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Паркування XYZ");
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Почати");
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Слідуюча Точка");
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Завершено!");
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Зберегти паркув.");
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Зміщення застос.");
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Встанов. початок");
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Нагрів ") PREHEAT_1_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Все");
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Стіл");
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" нал.");
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Нагрів ") PREHEAT_2_LABEL;
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Все");
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Стіл");
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" нал.");
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Охолодження");
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Увімкнути живлення");
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Вимкнути живлення");
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Екструзія");
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Втягування");
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Рух по осям");
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("Нівелювання столу");
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Нівелювання столу");
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Рух по X");
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Рух по Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Рух по Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Екструдер");
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Екструдер ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Екструдер ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Екструдер ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Екструдер ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Екструдер ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Екструдер ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("Рух по %smm");
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Рух по 0.1mm");
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Рух по 1mm");
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Рух по 10mm");
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Швидкість");
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Z Столу");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Сопло");
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Сопло ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Сопло ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Сопло ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Сопло ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Сопло ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Сопло ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Стіл");
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Охолодж.");
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Охолодж. 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Охолодж. 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Охолодж. 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Потік");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Потік ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Потік ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Потік ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Потік ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Потік ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Потік ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Налаштування");
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Мін");
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Макс");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Факт");
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Автотемпер.");
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Увімк.");
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Вимк.");
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Вибрати");
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Вибрати ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Вибрати ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Вибрати ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Вибрати ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Вибрати ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Вибрати ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Приск.");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Ривок");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("V") LCD_STR_A _UxGT("-ривок");
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("V") LCD_STR_B _UxGT("-ривок");
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("V") LCD_STR_C _UxGT("-ривок");
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Ve-ривок");
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("Vмакс") LCD_STR_A;
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("Vмакс") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("Vмакс") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("Vмакс") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("Vмакс ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("Vмакс ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("Vмакс ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("Vмакс ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("Vмакс ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("Vмакс ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vмін");
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vруху мін");
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Aмакс ") LCD_STR_A;
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Aмакс ") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Aмакс ") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Aмакс ") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Aмакс ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Aмакс ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Aмакс ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Aмакс ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Aмакс ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Aмакс ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("A-втягув.");
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("A-руху");
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Кроків/мм");
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Eкроків/мм");
+  PROGMEM Language_Str MSG_E0_STEPS                        = LCD_STR_E0 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E1_STEPS                        = LCD_STR_E1 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E2_STEPS                        = LCD_STR_E2 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E3_STEPS                        = LCD_STR_E3 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E4_STEPS                        = LCD_STR_E4 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_E5_STEPS                        = LCD_STR_E5 _UxGT("кроків/мм");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Температура");
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Рух");
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Волокно");
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E в мм3");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Діам. волок.");
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Діам. волок. ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Діам. волок. ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Діам. волок. ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Діам. волок. ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Діам. волок. ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Діам. волок. ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("контраст LCD");
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Зберегти в ПЗП");
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зчитати з ПЗП");
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Відновити базові");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Поновити");
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Інформація");
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Підготувати");
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Підлаштування");
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Призупинити друк");
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Відновити друк");
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("Скасувати друк");
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("Друкувати з SD");
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("Відсутня SD карт.");
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Сплячка...");
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Очікування дій...");
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("Друк скасовано");
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Немає руху.");
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ПЕРЕРВАНО. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ЗУПИНЕНО. ");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Зміна волокна");
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Зміна волокна ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Зміна волокна ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Зміна волокна ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Зміна волокна ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Зміна волокна ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Зміна волокна ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("Старт SD картки");
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Заміна SD карти");
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z дет. не в межах");
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch Само-Тест");
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Скинути BLTouch");
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Дім %s%s%s перший");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Зміщення Z");
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Мікрокрок X");
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Мікрокрок Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Мікрокрок Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("невдача кінцевика");
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Невдалий нагрів");
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("ЗБІЙ ТЕМПЕРАТУРИ");
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Дім XY перший");
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("ПРИНТЕР ЗУПИНЕНО");
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Перезавантажте");
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("д"); // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("г"); // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("Ñ…"); // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Нагрівання...");
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Нагрівання столу...");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Калібр. Delta");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Калібрування X");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Калібрування Y");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Калібрування Z");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Калібр. Центру");
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("К-сть друків")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Завершено")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Весь час друку")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Найдовший час")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Екструдовано")
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Друків")
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Завершено")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Загалом")
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Найдовший")
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Ексдруд.")
-#endif
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Про принтер");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Інформація");
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Статистика");
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Про плату");
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Термістори");
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Екструдери");
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("біт/с");
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Протокол");
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Підсвітка");
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("Мін Темп.")
-#define MSG_INFO_MAX_TEMP                   _UxGT("Макс Темп.")
-#define MSG_INFO_PSU                        _UxGT("Джерело жив.")
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("Неправильний принтер");
 
-#define MSG_DRIVE_STRENGTH                  _UxGT("Сила мотору")
-#define MSG_DAC_PERCENT                     _UxGT("% мотору")
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Запис ЦАП на ПЗП")
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("К-сть друків");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Завершено");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Весь час друку");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Найдовший час");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Екструдовано");
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Друків");
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Завершено");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Загалом");
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Найдовший");
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Ексдруд.");
+  #endif
 
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Відновити друк")
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Мін Темп.");
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Макс Темп.");
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Джерело жив.");
 
-#if LCD_HEIGHT >= 4
-  // Up to 3 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Зачекайте на")
-  #define MSG_FILAMENT_CHANGE_INIT_2          _UxGT("початок заміни")
-  #define MSG_FILAMENT_CHANGE_INIT_3          _UxGT("волокна")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Зачекайте на")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2        _UxGT("вивід волокна")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Вставте волокно")
-  #define MSG_FILAMENT_CHANGE_INSERT_2        _UxGT("та натисніть для")
-  #define MSG_FILAMENT_CHANGE_INSERT_3        _UxGT("продовження...")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Зачекайте на")
-  #define MSG_FILAMENT_CHANGE_LOAD_2          _UxGT("ввід волокна")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Зачекайте на")
-  #define MSG_FILAMENT_CHANGE_RESUME_2        _UxGT("відновлення")
-  #define MSG_FILAMENT_CHANGE_RESUME_3        _UxGT("друку")
-#else // LCD_HEIGHT < 4
-  // Up to 2 lines allowed
-  #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("Зачекайте...")
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1        _UxGT("Вивід...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1        _UxGT("Вставте і нат.")
-  #define MSG_FILAMENT_CHANGE_LOAD_1          _UxGT("Ввід...")
-  #define MSG_FILAMENT_CHANGE_RESUME_1        _UxGT("Відновлення...")
-#endif // LCD_HEIGHT < 4
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Сила мотору");
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("% мотору");
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Запис ЦАП на ПЗП");
+
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Відновити друк");
+
+  #if LCD_HEIGHT >= 4
+    // Up to 3 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Зачекайте на", "початок заміни", "волокна"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Зачекайте на", "вивід волокна"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Вставте волокно", "та натисніть для", "продовження..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Зачекайте на", "ввід волокна"));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_3_LINE("Зачекайте на", "відновлення", "друку"));
+  #else
+    // Up to 2 lines allowed
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Зачекайте..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Вивід..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Вставте і нат."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Ввід..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Відновлення..."));
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index b1520274fd..abb96a58a1 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -28,410 +28,518 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_vi {
+  using namespace Language_en; // Inherit undefined strings from English
 
-#define CHARSIZE 2
+  constexpr uint8_t    CHARSIZE                            = 2;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Vietnamese");
 
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS      _UxGT("àạậẵắấầđẻểếềìỉởộỗợúự")
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT(" Sẵn sàng.");              // Ready
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("Trở lại");                              // Back
+  PROGMEM Language_Str MSG_SD_INSERTED                     = _UxGT("Thẻ được cắm vào");                     // Card inserted
+  PROGMEM Language_Str MSG_SD_REMOVED                      = _UxGT("Thẻ được rút ra");
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("Công tắc");                             // Endstops - công tắc hành trình
+  PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS               = _UxGT("Công tắc mềm");                         // soft Endstops
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("Chính");                                // Main
+  PROGMEM Language_Str MSG_ADVANCED_SETTINGS               = _UxGT("Thiết lập cấp cao");                    // Advanced Settings
+  PROGMEM Language_Str MSG_CONFIGURATION                   = _UxGT("Cấu hình");                             // Configuration
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("Khởi chạy tự động");                    // Autostart
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("Tắt động cơ bước");                     // Disable steppers
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("Menu gỡ lỗi");                          // Debug Menu
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("Kiểm tra tiến độ");                     // Progress bar test
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("Về nhà tự động");                       // Auto home
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("Về nhà X");                             // home x
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("Về nhà Y");                             // home y
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Về nhà Z");
+  PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Chỉnh canh Z tự động");
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Đang về nhà XYZ");                      // Homing XYZ
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Nhấn để bắt đầu");                      // Click to Begin
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Điểm tiếp theo");                       // Next Point
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("San lấp được hoàn thành");              // Leveling Done!
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Chiều cao mờ dần");                     // Fade Height
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Đặt bù đắp nhà");                       // Set home offsets
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Bù đắp được áp dụng");                  // Offsets applied
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("Đặt nguồn gốc");                        // Set origin
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước");   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N0;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N1;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N2;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N3;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N4;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N5;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu");
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Tất cả");    // all
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Bàn");       // bed -- using vietnamese term for 'table' instead
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Cấu hình");  // conf
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước");   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N0;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N1;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N2;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N3;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N4;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N5;   // Preheat
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu");
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Tất cả");    // all
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Bàn");       // bed -- using vietnamese term for 'table' instead
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Cấu hình");  // conf
+  PROGMEM Language_Str MSG_PREHEAT_CUSTOM                  = _UxGT("Sự nóng trước tự chọn");                // Preheat Custom
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("Nguội xuống");                          // Cooldown
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Bật nguồn");                            // Switch power on
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("Tắt nguồn");                            // Switch power off
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("Ép đùn");                               // Extrude
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("Rút lại");                              // Retract
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("Di chuyển trục");                       // Move axis
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("San Lấp Bàn");                          // Bed Leveling
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("Làm bằng mặt bàn");                     // Level bed
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("Làm bằng góc bàn");                     // Level corners
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("Góc tiếp theo");                        // Next corner
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("Chỉnh lưới đã dừng");                   // Mesh Editing Stopped
+  PROGMEM Language_Str MSG_MESH_X                          = _UxGT("Mục lục X");                            // Index X
+  PROGMEM Language_Str MSG_MESH_Y                          = _UxGT("Mục lục Y");
+  PROGMEM Language_Str MSG_MESH_EDIT_Z                     = _UxGT("Giá trị Z");                            // Z Value
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("Các lệnh tự chọn");                     // Custom Commands
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("Đang chạy G29");                        // Doing G29
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("Công cụ UBL");                          // UBL tools
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("San Lấp Bàn Thống Nhất (UBL)");         // Unified Bed Leveling
+  PROGMEM Language_Str MSG_IDEX_MENU                       = _UxGT("chế độ IDEX");                          // IDEX Mode
+  PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK              = _UxGT("Đậu tự động");                          // Auto-Park
+  PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE             = _UxGT("Sự gấp đôi");                           // Duplication
+  PROGMEM Language_Str MSG_IDEX_MODE_SCALED_COPY           = _UxGT("Bản sao thu nhỏ");
+  PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL             = _UxGT("Toàn quyền điều khiển");                // Full control
+  PROGMEM Language_Str MSG_IDEX_X_OFFSET                   = _UxGT("Đầu phun X nhì");                       // 2nd nozzle X
+  PROGMEM Language_Str MSG_IDEX_Y_OFFSET                   = _UxGT("Đầu phun Y nhì");
+  PROGMEM Language_Str MSG_IDEX_Z_OFFSET                   = _UxGT("Đầu phun Z nhì");
+  PROGMEM Language_Str MSG_IDEX_SAVE_OFFSETS               = _UxGT("Lưu bù đắp");                           // Save offsets
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("Tự xây dựng lưới");                     // Manually Build Mesh
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("Đặt chêm và đo");                       // Place shim & measure
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("Đo");                                   // Measure
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("Tháo và đo bàn");                       // Remove & measure bed
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("Chuyển sang tiếp theo");                // moving to next
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("Bật UBL");
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("Tắt UBL");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("Nhiệt độ bàn");                         // Bed Temp
+  PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM             = _UxGT("Bed Temp");
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("Nhiệt độ đầu phun");                    // Hotend Temp
+  PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM          = _UxGT("Hotend Temp");
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("Chỉnh sửa lưới");                       // Mesh Edit
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("Chỉnh sửa lưới tự chọn");               // Edit Custom Mesh
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("Chỉnh lưới chính xác");                 // Fine tuning mesh
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("Chỉnh sửa xong lưới");                  // Done Editing Mesh
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("Xây dựng lưới tự chọn");                // Build Custom Mesh
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("Xây dựng lưới");                        // Build Mesh
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("Xây dựng lưới (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("Xây dựng lưới (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("Xây dựng lưới lạnh");                   // Build cold mesh
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("Điều chỉnh chiều cao lưới");            // Adjust Mesh Height
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("Số lượng chiều cao");                   // Height Amount
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("Thẩm tra lưới");                        // Validate Mesh
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("Thẩm tra lưới (") PREHEAT_1_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("Thẩm tra lưới (") PREHEAT_2_LABEL _UxGT(")");
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("Thẩm tra lưới tự chọn");                // validate custom mesh
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("Tiếp tục xây lưới bàn");                // Continue Bed Mesh
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("Đang san lấp lưới");                    // Mesh Leveling
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("Đang san lấp 3-điểm");                  // 3-Point Leveling
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("Đang san lấp lưới phẳng");              // Grid (planar) Mesh Leveling
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("Làm bằng lưới");                        // Level Mesh
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Điểm bên cạnh");                        // Side Points
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Loại bản đồ");                          // Map Type
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Đầu ra bản đồ lưới");                   // Output Mesh Map
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Đầu ra cho máy chủ");                   // Output for Host
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Đầu ra cho CSV");                       // Output for CSV
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Hỗ trợ lưới");                          // Off Printer Backup | backup mesh
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Đầu ra thông tin UBL");                 // Output UBL Info
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("Chỉnh sửa lưới");                       // Edit mesh
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Số lượng lấp đầy");                     // Fill-in Amount
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Tự lấp đầy");                           // Manual Fill-in
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Lấp đầy thông minh");                   // Smart Fill-in
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("Lưới lấp đầy");                         // Fill-in Mesh
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("Bác bỏ tất cả");                       // Invalidate All
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("Bác bỏ gần nhất");                     // Invalidate Closest
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("Chỉnh chính xác tất cả");               // Fine Tune ALl
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("Chỉnh chính xác gần nhất");             // Fine Tune Closest
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("Lưu trữ lưới");                         // Mesh Storage
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Khe nhá»›");                              // Memory Slot
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Tải lưới bàn");                         // Load Bed Mesh
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Lưu lưới bàn");                         // Save Bed Mesh
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 %i lưới được nạp");                     // Mesh %i loaded
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 %i lưới đã lưu");
+  PROGMEM Language_Str MSG_NO_STORAGE                      = _UxGT("Không lưu trữ");                        // No Storage
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Điều sai: Lưu UBL");                    // Err: UBL Save
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Điều Sai: Khôi Phục UBL");              // Err: UBL Restore
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Đầu Dò-Z Đã Ngừng");                    // Z-Offset Stopped
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("Bước-Từng-Bước UBL");                   // Step-By-Step UBL
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1.Xây dựng lưới lạnh");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2.Lấp đầy thông minh");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3.Thẩm tra lưới");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4.Chỉnh chính xác tất cả");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5.Thẩm tra lưới");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6.Chỉnh chính xác tất cả");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7.Lưu lưới bàn");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT(" Sẵn sàng.")              // Ready
-#define MSG_BACK                            _UxGT("Trở lại")                              // Back
-#define MSG_SD_INSERTED                     _UxGT("Thẻ được cắm vào")                     // Card inserted
-#define MSG_SD_REMOVED                      _UxGT("Thẻ được rút ra")
-#define MSG_LCD_ENDSTOPS                    _UxGT("Công tắc")                             // Endstops - công tắc hành trình
-#define MSG_LCD_SOFT_ENDSTOPS               _UxGT("Công tắc mềm")                         // soft Endstops
-#define MSG_MAIN                            _UxGT("Chính")                                // Main
-#define MSG_ADVANCED_SETTINGS               _UxGT("Thiết lập cấp cao")                    // Advanced Settings
-#define MSG_CONFIGURATION                   _UxGT("Cấu hình")                             // Configuration
-#define MSG_AUTOSTART                       _UxGT("Khởi chạy tự động")                    // Autostart
-#define MSG_DISABLE_STEPPERS                _UxGT("Tắt động cơ bước")                     // Disable steppers
-#define MSG_DEBUG_MENU                      _UxGT("Menu gỡ lỗi")                          // Debug Menu
-#define MSG_PROGRESS_BAR_TEST               _UxGT("Kiểm tra tiến độ")                     // Progress bar test
-#define MSG_AUTO_HOME                       _UxGT("Về nhà tự động")                       // Auto home
-#define MSG_AUTO_HOME_X                     _UxGT("Về nhà X")                             // home x
-#define MSG_AUTO_HOME_Y                     _UxGT("Về nhà Y")                             // home y
-#define MSG_AUTO_HOME_Z                     _UxGT("Về nhà Z")
-#define MSG_AUTO_Z_ALIGN                    _UxGT("Chỉnh canh Z tự động")
-#define MSG_LEVEL_BED_HOMING                _UxGT("Đang về nhà XYZ")                      // Homing XYZ
-#define MSG_LEVEL_BED_WAITING               _UxGT("Nhấn để bắt đầu")                      // Click to Begin
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("Điểm tiếp theo")                       // Next Point
-#define MSG_LEVEL_BED_DONE                  _UxGT("San lấp được hoàn thành")              // Leveling Done!
-#define MSG_Z_FADE_HEIGHT                   _UxGT("Chiều cao mờ dần")                     // Fade Height
-#define MSG_SET_HOME_OFFSETS                _UxGT("Đặt bù đắp nhà")                       // Set home offsets
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("Bù đắp được áp dụng")                  // Offsets applied
-#define MSG_SET_ORIGIN                      _UxGT("Đặt nguồn gốc")                        // Set origin
-#define MSG_PREHEAT_1                       _UxGT("Làm nóng " PREHEAT_1_LABEL " trước")   // Preheat
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" Tất cả")                // all
-#define MSG_PREHEAT_1_END                   MSG_PREHEAT_1 _UxGT(" Đầu")
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" Bàn")                   // bed -- using vietnamese term for 'table' instead
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" Cấu hình")              // conf
-#define MSG_PREHEAT_2                       _UxGT("Làm nóng " PREHEAT_2_LABEL " trước")
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" Tất cả")
-#define MSG_PREHEAT_2_END                   MSG_PREHEAT_2 _UxGT(" Đầu")
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" Bàn")                   // bed -- using vietnamese term for 'table' instead
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" Cấu hình")
-#define MSG_PREHEAT_CUSTOM                  _UxGT("Sự nóng trước tự chọn")                // Preheat Custom
-#define MSG_COOLDOWN                        _UxGT("Nguội xuống")                          // Cooldown
-#define MSG_SWITCH_PS_ON                    _UxGT("Bật nguồn")                            // Switch power on
-#define MSG_SWITCH_PS_OFF                   _UxGT("Tắt nguồn")                            // Switch power off
-#define MSG_EXTRUDE                         _UxGT("Ép đùn")                               // Extrude
-#define MSG_RETRACT                         _UxGT("Rút lại")                              // Retract
-#define MSG_MOVE_AXIS                       _UxGT("Di chuyển trục")                       // Move axis
-#define MSG_BED_LEVELING                    _UxGT("San Lấp Bàn")                          // Bed Leveling
-#define MSG_LEVEL_BED                       _UxGT("Làm bằng mặt bàn")                     // Level bed
-#define MSG_LEVEL_CORNERS                   _UxGT("Làm bằng góc bàn")                     // Level corners
-#define MSG_NEXT_CORNER                     _UxGT("Góc tiếp theo")                        // Next corner
-#define MSG_EDITING_STOPPED                 _UxGT("Chỉnh lưới đã dừng")                   // Mesh Editing Stopped
-#define MSG_MESH_X                          _UxGT("Mục lục X")                            // Index X
-#define MSG_MESH_Y                          _UxGT("Mục lục Y")
-#define MSG_MESH_EDIT_Z                     _UxGT("Giá trị Z")                            // Z Value
-#define MSG_USER_MENU                       _UxGT("Các lệnh tự chọn")                     // Custom Commands
-#define MSG_UBL_DOING_G29                   _UxGT("Đang chạy G29")                        // Doing G29
-#define MSG_UBL_TOOLS                       _UxGT("Công cụ UBL")                          // UBL tools
-#define MSG_UBL_LEVEL_BED                   _UxGT("San Lấp Bàn Thống Nhất (UBL)")         // Unified Bed Leveling
-#define MSG_IDEX_MENU                       _UxGT("chế độ IDEX")                          // IDEX Mode
-#define MSG_IDEX_MODE_AUTOPARK              _UxGT("Đậu tự động")                          // Auto-Park
-#define MSG_IDEX_MODE_DUPLICATE             _UxGT("Sự gấp đôi")                           // Duplication
-#define MSG_IDEX_MODE_SCALED_COPY           _UxGT("Bản sao thu nhỏ")
-#define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Toàn quyền điều khiển")                // Full control
-#define MSG_IDEX_X_OFFSET                   _UxGT("Đầu phun X nhì")                       // 2nd nozzle X
-#define MSG_IDEX_Y_OFFSET                   _UxGT("Đầu phun Y nhì")
-#define MSG_IDEX_Z_OFFSET                   _UxGT("Đầu phun Z nhì")
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Lưu bù đắp")                           // Save offsets
-#define MSG_UBL_MANUAL_MESH                 _UxGT("Tự xây dựng lưới")                     // Manually Build Mesh
-#define MSG_UBL_BC_INSERT                   _UxGT("Đặt chêm và đo")                       // Place shim & measure
-#define MSG_UBL_BC_INSERT2                  _UxGT("Đo")                                   // Measure
-#define MSG_UBL_BC_REMOVE                   _UxGT("Tháo và đo bàn")                       // Remove & measure bed
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("Chuyển sang tiếp theo")                // moving to next
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("Bật UBL")
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("Tắt UBL")
-#define MSG_UBL_SET_TEMP_BED                _UxGT("Nhiệt độ bàn")                         // Bed Temp
-#define MSG_UBL_BED_TEMP_CUSTOM             MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("Nhiệt độ đầu phun")                    // Hotend Temp
-#define MSG_UBL_HOTEND_TEMP_CUSTOM          MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT                   _UxGT("Chỉnh sửa lưới")                       // Mesh Edit
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("Chỉnh sửa lưới tự chọn")               // Edit Custom Mesh
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("Chỉnh lưới chính xác")                 // Fine tuning mesh
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("Chỉnh sửa xong lưới")                  // Done Editing Mesh
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("Xây dựng lưới tự chọn")                // Build Custom Mesh
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("Xây dựng lưới")                        // Build Mesh
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("Xây dựng lưới (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("Xây dựng lưới (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("Xây dựng lưới lạnh")                   // Build cold mesh
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("Điều chỉnh chiều cao lưới")            // Adjust Mesh Height
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("Số lượng chiều cao")                   // Height Amount
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("Thẩm tra lưới")                        // Validate Mesh
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("Thẩm tra lưới (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("Thẩm tra lưới (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("Thẩm tra lưới tự chọn")                // validate custom mesh
-#define MSG_UBL_CONTINUE_MESH               _UxGT("Tiếp tục xây lưới bàn")                // Continue Bed Mesh
-#define MSG_UBL_MESH_LEVELING               _UxGT("Đang san lấp lưới")                    // Mesh Leveling
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("Đang san lấp 3-điểm")                  // 3-Point Leveling
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("Đang san lấp lưới phẳng")              // Grid (planar) Mesh Leveling
-#define MSG_UBL_MESH_LEVEL                  _UxGT("Làm bằng lưới")                        // Level Mesh
-#define MSG_UBL_SIDE_POINTS                 _UxGT("Điểm bên cạnh")                        // Side Points
-#define MSG_UBL_MAP_TYPE                    _UxGT("Loại bản đồ")                          // Map Type
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("Đầu ra bản đồ lưới")                   // Output Mesh Map
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("Đầu ra cho máy chủ")                   // Output for Host
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("Đầu ra cho CSV")                       // Output for CSV
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("Hỗ trợ lưới")                          // Off Printer Backup | backup mesh
-#define MSG_UBL_INFO_UBL                    _UxGT("Đầu ra thông tin UBL")                 // Output UBL Info
-#define MSG_EDIT_MESH                       _UxGT("Chỉnh sửa lưới")                       // Edit mesh
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("Số lượng lấp đầy")                     // Fill-in Amount
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("Tự lấp đầy")                           // Manual Fill-in
-#define MSG_UBL_SMART_FILLIN                _UxGT("Lấp đầy thông minh")                   // Smart Fill-in
-#define MSG_UBL_FILLIN_MESH                 _UxGT("Lưới lấp đầy")                         // Fill-in Mesh
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("Bác bỏ tất cả")                       // Invalidate All
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("Bác bỏ gần nhất")                     // Invalidate Closest
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("Chỉnh chính xác tất cả")               // Fine Tune ALl
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("Chỉnh chính xác gần nhất")             // Fine Tune Closest
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("Lưu trữ lưới")                         // Mesh Storage
-#define MSG_UBL_STORAGE_SLOT                _UxGT("Khe nhá»›")                              // Memory Slot
-#define MSG_UBL_LOAD_MESH                   _UxGT("Tải lưới bàn")                         // Load Bed Mesh
-#define MSG_UBL_SAVE_MESH                   _UxGT("Lưu lưới bàn")                         // Save Bed Mesh
-#define MSG_MESH_LOADED                     _UxGT("%i lưới được nạp")                     // Mesh %i loaded
-#define MSG_MESH_SAVED                      _UxGT("%i lưới đã lưu")
-#define MSG_NO_STORAGE                      _UxGT("Không lưu trữ")                        // No Storage
-#define MSG_UBL_SAVE_ERROR                  _UxGT("Điều sai: Lưu UBL")                    // Err: UBL Save
-#define MSG_UBL_RESTORE_ERROR               _UxGT("Điều Sai: Khôi Phục UBL")              // Err: UBL Restore
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Đầu Dò-Z Đã Ngừng")                    // Z-Offset Stopped
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("Bước-Từng-Bước UBL")                   // Step-By-Step UBL
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("Điều khiển LED");                       // LED Control
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("Đèn");                                  // Lights
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("Đèn định sẵn");                         // Light Presets
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("Đỏ");                                   // Red
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("Cam");                                  // Orange
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("Vàng");                                 // Yellow
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("Xanh Lá");                              // Green
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("Xanh");                                 // Blue
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("Xanh Đậm");                             // Indigo
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("Tím");                                  // Violet
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("Trắng");                                // White
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("Mặc định");                             // Default
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("Đèn Tự Chọn");                          // Custom Lights
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("Cường Độ Đỏ");                          // Red Intensity
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("Cường Độ Xanh Lá");                     // Green Intensity
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("Cường Độ Xanh");                        // Blue Intensity
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("Cường Độ Trắng");                       // White Intensity
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("độ sáng");                              // Brightness
 
-#define MSG_LED_CONTROL                     _UxGT("Điều khiển LED")                       // LED Control
-#define MSG_LEDS                            _UxGT("Đèn")                                  // Lights
-#define MSG_LED_PRESETS                     _UxGT("Đèn định sẵn")                         // Light Presets
-#define MSG_SET_LEDS_RED                    _UxGT("Đỏ")                                   // Red
-#define MSG_SET_LEDS_ORANGE                 _UxGT("Cam")                                  // Orange
-#define MSG_SET_LEDS_YELLOW                 _UxGT("Vàng")                                 // Yellow
-#define MSG_SET_LEDS_GREEN                  _UxGT("Xanh Lá")                              // Green
-#define MSG_SET_LEDS_BLUE                   _UxGT("Xanh")                                 // Blue
-#define MSG_SET_LEDS_INDIGO                 _UxGT("Xanh Đậm")                             // Indigo
-#define MSG_SET_LEDS_VIOLET                 _UxGT("Tím")                                  // Violet
-#define MSG_SET_LEDS_WHITE                  _UxGT("Trắng")                                // White
-#define MSG_SET_LEDS_DEFAULT                _UxGT("Mặc định")                             // Default
-#define MSG_CUSTOM_LEDS                     _UxGT("Đèn Tự Chọn")                          // Custom Lights
-#define MSG_INTENSITY_R                     _UxGT("Cường Độ Đỏ")                          // Red Intensity
-#define MSG_INTENSITY_G                     _UxGT("Cường Độ Xanh Lá")                     // Green Intensity
-#define MSG_INTENSITY_B                     _UxGT("Cường Độ Xanh")                        // Blue Intensity
-#define MSG_INTENSITY_W                     _UxGT("Cường Độ Trắng")                       // White Intensity
-#define MSG_LED_BRIGHTNESS                  _UxGT("độ sáng")                              // Brightness
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("Di chuyển...");                         // Moving
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("Giải phóng XY");                        // Free XY
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("Di chuyển X");                          // Move X
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("Di chuyển Y");
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("Di chuyển Z");
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("Máy đùn");                              // Extruder
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("Máy đùn ") LCD_STR_E0;                  // Extruder
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("Máy đùn ") LCD_STR_E1;                  // Extruder
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("Máy đùn ") LCD_STR_E2;                  // Extruder
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("Máy đùn ") LCD_STR_E3;                  // Extruder
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("Máy đùn ") LCD_STR_E4;                  // Extruder
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("Máy đùn ") LCD_STR_E5;                  // Extruder
+  PROGMEM Language_Str MSG_HOTEND_TOO_COLD                 = _UxGT("Đầu nóng quá lạnh");                    // Hotend too cold
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("Di chuyển 0.1mm");                      // Move 0.1mm
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("Di chuyển 1mm");                        // Move 1mm
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("Di chuyển 10mm");                       // Move 10mm
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("Tốc độ");                               // Speed
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("Z Bàn");
+  PROGMEM Language_Str MSG_NOZZLE                          = _UxGT("Đầu phun");                             // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_0                        = _UxGT("Đầu phun ") LCD_STR_N0;                 // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_1                        = _UxGT("Đầu phun ") LCD_STR_N1;                 // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_2                        = _UxGT("Đầu phun ") LCD_STR_N2;                 // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_3                        = _UxGT("Đầu phun ") LCD_STR_N3;                 // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_4                        = _UxGT("Đầu phun ") LCD_STR_N4;                 // Nozzle
+  PROGMEM Language_Str MSG_NOZZLE_5                        = _UxGT("Đầu phun ") LCD_STR_N5;                 // Nozzle
+  PROGMEM Language_Str MSG_BED                             = _UxGT("Bàn");                                  // bed
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("Tốc độ quạt");                          // fan speed
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("Tốc độ quạt 1");                        // fan speed
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("Tốc độ quạt 2");                        // fan speed
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("Tốc độ quạt 3");                        // fan speed
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("Tốc độ quạt phụ");                      // Extra fan speed
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("Tốc độ quạt phụ 1");                    // Extra fan speed
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("Tốc độ quạt phụ 2");                    // Extra fan speed
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("Tốc độ quạt phụ 3");                    // Extra fan speed
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("Lưu Lượng");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("Lưu Lượng ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("Lưu Lượng ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("Lưu Lượng ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("Lưu Lượng ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("Lưu Lượng ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("Lưu Lượng ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("Điều khiển");                           // Control
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" Đa");          // min
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" Thiểu");
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" Hệ Số");       // factor
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("Nhiệt độ tự động");                     // Autotemp
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("Bật");                                  // on
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("Tắt");                                  // off
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("Lá»±a");                                  // Select
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("Lá»±a ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("Lá»±a ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("Lá»±a ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("Lá»±a ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("Lá»±a ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("Lá»±a ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("Tăng Tốc");
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("Giật");
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("Giật-V") LCD_STR_A;
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("Giật-V") LCD_STR_B;
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("Giật-V") LCD_STR_C;
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("Giật-Ve");
+  PROGMEM Language_Str MSG_JUNCTION_DEVIATION              = _UxGT("Độ Lệch Chỗ Giao");                    // Junction Dev
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("Vận tốc");                              // velocity
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("VÄ‘a") LCD_STR_A;                        // Vmax
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("VÄ‘a") LCD_STR_B;                        // Vmax
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("VÄ‘a") LCD_STR_C;                        // Vmax
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("VÄ‘a") LCD_STR_E;                        // Vmax
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("VÄ‘a ") LCD_STR_E0;                      // Vmax
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("VÄ‘a ") LCD_STR_E1;                      // Vmax
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("VÄ‘a ") LCD_STR_E2;                      // Vmax
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("VÄ‘a ") LCD_STR_E3;                      // Vmax
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("VÄ‘a ") LCD_STR_E4;                      // Vmax
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("VÄ‘a ") LCD_STR_E5;                      // Vmax
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("Vthiểu");                               // Vmin
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("Vchuyển thiểu");                        // VTrav min
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("Sự tăng tốc");                          // Acceleration
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("Tăng tốc ca") LCD_STR_A;                // Amax
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("Tăng tốc ca") LCD_STR_B;                // Amax
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("Tăng tốc ca") LCD_STR_C;                // Amax
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("Tăng tốc ca") LCD_STR_E;                // Amax
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("Tăng tốc ca ") LCD_STR_E0;              // Amax
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("Tăng tốc ca ") LCD_STR_E1;              // Amax
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("Tăng tốc ca ") LCD_STR_E2;              // Amax
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("Tăng tốc ca ") LCD_STR_E3;              // Amax
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("Tăng tốc ca ") LCD_STR_E4;              // Amax
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("Tăng tốc ca ") LCD_STR_E5;              // Amax
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("TT-Rút");                               // A-retract
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("TT-Chuyển");                            // A-travel
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Bước/mm");                              // Steps
+  PROGMEM Language_Str MSG_A_STEPS                         = _UxGT("BÆ°á»›c") LCD_STR_A _UxGT("/mm");               // Asteps/mm
+  PROGMEM Language_Str MSG_B_STEPS                         = _UxGT("BÆ°á»›c") LCD_STR_B _UxGT("/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = _UxGT("BÆ°á»›c") LCD_STR_C _UxGT("/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("BÆ°á»›cE/mm");
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E0 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E1 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E2 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E3 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E4 _UxGT("/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("BÆ°á»›c ") LCD_STR_E5 _UxGT("/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Nhiệt độ");                             // Temperature
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("Chuyển động");                          // Motion
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Vật liệu in");                          // dây nhựa
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("E bằng mm³");                           // E in mm
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("Đường kính nhựa");                      // Fil. Dai.
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("Đường kính nhựa ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("Đường kính nhựa ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("Đường kính nhựa ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("Đường kính nhựa ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("Đường kính nhựa ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("Đường kính nhựa ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("Dỡ mm");                                // unload mm
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("Nạp mm");
+  PROGMEM Language_Str MSG_ADVANCE_K                       = _UxGT("K Cấp Cao");                            // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E0                    = _UxGT("K Cấp Cao ") LCD_STR_E0;                // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E1                    = _UxGT("K Cấp Cao ") LCD_STR_E1;                // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E2                    = _UxGT("K Cấp Cao ") LCD_STR_E2;                // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E3                    = _UxGT("K Cấp Cao ") LCD_STR_E3;                // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E4                    = _UxGT("K Cấp Cao ") LCD_STR_E4;                // Advance K
+  PROGMEM Language_Str MSG_ADVANCE_K_E5                    = _UxGT("K Cấp Cao ") LCD_STR_E5;                // Advance K
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Độ tương phản LCD");                    // LCD contrast
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Lưu các thiết lập");                    // Store settings
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Tải các cài đặt");                      // Load settings
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Khôi phục phòng hư");                   // Restore failsafe
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Khởi Tạo EEPROM");                      // Initialize EEPROM
+  PROGMEM Language_Str MSG_SD_UPDATE                       = _UxGT("Cập Nhật SD");                          // SD Update
+  PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Bặt Lại Máy In");
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Cập Nhật");                             // Refresh
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("Màn Hình Thông Tin");                   // Info screen
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Chuẩn bị");                             // Prepare
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("Điều Chỉnh");                           // Tune
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("Tạm dừng in");                          // Pause print
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("Tiếp tục in");                          // Resume print
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("NgÆ°Í€ng in");                             // Stop print
+  PROGMEM Language_Str MSG_OUTAGE_RECOVERY                 = _UxGT("Phục Hồi Mất Điện");                    // Outage Recovery
+  PROGMEM Language_Str MSG_CARD_MENU                       = _UxGT("In từ SD");                             // Print from SD
+  PROGMEM Language_Str MSG_NO_CARD                         = _UxGT("Không có thẻ SD");                      // No SD card
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("Ngủ...");                               // Sleep
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("Nhấn để tiếp tục...");                  // Click to resume (same as 'continue')
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("In tạm dừng");                          // print paused
+  PROGMEM Language_Str MSG_PRINTING                        = _UxGT("Đang in...");                           // printing
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("In đã hủy bỏ");                         // Print aborted
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("Không di chuyển.");                     // No move.
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("ĐÃ CHẾT. ");
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("ĐÃ NGỪNG. ");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("Rút mm");                               // Retract mm
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("Rút Trao.mm");                          // Swap Re.mm
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("Rút V");
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Nhảy mm");                              // hop
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("BỏRút mm");                             // UnRet mm
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("BỏRút T mm");                           // S UnRet mm
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("BỏRút V");                              // UnRet V
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("BỏRút T V");                            // S UnRet V
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("RútTựĐộng");                            // AutoRetr.
+  PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH            = _UxGT("Khoảng Cách Rút");                      // Retract Distance
+  PROGMEM Language_Str MSG_TOOL_CHANGE                     = _UxGT("Thay Đổi Công Cụ");                     // Tool Change
+  PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT               = _UxGT("Đưa Lên Z");                            // Z Raise
+  PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD          = _UxGT("Tốc Độ Tuôn Ra");                       // Prime Speed
+  PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD        = _UxGT("Tốc Độ Rút Lại");                       // Retract Speed
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("Thay dây nhựa");                        // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("Thay dây nhựa ") LCD_STR_E0;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("Thay dây nhựa ") LCD_STR_E1;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("Thay dây nhựa ") LCD_STR_E2;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("Thay dây nhựa ") LCD_STR_E3;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("Thay dây nhựa ") LCD_STR_E4;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("Thay dây nhựa ") LCD_STR_E5;            // change filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("Nạp dây nhựa");                         // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("Nạp dây nhựa ") LCD_STR_E0;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("Nạp dây nhựa ") LCD_STR_E1;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("Nạp dây nhựa ") LCD_STR_E2;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("Nạp dây nhựa ") LCD_STR_E3;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("Nạp dây nhựa ") LCD_STR_E4;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("Nạp dây nhựa ") LCD_STR_E5;             // load filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("Dỡ dây nhựa ") LCD_STR_E0;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("Dỡ dây nhựa ") LCD_STR_E1;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("Dỡ dây nhựa ") LCD_STR_E2;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("Dỡ dây nhựa ") LCD_STR_E3;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("Dỡ dây nhựa ") LCD_STR_E4;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("Dỡ dây nhựa ") LCD_STR_E5;              // unload filament
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Dỡ tất cả");                            // Unload All
+  PROGMEM Language_Str MSG_INIT_SDCARD                     = _UxGT("Khởi tạo thẻ SD ");                     // Init. SD card
+  PROGMEM Language_Str MSG_CHANGE_SDCARD                   = _UxGT("Thay thẻ SD");                          // Change SD card
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Đầu Dò Z qua bàn");                     // Z Probe past bed
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("Hệ số nghiêng");                        // Skew Factor
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTOUCH");                              // BLTouch
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("Tự kiểm tra BLTOUCH ");                 // BLTouch Self-Test
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("Bặt lại BLTouch");                      // Reset BLTouch
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("Đem BLTouch");                          // Deploy BLTouch
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("Cất BLTouch");                          // Stow BLTouch
+  PROGMEM Language_Str MSG_MANUAL_DEPLOY                   = _UxGT("Đem Đầu Dò-Z");                         // Deploy Z-Probe
+  PROGMEM Language_Str MSG_MANUAL_STOW                     = _UxGT("Cất Đầu Dò-Z");                         // Stow Z-Probe
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("Về nhà %s%s%s Trước");
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Đầu Dò Bù Đắp Z");                      // Probe Z Offset
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("Nhít X");                               // Babystep X
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("Nhít Y");
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("Nhít Z");
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("Hủy bỏ công tắc");                      // Endstop abort
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("Sưởi đầu phun không thành công");       // Heating failed
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED          = _UxGT("Sưởi bàn không thành công");            // Bed heating failed
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("Điều sai: nhiệt độ dư");                // Err: REDUNDANT TEMP
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("Vấn đề nhiệt");                         // THERMAL RUNAWAY | problem
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED             = _UxGT("Vấn đề nhiệt bàn");                     // BED THERMAL RUNAWAY
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("Điều sai: nhiệt độ tối đa");            // Err: MAXTEMP
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("Điều sai: nhiệt độ tối thiểu");         // Err: MINTEMP
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("Điều sai: nhiệt độ bàn tối đa");        // Err: MAXTEMP BED
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("Điều sai: nhiệt độ bàn tối thiểu");     // Err: MINTEMP BED
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("Về nhà XY Trước");                      // Home XY First
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("MÁY IN ĐÃ DỪNG LẠI");                   // PRINTER HALTED
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("Xin bặt lại");                          // Please reset
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("n");                                    // d - ngày - One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("g");                                    // h - giờ  - One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("p");                                    // m - phút - One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("Đang sưởi nóng...");                    // heating
+  PROGMEM Language_Str MSG_COOLING                         = _UxGT("Đang làm nguội...");                    // cooling
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("Đang sưởi nong bàn...");                // bed heating
+  PROGMEM Language_Str MSG_BED_COOLING                     = _UxGT("Đang làm nguội bàn...");                // bed cooling
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("Cân Chỉnh Delta");                      // Delta calibration
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("Chỉnh X lại");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("Chỉnh Y lại");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("Chỉnh Z lại");
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("Chỉnh Z Center");                       // Calibrate Center
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("Cài Đặt Delta");                        // Delta Settings
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("Cân Chỉnh Tự Động");                    // Auto Calibration
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("Đặt Chiều Cao Delta");                  // Set Delta Height
+  PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE        = _UxGT("Đầu Dò Z-Bù Đắp");                      // Probe Z-offset
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("Gậy Chéo");                             // Diag Rod
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("Chiều Cao");                            // Height
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("Bán Kính");                             // Radius
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("Về Máy In");
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("Thông Tin Máy In");                     // Printer Info
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("San lấp 3-Điểm");                       // 3-Point Leveling
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("San Lấp Tuyến Tính");                   // Linear Leveling
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("San Lấp Song Tuyến");                   // Bilinear Leveling
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("San Lấp Bàn Thống Nhất");               // Unified Bed Leveling
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("Lưới San Lấp");                         // Mesh Leveling
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("Thống Kê Máy In");                      // Printer Stats
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("Thông Tin Bo Mạch");                    // Board Info
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("Điện Trở Nhiệt");                       // Thermistors
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("Máy đùn");                              // Extruders
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("Baud");                                 // Baud
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("Giao Thức");                            // Protocol
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("Đèn Khuông");                           // Case light
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("Độ Sáng");                              // Light Brightness
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("Số In");                                // Print Count
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Đã hoàn thành");
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tổng số thời gian in");                // Total print time
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Thời gian việc lâu nhất");              // Longest job time
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Tổng số đùn");                          // Extruded total
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("In");                                   // prints
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("Đã hoàn thành");                        // Completed
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("Tổng số");                             // total
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("Dài nhất");                             // Longest
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("Đã ép đùn");
+  #endif
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("Nhiệt độ tối thiểu");                   // Min Temp
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("Nhiệt độ tối đa");                      // Max temp
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("Bộ nguồn");                             // PSU
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("Sức mạnh ổ đĩa");                       // Drive Strength
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("% trình điều khiển");                   // Driver %
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("Ghi DAC EEPROM");                       // DAC EEPROM Write
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("In tạm dừng");                          // PRINT PAUSED
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("Nạp dây nhựa");
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("Dỡ dây nhựa");                          // unload filament
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("Tùy chọn hồi phục:");                   // RESUME OPTIONS
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("Xả thêm");                              // Purge more
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("Tiếp tục");                             // continue
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  Đầu Phun: ");                         // Nozzle
+  PROGMEM Language_Str MSG_RUNOUT_SENSOR_ENABLE            = _UxGT("Cảm Biến Hết");                         // Runout Sensor
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("Sự nhà không thành công");              // Homing failed
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT(" không thành công");                    // Probing failed
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: Quá lạnh");
 
-#define MSG_MOVING                          _UxGT("Di chuyển...")                         // Moving
-#define MSG_FREE_XY                         _UxGT("Giải phóng XY")                        // Free XY
-#define MSG_MOVE_X                          _UxGT("Di chuyển X")                          // Move X
-#define MSG_MOVE_Y                          _UxGT("Di chuyển Y")
-#define MSG_MOVE_Z                          _UxGT("Di chuyển Z")
-#define MSG_MOVE_E                          _UxGT("Máy đùn")                              // Extruder
-#define MSG_HOTEND_TOO_COLD                 _UxGT("Đầu nóng quá lạnh")                    // Hotend too cold
-#define MSG_MOVE_01MM                       _UxGT("Di chuyển 0.1mm")                      // Move 0.1mm
-#define MSG_MOVE_1MM                        _UxGT("Di chuyển 1mm")                        // Move 1mm
-#define MSG_MOVE_10MM                       _UxGT("Di chuyển 10mm")                       // Move 10mm
-#define MSG_SPEED                           _UxGT("Tốc độ")                               // Speed
-#define MSG_BED_Z                           _UxGT("Z Bàn")
-#define MSG_NOZZLE                          _UxGT("Đầu phun")                             // Nozzle
-#define MSG_BED                             _UxGT("Bàn")                                  // bed
-#define MSG_FAN_SPEED                       _UxGT("Tốc độ quạt")                          // fan speed
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("Tốc độ quạt phụ")                      // Extra fan speed
-#define MSG_FLOW                            _UxGT("Lưu Lượng")
-#define MSG_CONTROL                         _UxGT("Điều khiển")                           // Control
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Đa")   // min
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Thiểu")
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Hệ Số") // factor
-#define MSG_AUTOTEMP                        _UxGT("Nhiệt độ tự động")                     // Autotemp
-#define MSG_LCD_ON                          _UxGT("Bật")                                  // on
-#define MSG_LCD_OFF                         _UxGT("Tắt")                                  // off
-#define MSG_PID_P                           _UxGT("PID-P")
-#define MSG_PID_I                           _UxGT("PID-I")
-#define MSG_PID_D                           _UxGT("PID-D")
-#define MSG_PID_C                           _UxGT("PID-C")
-#define MSG_SELECT                          _UxGT("Lá»±a")                                  // Select
-#define MSG_ACC                             _UxGT("Tăng Tốc")
-#define MSG_JERK                            _UxGT("Giật")
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("Giật-Va")
-  #define MSG_VB_JERK                       _UxGT("Giật-Vb")
-  #define MSG_VC_JERK                       _UxGT("Giật-Vc")
-#else
-  #define MSG_VA_JERK                       _UxGT("Giật-Vx")
-  #define MSG_VB_JERK                       _UxGT("Giật-Vy")
-  #define MSG_VC_JERK                       _UxGT("Giật-Vz")
-#endif
-#define MSG_VE_JERK                         _UxGT("Giật-Ve")
-#define MSG_JUNCTION_DEVIATION              _UxGT("Độ Lệch Chỗ Giao")                    // Junction Dev
-#define MSG_VELOCITY                        _UxGT("Vận tốc")                              // velocity
-#define MSG_VMAX                            _UxGT("VÄ‘a")                                  // Vmax
-#define MSG_VMIN                            _UxGT("Vthiểu")                               // Vmin
-#define MSG_VTRAV_MIN                       _UxGT("Vchuyển thiểu")                        // VTrav min
-#define MSG_ACCELERATION                    _UxGT("Sự tăng tốc")                          // Acceleration
-#define MSG_AMAX                            _UxGT("Tăng tốc ca")                          // Amax
-#define MSG_A_RETRACT                       _UxGT("TT-Rút")                               // A-retract
-#define MSG_A_TRAVEL                        _UxGT("TT-Chuyển")                            // A-travel
-#define MSG_STEPS_PER_MM                    _UxGT("Bước/mm")                              // Steps
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("BÆ°á»›cA/mm")                             // Asteps/mm
-  #define MSG_BSTEPS                        _UxGT("BÆ°á»›cB/mm")
-  #define MSG_CSTEPS                        _UxGT("BÆ°á»›cC/mm")
-#else
-  #define MSG_ASTEPS                        _UxGT("BÆ°á»›cX/mm")                             // Xsteps/mm
-  #define MSG_BSTEPS                        _UxGT("BÆ°á»›cY/mm")
-  #define MSG_CSTEPS                        _UxGT("BÆ°á»›cZ/mm")
-#endif
-#define MSG_ESTEPS                          _UxGT("BÆ°á»›cE/mm")
-#define MSG_E0_STEPS                        _UxGT("BÆ°á»›cE1/mm")
-#define MSG_E1_STEPS                        _UxGT("BÆ°á»›cE2/mm")
-#define MSG_E2_STEPS                        _UxGT("BÆ°á»›cE3/mm")
-#define MSG_E3_STEPS                        _UxGT("BÆ°á»›cE4/mm")
-#define MSG_E4_STEPS                        _UxGT("BÆ°á»›cE5/mm")
-#define MSG_E5_STEPS                        _UxGT("BÆ°á»›cE6/mm")
-#define MSG_TEMPERATURE                     _UxGT("Nhiệt độ")                             // Temperature
-#define MSG_MOTION                          _UxGT("Chuyển động")                          // Motion
-#define MSG_FILAMENT                        _UxGT("Vật liệu in")                          // dây nhựa
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("E bằng mm") MSG_CUBED                  // E in mm
-#define MSG_FILAMENT_DIAM                   _UxGT("Đường kính nhựa")                      // Fil. Dai.
-#define MSG_FILAMENT_UNLOAD                 _UxGT("Dỡ mm")                                // unload mm
-#define MSG_FILAMENT_LOAD                   _UxGT("Nạp mm")
-#define MSG_ADVANCE_K                       _UxGT("K Cấp Cao")                            // Advance K
-#define MSG_CONTRAST                        _UxGT("Độ tương phản LCD")                    // LCD contrast
-#define MSG_STORE_EEPROM                    _UxGT("Lưu các thiết lập")                    // Store settings
-#define MSG_LOAD_EEPROM                     _UxGT("Tải các cài đặt")                      // Load settings
-#define MSG_RESTORE_FAILSAFE                _UxGT("Khôi phục phòng hư")                   // Restore failsafe
-#define MSG_INIT_EEPROM                     _UxGT("Khởi Tạo EEPROM")                      // Initialize EEPROM
-#define MSG_SD_UPDATE                       _UxGT("Cập Nhật SD")                          // SD Update
-#define MSG_RESET_PRINTER                   _UxGT("Bặt Lại Máy In")
-#define MSG_REFRESH                         _UxGT("Cập Nhật")                             // Refresh
-#define MSG_WATCH                           _UxGT("Màn Hình Thông Tin")                   // Info screen
-#define MSG_PREPARE                         _UxGT("Chuẩn bị")                             // Prepare
-#define MSG_TUNE                            _UxGT("Điều Chỉnh")                           // Tune
-#define MSG_PAUSE_PRINT                     _UxGT("Tạm dừng in")                          // Pause print
-#define MSG_RESUME_PRINT                    _UxGT("Tiếp tục in")                          // Resume print
-#define MSG_STOP_PRINT                      _UxGT("NgÆ°Í€ng in")                             // Stop print
-#define MSG_OUTAGE_RECOVERY                 _UxGT("Phục Hồi Mất Điện")                    // Outage Recovery
-#define MSG_CARD_MENU                       _UxGT("In từ SD")                             // Print from SD
-#define MSG_NO_CARD                         _UxGT("Không có thẻ SD")                      // No SD card
-#define MSG_DWELL                           _UxGT("Ngủ...")                               // Sleep
-#define MSG_USERWAIT                        _UxGT("Nhấn để tiếp tục...")                  // Click to resume (same as 'continue')
-#define MSG_PRINT_PAUSED                    _UxGT("In tạm dừng")                          // print paused
-#define MSG_PRINTING                        _UxGT("Đang in...")                           // printing
-#define MSG_PRINT_ABORTED                   _UxGT("In đã hủy bỏ")                         // Print aborted
-#define MSG_NO_MOVE                         _UxGT("Không di chuyển.")                     // No move.
-#define MSG_KILLED                          _UxGT("ĐÃ CHẾT. ")
-#define MSG_STOPPED                         _UxGT("ĐÃ NGỪNG. ")
-#define MSG_CONTROL_RETRACT                 _UxGT("Rút mm")                               // Retract mm
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("Rút Trao.mm")                          // Swap Re.mm
-#define MSG_CONTROL_RETRACTF                _UxGT("Rút V")
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Nhảy mm")                              // hop
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("BỏRút mm")                             // UnRet mm
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("BỏRút T mm")                           // S UnRet mm
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("BỏRút V")                              // UnRet V
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("BỏRút T V")                            // S UnRet V
-#define MSG_AUTORETRACT                     _UxGT("RútTựĐộng")                            // AutoRetr.
-#define MSG_FILAMENT_SWAP_LENGTH            _UxGT("Khoảng Cách Rút")                      // Retract Distance
-#define MSG_TOOL_CHANGE                     _UxGT("Thay Đổi Công Cụ")                     // Tool Change
-#define MSG_TOOL_CHANGE_ZLIFT               _UxGT("Đưa Lên Z")                            // Z Raise
-#define MSG_SINGLENOZZLE_PRIME_SPD          _UxGT("Tốc Độ Tuôn Ra")                       // Prime Speed
-#define MSG_SINGLENOZZLE_RETRACT_SPD        _UxGT("Tốc Độ Rút Lại")                       // Retract Speed
-#define MSG_FILAMENTCHANGE                  _UxGT("Thay dây nhựa")                        // change filament
-#define MSG_FILAMENTLOAD                    _UxGT("Nạp dây nhựa")                         // load filament
-#define MSG_FILAMENTUNLOAD                  _UxGT("Dỡ dây nhựa")                          // unload filament
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("Dỡ tất cả")                            // Unload All
-#define MSG_INIT_SDCARD                     _UxGT("Khởi tạo thẻ SD ")                     // Init. SD card
-#define MSG_CHANGE_SDCARD                   _UxGT("Thay thẻ SD")                          // Change SD card
-#define MSG_ZPROBE_OUT                      _UxGT("Đầu Dò Z qua bàn")                     // Z Probe past bed
-#define MSG_SKEW_FACTOR                     _UxGT("Hệ số nghiêng")                        // Skew Factor
-#define MSG_BLTOUCH                         _UxGT("BLTOUCH")                              // BLTouch
-#define MSG_BLTOUCH_SELFTEST                _UxGT("Tự kiểm tra BLTOUCH ")                 // BLTouch Self-Test
-#define MSG_BLTOUCH_RESET                   _UxGT("Bặt lại BLTouch")                      // Reset BLTouch
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("Đem BLTouch")                          // Deploy BLTouch
-#define MSG_BLTOUCH_STOW                    _UxGT("Cất BLTouch")                          // Stow BLTouch
-#define MSG_MANUAL_DEPLOY                   _UxGT("Đem Đầu Dò-Z")                         // Deploy Z-Probe
-#define MSG_MANUAL_STOW                     _UxGT("Cất Đầu Dò-Z")                         // Stow Z-Probe
-#define MSG_HOME_FIRST                      _UxGT("Về nhà %s%s%s Trước")
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Đầu Dò Bù Đắp Z")                      // Probe Z Offset
-#define MSG_BABYSTEP_X                      _UxGT("Nhít X")                               // Babystep X
-#define MSG_BABYSTEP_Y                      _UxGT("Nhít Y")
-#define MSG_BABYSTEP_Z                      _UxGT("Nhít Z")
-#define MSG_ENDSTOP_ABORT                   _UxGT("Hủy bỏ công tắc")                      // Endstop abort
-#define MSG_HEATING_FAILED_LCD              _UxGT("Sưởi đầu phun không thành công")       // Heating failed
-#define MSG_HEATING_FAILED_LCD_BED          _UxGT("Sưởi bàn không thành công")            // Bed heating failed
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("Điều sai: nhiệt độ dư")                // Err: REDUNDANT TEMP
-#define MSG_THERMAL_RUNAWAY                 _UxGT("Vấn đề nhiệt")                         // THERMAL RUNAWAY | problem
-#define MSG_THERMAL_RUNAWAY_BED             _UxGT("Vấn đề nhiệt bàn")                     // BED THERMAL RUNAWAY
-#define MSG_ERR_MAXTEMP                     _UxGT("Điều sai: nhiệt độ tối đa")            // Err: MAXTEMP
-#define MSG_ERR_MINTEMP                     _UxGT("Điều sai: nhiệt độ tối thiểu")         // Err: MINTEMP
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("Điều sai: nhiệt độ bàn tối đa")        // Err: MAXTEMP BED
-#define MSG_ERR_MINTEMP_BED                 _UxGT("Điều sai: nhiệt độ bàn tối thiểu")     // Err: MINTEMP BED
-#define MSG_ERR_Z_HOMING                    _UxGT("Về nhà XY Trước")                      // Home XY First
-#define MSG_HALTED                          _UxGT("MÁY IN ĐÃ DỪNG LẠI")                   // PRINTER HALTED
-#define MSG_PLEASE_RESET                    _UxGT("Xin bặt lại")                          // Please reset
-#define MSG_SHORT_DAY                       _UxGT("n")                                    // d - ngày - One character only
-#define MSG_SHORT_HOUR                      _UxGT("g")                                    // h - giờ  - One character only
-#define MSG_SHORT_MINUTE                    _UxGT("p")                                    // m - phút - One character only
-#define MSG_HEATING                         _UxGT("Đang sưởi nóng...")                    // heating
-#define MSG_COOLING                         _UxGT("Đang làm nguội...")                    // cooling
-#define MSG_BED_HEATING                     _UxGT("Đang sưởi nong bàn...")                // bed heating
-#define MSG_BED_COOLING                     _UxGT("Đang làm nguội bàn...")                // bed cooling
-#define MSG_DELTA_CALIBRATE                 _UxGT("Cân Chỉnh Delta")                      // Delta calibration
-#define MSG_DELTA_CALIBRATE_X               _UxGT("Chỉnh X lại")
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("Chỉnh Y lại")
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("Chỉnh Z lại")
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("Chỉnh Z Center")                       // Calibrate Center
-#define MSG_DELTA_SETTINGS                  _UxGT("Cài Đặt Delta")                        // Delta Settings
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("Cân Chỉnh Tự Động")                    // Auto Calibration
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("Đặt Chiều Cao Delta")                  // Set Delta Height
-#define MSG_DELTA_Z_OFFSET_CALIBRATE        _UxGT("Đầu Dò Z-Bù Đắp")                      // Probe Z-offset
-#define MSG_DELTA_DIAG_ROD                  _UxGT("Gậy Chéo")                             // Diag Rod
-#define MSG_DELTA_HEIGHT                    _UxGT("Chiều Cao")                            // Height
-#define MSG_DELTA_RADIUS                    _UxGT("Bán Kính")                             // Radius
-#define MSG_INFO_MENU                       _UxGT("Về Máy In")
-#define MSG_INFO_PRINTER_MENU               _UxGT("Thông Tin Máy In")                     // Printer Info
-#define MSG_3POINT_LEVELING                 _UxGT("San lấp 3-Điểm")                       // 3-Point Leveling
-#define MSG_LINEAR_LEVELING                 _UxGT("San Lấp Tuyến Tính")                   // Linear Leveling
-#define MSG_BILINEAR_LEVELING               _UxGT("San Lấp Song Tuyến")                   // Bilinear Leveling
-#define MSG_UBL_LEVELING                    _UxGT("San Lấp Bàn Thống Nhất")               // Unified Bed Leveling
-#define MSG_MESH_LEVELING                   _UxGT("Lưới San Lấp")                         // Mesh Leveling
-#define MSG_INFO_STATS_MENU                 _UxGT("Thống Kê Máy In")                      // Printer Stats
-#define MSG_INFO_BOARD_MENU                 _UxGT("Thông Tin Bo Mạch")                    // Board Info
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("Điện Trở Nhiệt")                       // Thermistors
-#define MSG_INFO_EXTRUDERS                  _UxGT("Máy đùn")                              // Extruders
-#define MSG_INFO_BAUDRATE                   _UxGT("Baud")                                 // Baud
-#define MSG_INFO_PROTOCOL                   _UxGT("Giao Thức")                            // Protocol
-#define MSG_CASE_LIGHT                      _UxGT("Đèn Khuông")                           // Case light
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("Độ Sáng")                              // Light Brightness
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("Số In")                                // Print Count
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Đã hoàn thành")
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tổng số thời gian in")                // Total print time
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Thời gian việc lâu nhất")              // Longest job time
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Tổng số đùn")                          // Extruded total
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("In")                                   // prints
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("Đã hoàn thành")                        // Completed
-  #define MSG_INFO_PRINT_TIME               _UxGT("Tổng số")                             // total
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("Dài nhất")                             // Longest
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("Đã ép đùn")
-#endif
-#define MSG_INFO_MIN_TEMP                   _UxGT("Nhiệt độ tối thiểu")                   // Min Temp
-#define MSG_INFO_MAX_TEMP                   _UxGT("Nhiệt độ tối đa")                      // Max temp
-#define MSG_INFO_PSU                        _UxGT("Bộ nguồn")                             // PSU
-#define MSG_DRIVE_STRENGTH                  _UxGT("Sức mạnh ổ đĩa")                       // Drive Strength
-#define MSG_DAC_PERCENT                     _UxGT("% trình điều khiển")                   // Driver %
-#define MSG_DAC_EEPROM_WRITE                _UxGT("Ghi DAC EEPROM")                       // DAC EEPROM Write
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("In tạm dừng")                          // PRINT PAUSED
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("Nạp dây nhựa")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("Dỡ dây nhựa")                          // unload filament
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Tùy chọn hồi phục:")                   // RESUME OPTIONS
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("Xả thêm")                              // Purge more
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Tiếp tục")                             // continue
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  Đầu Phun: ")                         // Nozzle
-#define MSG_RUNOUT_SENSOR_ENABLE            _UxGT("Cảm Biến Hết")                         // Runout Sensor
-#define MSG_ERR_HOMING_FAILED               _UxGT("Sự nhà không thành công")              // Homing failed
-#define MSG_ERR_PROBING_FAILED              _UxGT(" không thành công")                    // Probing failed
-#define MSG_M600_TOO_COLD                   _UxGT("M600: Quá lạnh")
+  //
+  // Filament Change screens show up to 3 lines on a 4-line display
+  //                        ...or up to 2 lines on a 3-line display
+  //
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_2_LINE("Nhấn nút", "để tiếp tục in")); // Press button to resume print
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("Chờ cho sự", "thay đổi dây nhựa", "bắt đầu")); // wait for filament change to start
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("Đút dây nhựa vào", "và nhấn nút", "để tiếp tục")); // insert filament and press button to continue                       //
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("Nhấn nút", "để làm nóng đầu phun")); // Press button to heat nozzle
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("Đầu phun đang nóng lên", "Xin chờ...")); // Nozzle heating Please wait
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa ra"));   // Wait for filament unload
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa vào"));  // Wait for filament load
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("Chờ tro", "xả dây nhựa"));   // wait for filament purge
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_2_LINE("Nhấn nút để kết thúc", "xả dây nhựa")); // Click to finish dây nhựa purge
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("Chờ tro in", "tiếp tục...")); // Wait for print to resume
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING        = _UxGT(MSG_1_LINE("Nhấn nút để tiếp tục"));     // Click to continue
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("Xin chờ..."));
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("Chèn và nhấn"));             // Insert and Click
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_1_LINE("Nhấn để sưởi"));             // Click to heat
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("Đang sưởi nóng"));           // Heating
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("Đang dỡ ra..."));            // Ejecting
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("Đang nạp..."));              // Loading
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("Đang xả..."));               // Purging
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE    = _UxGT(MSG_1_LINE("Nhấn nút để kết thúc"));     // Click to finish
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("Đang tiếp tục..."));         // Resuming
+  #endif // LCD_HEIGHT < 4
 
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-//                        ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Nhấn nút")                             // Press button
-  #define MSG_ADVANCED_PAUSE_WAITING_2      _UxGT("để tiếp tục in")                       // to resume print
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Chờ cho sự")                           // wait for
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("thay đổi dây nhựa")                    // filament change
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("bắt đầu")                              // to start
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Đút dây nhựa vào")                     // insert filament
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("và nhấn nút")                          // and press button
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("để tiếp tục")                          // to continue
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Nhấn nút")                             // Press button
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("để làm nóng đầu phun")                 // to heat nozzle
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Đầu phun đang nóng lên")               // Nozzle heating
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("Xin chờ...")                           // Please wait
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Chờ tro")                              // Wait for
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("dây nhựa ra")                          // filament unload
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Chờ tro")
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("dây nhựa vào")
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Chờ tro")                              // wait for filament purge
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("xả dây nhựa")
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Nhấn nút để kết thúc")                 // Click to finish
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_2  _UxGT("xả dây nhựa")                          // dây nhựa purge
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Chờ tro in")                           // Wait for print to resume
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("tiếp tục...")
-#else // LCD_HEIGHT < 4
-  #define MSG_ADVANCED_PAUSE_WAITING_1      _UxGT("Nhấn nút để tiếp tục")                 // Click to continue
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("Xin chờ...")
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("Chèn và nhấn")                         // Insert and Click
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("Nhấn để sưởi")                         // Click to heat
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("Đang sưởi nóng")                       // Heating
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("Đang dỡ ra...")                        // Ejecting
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("Đang nạp...")                          // Loading
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("Đang xả...")                           // Purging
-  #define MSG_FILAMENT_CHANGE_CONT_PURGE_1  _UxGT("Nhấn nút để kết thúc")                 // Click to finish
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("Đang tiếp tục...")                     // Resuming
-#endif // LCD_HEIGHT < 4
-
-#define MSG_TMC_DRIVERS                     _UxGT("Trình điều khiển TMC")                 // TMC drivers
-#define MSG_TMC_CURRENT                     _UxGT("Dòng điện trình điều khiển")           // Driver current
-#define MSG_TMC_HYBRID_THRS                 _UxGT("Ngưỡng Hỗn Hợp")                       // Hybrid threshold
-#define MSG_TMC_HOMING_THRS                 _UxGT("Vô cảm biến")                          // Sensorless homing
-#define MSG_TMC_STEPPING_MODE               _UxGT("Chế độ từng bước")                     // Stepping mode
-#define MSG_TMC_STEALTH_ENABLED             _UxGT("CắtTàngHình được kích hoạt")           // StealthChop enabled
+  PROGMEM Language_Str MSG_TMC_DRIVERS                     = _UxGT("Trình điều khiển TMC");                 // TMC drivers
+  PROGMEM Language_Str MSG_TMC_CURRENT                     = _UxGT("Dòng điện trình điều khiển");           // Driver current
+  PROGMEM Language_Str MSG_TMC_HYBRID_THRS                 = _UxGT("Ngưỡng Hỗn Hợp");                       // Hybrid threshold
+  PROGMEM Language_Str MSG_TMC_HOMING_THRS                 = _UxGT("Vô cảm biến");                          // Sensorless homing
+  PROGMEM Language_Str MSG_TMC_STEPPING_MODE               = _UxGT("Chế độ từng bước");                     // Stepping mode
+  PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED             = _UxGT("CắtTàngHình được kích hoạt");           // StealthChop enabled
+}
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index ad0b1272df..a9286b0f48 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -28,357 +28,463 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_zh_CN {
+  using namespace Language_en;  // Inherit undefined strings from English
 
-#define CHARSIZE 3
+  constexpr uint8_t    CHARSIZE                            = 3;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Simplified Chinese");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT("已就绪.")  //" ready."
-#define MSG_BACK                            _UxGT("返回")         // ”Back“
-#define MSG_MEDIA_INSERTED                  _UxGT("存储卡已插入")  //"Card inserted"
-#define MSG_MEDIA_REMOVED                   _UxGT("存储卡被拔出")  //"Card removed"
-#define MSG_LCD_ENDSTOPS                    _UxGT("挡块")  //"Endstops" // Max length 8 characters
-#define MSG_MAIN                            _UxGT("主菜单")  //"Main"
-#define MSG_AUTOSTART                       _UxGT("自动开始")  //"Autostart"
-#define MSG_DISABLE_STEPPERS                _UxGT("关闭步进电机")  //"Disable steppers"
-#define MSG_DEBUG_MENU                      _UxGT("调试菜单")    // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST               _UxGT("进度条测试")  // "Progress Bar Test"
-#define MSG_AUTO_HOME                       _UxGT("回原点")  //"Auto home"
-#define MSG_AUTO_HOME_X                     _UxGT("回X原位")  //"Home X"
-#define MSG_AUTO_HOME_Y                     _UxGT("回Y原位")  //"Home Y"
-#define MSG_AUTO_HOME_Z                     _UxGT("回Z原位")  //"Home Z"
-#define MSG_LEVEL_BED_HOMING                _UxGT("平台调平XYZ归原位")  //"Homing XYZ"
-#define MSG_LEVEL_BED_WAITING               _UxGT("单击开始热床调平")  //"Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("下个热床调平点")  //"Next Point"
-#define MSG_LEVEL_BED_DONE                  _UxGT("完成热床调平")  //"Leveling Done!"
-#define MSG_Z_FADE_HEIGHT                   _UxGT("淡出高度")     // "Fade Height"
-#define MSG_SET_HOME_OFFSETS                _UxGT("设置原点偏移")  //"Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("偏移已启用")  //"Offsets applied"
-#define MSG_SET_ORIGIN                      _UxGT("设置原点")  //"Set origin"
-#define MSG_PREHEAT_1                       _UxGT("预热" PREHEAT_1_LABEL)  //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")  //MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" 全部")  //MSG_PREHEAT_1 " All"
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" 热床")  //MSG_PREHEAT_1 " Bed"
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" 设置")  //MSG_PREHEAT_1 " conf"
-#define MSG_PREHEAT_2                       _UxGT("预热" PREHEAT_2_LABEL)  //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")  //MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" 全部")  //MSG_PREHEAT_2 " All"
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" 热床")  //MSG_PREHEAT_2 " Bed"
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" 设置")  //MSG_PREHEAT_2 " conf"
-#define MSG_COOLDOWN                        _UxGT("降温")  //"Cooldown"
-#define MSG_SWITCH_PS_ON                    _UxGT("电源打开")  //"Switch power on"
-#define MSG_SWITCH_PS_OFF                   _UxGT("电源关闭")  //"Switch power off"
-#define MSG_EXTRUDE                         _UxGT("挤出")  //"Extrude"
-#define MSG_RETRACT                         _UxGT("回抽")  //"Retract"
-#define MSG_MOVE_AXIS                       _UxGT("移动轴")  //"Move axis"
-#define MSG_BED_LEVELING                    _UxGT("调平热床")  //"Bed leveling"
-#define MSG_LEVEL_BED                       _UxGT("调平热床")  //"Level bed"
-#define MSG_LEVEL_CORNERS                   _UxGT("调平边角") // "Level corners"
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT("已就绪.");     //" ready."
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("返回");     // ”Back“
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("存储卡已插入");     //"Card inserted"
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("存储卡被拔出");     //"Card removed"
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("挡块");     //"Endstops" // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("主菜单");     //"Main"
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("自动开始");     //"Autostart"
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("关闭步进电机");     //"Disable steppers"
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("调试菜单");     // "Debug Menu"
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("进度条测试");     // "Progress Bar Test"
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("回原点");     //"Auto home"
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("回X原位");     //"Home X"
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("回Y原位");     //"Home Y"
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("回Z原位");     //"Home Z"
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("平台调平XYZ归原位");     //"Homing XYZ"
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("单击开始热床调平");     //"Click to Begin"
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("下个热床调平点");     //"Next Point"
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("完成热床调平");     //"Leveling Done!"
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("淡出高度");     // "Fade Height"
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("设置原点偏移");     //"Set home offsets"
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("偏移已启用");     //"Offsets applied"
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("设置原点");     //"Set origin"
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("预热 ") PREHEAT_1_LABEL;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N0;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N1;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N2;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N3;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N4;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N5;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴");     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N0;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N1;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N2;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N3;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N4;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N5;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 全部");     //MSG_PREHEAT_1 " All"
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 热床");     //MSG_PREHEAT_1 " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 设置");     //MSG_PREHEAT_1 " conf"
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("预热 ") PREHEAT_2_LABEL;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N0;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N1;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N2;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N3;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N4;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N5;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴");     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N0;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N1;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N2;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N3;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N4;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N5;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 全部");     //MSG_PREHEAT_2 " All"
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 热床");     //MSG_PREHEAT_2 " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 设置");     //MSG_PREHEAT_2 " conf"
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("降温");     //"Cooldown"
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("电源打开");     //"Switch power on"
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("电源关闭");     //"Switch power off"
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("挤出");     //"Extrude"
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("回抽");     //"Retract"
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("移动轴");     //"Move axis"
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("调平热床");     //"Bed leveling"
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("调平热床");     //"Level bed"
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("调平边角");     // "Level corners"
 
-#define MSG_NEXT_CORNER                     _UxGT("下个边角") // "Next corner"
-#define MSG_EDIT_MESH                       _UxGT("编辑网格") // "Edit Mesh"
-#define MSG_EDITING_STOPPED                 _UxGT("网格编辑已停止") // "Mesh Editing Stopped"
-#define MSG_USER_MENU                       _UxGT("定制命令") // "Custom Commands"
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("下个边角");     // "Next corner"
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("编辑网格");     // "Edit Mesh"
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("网格编辑已停止");     // "Mesh Editing Stopped"
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("定制命令");     // "Custom Commands"
 
-#define MSG_UBL_DOING_G29                   _UxGT("执行G29") // "Doing G29"
-#define MSG_UBL_TOOLS                       _UxGT("UBL工具") // "UBL Tools"
-#define MSG_UBL_LEVEL_BED                   _UxGT("统一热床调平(UBL)") // "Unified Bed Leveling"
-#define MSG_UBL_MANUAL_MESH                 _UxGT("手工创设网格") // "Manually Build Mesh"
-#define MSG_UBL_BC_INSERT                   _UxGT("放置垫片并测量") // "Place shim & measure"
-#define MSG_UBL_BC_INSERT2                  _UxGT("测量") // "Measure"
-#define MSG_UBL_BC_REMOVE                   _UxGT("移除并测量热床") // "Remove & measure bed"
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("移动到下一个") // "Moving to next"
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("激活UBL") // "Activate UBL"
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("关闭UBL") // "Deactivate UBL"
-#define MSG_UBL_SET_TEMP_BED                _UxGT("设置热床温度") // "Bed Temp"
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("热端温度") // "Hotend Temp"
-#define MSG_UBL_MESH_EDIT                   _UxGT("网格编辑") // "Mesh Edit"
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("编辑客户网格") // "Edit Custom Mesh"
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("细调网格") // "Fine Tuning Mesh"
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("完成编辑网格") // "Done Editing Mesh"
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("创设客户网格") // "Build Custom Mesh"
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("创设网格") // "Build Mesh"
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("创设" PREHEAT_1_LABEL "网格") // "Build PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("创设" PREHEAT_2_LABEL "网格") // "Build PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("创设冷网格") // "Build Cold Mesh"
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("调整网格高度") // "Adjust Mesh Height"
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("高度合计") // "Height Amount"
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("批准网格") // "Validate Mesh"
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("批准" PREHEAT_1_LABEL "网格") // "Validate PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("批准" PREHEAT_2_LABEL "网格") // "Validate PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("批准客户网格") // "Validate Custom Mesh"
-#define MSG_UBL_CONTINUE_MESH               _UxGT("继续热床网格") // "Continue Bed Mesh"
-#define MSG_UBL_MESH_LEVELING               _UxGT("网格调平") // "Mesh Leveling"
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("三点调平") // "3-Point Leveling"
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("格子网格调平") // "Grid Mesh Leveling"
-#define MSG_UBL_MESH_LEVEL                  _UxGT("调平网格") // "Level Mesh"
-#define MSG_UBL_SIDE_POINTS                 _UxGT("边点") // "Side Points"
-#define MSG_UBL_MAP_TYPE                    _UxGT("图类型") // "Map Type"
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("输出网格图") // "Output Mesh Map"
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("输出到主机") // "Output for Host"
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("输出到CSV") // "Output for CSV"
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("输出到备份") // "Off Printer Backup"
-#define MSG_UBL_INFO_UBL                    _UxGT("输出UBL信息") // "Output UBL Info"
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("填充合计") // "Fill-in Amount"
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("手工填充") // "Manual Fill-in"
-#define MSG_UBL_SMART_FILLIN                _UxGT("聪明填充") // "Smart Fill-in"
-#define MSG_UBL_FILLIN_MESH                 _UxGT("填充网格") // "Fill-in Mesh"
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("作废所有的") // "Invalidate All"
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("作废最近的") // "Invalidate Closest"
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("细调所有的") // "Fine Tune All"
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("细调最近的") // "Fine Tune Closest"
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("网格存储") // "Mesh Storage"
-#define MSG_UBL_STORAGE_SLOT                _UxGT("存储槽") // "Memory Slot"
-#define MSG_UBL_LOAD_MESH                   _UxGT("装载热床网格") // "Load Bed Mesh"
-#define MSG_UBL_SAVE_MESH                   _UxGT("保存热床网格") // "Save Bed Mesh"
-#define MSG_MESH_LOADED                     _UxGT("网格 %i 已装载") // "Mesh %i loaded"
-#define MSG_MESH_SAVED                      _UxGT("网格 %i 已保存") // "Mesh %i saved"
-#define MSG_UBL_NO_STORAGE                  _UxGT("没有存储") // "No storage"
-#define MSG_UBL_SAVE_ERROR                  _UxGT("错误: UBL保存") // "Err: UBL Save"
-#define MSG_UBL_RESTORE_ERROR               _UxGT("错误: UBL还原") // "Err: UBL Restore"
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z偏移已停止") // "Z-Offset Stopped"
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("一步步UBL") // "Step-By-Step UBL"
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("执行G29");     // "Doing G29"
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL工具");     // "UBL Tools"
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("统一热床调平(UBL)");     // "Unified Bed Leveling"
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("手工创设网格");     // "Manually Build Mesh"
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("放置垫片并测量");     // "Place shim & measure"
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("测量");     // "Measure"
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("移除并测量热床");     // "Remove & measure bed"
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("移动到下一个");     // "Moving to next"
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("激活UBL");     // "Activate UBL"
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("关闭UBL");     // "Deactivate UBL"
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("设置热床温度");     // "Bed Temp"
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("热端温度");     // "Hotend Temp"
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("网格编辑");     // "Mesh Edit"
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("编辑客户网格");     // "Edit Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("细调网格");     // "Fine Tuning Mesh"
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("完成编辑网格");     // "Done Editing Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("创设客户网格");     // "Build Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("创设网格");     // "Build Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("创设 ") PREHEAT_1_LABEL _UxGT(" 网格");     // "Build PREHEAT_1_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("创设 ") PREHEAT_2_LABEL _UxGT(" 网格");     // "Build PREHEAT_2_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("创设冷网格");     // "Build Cold Mesh"
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("调整网格高度");     // "Adjust Mesh Height"
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("高度合计");     // "Height Amount"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("批准网格");     // "Validate Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("批准 ") PREHEAT_1_LABEL _UxGT(" 网格");     // "Validate PREHEAT_1_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("批准 ") PREHEAT_2_LABEL _UxGT(" 网格");     // "Validate PREHEAT_2_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("批准客户网格");     // "Validate Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("继续热床网格");     // "Continue Bed Mesh"
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("网格调平");     // "Mesh Leveling"
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("三点调平");     // "3-Point Leveling"
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("格子网格调平");     // "Grid Mesh Leveling"
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("调平网格");     // "Level Mesh"
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("边点");     // "Side Points"
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("图类型");     // "Map Type"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("输出网格图");     // "Output Mesh Map"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("输出到主机");     // "Output for Host"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("输出到CSV");     // "Output for CSV"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("输出到备份");     // "Off Printer Backup"
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("输出UBL信息");     // "Output UBL Info"
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("填充合计");     // "Fill-in Amount"
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("手工填充");     // "Manual Fill-in"
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("聪明填充");     // "Smart Fill-in"
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("填充网格");     // "Fill-in Mesh"
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("作废所有的");     // "Invalidate All"
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("作废最近的");     // "Invalidate Closest"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("细调所有的");     // "Fine Tune All"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("细调最近的");     // "Fine Tune Closest"
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("网格存储");     // "Mesh Storage"
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存储槽");     // "Memory Slot"
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("装载热床网格");     // "Load Bed Mesh"
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存热床网格");     // "Save Bed Mesh"
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 网格 %i 已装载");     // "Mesh %i loaded"
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 网格 %i 已保存");     // "Mesh %i saved"
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("没有存储");     // "No storage"
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("错误: UBL保存");     // "Err: UBL Save"
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("错误: UBL还原");     // "Err: UBL Restore"
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z偏移已停止");     // "Z-Offset Stopped"
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("一步步UBL");     // "Step-By-Step UBL"
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1. 创设冷网格");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2. 聪明填充");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3. 批准网格");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4. 细调所有的");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5. 批准网格");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6. 细调所有的");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7. 保存热床网格");
 
-#define MSG_LED_CONTROL                     _UxGT("灯管控制") // "LED Control")
-#define MSG_LEDS                            _UxGT("灯") // "Lights")
-#define MSG_LED_PRESETS                     _UxGT("灯预置") // "Light Presets")
-#define MSG_SET_LEDS_RED                    _UxGT("红") // "Red")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("æ©™") // "Orange")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("黄") // "Yellow")
-#define MSG_SET_LEDS_GREEN                  _UxGT("绿") // "Green")
-#define MSG_SET_LEDS_BLUE                   _UxGT("蓝") // "Blue")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("青") // "Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("ç´«") // "Violet")
-#define MSG_SET_LEDS_WHITE                  _UxGT("白") // "White")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("缺省") // "Default")
-#define MSG_CUSTOM_LEDS                     _UxGT("定制灯") // "Custom Lights")
-#define MSG_INTENSITY_R                     _UxGT("红饱和度") // "Red Intensity")
-#define MSG_INTENSITY_G                     _UxGT("绿饱和度") // "Green Intensity")
-#define MSG_INTENSITY_B                     _UxGT("蓝饱和度") // "Blue Intensity")
-#define MSG_INTENSITY_W                     _UxGT("白饱和度") // "White Intensity")
-#define MSG_LED_BRIGHTNESS                  _UxGT("亮度") // "Brightness")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("灯管控制");     // "LED Control")
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("灯");     // "Lights")
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("灯预置");     // "Light Presets")
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("红");     // "Red")
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("æ©™");     // "Orange")
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("黄");     // "Yellow")
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("绿");     // "Green")
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("蓝");     // "Blue")
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("青");     // "Indigo")
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("ç´«");     // "Violet")
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("白");     // "White")
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("缺省");     // "Default")
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("定制灯");     // "Custom Lights")
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("红饱和度");     // "Red Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("绿饱和度");     // "Green Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("蓝饱和度");     // "Blue Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("白饱和度");     // "White Intensity")
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("亮度");     // "Brightness")
 
-#define MSG_MOVING                          _UxGT("移动 ...") // "Moving...")
-#define MSG_FREE_XY                         _UxGT("释放 XY") // "Free XY")
-#define MSG_MOVE_X                          _UxGT("移动X")  //"Move X"
-#define MSG_MOVE_Y                          _UxGT("移动Y")  //"Move Y"
-#define MSG_MOVE_Z                          _UxGT("移动Z")  //"Move Z"
-#define MSG_MOVE_E                          _UxGT("挤出机")  //"Extruder"
-#define MSG_MOVE_Z_DIST                     _UxGT("移动 %s mm")  //"Move 0.025mm"
-#define MSG_MOVE_01MM                       _UxGT("移动 0.1 mm")  //"Move 0.1mm"
-#define MSG_MOVE_1MM                        _UxGT("移动 1 mm")  //"Move 1mm"
-#define MSG_MOVE_10MM                       _UxGT("移动 10 mm")  //"Move 10mm"
-#define MSG_SPEED                           _UxGT("速率")  //"Speed"
-#define MSG_BED_Z                           _UxGT("热床Z")  //"Bed Z"
-#define MSG_NOZZLE                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 喷嘴")  //"Nozzle" 噴嘴
-#define MSG_BED                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 热床")  //"Bed"
-#define MSG_FAN_SPEED                       _UxGT("风扇速率")  //"Fan speed"
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("额外风扇速率") // "Extra fan speed"
-#define MSG_FLOW                            _UxGT("挤出速率")  //"Flow"
-#define MSG_CONTROL                         _UxGT("控制")  //"Control"
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最小") //" " LCD_STR_THERMOMETER " Min"
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最大")  //" " LCD_STR_THERMOMETER " Max"
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" å› æ•°")  //" " LCD_STR_THERMOMETER " Fact"
-#define MSG_AUTOTEMP                        _UxGT("自动控温")  //"Autotemp"
-#define MSG_LCD_ON                          _UxGT("å¼€")  //"On"
-#define MSG_LCD_OFF                         _UxGT("å…³")  //"Off"
-#define MSG_PID_P                           _UxGT("PID-P")  //"PID-P"
-#define MSG_PID_I                           _UxGT("PID-I")  //"PID-I"
-#define MSG_PID_D                           _UxGT("PID-D")  //"PID-D"
-#define MSG_PID_C                           _UxGT("PID-C")  //"PID-C"
-#define MSG_SELECT                          _UxGT("选择")  //"Select"
-#define MSG_ACC                             _UxGT("加速度")  //"Accel" acceleration
-#define MSG_JERK                            _UxGT("抖动速率")  // "Jerk"
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("A轴抖动速率")  //"Va-jerk"
-  #define MSG_VB_JERK                       _UxGT("B轴抖动速率")  //"Vb-jerk"
-  #define MSG_VC_JERK                       _UxGT("C轴抖动速率")  //"Vc-jerk"
-#else
-  #define MSG_VA_JERK                       _UxGT("X轴抖动速率")  //"Vx-jerk"
-  #define MSG_VB_JERK                       _UxGT("Y轴抖动速率")  //"Vy-jerk"
-  #define MSG_VC_JERK                       _UxGT("Z轴抖动速率")  //"Vz-jerk"
-#endif
-#define MSG_VE_JERK                         _UxGT("挤出机抖动速率")  //"Ve-jerk"
-#define MSG_VELOCITY                        _UxGT("速度")          // "Velocity"
-#define MSG_VMAX                            _UxGT("最大进料速率")  //"Vmax " max_feedrate_mm_s
-#define MSG_VMIN                            _UxGT("最小进料速率")  //"Vmin"  min_feedrate_mm_s
-#define MSG_VTRAV_MIN                       _UxGT("最小移动速率")  //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
-#define MSG_ACCELERATION                    _UxGT("加速度")       // "Acceleration"
-#define MSG_AMAX                            _UxGT("最大打印加速度")  //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
-#define MSG_A_RETRACT                       _UxGT("收进加速度")  //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
-#define MSG_A_TRAVEL                        _UxGT("非打印移动加速度")  //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-#define MSG_STEPS_PER_MM                    _UxGT("轴步数/mm")  //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A轴步数/mm")  //"Asteps/mm"
-  #define MSG_BSTEPS                        _UxGT("B轴步数/mm")  //"Bsteps/mm"
-  #define MSG_CSTEPS                        _UxGT("C轴步数/mm")  //"Csteps/mm"
-#else
-  #define MSG_ASTEPS                        _UxGT("X轴步数/mm")  //"Xsteps/mm"
-  #define MSG_BSTEPS                        _UxGT("Y轴步数/mm")  //"Ysteps/mm"
-  #define MSG_CSTEPS                        _UxGT("Z轴步数/mm")  //"Zsteps/mm"
-#endif
-#define MSG_ESTEPS                          _UxGT("挤出机步数/mm")  //"Esteps/mm"
-#define MSG_E0_STEPS                        _UxGT("挤出机1步数/mm") //"E1steps/mm"
-#define MSG_E1_STEPS                        _UxGT("挤出机2步数/mm") //"E2steps/mm"
-#define MSG_E2_STEPS                        _UxGT("挤出机3步数/mm") //"E3steps/mm"
-#define MSG_E3_STEPS                        _UxGT("挤出机4步数/mm") //"E4steps/mm"
-#define MSG_E4_STEPS                        _UxGT("挤出机5步数/mm") //"E5steps/mm"
-#define MSG_E5_STEPS                        _UxGT("挤出机6步数/mm") //"E6steps/mm"
-#define MSG_TEMPERATURE                     _UxGT("温度")  //"Temperature"
-#define MSG_MOTION                          _UxGT("运动")  //"Motion"
-#define MSG_FILAMENT                        _UxGT("丝料测容")  //"Filament" menu_advanced_filament
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("测容积mm³")  //"E in mm3" volumetric_enabled
-#define MSG_FILAMENT_DIAM                   _UxGT("丝料直径")  //"Fil. Dia."
-#define MSG_FILAMENT_UNLOAD                 _UxGT("卸载 mm") // "Unload mm"
-#define MSG_FILAMENT_LOAD                   _UxGT("装载 mm")   // "Load mm"
-#define MSG_ADVANCE_K                       _UxGT("Advance K") // "Advance K"
-#define MSG_CONTRAST                        _UxGT("LCD对比度")  //"LCD contrast"
-#define MSG_STORE_EEPROM                    _UxGT("保存设置")  //"Store memory"
-#define MSG_LOAD_EEPROM                     _UxGT("装载设置")  //"Load memory"
-#define MSG_RESTORE_FAILSAFE                _UxGT("恢复安全值")  //"Restore failsafe"
-#define MSG_INIT_EEPROM                     _UxGT("初始化设置") // "Initialize EEPROM"
-#define MSG_REFRESH                         _UxGT("刷新")  //"Refresh"
-#define MSG_WATCH                           _UxGT("信息屏")  //"Info screen"
-#define MSG_PREPARE                         _UxGT("准备")  //"Prepare"
-#define MSG_TUNE                            _UxGT("调整")  //"Tune"
-#define MSG_PAUSE_PRINT                     _UxGT("暂停打印")  //"Pause print"
-#define MSG_RESUME_PRINT                    _UxGT("恢复打印")  //"Resume print"
-#define MSG_STOP_PRINT                      _UxGT("停止打印")  //"Stop print"
-#define MSG_MEDIA_MENU                      _UxGT("从存储卡上打印")  //"Print from SD"
-#define MSG_NO_MEDIA                        _UxGT("无存储卡")  //"No SD card"
-#define MSG_DWELL                           _UxGT("休眠中 ...")  //"Sleep..."
-#define MSG_USERWAIT                        _UxGT("点击继续 ...")  //"Click to resume..."
-#define MSG_PRINT_PAUSED                    _UxGT("暫停打印") // "Print paused"
-#define MSG_PRINT_ABORTED                   _UxGT("已取消打印")  //"Print aborted"
-#define MSG_NO_MOVE                         _UxGT("无移动")  //"No move."
-#define MSG_KILLED                          _UxGT("已杀掉")  //"KILLED. "
-#define MSG_STOPPED                         _UxGT("已停止")  //"STOPPED. "
-#define MSG_CONTROL_RETRACT                 _UxGT("回抽长度mm")  //"Retract mm" retract_length, retract length (positive mm)
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("换手回抽长度mm")  //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
-#define MSG_CONTROL_RETRACTF                _UxGT("回抽速率mm/s")  //"Retract  V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Hop mm")  //"Hop mm" retract_zraise, retract Z-lift
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("回抽恢复长度mm")  //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("换手回抽恢复长度mm")  //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("回抽恢复后进料速率mm/s")  //"UnRet  V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V") // "S UnRet V"
-#define MSG_AUTORETRACT                     _UxGT("自动抽回")  //"AutoRetr." autoretract_enabled,
-#define MSG_FILAMENTCHANGE                  _UxGT("更换丝料")  //"Change filament"
-#define MSG_FILAMENTLOAD                    _UxGT("装载丝料") // "Load filament"
-#define MSG_FILAMENTUNLOAD                  _UxGT("卸载丝料") // "Unload filament"
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("卸载全部") // "Unload All"
-#define MSG_INIT_MEDIA                      _UxGT("初始化存储卡")  //"Init. SD card"
-#define MSG_CHANGE_MEDIA                    _UxGT("更换存储卡")  //"Change SD card"
-#define MSG_ZPROBE_OUT                      _UxGT("Z探针在热床之外")  //"Z probe out. bed" Z probe is not within the physical limits
-#define MSG_SKEW_FACTOR                     _UxGT("偏斜因数") // "Skew Factor"
-#define MSG_BLTOUCH                         _UxGT("BLTouch")     // "BLTouch"
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch 自检") // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET                   _UxGT("重置BLTouch")  // "Reset BLTouch"
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("部署BLTouch") // "Deploy BLTouch"
-#define MSG_BLTOUCH_STOW                    _UxGT("装载BLTouch")   // "Stow BLTouch"
-#define MSG_HOME_FIRST                      _UxGT("归位 %s%s%s 先")  //"Home ... first"
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z偏移")  //"Z Offset"
-#define MSG_BABYSTEP_X                      _UxGT("微量调整X轴")  //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
-#define MSG_BABYSTEP_Y                      _UxGT("微量调整Y轴")  //"Babystep Y"
-#define MSG_BABYSTEP_Z                      _UxGT("微量调整Z轴")  //"Babystep Z"
-#define MSG_ENDSTOP_ABORT                   _UxGT("挡块终止")  //"Endstop abort"
-#define MSG_HEATING_FAILED_LCD              _UxGT("加热失败")  //"Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("错误:REDUNDANT TEMP")  //"Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY                 _UxGT("温控失控")  //"THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP                     _UxGT("错误:最高温度")  //"Err: MAXTEMP"
-#define MSG_ERR_MINTEMP                     _UxGT("错误:最低温度")  //"Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("错误:最高热床温度")  //"Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED                 _UxGT("错误:最低热床温度")  //"Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING                    _UxGT("归位 XY 先")   // "Home XY First"
-#define MSG_HALTED                          _UxGT("打印停机")  //"PRINTER HALTED"
-#define MSG_PLEASE_RESET                    _UxGT("请重置")  //"Please reset"
-#define MSG_SHORT_DAY                       _UxGT("天")  //"d" // One character only
-#define MSG_SHORT_HOUR                      _UxGT("æ—¶")  //"h" // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("分")  //"m" // One character only
-#define MSG_HEATING                         _UxGT("加热中 ...")  //"Heating..."
-#define MSG_BED_HEATING                     _UxGT("加热热床中 ...")  //"Bed Heating..."
-#define MSG_DELTA_CALIBRATE                 _UxGT("⊿校准")  //"Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X               _UxGT("⊿校准X")  //"Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("⊿校准Y")  //"Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("⊿校准Z")  //"Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("⊿校准中心")  //"Calibrate Center"
-#define MSG_DELTA_SETTINGS                  _UxGT("⊿设置") // "Delta Settings"
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("⊿自动校准") // "Auto Calibration"
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("设置⊿高度") // "Set Delta Height"
-#define MSG_DELTA_DIAG_ROD                  _UxGT("⊿斜柱") // "Diag Rod"
-#define MSG_DELTA_HEIGHT                    _UxGT("⊿高度") // "Height"
-#define MSG_DELTA_RADIUS                    _UxGT("⊿半径") // "Radius"
-#define MSG_INFO_MENU                       _UxGT("关于打印机")  //"About Printer"
-#define MSG_INFO_PRINTER_MENU               _UxGT("打印机信息")  //"Printer Info"
-#define MSG_3POINT_LEVELING                 _UxGT("三点调平") // "3-Point Leveling"
-#define MSG_LINEAR_LEVELING                 _UxGT("线性调平") // "Linear Leveling"
-#define MSG_BILINEAR_LEVELING               _UxGT("双线性调平") // "Bilinear Leveling"
-#define MSG_UBL_LEVELING                    _UxGT("统一热床调平(UBL)") // "Unified Bed Leveling"
-#define MSG_MESH_LEVELING                   _UxGT("网格调平") // "Mesh Leveling"
-#define MSG_INFO_STATS_MENU                 _UxGT("打印机统计")  //"Printer Stats"
-#define MSG_INFO_BOARD_MENU                 _UxGT("主板信息")  //"Board Info"
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("温度计")  //"Thermistors"
-#define MSG_INFO_EXTRUDERS                  _UxGT("挤出机")  //"Extruders"
-#define MSG_INFO_BAUDRATE                   _UxGT("波特率")  //"Baud"
-#define MSG_INFO_PROTOCOL                   _UxGT("协议")  //"Protocol"
-#define MSG_CASE_LIGHT                      _UxGT("外壳灯") // "Case light"
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("灯亮度") // "Light BRIGHTNESS"
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("移动 ...");     // "Moving...")
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("释放 XY");     // "Free XY")
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("移动X");     //"Move X"
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("移动Y");     //"Move Y"
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("移动Z");     //"Move Z"
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("挤出机");     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("挤出机 ") LCD_STR_E0;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("挤出机 ") LCD_STR_E1;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("挤出机 ") LCD_STR_E2;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("挤出机 ") LCD_STR_E3;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("挤出机 ") LCD_STR_E4;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("挤出机 ") LCD_STR_E5;     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("移动 %s mm");     //"Move 0.025mm"
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("移动 0.1 mm");     //"Move 0.1mm"
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("移动 1 mm");     //"Move 1mm"
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("移动 10 mm");     //"Move 10mm"
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("速率");     //"Speed"
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("热床Z");     //"Bed Z"
+  PROGMEM Language_Str MSG_NOZZLE                          = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴");     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_0                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N0;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_1                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N1;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_2                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N2;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_3                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N3;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_4                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N4;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_5                        = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N5;     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" 热床");     //"Bed"
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("风扇速率");     //"Fan speed"
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("风扇速率 1");     //"Fan speed"
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("风扇速率 2");     //"Fan speed"
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("风扇速率 3");     //"Fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("额外风扇速率");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("额外风扇速率 1");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("额外风扇速率 2");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("额外风扇速率 3");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("挤出速率");     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("挤出速率 ") LCD_STR_N0;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("挤出速率 ") LCD_STR_N1;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("挤出速率 ") LCD_STR_N2;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("挤出速率 ") LCD_STR_N3;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("挤出速率 ") LCD_STR_N4;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("挤出速率 ") LCD_STR_N5;     //"Flow"
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("控制");     //"Control"
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" 最小");     //" " LCD_STR_THERMOMETER " Min"
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" 最大");     //" " LCD_STR_THERMOMETER " Max"
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" å› æ•°");     //" " LCD_STR_THERMOMETER " Fact"
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("自动控温");     //"Autotemp"
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("å¼€");     //"On"
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("å…³");     //"Off"
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");     //"PID-P"
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");     //"PID-I"
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");     //"PID-D"
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");     //"PID-C"
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("选择");     //"Select"
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("选择 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("选择 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("选择 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("选择 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("选择 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("选择 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("加速度");     //"Accel" acceleration
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("抖动速率");     // "Jerk"
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("轴抖动速率") LCD_STR_A;     //"Va-jerk"
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("轴抖动速率") LCD_STR_B;     //"Vb-jerk"
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("轴抖动速率") LCD_STR_C;     //"Vc-jerk"
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("挤出机抖动速率");     //"Ve-jerk"
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("速度");     // "Velocity"
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("最大进料速率") LCD_STR_A;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("最大进料速率") LCD_STR_B;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("最大进料速率") LCD_STR_C;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("最大进料速率") LCD_STR_E;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("最大进料速率 ") LCD_STR_E0;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("最大进料速率 ") LCD_STR_E1;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("最大进料速率 ") LCD_STR_E2;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("最大进料速率 ") LCD_STR_E3;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("最大进料速率 ") LCD_STR_E4;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("最大进料速率 ") LCD_STR_E5;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("最小进料速率");     //"Vmin"  min_feedrate_mm_s
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("最小移动速率");     //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("加速度");     // "Acceleration"
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("最大打印加速度") LCD_STR_A;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("最大打印加速度") LCD_STR_B;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("最大打印加速度") LCD_STR_C;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("最大打印加速度") LCD_STR_E;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("最大打印加速度 ") LCD_STR_E0;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("最大打印加速度 ") LCD_STR_E1;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("最大打印加速度 ") LCD_STR_E2;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("最大打印加速度 ") LCD_STR_E3;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("最大打印加速度 ") LCD_STR_E4;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("最大打印加速度 ") LCD_STR_E5;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("收进加速度");     //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("非打印移动加速度");     //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("轴步数/mm");     //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("轴步数/mm");     //"Asteps/mm"
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("轴步数/mm");     //"Bsteps/mm"
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("轴步数/mm");     //"Csteps/mm"
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("挤出机步数/mm");     //"Esteps/mm"
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("挤出机") LCD_STR_N0 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("挤出机") LCD_STR_N1 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("挤出机") LCD_STR_N2 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("挤出机") LCD_STR_N3 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("挤出机") LCD_STR_N4 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("挤出机") LCD_STR_N5 _UxGT("步数/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("温度");     //"Temperature"
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("运动");     //"Motion"
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("丝料测容");     //"Filament" menu_advanced_filament
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("测容积mm³");     //"E in mm3" volumetric_enabled
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("丝料直径");     //"Fil. Dia."
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("丝料直径 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("丝料直径 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("丝料直径 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("丝料直径 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("丝料直径 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("丝料直径 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("卸载 mm");     // "Unload mm"
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("装载 mm");     // "Load mm"
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD对比度");     //"LCD contrast"
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("保存设置");     //"Store memory"
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("装载设置");     //"Load memory"
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("恢复安全值");     //"Restore failsafe"
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("初始化设置");     // "Initialize EEPROM"
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("刷新");     //"Refresh"
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("信息屏");     //"Info screen"
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("准备");     //"Prepare"
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("调整");     //"Tune"
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("暂停打印");     //"Pause print"
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("恢复打印");     //"Resume print"
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("停止打印");     //"Stop print"
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("从存储卡上打印");     //"Print from SD"
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("无存储卡");     //"No SD card"
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("休眠中 ...");     //"Sleep..."
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("点击继续 ...");     //"Click to resume..."
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("暫停打印");     // "Print paused"
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("已取消打印");     //"Print aborted"
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("无移动");     //"No move."
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("已杀掉");     //"KILLED. "
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("已停止");     //"STOPPED. "
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("回抽长度mm");     //"Retract mm" retract_length, retract length (positive mm)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("换手回抽长度mm");     //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("回抽速率mm/s");     //"Retract  V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Hop mm");     //"Hop mm" retract_zraise, retract Z-lift
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("回抽恢复长度mm");     //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("换手回抽恢复长度mm");     //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("回抽恢复后进料速率mm/s");     //"UnRet  V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");     // "S UnRet V"
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("自动抽回");     //"AutoRetr." autoretract_enabled,
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("更换丝料");     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("更换丝料 ") LCD_STR_E0;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("更换丝料 ") LCD_STR_E1;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("更换丝料 ") LCD_STR_E2;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("更换丝料 ") LCD_STR_E3;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("更换丝料 ") LCD_STR_E4;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("更换丝料 ") LCD_STR_E5;     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("装载丝料 ") LCD_STR_E0;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("装载丝料 ") LCD_STR_E1;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("装载丝料 ") LCD_STR_E2;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("装载丝料 ") LCD_STR_E3;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("装载丝料 ") LCD_STR_E4;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("装载丝料 ") LCD_STR_E5;     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("卸载丝料 ") LCD_STR_E0;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("卸载丝料 ") LCD_STR_E1;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("卸载丝料 ") LCD_STR_E2;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("卸载丝料 ") LCD_STR_E3;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("卸载丝料 ") LCD_STR_E4;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("卸载丝料 ") LCD_STR_E5;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("卸载全部");     // "Unload All"
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("初始化存储卡");     //"Init. SD card"
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("更换存储卡");     //"Change SD card"
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z探针在热床之外");     //"Z probe out. bed" Z probe is not within the physical limits
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("偏斜因数");     // "Skew Factor"
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");     // "BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch 自检");     // "BLTouch Self-Test"
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("重置BLTouch");     // "Reset BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("部署BLTouch");     // "Deploy BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("装载BLTouch");     // "Stow BLTouch"
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("归位 %s%s%s 先");     //"Home ... first"
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z偏移");     //"Z Offset"
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("微量调整X轴");     //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("微量调整Y轴");     //"Babystep Y"
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("微量调整Z轴");     //"Babystep Z"
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("挡块终止");     //"Endstop abort"
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("加热失败");     //"Heating failed"
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("错误:REDUNDANT TEMP");     //"Err: REDUNDANT TEMP"
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("温控失控");     //"THERMAL RUNAWAY"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("错误:最高温度");     //"Err: MAXTEMP"
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("错误:最低温度");     //"Err: MINTEMP"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("错误:最高热床温度");     //"Err: MAXTEMP BED"
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("错误:最低热床温度");     //"Err: MINTEMP BED"
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("归位 XY 先");     // "Home XY First"
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("打印停机");     //"PRINTER HALTED"
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("请重置");     //"Please reset"
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("天");     //"d" // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("æ—¶");     //"h" // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("分");     //"m" // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("加热中 ...");     //"Heating..."
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("加热热床中 ...");     //"Bed Heating..."
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("⊿校准");     //"Delta Calibration"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("⊿校准X");     //"Calibrate X"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("⊿校准Y");     //"Calibrate Y"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("⊿校准Z");     //"Calibrate Z"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("⊿校准中心");     //"Calibrate Center"
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("⊿设置");     // "Delta Settings"
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("⊿自动校准");     // "Auto Calibration"
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("设置⊿高度");     // "Set Delta Height"
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("⊿斜柱");     // "Diag Rod"
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("⊿高度");     // "Height"
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("⊿半径");     // "Radius"
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("关于打印机");     //"About Printer"
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("打印机信息");     //"Printer Info"
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("三点调平");     // "3-Point Leveling"
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("线性调平");     // "Linear Leveling"
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("双线性调平");     // "Bilinear Leveling"
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("统一热床调平(UBL)");     // "Unified Bed Leveling"
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("网格调平");     // "Mesh Leveling"
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("打印机统计");     //"Printer Stats"
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("主板信息");     //"Board Info"
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("温度计");     //"Thermistors"
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("挤出机");     //"Extruders"
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("波特率");     //"Baud"
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("协议");     //"Protocol"
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("外壳灯");     // "Case light"
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("灯亮度");     // "Light BRIGHTNESS"
 
-#define MSG_EXPECTED_PRINTER                _UxGT("打印机不正确") // "The printer is incorrect"
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("打印机不正确");     // "The printer is incorrect"
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("打印计数")  //"Print Count"
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("完成了")  //"Completed"
-  #define MSG_INFO_PRINT_TIME               _UxGT("总打印时间")  //"Total print time"
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("最长工作时间")  //"Longest job time"
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("总计挤出")  //"Extruded total"
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("打印数")  //"Prints"
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("完成")  //"Completed"
-  #define MSG_INFO_PRINT_TIME               _UxGT("总共")  //"Total"
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("最长")  //"Longest"
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("已挤出")  //"Extruded"
-#endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("打印计数");     //"Print Count"
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("完成了");     //"Completed"
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("总打印时间");     //"Total print time"
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("最长工作时间");     //"Longest job time"
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("总计挤出");     //"Extruded total"
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("打印数");     //"Prints"
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("完成");     //"Completed"
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("总共");     //"Total"
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("最长");     //"Longest"
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("已挤出");     //"Extruded"
+  #endif
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("最低温度")  //"Min Temp"
-#define MSG_INFO_MAX_TEMP                   _UxGT("最高温度")  //"Max Temp"
-#define MSG_INFO_PSU                        _UxGT("电源供应")  //"Power Supply"
-#define MSG_DRIVE_STRENGTH                  _UxGT("驱动力度") // "Drive Strength"
-#define MSG_DAC_PERCENT                     _UxGT("驱动 %") // "Driver %"
-#define MSG_DAC_EEPROM_WRITE                _UxGT("保存驱动设置") // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("打印已暂停") // "PRINT PAUSED"
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("装载丝料") // "LOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("卸载丝料") // "UNLOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("恢复选项:") // "RESUME OPTIONS:"
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("清除更多") // "Purge more"
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("恢复打印")  //"Resume print"
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  喷嘴: ") // "  Nozzle: "
-#define MSG_ERR_HOMING_FAILED               _UxGT("归原位失败") // "Homing failed"
-#define MSG_ERR_PROBING_FAILED              _UxGT("探针探测失败") // "Probing failed"
-#define MSG_M600_TOO_COLD                   _UxGT("M600: 太凉") // "M600: Too cold"
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("最低温度");     //"Min Temp"
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("最高温度");     //"Max Temp"
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("电源供应");     //"Power Supply"
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("驱动力度");     // "Drive Strength"
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("驱动 %");     // "Driver %"
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("保存驱动设置");     // "DAC EEPROM Write"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("打印已暂停");     // "PRINT PAUSED"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("装载丝料");     // "LOAD FILAMENT"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("卸载丝料");     // "UNLOAD FILAMENT"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("恢复选项:");     // "RESUME OPTIONS:"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("清除更多");     // "Purge more"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("恢复打印");     //"Resume print"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  喷嘴: ");     // "  Nozzle: "
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("归原位失败");     // "Homing failed"
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("探针探测失败");     // "Probing failed"
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: 太凉");     // "M600: Too cold"
 
-#if LCD_HEIGHT >= 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("等待开始")  //"Wait for start"
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("丝料")  //"of the filament"
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("变更")  //"change"
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("等待")  //"Wait for"
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("卸下丝料")  //"filament unload"
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("插入丝料")  //"Insert filament"
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("并按键")  //"and press button"
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("来继续 ...")  //"to continue..."
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("按下按钮来") // "Press button to"
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("加热喷嘴.") // "heat nozzle."
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("加热喷嘴") // "Heating nozzle"
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("请等待 ...") // "Please wait..."
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("等待")  //"Wait for"
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("进料")  //"filament load"
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("等待") // "Wait for"
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("丝料清除") // "filament purge"
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("等待打印")  //"Wait for print"
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("恢复")  //"to resume"
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("请等待 ...")  //"Please wait..."
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("退出中 ...")  //"Ejecting..."
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("插入并单击")  //"Insert and Click"
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("加热中 ...") // "Heating..."
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("装载中 ...")  //"Loading..."
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("清除中 ...") // "Purging..."
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("恢复中 ...")  //"Resuming..."
-#endif // LCD_HEIGHT < 4
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("等待开始", "丝料", "变更"));     // "Wait for start of the filament change"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("等待", "卸下丝料"));     // "Wait for filament unload"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("插入丝料", "并按键", "来继续 ..."));     // "Insert filament and press button to continue..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("按下按钮来", "加热喷嘴."));     // "Press button to heat nozzle."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("加热喷嘴", "请等待 ..."));     // "Heating nozzle Please wait..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("等待", "进料"));     // "Wait for filament load"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("等待", "丝料清除"));     // "Wait for filament purge"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("等待打印", "恢复"));     // "Wait for print to resume"
+  #else
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("请等待 ..."));     //"Please wait..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("退出中 ..."));     //"Ejecting..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("插入并单击"));     //"Insert and Click"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("加热中 ..."));     // "Heating..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("装载中 ..."));     //"Loading..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("清除中 ..."));     // "Purging..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("恢复中 ..."));     //"Resuming..."
+  #endif
+}
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 90b7b00758..051e71ccae 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -28,357 +28,464 @@
  * See also http://marlinfw.org/docs/development/lcd_language.html
  *
  */
+namespace Language_zh_TW {
+  using namespace Language_en;  // Inherit undefined strings from English
 
-#define CHARSIZE 3
+  constexpr uint8_t    CHARSIZE                            = 3;
+  PROGMEM Language_Str LANGUAGE                            = _UxGT("Traditional Chinese");
 
-#define WELCOME_MSG                         MACHINE_NAME _UxGT("已就緒.")  //" ready."
-#define MSG_BACK                            _UxGT("返回")         // ”Back“
-#define MSG_MEDIA_INSERTED                  _UxGT("記憶卡已插入")  //"Card inserted"
-#define MSG_MEDIA_REMOVED                   _UxGT("記憶卡被拔出")  //"Card removed"
-#define MSG_LCD_ENDSTOPS                    _UxGT("æ“‹å¡Š")  //"Endstops" // Max length 8 characters
-#define MSG_MAIN                            _UxGT("主選單")  //"Main"
-#define MSG_AUTOSTART                       _UxGT("自動開始")  //"Autostart"
-#define MSG_DISABLE_STEPPERS                _UxGT("關閉步進馬達")  //"Disable steppers"
-#define MSG_DEBUG_MENU                      _UxGT("除錯選單")    // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST               _UxGT("進度條測試")  // "Progress Bar Test"
-#define MSG_AUTO_HOME                       _UxGT("自動回原點")  //"Auto home"
-#define MSG_AUTO_HOME_X                     _UxGT("回X原點")  //"Home X"
-#define MSG_AUTO_HOME_Y                     _UxGT("回Y原點")  //"Home Y"
-#define MSG_AUTO_HOME_Z                     _UxGT("回Z原點")  //"Home Z"
-#define MSG_LEVEL_BED_HOMING                _UxGT("平台調平XYZ歸原點")  //"Homing XYZ"
-#define MSG_LEVEL_BED_WAITING               _UxGT("單擊開始熱床調平")  //"Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT            _UxGT("下個熱床調平點")  //"Next Point"
-#define MSG_LEVEL_BED_DONE                  _UxGT("完成熱床調平")  //"Leveling Done!"
-#define MSG_Z_FADE_HEIGHT                   _UxGT("淡出高度")     // "Fade Height"
-#define MSG_SET_HOME_OFFSETS                _UxGT("設置原點偏移")  //"Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED            _UxGT("偏移已啟用")  //"Offsets applied"
-#define MSG_SET_ORIGIN                      _UxGT("設置原點")  //"Set origin"
-#define MSG_PREHEAT_1                       _UxGT("預熱" PREHEAT_1_LABEL)  //"Preheat PREHEAT_1_LABEL"
-#define MSG_PREHEAT_1_N                     MSG_PREHEAT_1 _UxGT(" ")  //MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL                   MSG_PREHEAT_1 _UxGT(" 全部")  //MSG_PREHEAT_1 " All"
-#define MSG_PREHEAT_1_BEDONLY               MSG_PREHEAT_1 _UxGT(" 熱床")  //MSG_PREHEAT_1 " Bed"
-#define MSG_PREHEAT_1_SETTINGS              MSG_PREHEAT_1 _UxGT(" 設置")  //MSG_PREHEAT_1 " conf"
-#define MSG_PREHEAT_2                       _UxGT("預熱" PREHEAT_2_LABEL)  //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_2_N                     MSG_PREHEAT_2 _UxGT(" ")  //MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL                   MSG_PREHEAT_2 _UxGT(" 全部")  //MSG_PREHEAT_2 " All"
-#define MSG_PREHEAT_2_BEDONLY               MSG_PREHEAT_2 _UxGT(" 熱床")  //MSG_PREHEAT_2 " Bed"
-#define MSG_PREHEAT_2_SETTINGS              MSG_PREHEAT_2 _UxGT(" 設置")  //MSG_PREHEAT_2 " conf"
-#define MSG_COOLDOWN                        _UxGT("降溫")  //"Cooldown"
-#define MSG_SWITCH_PS_ON                    _UxGT("電源打開")  //"Switch power on"
-#define MSG_SWITCH_PS_OFF                   _UxGT("電源關閉")  //"Switch power off"
-#define MSG_EXTRUDE                         _UxGT("擠出")  //"Extrude"
-#define MSG_RETRACT                         _UxGT("回縮")  //"Retract"
-#define MSG_MOVE_AXIS                       _UxGT("移動軸")  //"Move axis"
-#define MSG_BED_LEVELING                    _UxGT("調平熱床")  //"Bed leveling"
-#define MSG_LEVEL_BED                       _UxGT("調平熱床")  //"Level bed"
-#define MSG_LEVEL_CORNERS                   _UxGT("調平邊角") // "Level corners"
+  PROGMEM Language_Str WELCOME_MSG                         = MACHINE_NAME _UxGT("已就緒.");     //" ready."
+  PROGMEM Language_Str MSG_BACK                            = _UxGT("返回");     // ”Back“
+  PROGMEM Language_Str MSG_MEDIA_INSERTED                  = _UxGT("記憶卡已插入");     //"Card inserted"
+  PROGMEM Language_Str MSG_MEDIA_REMOVED                   = _UxGT("記憶卡被拔出");     //"Card removed"
+  PROGMEM Language_Str MSG_LCD_ENDSTOPS                    = _UxGT("æ“‹å¡Š");     //"Endstops" // Max length 8 characters
+  PROGMEM Language_Str MSG_MAIN                            = _UxGT("主選單");     //"Main"
+  PROGMEM Language_Str MSG_AUTOSTART                       = _UxGT("自動開始");     //"Autostart"
+  PROGMEM Language_Str MSG_DISABLE_STEPPERS                = _UxGT("關閉步進馬達");     //"Disable steppers"
+  PROGMEM Language_Str MSG_DEBUG_MENU                      = _UxGT("除錯選單");     // "Debug Menu"
+  PROGMEM Language_Str MSG_PROGRESS_BAR_TEST               = _UxGT("進度條測試");     // "Progress Bar Test"
+  PROGMEM Language_Str MSG_AUTO_HOME                       = _UxGT("自動回原點");     //"Auto home"
+  PROGMEM Language_Str MSG_AUTO_HOME_X                     = _UxGT("回X原點");     //"Home X"
+  PROGMEM Language_Str MSG_AUTO_HOME_Y                     = _UxGT("回Y原點");     //"Home Y"
+  PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("回Z原點");     //"Home Z"
+  PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("平台調平XYZ歸原點");     //"Homing XYZ"
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("單擊開始熱床調平");     //"Click to Begin"
+  PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("下個熱床調平點");     //"Next Point"
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("完成熱床調平");     //"Leveling Done!"
+  PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("淡出高度");     // "Fade Height"
+  PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("設置原點偏移");     //"Set home offsets"
+  PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("偏移已啟用");     //"Offsets applied"
+  PROGMEM Language_Str MSG_SET_ORIGIN                      = _UxGT("設置原點");     //"Set origin"
+  PROGMEM Language_Str MSG_PREHEAT_1                       = _UxGT("預熱 ") PREHEAT_1_LABEL;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H0                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N0;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H1                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N1;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H2                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N2;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H3                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N3;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H4                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N4;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_H5                    = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N5;     //"Preheat PREHEAT_1_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_1_END                   = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴");     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E0                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N0;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E1                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N1;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E2                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N2;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E3                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N3;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E4                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N4;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_END_E5                = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N5;     //MSG_PREHEAT_1 " "
+  PROGMEM Language_Str MSG_PREHEAT_1_ALL                   = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 全部");     //MSG_PREHEAT_1 " All"
+  PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY               = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 熱床");     //MSG_PREHEAT_1 " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS              = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 設置");     //MSG_PREHEAT_1 " conf"
+  PROGMEM Language_Str MSG_PREHEAT_2                       = _UxGT("預熱 ") PREHEAT_2_LABEL;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H0                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N0;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H1                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N1;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H2                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N2;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H3                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N3;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H4                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N4;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_H5                    = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N5;     //"Preheat PREHEAT_2_LABEL"
+  PROGMEM Language_Str MSG_PREHEAT_2_END                   = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴");     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E0                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N0;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E1                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N1;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E2                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N2;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E3                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N3;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E4                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N4;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_END_E5                = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N5;     //MSG_PREHEAT_2 " "
+  PROGMEM Language_Str MSG_PREHEAT_2_ALL                   = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 全部");     //MSG_PREHEAT_2 " All"
+  PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY               = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 熱床");     //MSG_PREHEAT_2 " Bed"
+  PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS              = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 設置");     //MSG_PREHEAT_2 " conf"
+  PROGMEM Language_Str MSG_COOLDOWN                        = _UxGT("降溫");     //"Cooldown"
+  PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("電源打開");     //"Switch power on"
+  PROGMEM Language_Str MSG_SWITCH_PS_OFF                   = _UxGT("電源關閉");     //"Switch power off"
+  PROGMEM Language_Str MSG_EXTRUDE                         = _UxGT("擠出");     //"Extrude"
+  PROGMEM Language_Str MSG_RETRACT                         = _UxGT("回縮");     //"Retract"
+  PROGMEM Language_Str MSG_MOVE_AXIS                       = _UxGT("移動軸");     //"Move axis"
+  PROGMEM Language_Str MSG_BED_LEVELING                    = _UxGT("調平熱床");     //"Bed leveling"
+  PROGMEM Language_Str MSG_LEVEL_BED                       = _UxGT("調平熱床");     //"Level bed"
+  PROGMEM Language_Str MSG_LEVEL_CORNERS                   = _UxGT("調平邊角");     // "Level corners"
 
-#define MSG_NEXT_CORNER                     _UxGT("下个邊角") // "Next corner"
-#define MSG_EDIT_MESH                       _UxGT("編輯網格") // "Edit Mesh"
-#define MSG_EDITING_STOPPED                 _UxGT("網格編輯已停止") // "Mesh Editing Stopped"
-#define MSG_USER_MENU                       _UxGT("客制命令") // "Custom Commands"
+  PROGMEM Language_Str MSG_NEXT_CORNER                     = _UxGT("下個邊角");     // "Next corner"
+  PROGMEM Language_Str MSG_EDIT_MESH                       = _UxGT("編輯網格");     // "Edit Mesh"
+  PROGMEM Language_Str MSG_EDITING_STOPPED                 = _UxGT("網格編輯已停止");     // "Mesh Editing Stopped"
+  PROGMEM Language_Str MSG_USER_MENU                       = _UxGT("客制命令");     // "Custom Commands"
 
-#define MSG_UBL_DOING_G29                   _UxGT("执行G29") // "Doing G29"
-#define MSG_UBL_TOOLS                       _UxGT("UBL工具") // "UBL Tools"
-#define MSG_UBL_LEVEL_BED                   _UxGT("統一熱床調平(UBL)") // "Unified Bed Leveling"
-#define MSG_UBL_MANUAL_MESH                 _UxGT("手工建网") // "Manually Build Mesh"
-#define MSG_UBL_BC_INSERT                   _UxGT("放置墊片並測量") // "Place shim & measure"
-#define MSG_UBL_BC_INSERT2                  _UxGT("測量") // "Measure"
-#define MSG_UBL_BC_REMOVE                   _UxGT("移除並測量熱床") // "Remove & measure bed"
-#define MSG_UBL_MOVING_TO_NEXT              _UxGT("移動到下一個") // "Moving to next"
-#define MSG_UBL_ACTIVATE_MESH               _UxGT("激活UBL") // "Activate UBL"
-#define MSG_UBL_DEACTIVATE_MESH             _UxGT("關閉UBL") // "Deactivate UBL"
-#define MSG_UBL_SET_TEMP_BED                _UxGT("設置熱床溫度") // "Bed Temp"
-#define MSG_UBL_SET_TEMP_HOTEND             _UxGT("熱端溫度") // "Hotend Temp"
-#define MSG_UBL_MESH_EDIT                   _UxGT("網格編輯") // "Mesh Edit"
-#define MSG_UBL_EDIT_CUSTOM_MESH            _UxGT("編輯客戶網格") // "Edit Custom Mesh"
-#define MSG_UBL_FINE_TUNE_MESH              _UxGT("細調網格") // "Fine Tuning Mesh"
-#define MSG_UBL_DONE_EDITING_MESH           _UxGT("完成編輯網格") // "Done Editing Mesh"
-#define MSG_UBL_BUILD_CUSTOM_MESH           _UxGT("創設客戶網格") // "Build Custom Mesh"
-#define MSG_UBL_BUILD_MESH_MENU             _UxGT("創設網格") // "Build Mesh"
-#define MSG_UBL_BUILD_MESH_M1               _UxGT("創設" PREHEAT_1_LABEL "網格") // "Build PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_BUILD_MESH_M2               _UxGT("創設" PREHEAT_2_LABEL "網格") // "Build PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_BUILD_COLD_MESH             _UxGT("創設冷網格") // "Build Cold Mesh"
-#define MSG_UBL_MESH_HEIGHT_ADJUST          _UxGT("調整網格高度") // "Adjust Mesh Height"
-#define MSG_UBL_MESH_HEIGHT_AMOUNT          _UxGT("高度合計") // "Height Amount"
-#define MSG_UBL_VALIDATE_MESH_MENU          _UxGT("批准網格") // "Validate Mesh"
-#define MSG_UBL_VALIDATE_MESH_M1            _UxGT("批准" PREHEAT_1_LABEL "網格") // "Validate PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_VALIDATE_MESH_M2            _UxGT("批准" PREHEAT_2_LABEL "網格") // "Validate PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_VALIDATE_CUSTOM_MESH        _UxGT("批准客戶網格") // "Validate Custom Mesh"
-#define MSG_UBL_CONTINUE_MESH               _UxGT("繼續熱床網格") // "Continue Bed Mesh"
-#define MSG_UBL_MESH_LEVELING               _UxGT("網格調平") // "Mesh Leveling"
-#define MSG_UBL_3POINT_MESH_LEVELING        _UxGT("三點調平") // "3-Point Leveling"
-#define MSG_UBL_GRID_MESH_LEVELING          _UxGT("格子網格調平") // "Grid Mesh Leveling"
-#define MSG_UBL_MESH_LEVEL                  _UxGT("調平網格") // "Level Mesh"
-#define MSG_UBL_SIDE_POINTS                 _UxGT("邊點") // "Side Points"
-#define MSG_UBL_MAP_TYPE                    _UxGT("圖類型") // "Map Type"
-#define MSG_UBL_OUTPUT_MAP                  _UxGT("輸出網格圖") // "Output Mesh Map"
-#define MSG_UBL_OUTPUT_MAP_HOST             _UxGT("輸出到主機") // "Output for Host"
-#define MSG_UBL_OUTPUT_MAP_CSV              _UxGT("輸出到CSV") // "Output for CSV"
-#define MSG_UBL_OUTPUT_MAP_BACKUP           _UxGT("輸出到備份") // "Off Printer Backup"
-#define MSG_UBL_INFO_UBL                    _UxGT("輸出UBL信息") // "Output UBL Info"
-#define MSG_UBL_FILLIN_AMOUNT               _UxGT("填充合計") // "Fill-in Amount"
-#define MSG_UBL_MANUAL_FILLIN               _UxGT("手工填充") // "Manual Fill-in"
-#define MSG_UBL_SMART_FILLIN                _UxGT("聰明填充") // "Smart Fill-in"
-#define MSG_UBL_FILLIN_MESH                 _UxGT("填充網格") // "Fill-in Mesh"
-#define MSG_UBL_INVALIDATE_ALL              _UxGT("作廢所有的") // "Invalidate All"
-#define MSG_UBL_INVALIDATE_CLOSEST          _UxGT("作廢最近的") // "Invalidate Closest"
-#define MSG_UBL_FINE_TUNE_ALL               _UxGT("細調所有的") // "Fine Tune All"
-#define MSG_UBL_FINE_TUNE_CLOSEST           _UxGT("細調最近的") // "Fine Tune Closest"
-#define MSG_UBL_STORAGE_MESH_MENU           _UxGT("網格存儲") // "Mesh Storage"
-#define MSG_UBL_STORAGE_SLOT                _UxGT("存儲槽") // "Memory Slot"
-#define MSG_UBL_LOAD_MESH                   _UxGT("裝載熱床網格") // "Load Bed Mesh"
-#define MSG_UBL_SAVE_MESH                   _UxGT("保存熱床網格") // "Save Bed Mesh"
-#define MSG_MESH_LOADED                     _UxGT("網格 %i 已裝載") // "Mesh %i loaded"
-#define MSG_MESH_SAVED                      _UxGT("網格 %i 已保存") // "Mesh %i saved"
-#define MSG_UBL_NO_STORAGE                  _UxGT("沒有存儲") // "No storage"
-#define MSG_UBL_SAVE_ERROR                  _UxGT("錯誤: UBL保存") // "Err: UBL Save"
-#define MSG_UBL_RESTORE_ERROR               _UxGT("錯誤: UBL還原") // "Err: UBL Restore"
-#define MSG_UBL_Z_OFFSET_STOPPED            _UxGT("Z偏移已停止") // "Z-Offset Stopped"
-#define MSG_UBL_STEP_BY_STEP_MENU           _UxGT("一步步UBL") // "Step-By-Step UBL"
+  PROGMEM Language_Str MSG_UBL_DOING_G29                   = _UxGT("執行G29");     // "Doing G29"
+  PROGMEM Language_Str MSG_UBL_TOOLS                       = _UxGT("UBL工具");     // "UBL Tools"
+  PROGMEM Language_Str MSG_UBL_LEVEL_BED                   = _UxGT("統一熱床調平(UBL)");     // "Unified Bed Leveling"
+  PROGMEM Language_Str MSG_UBL_MANUAL_MESH                 = _UxGT("手工建網");     // "Manually Build Mesh"
+  PROGMEM Language_Str MSG_UBL_BC_INSERT                   = _UxGT("放置墊片並測量");     // "Place shim & measure"
+  PROGMEM Language_Str MSG_UBL_BC_INSERT2                  = _UxGT("測量");     // "Measure"
+  PROGMEM Language_Str MSG_UBL_BC_REMOVE                   = _UxGT("移除並測量熱床");     // "Remove & measure bed"
+  PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT              = _UxGT("移動到下一個");     // "Moving to next"
+  PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH               = _UxGT("å•Ÿå‹•UBL");     // "Activate UBL"
+  PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH             = _UxGT("關閉UBL");     // "Deactivate UBL"
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_BED                = _UxGT("設置熱床溫度");     // "Bed Temp"
+  PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND             = _UxGT("熱端溫度");     // "Hotend Temp"
+  PROGMEM Language_Str MSG_UBL_MESH_EDIT                   = _UxGT("網格編輯");     // "Mesh Edit"
+  PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH            = _UxGT("編輯客戶網格");     // "Edit Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH              = _UxGT("細調網格");     // "Fine Tuning Mesh"
+  PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH           = _UxGT("完成編輯網格");     // "Done Editing Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH           = _UxGT("創設客戶網格");     // "Build Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU             = _UxGT("創設網格");     // "Build Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1               = _UxGT("創設 ") PREHEAT_1_LABEL _UxGT(" 網格");     // "Build PREHEAT_1_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2               = _UxGT("創設 ") PREHEAT_2_LABEL _UxGT(" 網格");     // "Build PREHEAT_2_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH             = _UxGT("創設冷網格");     // "Build Cold Mesh"
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST          = _UxGT("調整網格高度");     // "Adjust Mesh Height"
+  PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT          = _UxGT("高度合計");     // "Height Amount"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU          = _UxGT("批准網格");     // "Validate Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1            = _UxGT("批准 ") PREHEAT_1_LABEL _UxGT(" 網格");     // "Validate PREHEAT_1_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2            = _UxGT("批准 ") PREHEAT_2_LABEL _UxGT(" 網格");     // "Validate PREHEAT_2_LABEL Mesh"
+  PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH        = _UxGT("批准客戶網格");     // "Validate Custom Mesh"
+  PROGMEM Language_Str MSG_UBL_CONTINUE_MESH               = _UxGT("繼續熱床網格");     // "Continue Bed Mesh"
+  PROGMEM Language_Str MSG_UBL_MESH_LEVELING               = _UxGT("網格調平");     // "Mesh Leveling"
+  PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING        = _UxGT("三點調平");     // "3-Point Leveling"
+  PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING          = _UxGT("格子網格調平");     // "Grid Mesh Leveling"
+  PROGMEM Language_Str MSG_UBL_MESH_LEVEL                  = _UxGT("調平網格");     // "Level Mesh"
+  PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("邊點");     // "Side Points"
+  PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("圖類型");     // "Map Type"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("輸出網格圖");     // "Output Mesh Map"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("輸出到主機");     // "Output for Host"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("輸出到CSV");     // "Output for CSV"
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("輸出到備份");     // "Off Printer Backup"
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("輸出UBL信息");     // "Output UBL Info"
+  PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("填充合計");     // "Fill-in Amount"
+  PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("手工填充");     // "Manual Fill-in"
+  PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("聰明填充");     // "Smart Fill-in"
+  PROGMEM Language_Str MSG_UBL_FILLIN_MESH                 = _UxGT("填充網格");     // "Fill-in Mesh"
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL              = _UxGT("作廢所有的");     // "Invalidate All"
+  PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST          = _UxGT("作廢最近的");     // "Invalidate Closest"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL               = _UxGT("細調所有的");     // "Fine Tune All"
+  PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST           = _UxGT("細調最近的");     // "Fine Tune Closest"
+  PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU           = _UxGT("網格存儲");     // "Mesh Storage"
+  PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存儲槽");     // "Memory Slot"
+  PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("裝載熱床網格");     // "Load Bed Mesh"
+  PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存熱床網格");     // "Save Bed Mesh"
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 網格 %i 已裝載");     // "Mesh %i loaded"
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 網格 %i 已保存");     // "Mesh %i saved"
+  PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("沒有存儲");     // "No storage"
+  PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("錯誤: UBL保存");     // "Err: UBL Save"
+  PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("錯誤: UBL還原");     // "Err: UBL Restore"
+  PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED            = _UxGT("Z偏移已停止");     // "Z-Offset Stopped"
+  PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU           = _UxGT("一步步UBL");     // "Step-By-Step UBL"
+  PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH           = _UxGT("1. 創設冷網格");
+  PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN              = _UxGT("2. 聰明填充");
+  PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU        = _UxGT("3. 批准網格");
+  PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL             = _UxGT("4. 細調所有的");
+  PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU        = _UxGT("5. 批准網格");
+  PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL             = _UxGT("6. 細調所有的");
+  PROGMEM Language_Str MSG_UBL_7_SAVE_MESH                 = _UxGT("7. 保存熱床網格");
 
-#define MSG_LED_CONTROL                     _UxGT("灯管控制") // "LED Control")
-#define MSG_LEDS                            _UxGT("灯") // "Lights")
-#define MSG_LED_PRESETS                     _UxGT("灯预置") // "Light Presets")
-#define MSG_SET_LEDS_RED                    _UxGT("红") // "Red")
-#define MSG_SET_LEDS_ORANGE                 _UxGT("æ©™") // "Orange")
-#define MSG_SET_LEDS_YELLOW                 _UxGT("黄") // "Yellow")
-#define MSG_SET_LEDS_GREEN                  _UxGT("绿") // "Green")
-#define MSG_SET_LEDS_BLUE                   _UxGT("蓝") // "Blue")
-#define MSG_SET_LEDS_INDIGO                 _UxGT("青") // "Indigo")
-#define MSG_SET_LEDS_VIOLET                 _UxGT("ç´«") // "Violet")
-#define MSG_SET_LEDS_WHITE                  _UxGT("白") // "White")
-#define MSG_SET_LEDS_DEFAULT                _UxGT("缺省") // "Default")
-#define MSG_CUSTOM_LEDS                     _UxGT("定制灯") // "Custom Lights")
-#define MSG_INTENSITY_R                     _UxGT("红飽和度") // "Red Intensity")
-#define MSG_INTENSITY_G                     _UxGT("绿飽和度") // "Green Intensity")
-#define MSG_INTENSITY_B                     _UxGT("蓝飽和度") // "Blue Intensity")
-#define MSG_INTENSITY_W                     _UxGT("白飽和度") // "White Intensity")
-#define MSG_LED_BRIGHTNESS                  _UxGT("亮度") // "Brightness")
+  PROGMEM Language_Str MSG_LED_CONTROL                     = _UxGT("燈管控制");     // "LED Control")
+  PROGMEM Language_Str MSG_LEDS                            = _UxGT("燈");     // "Lights")
+  PROGMEM Language_Str MSG_LED_PRESETS                     = _UxGT("燈預置");     // "Light Presets")
+  PROGMEM Language_Str MSG_SET_LEDS_RED                    = _UxGT("红");     // "Red")
+  PROGMEM Language_Str MSG_SET_LEDS_ORANGE                 = _UxGT("æ©™");     // "Orange")
+  PROGMEM Language_Str MSG_SET_LEDS_YELLOW                 = _UxGT("黃");     // "Yellow")
+  PROGMEM Language_Str MSG_SET_LEDS_GREEN                  = _UxGT("綠");     // "Green")
+  PROGMEM Language_Str MSG_SET_LEDS_BLUE                   = _UxGT("藍");     // "Blue")
+  PROGMEM Language_Str MSG_SET_LEDS_INDIGO                 = _UxGT("青");     // "Indigo")
+  PROGMEM Language_Str MSG_SET_LEDS_VIOLET                 = _UxGT("ç´«");     // "Violet")
+  PROGMEM Language_Str MSG_SET_LEDS_WHITE                  = _UxGT("白");     // "White")
+  PROGMEM Language_Str MSG_SET_LEDS_DEFAULT                = _UxGT("缺省");     // "Default")
+  PROGMEM Language_Str MSG_CUSTOM_LEDS                     = _UxGT("定制燈");     // "Custom Lights")
+  PROGMEM Language_Str MSG_INTENSITY_R                     = _UxGT("紅飽和度");     // "Red Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_G                     = _UxGT("綠飽和度");     // "Green Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_B                     = _UxGT("藍飽和度");     // "Blue Intensity")
+  PROGMEM Language_Str MSG_INTENSITY_W                     = _UxGT("白飽和度");     // "White Intensity")
+  PROGMEM Language_Str MSG_LED_BRIGHTNESS                  = _UxGT("亮度");     // "Brightness")
 
-#define MSG_MOVING                          _UxGT("移动 ...") // "Moving...")
-#define MSG_FREE_XY                         _UxGT("释放 XY") // "Free XY")
-#define MSG_MOVE_X                          _UxGT("移動X")  //"Move X"
-#define MSG_MOVE_Y                          _UxGT("移動Y")  //"Move Y"
-#define MSG_MOVE_Z                          _UxGT("移動Z")  //"Move Z"
-#define MSG_MOVE_E                          _UxGT("擠出機")  //"Extruder"
-#define MSG_MOVE_Z_DIST                     _UxGT("移動 %s mm")  //"Move 0.025mm"
-#define MSG_MOVE_01MM                       _UxGT("移動 0.1 mm")  //"Move 0.1mm"
-#define MSG_MOVE_1MM                        _UxGT("移動 1 mm")  //"Move 1mm"
-#define MSG_MOVE_10MM                       _UxGT("移動 10 mm")  //"Move 10mm"
-#define MSG_SPEED                           _UxGT("速率")  //"Speed"
-#define MSG_BED_Z                           _UxGT("熱床Z")  //"Bed Z"
-#define MSG_NOZZLE                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 噴嘴")  //"Nozzle" 噴嘴
-#define MSG_BED                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 熱床")  //"Bed"
-#define MSG_FAN_SPEED                       _UxGT("風扇速率")  //"Fan speed"
-#define MSG_EXTRA_FAN_SPEED                 _UxGT("額外風扇速率") // "Extra fan speed"
-#define MSG_FLOW                            _UxGT("擠出速率")  //"Flow"
-#define MSG_CONTROL                         _UxGT("控制")  //"Control"
-#define MSG_MIN                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最小") //" " LCD_STR_THERMOMETER " Min"
-#define MSG_MAX                             _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最大")  //" " LCD_STR_THERMOMETER " Max"
-#define MSG_FACTOR                          _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 系數")  //" " LCD_STR_THERMOMETER " Fact"
-#define MSG_AUTOTEMP                        _UxGT("自動控溫")  //"Autotemp"
-#define MSG_LCD_ON                          _UxGT("é–‹")  //"On"
-#define MSG_LCD_OFF                         _UxGT("關")  //"Off"
-#define MSG_PID_P                           _UxGT("PID-P")  //"PID-P"
-#define MSG_PID_I                           _UxGT("PID-I")  //"PID-I"
-#define MSG_PID_D                           _UxGT("PID-D")  //"PID-D"
-#define MSG_PID_C                           _UxGT("PID-C")  //"PID-C"
-#define MSG_SELECT                          _UxGT("選擇")  //"Select"
-#define MSG_ACC                             _UxGT("加速度")  //"Accel" acceleration
-#define MSG_JERK                            _UxGT("抖動速率")  //"Jerk"
-#if IS_KINEMATIC
-  #define MSG_VA_JERK                       _UxGT("A軸抖動速率")  //"Va-jerk"
-  #define MSG_VB_JERK                       _UxGT("B軸抖動速率")  //"Vb-jerk"
-  #define MSG_VC_JERK                       _UxGT("C軸抖動速率")  //"Vc-jerk"
-#else
-  #define MSG_VA_JERK                       _UxGT("X軸抖動速率")  //"Vx-jerk"
-  #define MSG_VB_JERK                       _UxGT("Y軸抖動速率")  //"Vy-jerk"
-  #define MSG_VC_JERK                       _UxGT("Z軸抖動速率")  //"Vz-jerk"
-#endif
-#define MSG_VE_JERK                         _UxGT("擠出機抖動速率")  //"Ve-jerk"
-#define MSG_VELOCITY                        _UxGT("速度")          // "Velocity"
-#define MSG_VMAX                            _UxGT("最大進料速率")  //"Vmax " max_feedrate_mm_s
-#define MSG_VMIN                            _UxGT("最小進料速率")  //"Vmin"  min_feedrate_mm_s
-#define MSG_VTRAV_MIN                       _UxGT("最小移動速率")  //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
-#define MSG_ACCELERATION                    _UxGT("加速度")       // "Acceleration"
-#define MSG_AMAX                            _UxGT("最大列印加速度")  //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
-#define MSG_A_RETRACT                       _UxGT("回縮加速度")  //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
-#define MSG_A_TRAVEL                        _UxGT("非列印移動加速度")  //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-#define MSG_STEPS_PER_MM                    _UxGT("軸步數/mm")  //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
-#if IS_KINEMATIC
-  #define MSG_ASTEPS                        _UxGT("A軸步數/mm")  //"Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
-  #define MSG_BSTEPS                        _UxGT("B軸步數/mm")  //"Bsteps/mm"
-  #define MSG_CSTEPS                        _UxGT("C軸步數/mm")  //"Csteps/mm"
-#else
-  #define MSG_ASTEPS                        _UxGT("X軸步數/mm")  //"Xsteps/mm" axis_steps_per_mm, axis steps-per-unit G92
-  #define MSG_BSTEPS                        _UxGT("Y軸步數/mm")  //"Ysteps/mm"
-  #define MSG_CSTEPS                        _UxGT("Z軸步數/mm")  //"Zsteps/mm"
-#endif
-#define MSG_ESTEPS                          _UxGT("擠出機步數/mm")  //"Esteps/mm"
-#define MSG_E0_STEPS                        _UxGT("擠出機1步數/mm") //"E1steps/mm"
-#define MSG_E1_STEPS                        _UxGT("擠出機2步數/mm") //"E2steps/mm"
-#define MSG_E2_STEPS                        _UxGT("擠出機3步數/mm") //"E3steps/mm"
-#define MSG_E3_STEPS                        _UxGT("擠出機4步數/mm") //"E4steps/mm"
-#define MSG_E4_STEPS                        _UxGT("擠出機5步數/mm") //"E5steps/mm"
-#define MSG_E5_STEPS                        _UxGT("擠出機6步數/mm") //"E6steps/mm"
-#define MSG_TEMPERATURE                     _UxGT("溫度")  //"Temperature"
-#define MSG_MOTION                          _UxGT("運作")  //"Motion"
-#define MSG_FILAMENT                        _UxGT("絲料測容")  //"Filament" menu_control_volumetric
-#define MSG_VOLUMETRIC_ENABLED              _UxGT("測容積mm³")  //"E in mm3" volumetric_enabled
-#define MSG_FILAMENT_DIAM                   _UxGT("絲料直徑")  //"Fil. Dia."
-#define MSG_FILAMENT_UNLOAD                 _UxGT("卸載 mm") // "Unload mm"
-#define MSG_FILAMENT_LOAD                   _UxGT("装載 mm")   // "Load mm"
-#define MSG_ADVANCE_K                       _UxGT("Advance K") // "Advance K"
-#define MSG_CONTRAST                        _UxGT("LCD對比度")  //"LCD contrast"
-#define MSG_STORE_EEPROM                    _UxGT("保存設置")  //"Store memory"
-#define MSG_LOAD_EEPROM                     _UxGT("載入設置")  //"Load memory"
-#define MSG_RESTORE_FAILSAFE                _UxGT("恢復安全值")  //"Restore failsafe"
-#define MSG_INIT_EEPROM                     _UxGT("初始化設置") // "Initialize EEPROM"
-#define MSG_REFRESH                         _UxGT("刷新")  //"Refresh"
-#define MSG_WATCH                           _UxGT("資訊界面")  //"Info screen"
-#define MSG_PREPARE                         _UxGT("準備")  //"Prepare"
-#define MSG_TUNE                            _UxGT("調整")  //"Tune"
-#define MSG_PAUSE_PRINT                     _UxGT("暫停列印")  //"Pause print"
-#define MSG_RESUME_PRINT                    _UxGT("恢復列印")  //"Resume print"
-#define MSG_STOP_PRINT                      _UxGT("停止列印")  //"Stop print"
-#define MSG_MEDIA_MENU                      _UxGT("從記憶卡上列印")  //"Print from SD"
-#define MSG_NO_MEDIA                        _UxGT("無記憶卡")  //"No SD card"
-#define MSG_DWELL                           _UxGT("休眠 ...")  //"Sleep..."
-#define MSG_USERWAIT                        _UxGT("點擊繼續 ...")  //"Click to resume..."
-#define MSG_PRINT_PAUSED                    _UxGT("列印已暫停") // "Print paused"
-#define MSG_PRINT_ABORTED                   _UxGT("已取消列印")  //"Print aborted"
-#define MSG_NO_MOVE                         _UxGT("無移動")  //"No move."
-#define MSG_KILLED                          _UxGT("已砍掉")  //"KILLED. "
-#define MSG_STOPPED                         _UxGT("已停止")  //"STOPPED. "
-#define MSG_CONTROL_RETRACT                 _UxGT("回縮長度mm")  //"Retract mm" retract_length, retract length (positive mm)
-#define MSG_CONTROL_RETRACT_SWAP            _UxGT("換手回抽長度mm")  //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
-#define MSG_CONTROL_RETRACTF                _UxGT("回縮速率mm/s")  //"Retract  V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
-#define MSG_CONTROL_RETRACT_ZHOP            _UxGT("Hop mm")  //"Hop mm" retract_zraise, retract Z-lift
-#define MSG_CONTROL_RETRACT_RECOVER         _UxGT("回縮恢復長度mm")  //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    _UxGT("換手回縮恢復長度mm")  //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
-#define MSG_CONTROL_RETRACT_RECOVERF        _UxGT("回縮恢復後進料速率mm/s")  //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF   _UxGT("S UnRet V") // "S UnRet V"
-#define MSG_AUTORETRACT                     _UxGT("自動回縮")  //"AutoRetr." autoretract_enabled,
-#define MSG_FILAMENTCHANGE                  _UxGT("更換絲料")  //"Change filament"
-#define MSG_FILAMENTLOAD                    _UxGT("裝載絲料") // "Load filament"
-#define MSG_FILAMENTUNLOAD                  _UxGT("卸載絲料") // "Unload filament"
-#define MSG_FILAMENTUNLOAD_ALL              _UxGT("卸載全部") // "Unload All"
-#define MSG_INIT_MEDIA                      _UxGT("初始化記憶卡")  //"Init. SD card"
-#define MSG_CHANGE_MEDIA                    _UxGT("更換記憶卡")  //"Change SD card"
-#define MSG_ZPROBE_OUT                      _UxGT("Z探針在熱床之外")  //"Z probe out. bed" Z probe is not within the physical limits
-#define MSG_SKEW_FACTOR                     _UxGT("偏斜因數") // "Skew Factor"
-#define MSG_BLTOUCH                         _UxGT("BLTouch")     // "BLTouch"
-#define MSG_BLTOUCH_SELFTEST                _UxGT("BLTouch 自檢") // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET                   _UxGT("重置BLTouch")  // "Reset BLTouch"
-#define MSG_BLTOUCH_DEPLOY                  _UxGT("部署BLTouch") // "Deploy BLTouch"
-#define MSG_BLTOUCH_STOW                    _UxGT("裝載BLTouch")   // "Stow BLTouch"
-#define MSG_HOME_FIRST                      _UxGT("歸位 %s%s%s 先")  //"Home ... first"
-#define MSG_ZPROBE_ZOFFSET                  _UxGT("Z偏移")  //"Z Offset"
-#define MSG_BABYSTEP_X                      _UxGT("微量調整X軸")  //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
-#define MSG_BABYSTEP_Y                      _UxGT("微量調整Y軸")  //"Babystep Y"
-#define MSG_BABYSTEP_Z                      _UxGT("微量調整Z軸")  //"Babystep Z"
-#define MSG_ENDSTOP_ABORT                   _UxGT("擋塊終止")  //"Endstop abort"
-#define MSG_HEATING_FAILED_LCD              _UxGT("加熱失敗")  //"Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP              _UxGT("錯誤:REDUNDANT TEMP")  //"Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY                 _UxGT("溫控失控")  //"THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP                     _UxGT("錯誤:最高溫度")  //"Err: MAXTEMP"
-#define MSG_ERR_MINTEMP                     _UxGT("錯誤:最低溫度")  //"Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED                 _UxGT("錯誤:最高熱床溫度")  //"Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED                 _UxGT("錯誤:最低熱床溫度")  //"Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING                    _UxGT("歸位 XY 先")  //"Home XY First"
-#define MSG_HALTED                          _UxGT("印表機停機")  //"PRINTER HALTED"
-#define MSG_PLEASE_RESET                    _UxGT("請重置")  //"Please reset"
-#define MSG_SHORT_DAY                       _UxGT("天")  //"d" // One character only
-#define MSG_SHORT_HOUR                      _UxGT("時")  //"h" // One character only
-#define MSG_SHORT_MINUTE                    _UxGT("分")  //"m" // One character only
-#define MSG_HEATING                         _UxGT("加熱中 ...")  //"Heating..."
-#define MSG_BED_HEATING                     _UxGT("加熱熱床中 ...")  //"Bed Heating..."
-#define MSG_DELTA_CALIBRATE                 _UxGT("⊿校準")  //"Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X               _UxGT("⊿校準X")  //"Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y               _UxGT("⊿校準Y")  //"Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z               _UxGT("⊿校準Z")  //"Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER          _UxGT("⊿校準中心")  //"Calibrate Center"
-#define MSG_DELTA_SETTINGS                  _UxGT("⊿設置") // "Delta Settings"
-#define MSG_DELTA_AUTO_CALIBRATE            _UxGT("⊿自動校準") // "Auto Calibration"
-#define MSG_DELTA_HEIGHT_CALIBRATE          _UxGT("設置⊿高度") // "Set Delta Height"
-#define MSG_DELTA_DIAG_ROD                  _UxGT("⊿斜柱") // "Diag Rod"
-#define MSG_DELTA_HEIGHT                    _UxGT("⊿高度") // "Height"
-#define MSG_DELTA_RADIUS                    _UxGT("⊿半徑") // "Radius"
-#define MSG_INFO_MENU                       _UxGT("關於印表機")  //"About Printer"
-#define MSG_INFO_PRINTER_MENU               _UxGT("印表機訊息")  //"Printer Info"
-#define MSG_3POINT_LEVELING                 _UxGT("三點調平") // "3-Point Leveling"
-#define MSG_LINEAR_LEVELING                 _UxGT("線性調平") // "Linear Leveling"
-#define MSG_BILINEAR_LEVELING               _UxGT("雙線性調平") // "Bilinear Leveling"
-#define MSG_UBL_LEVELING                    _UxGT("統一熱床調平(UBL)") // "Unified Bed Leveling"
-#define MSG_MESH_LEVELING                   _UxGT("網格調平") // "Mesh Leveling"
-#define MSG_INFO_STATS_MENU                 _UxGT("印表機統計")  //"Printer Stats"
-#define MSG_INFO_BOARD_MENU                 _UxGT("主板訊息")  //"Board Info"
-#define MSG_INFO_THERMISTOR_MENU            _UxGT("溫度計")  //"Thermistors"
-#define MSG_INFO_EXTRUDERS                  _UxGT("擠出機")  //"Extruders"
-#define MSG_INFO_BAUDRATE                   _UxGT("傳輸率")  //"Baud"
-#define MSG_INFO_PROTOCOL                   _UxGT("協議")  //"Protocol"
-#define MSG_CASE_LIGHT                      _UxGT("外殼燈") // "Case light"
-#define MSG_CASE_LIGHT_BRIGHTNESS           _UxGT("燈亮度") // "Light BRIGHTNESS"
+  PROGMEM Language_Str MSG_MOVING                          = _UxGT("移動 ...");     // "Moving...")
+  PROGMEM Language_Str MSG_FREE_XY                         = _UxGT("釋放 XY");     // "Free XY")
+  PROGMEM Language_Str MSG_MOVE_X                          = _UxGT("移動X");     //"Move X"
+  PROGMEM Language_Str MSG_MOVE_Y                          = _UxGT("移動Y");     //"Move Y"
+  PROGMEM Language_Str MSG_MOVE_Z                          = _UxGT("移動Z");     //"Move Z"
+  PROGMEM Language_Str MSG_MOVE_E                          = _UxGT("擠出機");     //"Extruder"
+  PROGMEM Language_Str MSG_MOVE_E0                         = _UxGT("擠出機 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_MOVE_E1                         = _UxGT("擠出機 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_MOVE_E2                         = _UxGT("擠出機 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_MOVE_E3                         = _UxGT("擠出機 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_MOVE_E4                         = _UxGT("擠出機 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_MOVE_E5                         = _UxGT("擠出機 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_MOVE_Z_DIST                     = _UxGT("移動 %s mm");     //"Move 0.025mm"
+  PROGMEM Language_Str MSG_MOVE_01MM                       = _UxGT("移動 0.1 mm");     //"Move 0.1mm"
+  PROGMEM Language_Str MSG_MOVE_1MM                        = _UxGT("移動 1 mm");     //"Move 1mm"
+  PROGMEM Language_Str MSG_MOVE_10MM                       = _UxGT("移動 10 mm");     //"Move 10mm"
+  PROGMEM Language_Str MSG_SPEED                           = _UxGT("速率");     //"Speed"
+  PROGMEM Language_Str MSG_BED_Z                           = _UxGT("熱床Z");     //"Bed Z"
+  PROGMEM Language_Str MSG_NOZZLE                          = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴");     //"Nozzle" 噴嘴
+  PROGMEM Language_Str MSG_NOZZLE_0                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N0;
+  PROGMEM Language_Str MSG_NOZZLE_1                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N1;
+  PROGMEM Language_Str MSG_NOZZLE_2                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N2;
+  PROGMEM Language_Str MSG_NOZZLE_3                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N3;
+  PROGMEM Language_Str MSG_NOZZLE_4                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N4;
+  PROGMEM Language_Str MSG_NOZZLE_5                        = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N5;
+  PROGMEM Language_Str MSG_BED                             = " " LCD_STR_THERMOMETER _UxGT(" 熱床");     //"Bed"
+  PROGMEM Language_Str MSG_FAN_SPEED                       = _UxGT("風扇速率");     //"Fan speed"
+  PROGMEM Language_Str MSG_FAN_SPEED_1                     = _UxGT("風扇速率 1");
+  PROGMEM Language_Str MSG_FAN_SPEED_2                     = _UxGT("風扇速率 2");
+  PROGMEM Language_Str MSG_FAN_SPEED_3                     = _UxGT("風扇速率 3");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED                 = _UxGT("額外風扇速率");     // "Extra fan speed"
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1               = _UxGT("額外風扇速率 1");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2               = _UxGT("額外風扇速率 2");
+  PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3               = _UxGT("額外風扇速率 3");
+  PROGMEM Language_Str MSG_FLOW                            = _UxGT("擠出速率");
+  PROGMEM Language_Str MSG_FLOW_0                          = _UxGT("擠出速率 ") LCD_STR_N0;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_1                          = _UxGT("擠出速率 ") LCD_STR_N1;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_2                          = _UxGT("擠出速率 ") LCD_STR_N2;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_3                          = _UxGT("擠出速率 ") LCD_STR_N3;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_4                          = _UxGT("擠出速率 ") LCD_STR_N4;     //"Flow"
+  PROGMEM Language_Str MSG_FLOW_5                          = _UxGT("擠出速率 ") LCD_STR_N5;     //"Flow"
+  PROGMEM Language_Str MSG_CONTROL                         = _UxGT("控制");     //"Control"
+  PROGMEM Language_Str MSG_MIN                             = " " LCD_STR_THERMOMETER _UxGT(" 最小");     //" " LCD_STR_THERMOMETER " Min"
+  PROGMEM Language_Str MSG_MAX                             = " " LCD_STR_THERMOMETER _UxGT(" 最大");     //" " LCD_STR_THERMOMETER " Max"
+  PROGMEM Language_Str MSG_FACTOR                          = " " LCD_STR_THERMOMETER _UxGT(" 系數");     //" " LCD_STR_THERMOMETER " Fact"
+  PROGMEM Language_Str MSG_AUTOTEMP                        = _UxGT("自動控溫");     //"Autotemp"
+  PROGMEM Language_Str MSG_LCD_ON                          = _UxGT("é–‹");     //"On"
+  PROGMEM Language_Str MSG_LCD_OFF                         = _UxGT("關");     //"Off"
+  PROGMEM Language_Str MSG_PID_P                           = _UxGT("PID-P");     //"PID-P"
+  PROGMEM Language_Str MSG_PID_P_E0                        = _UxGT("PID-P ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_P_E1                        = _UxGT("PID-P ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_P_E2                        = _UxGT("PID-P ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_P_E3                        = _UxGT("PID-P ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_P_E4                        = _UxGT("PID-P ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_P_E5                        = _UxGT("PID-P ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_I                           = _UxGT("PID-I");     //"PID-I"
+  PROGMEM Language_Str MSG_PID_I_E0                        = _UxGT("PID-I ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_I_E1                        = _UxGT("PID-I ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_I_E2                        = _UxGT("PID-I ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_I_E3                        = _UxGT("PID-I ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_I_E4                        = _UxGT("PID-I ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_I_E5                        = _UxGT("PID-I ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_D                           = _UxGT("PID-D");     //"PID-D"
+  PROGMEM Language_Str MSG_PID_D_E0                        = _UxGT("PID-D ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_D_E1                        = _UxGT("PID-D ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_D_E2                        = _UxGT("PID-D ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_D_E3                        = _UxGT("PID-D ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_D_E4                        = _UxGT("PID-D ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_D_E5                        = _UxGT("PID-D ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_PID_C                           = _UxGT("PID-C");     //"PID-C"
+  PROGMEM Language_Str MSG_PID_C_E0                        = _UxGT("PID-C ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_PID_C_E1                        = _UxGT("PID-C ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_PID_C_E2                        = _UxGT("PID-C ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_PID_C_E3                        = _UxGT("PID-C ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_PID_C_E4                        = _UxGT("PID-C ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_PID_C_E5                        = _UxGT("PID-C ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_SELECT                          = _UxGT("選擇");     //"Select"
+  PROGMEM Language_Str MSG_SELECT_E0                       = _UxGT("選擇 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_SELECT_E1                       = _UxGT("選擇 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_SELECT_E2                       = _UxGT("選擇 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_SELECT_E3                       = _UxGT("選擇 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_SELECT_E4                       = _UxGT("選擇 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_SELECT_E5                       = _UxGT("選擇 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_ACC                             = _UxGT("加速度");     //"Accel" acceleration
+  PROGMEM Language_Str MSG_JERK                            = _UxGT("抖動速率");     //"Jerk"
+  PROGMEM Language_Str MSG_VA_JERK                         = _UxGT("軸抖動速率") LCD_STR_A;     //"Va-jerk"
+  PROGMEM Language_Str MSG_VB_JERK                         = _UxGT("軸抖動速率") LCD_STR_B;     //"Vb-jerk"
+  PROGMEM Language_Str MSG_VC_JERK                         = _UxGT("軸抖動速率") LCD_STR_C;     //"Vc-jerk"
+  PROGMEM Language_Str MSG_VE_JERK                         = _UxGT("擠出機抖動速率");     //"Ve-jerk"
+  PROGMEM Language_Str MSG_VELOCITY                        = _UxGT("速度");     // "Velocity"
+  PROGMEM Language_Str MSG_VMAX_A                          = _UxGT("最大進料速率") LCD_STR_A;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_B                          = _UxGT("最大進料速率") LCD_STR_B;
+  PROGMEM Language_Str MSG_VMAX_C                          = _UxGT("最大進料速率") LCD_STR_C;
+  PROGMEM Language_Str MSG_VMAX_E                          = _UxGT("最大進料速率") LCD_STR_E;
+  PROGMEM Language_Str MSG_VMAX_E0                         = _UxGT("最大進料速率 ") LCD_STR_E0;     //"Vmax " max_feedrate_mm_s
+  PROGMEM Language_Str MSG_VMAX_E1                         = _UxGT("最大進料速率 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_VMAX_E2                         = _UxGT("最大進料速率 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_VMAX_E3                         = _UxGT("最大進料速率 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_VMAX_E4                         = _UxGT("最大進料速率 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_VMAX_E5                         = _UxGT("最大進料速率 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_VMIN                            = _UxGT("最小進料速率");     //"Vmin"  min_feedrate_mm_s
+  PROGMEM Language_Str MSG_VTRAV_MIN                       = _UxGT("最小移動速率");     //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+  PROGMEM Language_Str MSG_ACCELERATION                    = _UxGT("加速度");     // "Acceleration"
+  PROGMEM Language_Str MSG_AMAX_A                          = _UxGT("最大列印加速度") LCD_STR_A;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_B                          = _UxGT("最大列印加速度") LCD_STR_B;
+  PROGMEM Language_Str MSG_AMAX_C                          = _UxGT("最大列印加速度") LCD_STR_C;
+  PROGMEM Language_Str MSG_AMAX_E                          = _UxGT("最大列印加速度") LCD_STR_E;
+  PROGMEM Language_Str MSG_AMAX_E0                         = _UxGT("最大列印加速度 ") LCD_STR_E0;     //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+  PROGMEM Language_Str MSG_AMAX_E1                         = _UxGT("最大列印加速度 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_AMAX_E2                         = _UxGT("最大列印加速度 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_AMAX_E3                         = _UxGT("最大列印加速度 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_AMAX_E4                         = _UxGT("最大列印加速度 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_AMAX_E5                         = _UxGT("最大列印加速度 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_A_RETRACT                       = _UxGT("回縮加速度");     //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+  PROGMEM Language_Str MSG_A_TRAVEL                        = _UxGT("非列印移動加速度");     //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+  PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("軸步數/mm");     //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("軸步數/mm");     //"Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("軸步數/mm");
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("軸步數/mm");
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("擠出機步數/mm");     //"Esteps/mm"
+  PROGMEM Language_Str MSG_E0_STEPS                        = _UxGT("擠出機") LCD_STR_N0 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_E1_STEPS                        = _UxGT("擠出機") LCD_STR_N1 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_E2_STEPS                        = _UxGT("擠出機") LCD_STR_N2 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_E3_STEPS                        = _UxGT("擠出機") LCD_STR_N3 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_E4_STEPS                        = _UxGT("擠出機") LCD_STR_N4 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_E5_STEPS                        = _UxGT("擠出機") LCD_STR_N5 _UxGT("步數/mm");
+  PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("溫度");     //"Temperature"
+  PROGMEM Language_Str MSG_MOTION                          = _UxGT("運作");     //"Motion"
+  PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("絲料測容");     //"Filament" menu_control_volumetric
+  PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED              = _UxGT("測容積mm³");     //"E in mm3" volumetric_enabled
+  PROGMEM Language_Str MSG_FILAMENT_DIAM                   = _UxGT("絲料直徑");     //"Fil. Dia."
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E0                = _UxGT("絲料直徑 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E1                = _UxGT("絲料直徑 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E2                = _UxGT("絲料直徑 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E3                = _UxGT("絲料直徑 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E4                = _UxGT("絲料直徑 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENT_DIAM_E5                = _UxGT("絲料直徑 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENT_UNLOAD                 = _UxGT("卸載 mm");     // "Unload mm"
+  PROGMEM Language_Str MSG_FILAMENT_LOAD                   = _UxGT("装載 mm");     // "Load mm"
+  PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD對比度");     //"LCD contrast"
+  PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("保存設置");     //"Store memory"
+  PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("載入設置");     //"Load memory"
+  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("恢復安全值");     //"Restore failsafe"
+  PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("初始化設置");     // "Initialize EEPROM"
+  PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("刷新");     //"Refresh"
+  PROGMEM Language_Str MSG_WATCH                           = _UxGT("資訊界面");     //"Info screen"
+  PROGMEM Language_Str MSG_PREPARE                         = _UxGT("準備");     //"Prepare"
+  PROGMEM Language_Str MSG_TUNE                            = _UxGT("調整");     //"Tune"
+  PROGMEM Language_Str MSG_PAUSE_PRINT                     = _UxGT("暫停列印");     //"Pause print"
+  PROGMEM Language_Str MSG_RESUME_PRINT                    = _UxGT("恢復列印");     //"Resume print"
+  PROGMEM Language_Str MSG_STOP_PRINT                      = _UxGT("停止列印");     //"Stop print"
+  PROGMEM Language_Str MSG_MEDIA_MENU                      = _UxGT("從記憶卡上列印");     //"Print from SD"
+  PROGMEM Language_Str MSG_NO_MEDIA                        = _UxGT("無記憶卡");     //"No SD card"
+  PROGMEM Language_Str MSG_DWELL                           = _UxGT("休眠 ...");     //"Sleep..."
+  PROGMEM Language_Str MSG_USERWAIT                        = _UxGT("點擊繼續 ...");     //"Click to resume..."
+  PROGMEM Language_Str MSG_PRINT_PAUSED                    = _UxGT("列印已暫停");     // "Print paused"
+  PROGMEM Language_Str MSG_PRINT_ABORTED                   = _UxGT("已取消列印");     //"Print aborted"
+  PROGMEM Language_Str MSG_NO_MOVE                         = _UxGT("無移動");     //"No move."
+  PROGMEM Language_Str MSG_KILLED                          = _UxGT("已砍掉");     //"KILLED. "
+  PROGMEM Language_Str MSG_STOPPED                         = _UxGT("已停止");     //"STOPPED. "
+  PROGMEM Language_Str MSG_CONTROL_RETRACT                 = _UxGT("回縮長度mm");     //"Retract mm" retract_length, retract length (positive mm)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP            = _UxGT("換手回抽長度mm");     //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+  PROGMEM Language_Str MSG_CONTROL_RETRACTF                = _UxGT("回縮速率mm/s");     //"Retract  V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP            = _UxGT("Hop mm");     //"Hop mm" retract_zraise, retract Z-lift
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER         = _UxGT("回縮恢復長度mm");     //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP    = _UxGT("換手回縮恢復長度mm");     //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF        = _UxGT("回縮恢復後進料速率mm/s");     //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+  PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF   = _UxGT("S UnRet V");     // "S UnRet V"
+  PROGMEM Language_Str MSG_AUTORETRACT                     = _UxGT("自動回縮");     //"AutoRetr." autoretract_enabled,
+  PROGMEM Language_Str MSG_FILAMENTCHANGE                  = _UxGT("更換絲料");     //"Change filament"
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E0               = _UxGT("更換絲料 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E1               = _UxGT("更換絲料 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E2               = _UxGT("更換絲料 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E3               = _UxGT("更換絲料 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E4               = _UxGT("更換絲料 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTCHANGE_E5               = _UxGT("更換絲料 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTLOAD                    = _UxGT("裝載絲料");     // "Load filament"
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E0                 = _UxGT("裝載絲料 ") LCD_STR_E0;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E1                 = _UxGT("裝載絲料 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E2                 = _UxGT("裝載絲料 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E3                 = _UxGT("裝載絲料 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E4                 = _UxGT("裝載絲料 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTLOAD_E5                 = _UxGT("裝載絲料 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0               = _UxGT("卸載絲料 ") LCD_STR_E0;     // "Unload filament"
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1               = _UxGT("卸載絲料 ") LCD_STR_E1;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2               = _UxGT("卸載絲料 ") LCD_STR_E2;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3               = _UxGT("卸載絲料 ") LCD_STR_E3;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4               = _UxGT("卸載絲料 ") LCD_STR_E4;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5               = _UxGT("卸載絲料 ") LCD_STR_E5;
+  PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("卸載全部");     // "Unload All"
+  PROGMEM Language_Str MSG_INIT_MEDIA                      = _UxGT("初始化記憶卡");     //"Init. SD card"
+  PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("更換記憶卡");     //"Change SD card"
+  PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z探針在熱床之外");     //"Z probe out. bed" Z probe is not within the physical limits
+  PROGMEM Language_Str MSG_SKEW_FACTOR                     = _UxGT("偏斜因數");     // "Skew Factor"
+  PROGMEM Language_Str MSG_BLTOUCH                         = _UxGT("BLTouch");     // "BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_SELFTEST                = _UxGT("BLTouch 自檢");     // "BLTouch Self-Test"
+  PROGMEM Language_Str MSG_BLTOUCH_RESET                   = _UxGT("重置BLTouch");     // "Reset BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_DEPLOY                  = _UxGT("部署BLTouch");     // "Deploy BLTouch"
+  PROGMEM Language_Str MSG_BLTOUCH_STOW                    = _UxGT("裝載BLTouch");     // "Stow BLTouch"
+  PROGMEM Language_Str MSG_HOME_FIRST                      = _UxGT("歸位 %s%s%s 先");     //"Home ... first"
+  PROGMEM Language_Str MSG_ZPROBE_ZOFFSET                  = _UxGT("Z偏移");     //"Z Offset"
+  PROGMEM Language_Str MSG_BABYSTEP_X                      = _UxGT("微量調整X軸");     //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+  PROGMEM Language_Str MSG_BABYSTEP_Y                      = _UxGT("微量調整Y軸");     //"Babystep Y"
+  PROGMEM Language_Str MSG_BABYSTEP_Z                      = _UxGT("微量調整Z軸");     //"Babystep Z"
+  PROGMEM Language_Str MSG_ENDSTOP_ABORT                   = _UxGT("擋塊終止");     //"Endstop abort"
+  PROGMEM Language_Str MSG_HEATING_FAILED_LCD              = _UxGT("加熱失敗");     //"Heating failed"
+  PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP              = _UxGT("錯誤:REDUNDANT TEMP");     //"Err: REDUNDANT TEMP"
+  PROGMEM Language_Str MSG_THERMAL_RUNAWAY                 = _UxGT("溫控失控");     //"THERMAL RUNAWAY"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP                     = _UxGT("錯誤:最高溫度");     //"Err: MAXTEMP"
+  PROGMEM Language_Str MSG_ERR_MINTEMP                     = _UxGT("錯誤:最低溫度");     //"Err: MINTEMP"
+  PROGMEM Language_Str MSG_ERR_MAXTEMP_BED                 = _UxGT("錯誤:最高熱床溫度");     //"Err: MAXTEMP BED"
+  PROGMEM Language_Str MSG_ERR_MINTEMP_BED                 = _UxGT("錯誤:最低熱床溫度");     //"Err: MINTEMP BED"
+  PROGMEM Language_Str MSG_ERR_Z_HOMING                    = _UxGT("歸位 XY 先");     //"Home XY First"
+  PROGMEM Language_Str MSG_HALTED                          = _UxGT("印表機停機");     //"PRINTER HALTED"
+  PROGMEM Language_Str MSG_PLEASE_RESET                    = _UxGT("請重置");     //"Please reset"
+  PROGMEM Language_Str MSG_SHORT_DAY                       = _UxGT("天");     //"d" // One character only
+  PROGMEM Language_Str MSG_SHORT_HOUR                      = _UxGT("時");     //"h" // One character only
+  PROGMEM Language_Str MSG_SHORT_MINUTE                    = _UxGT("分");     //"m" // One character only
+  PROGMEM Language_Str MSG_HEATING                         = _UxGT("加熱中 ...");     //"Heating..."
+  PROGMEM Language_Str MSG_BED_HEATING                     = _UxGT("加熱熱床中 ...");     //"Bed Heating..."
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE                 = _UxGT("⊿校準");     //"Delta Calibration"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_X               = _UxGT("⊿校準X");     //"Calibrate X"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y               = _UxGT("⊿校準Y");     //"Calibrate Y"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z               = _UxGT("⊿校準Z");     //"Calibrate Z"
+  PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER          = _UxGT("⊿校準中心");     //"Calibrate Center"
+  PROGMEM Language_Str MSG_DELTA_SETTINGS                  = _UxGT("⊿設置");     // "Delta Settings"
+  PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE            = _UxGT("⊿自動校準");     // "Auto Calibration"
+  PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE          = _UxGT("設置⊿高度");     // "Set Delta Height"
+  PROGMEM Language_Str MSG_DELTA_DIAG_ROD                  = _UxGT("⊿斜柱");     // "Diag Rod"
+  PROGMEM Language_Str MSG_DELTA_HEIGHT                    = _UxGT("⊿高度");     // "Height"
+  PROGMEM Language_Str MSG_DELTA_RADIUS                    = _UxGT("⊿半徑");     // "Radius"
+  PROGMEM Language_Str MSG_INFO_MENU                       = _UxGT("關於印表機");     //"About Printer"
+  PROGMEM Language_Str MSG_INFO_PRINTER_MENU               = _UxGT("印表機訊息");     //"Printer Info"
+  PROGMEM Language_Str MSG_3POINT_LEVELING                 = _UxGT("三點調平");     // "3-Point Leveling"
+  PROGMEM Language_Str MSG_LINEAR_LEVELING                 = _UxGT("線性調平");     // "Linear Leveling"
+  PROGMEM Language_Str MSG_BILINEAR_LEVELING               = _UxGT("雙線性調平");     // "Bilinear Leveling"
+  PROGMEM Language_Str MSG_UBL_LEVELING                    = _UxGT("統一熱床調平(UBL)");     // "Unified Bed Leveling"
+  PROGMEM Language_Str MSG_MESH_LEVELING                   = _UxGT("網格調平");     // "Mesh Leveling"
+  PROGMEM Language_Str MSG_INFO_STATS_MENU                 = _UxGT("印表機統計");     //"Printer Stats"
+  PROGMEM Language_Str MSG_INFO_BOARD_MENU                 = _UxGT("主板訊息");     //"Board Info"
+  PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU            = _UxGT("溫度計");     //"Thermistors"
+  PROGMEM Language_Str MSG_INFO_EXTRUDERS                  = _UxGT("擠出機");     //"Extruders"
+  PROGMEM Language_Str MSG_INFO_BAUDRATE                   = _UxGT("傳輸率");     //"Baud"
+  PROGMEM Language_Str MSG_INFO_PROTOCOL                   = _UxGT("協議");     //"Protocol"
+  PROGMEM Language_Str MSG_CASE_LIGHT                      = _UxGT("外殼燈");     // "Case light"
+  PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS           = _UxGT("燈亮度");     // "Light BRIGHTNESS"
 
-#define MSG_EXPECTED_PRINTER                _UxGT("打印機不正確") // "The printer is incorrect"
+  PROGMEM Language_Str MSG_EXPECTED_PRINTER                = _UxGT("打印機不正確");     // "The printer is incorrect"
 
-#if LCD_WIDTH >= 20
-  #define MSG_INFO_PRINT_COUNT              _UxGT("列印計數")  //"Print Count"
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("已完成")  //"Completed"
-  #define MSG_INFO_PRINT_TIME               _UxGT("總列印時間")  //"Total print time"
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("最長工作時間")  //"Longest job time"
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("總計擠出")  //"Extruded total"
-#else
-  #define MSG_INFO_PRINT_COUNT              _UxGT("列印數")  //"Prints"
-  #define MSG_INFO_COMPLETED_PRINTS         _UxGT("完成")  //"Completed"
-  #define MSG_INFO_PRINT_TIME               _UxGT("總共")  //"Total"
-  #define MSG_INFO_PRINT_LONGEST            _UxGT("最長")  //"Longest"
-  #define MSG_INFO_PRINT_FILAMENT           _UxGT("已擠出")  //"Extruded"
-#endif
+  #if LCD_WIDTH >= 20
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("列印計數");     //"Print Count"
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("已完成");     //"Completed"
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("總列印時間");     //"Total print time"
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("最長工作時間");     //"Longest job time"
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("總計擠出");     //"Extruded total"
+  #else
+    PROGMEM Language_Str MSG_INFO_PRINT_COUNT              = _UxGT("列印數");     //"Prints"
+    PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS         = _UxGT("完成");     //"Completed"
+    PROGMEM Language_Str MSG_INFO_PRINT_TIME               = _UxGT("總共");     //"Total"
+    PROGMEM Language_Str MSG_INFO_PRINT_LONGEST            = _UxGT("最長");     //"Longest"
+    PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT           = _UxGT("已擠出");     //"Extruded"
+  #endif
 
-#define MSG_INFO_MIN_TEMP                   _UxGT("最低溫度")  //"Min Temp"
-#define MSG_INFO_MAX_TEMP                   _UxGT("最高溫度")  //"Max Temp"
-#define MSG_INFO_PSU                        _UxGT("電源供應")  //"Power Supply"
-#define MSG_DRIVE_STRENGTH                  _UxGT("驅動力度") // "Drive Strength"
-#define MSG_DAC_PERCENT                     _UxGT("é©…å‹• %") // "Driver %"
-#define MSG_DAC_EEPROM_WRITE                _UxGT("保存驅動設置") // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE    _UxGT("列印已暫停") // "PRINT PAUSED"
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD     _UxGT("裝載絲料") // "LOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD   _UxGT("卸載絲料") // "UNLOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("恢複選項:") // "RESUME OPTIONS:"
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE    _UxGT("清除更多") // "Purge more"
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("恢復列印")  //"Resume print"
-#define MSG_FILAMENT_CHANGE_NOZZLE          _UxGT("  噴嘴: ") // "  Nozzle: "
-#define MSG_ERR_HOMING_FAILED               _UxGT("歸原位失敗") // "Homing failed"
-#define MSG_ERR_PROBING_FAILED              _UxGT("探針探測失敗") // "Probing failed"
-#define MSG_M600_TOO_COLD                   _UxGT("M600: 太涼") // "M600: Too cold"
+  PROGMEM Language_Str MSG_INFO_MIN_TEMP                   = _UxGT("最低溫度");     //"Min Temp"
+  PROGMEM Language_Str MSG_INFO_MAX_TEMP                   = _UxGT("最高溫度");     //"Max Temp"
+  PROGMEM Language_Str MSG_INFO_PSU                        = _UxGT("電源供應");     //"Power Supply"
+  PROGMEM Language_Str MSG_DRIVE_STRENGTH                  = _UxGT("驅動力度");     // "Drive Strength"
+  PROGMEM Language_Str MSG_DAC_PERCENT                     = _UxGT("é©…å‹• %");     // "Driver %"
+  PROGMEM Language_Str MSG_DAC_EEPROM_WRITE                = _UxGT("保存驅動設置");     // "DAC EEPROM Write"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE    = _UxGT("列印已暫停");     // "PRINT PAUSED"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD     = _UxGT("裝載絲料");     // "LOAD FILAMENT"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD   = _UxGT("卸載絲料");     // "UNLOAD FILAMENT"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER   = _UxGT("恢複選項:");     // "RESUME OPTIONS:"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE    = _UxGT("清除更多");     // "Purge more"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME   = _UxGT("恢復列印");     //"Resume print"
+  PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE          = _UxGT("  噴嘴: ");     // "  Nozzle: "
+  PROGMEM Language_Str MSG_LCD_HOMING_FAILED               = _UxGT("歸原位失敗");     // "Homing failed"
+  PROGMEM Language_Str MSG_LCD_PROBING_FAILED              = _UxGT("探針探測失敗");     // "Probing failed"
+  PROGMEM Language_Str MSG_M600_TOO_COLD                   = _UxGT("M600: 太冷");     // "M600: Too cold"
 
-#if LCD_HEIGHT >= 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("等待開始")  //"Wait for start"
-  #define MSG_FILAMENT_CHANGE_INIT_2        _UxGT("絲料")  //"of the filament"
-  #define MSG_FILAMENT_CHANGE_INIT_3        _UxGT("變更")  //"change"
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("等待")  //"Wait for"
-  #define MSG_FILAMENT_CHANGE_UNLOAD_2      _UxGT("卸下絲料")  //"filament unload"
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("插入絲料")  //"Insert filament"
-  #define MSG_FILAMENT_CHANGE_INSERT_2      _UxGT("並按鍵")  //"and press button"
-  #define MSG_FILAMENT_CHANGE_INSERT_3      _UxGT("繼續 ...")  //"to continue..."
-  #define MSG_FILAMENT_CHANGE_HEAT_1        _UxGT("按下按鈕來") // "Press button to"
-  #define MSG_FILAMENT_CHANGE_HEAT_2        _UxGT("加熱噴嘴.") // "heat nozzle."
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("加熱噴嘴") // "Heating nozzle"
-  #define MSG_FILAMENT_CHANGE_HEATING_2     _UxGT("請等待 ...") // "Please wait..."
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("等待")  //"Wait for"
-  #define MSG_FILAMENT_CHANGE_LOAD_2        _UxGT("進料")  //"filament load"
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("等待") // "Wait for"
-  #define MSG_FILAMENT_CHANGE_PURGE_2       _UxGT("絲料清除") // "filament purge"
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("等待列印")  //"Wait for print"
-  #define MSG_FILAMENT_CHANGE_RESUME_2      _UxGT("恢復")  //"to resume"
-#else // LCD_HEIGHT < 4
-  #define MSG_FILAMENT_CHANGE_INIT_1        _UxGT("請等待 ...")  //"Please wait..."
-  #define MSG_FILAMENT_CHANGE_UNLOAD_1      _UxGT("退出中 ...")  //"Ejecting..."
-  #define MSG_FILAMENT_CHANGE_INSERT_1      _UxGT("插入並點擊")  //"Insert and Click"
-  #define MSG_FILAMENT_CHANGE_HEATING_1     _UxGT("加熱中 ...") // "Heating..."
-  #define MSG_FILAMENT_CHANGE_LOAD_1        _UxGT("載入中 ...")  //"Loading..."
-  #define MSG_FILAMENT_CHANGE_PURGE_1       _UxGT("清除中 ...") // "Purging..."
-  #define MSG_FILAMENT_CHANGE_RESUME_1      _UxGT("恢復中 ...")  //"Resuming..."
-#endif // LCD_HEIGHT < 4
+  #if LCD_HEIGHT >= 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_3_LINE("等待開始", "絲料", "變更"));     //"Wait for start of the filament change"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_2_LINE("等待", "卸下絲料"));     //"Wait for filament unload"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_3_LINE("插入絲料", "並按鍵", "繼續 ..."));     //"Insert filament and press button to continue..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT          = _UxGT(MSG_2_LINE("按下按鈕來", "加熱噴嘴."));     // "Press button to heat nozzle."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_2_LINE("加熱噴嘴", "請等待 ..."));     // "Heating nozzle Please wait..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_2_LINE("等待", "進料"));     //"Wait for filament load"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_2_LINE("等待", "絲料清除"));     // "Wait for filament purge"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_2_LINE("等待列印", "恢復"));     //"Wait for print to resume"
+  #else // LCD_HEIGHT < 4
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT          = _UxGT(MSG_1_LINE("請等待 ..."));     //"Please wait..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD        = _UxGT(MSG_1_LINE("退出中 ..."));     //"Ejecting..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT        = _UxGT(MSG_1_LINE("插入並點擊"));     //"Insert and Click"
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING       = _UxGT(MSG_1_LINE("加熱中 ..."));     // "Heating..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD          = _UxGT(MSG_1_LINE("載入中 ..."));     //"Loading..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE         = _UxGT(MSG_1_LINE("清除中 ..."));     // "Purging..."
+    PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME        = _UxGT(MSG_1_LINE("恢復中 ..."));     //"Resuming..."
+  #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp
index 1691e47995..a953318bfa 100644
--- a/Marlin/src/lcd/menu/menu.cpp
+++ b/Marlin/src/lcd/menu/menu.cpp
@@ -138,7 +138,7 @@ void MenuItem_gcode::action(PGM_P const, PGM_P const pgcode) { queue.inject_P(pg
  *   EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
  *
  * This expands into a more primitive menu item:
- *  _MENU_ITEM_P(int3, false, PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
+ *  _MENU_ITEM_P(int3, false, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
  *
  * ...which calls:
  *       MenuItem_int3::action(plabel, &feedrate_percentage, 10, 999)
@@ -324,8 +324,7 @@ void MarlinUI::_synchronize() {
 // Display the synchronize screen with a custom message
 // ** This blocks the command queue! **
 void MarlinUI::synchronize(PGM_P const msg/*=nullptr*/) {
-  static const char moving[] PROGMEM = MSG_MOVING;
-  sync_message = msg ? msg : moving;
+  sync_message = msg ?: GET_TEXT(MSG_MOVING);
   _synchronize();
 }
 
@@ -419,10 +418,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
     if (ui.should_draw()) {
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
         if (!do_probe)
-          draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[active_extruder].z));
+          draw_edit_screen(GET_TEXT(MSG_Z_OFFSET), ftostr43sign(hotend_offset[active_extruder].z));
         else
       #endif
-          draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset.z));
+          draw_edit_screen(GET_TEXT(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset.z));
 
       #if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY)
         if (do_probe) _lcd_zoffset_overlay_gfx(probe_offset.z);
@@ -467,7 +466,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
 
 void _lcd_draw_homing() {
   constexpr uint8_t line = (LCD_HEIGHT - 1) / 2;
-  if (ui.should_draw()) draw_menu_item_static(line, PSTR(MSG_LEVEL_BED_HOMING));
+  if (ui.should_draw()) draw_menu_item_static(line, GET_TEXT(MSG_LEVEL_BED_HOMING));
   ui.refresh(LCDVIEW_CALL_NO_REDRAW);
 }
 
diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h
index 2376215776..d395057b76 100644
--- a/Marlin/src/lcd/menu/menu.h
+++ b/Marlin/src/lcd/menu/menu.h
@@ -75,16 +75,17 @@ typedef void (*selectFunc_t)();
 void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff);
 void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=nullptr, PGM_P const suff=nullptr);
 inline void do_select_screen_yn(selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=nullptr, PGM_P const suff=nullptr) {
-  do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesFunc, noFunc, pref, string, suff);
+  do_select_screen(GET_TEXT(MSG_YES), GET_TEXT(MSG_NO), yesFunc, noFunc, pref, string, suff);
 }
 
-#define SS_LEFT   0x00
-#define SS_CENTER 0x01
-#define SS_INVERT 0x02
+#define SS_LEFT    0x00
+#define SS_CENTER  0x01
+#define SS_INVERT  0x02
+#define SS_DEFAULT SS_CENTER
 
 void draw_edit_screen(PGM_P const pstr, const char* const value=nullptr);
 void draw_menu_item(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char);
-void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style=SS_CENTER, const char * const valstr=nullptr);
+void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style=SS_DEFAULT, const char * const valstr=nullptr);
 void _draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data, const bool pgm);
 FORCE_INLINE void draw_menu_item_back(const bool sel, const uint8_t row, PGM_P const pstr) { draw_menu_item(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]); }
 FORCE_INLINE void draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data) { _draw_menu_item_edit(sel, row, pstr, data, false); }
@@ -93,7 +94,7 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P
 #define draw_menu_item_gcode(sel, row, pstr, gcode)   draw_menu_item(sel, row, pstr, '>', ' ')
 #define draw_menu_item_function(sel, row, pstr, data) draw_menu_item(sel, row, pstr, '>', ' ')
 #define DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(VAL)      draw_menu_item_edit(sel, row, pstr, VAL)
-#define DRAW_BOOL_SETTING(sel, row, pstr, data)       draw_menu_item_edit_P(sel, row, pstr, (*(data))?PSTR(MSG_LCD_ON):PSTR(MSG_LCD_OFF))
+#define DRAW_BOOL_SETTING(sel, row, pstr, data)       draw_menu_item_edit_P(sel, row, pstr, (*(data))?GET_TEXT(MSG_LCD_ON):GET_TEXT(MSG_LCD_OFF))
 
 #if ENABLED(SDSUPPORT)
   class CardReader;
@@ -321,17 +322,17 @@ class MenuItem_bool {
  * Examples:
  *   BACK_ITEM(MSG_WATCH)
  *   MENU_ITEM(back, MSG_WATCH)
- *     draw_menu_item_back(sel, row, PSTR(MSG_WATCH))
+ *     draw_menu_item_back(sel, row, GET_TEXT(MSG_WATCH))
  *     MenuItem_back::action()
  *
  *   ACTION_ITEM(MSG_PAUSE_PRINT, lcd_sdcard_pause)
  *   MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause)
- *     draw_menu_item_function(sel, row, PSTR(MSG_PAUSE_PRINT), lcd_sdcard_pause)
+ *     draw_menu_item_function(sel, row, GET_TEXT(MSG_PAUSE_PRINT), lcd_sdcard_pause)
  *     MenuItem_function::action(lcd_sdcard_pause)
  *
  *   EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
- *     draw_menu_item_int3(sel, row, PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
- *     MenuItem_int3::action(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
+ *     draw_menu_item_int3(sel, row, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
+ *     MenuItem_int3::action(GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
  *
  */
 #define _MENU_ITEM_P(TYPE, USE_MULTIPLIER, PLABEL, V...) do {  \
@@ -370,18 +371,28 @@ class MenuItem_bool {
 
 #define MENU_ITEM_ADDON_END() } }while(0)
 
-#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_P(PSTR(LABEL), ##V)
+#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_P(GET_TEXT(LABEL), ##V)
 
-#define MENU_ITEM_P(TYPE, PLABEL, V...)   _MENU_ITEM_P(TYPE, false, PLABEL,      ##V)
-#define MENU_ITEM(TYPE, LABEL, V...)      _MENU_ITEM_P(TYPE, false, PSTR(LABEL), ##V)
-#define EDIT_ITEM(TYPE, LABEL, V...)      _MENU_ITEM_P(TYPE, false, PSTR(LABEL), ##V)
-#define EDIT_ITEM_FAST(TYPE, LABEL, V...) _MENU_ITEM_P(TYPE,  true, PSTR(LABEL), ##V)
+#define MENU_ITEM_P(TYPE, PLABEL, V...)       _MENU_ITEM_P(TYPE, false, PLABEL, ##V)
+#define MENU_ITEM(TYPE, LABEL, V...)           MENU_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
 
-#define SKIP_ITEM()                 (_thisItemNr++)
-#define BACK_ITEM(LABEL)            MENU_ITEM(back,LABEL)
-#define SUBMENU(LABEL, DEST)        MENU_ITEM(submenu, LABEL, DEST)
-#define GCODES_ITEM(LABEL, GCODES)  MENU_ITEM(gcode, LABEL, GCODES)
-#define ACTION_ITEM(LABEL, ACTION)  MENU_ITEM(function, LABEL, ACTION)
+#define EDIT_ITEM_P(TYPE, PLABEL, V...)        MENU_ITEM_P(TYPE, PLABEL, ##V)
+#define EDIT_ITEM(TYPE, LABEL, V...)           EDIT_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
+
+#define EDIT_ITEM_FAST_P(TYPE, PLABEL, V...)  _MENU_ITEM_P(TYPE, true, PLABEL, ##V)
+#define EDIT_ITEM_FAST(TYPE, LABEL, V...) EDIT_ITEM_FAST_P(TYPE, GET_TEXT(LABEL), ##V)
+
+#define ACTION_ITEM_P(PLABEL, ACTION)          MENU_ITEM_P(function, PLABEL, ACTION)
+#define ACTION_ITEM(LABEL, ACTION)           ACTION_ITEM_P(GET_TEXT(LABEL), ACTION)
+
+#define GCODES_ITEM_P(PLABEL, GCODES)          MENU_ITEM_P(gcode, PLABEL, GCODES)
+#define GCODES_ITEM(LABEL, GCODES)           GCODES_ITEM_P(GET_TEXT(LABEL), GCODES)
+
+#define SUBMENU_P(PLABEL, DEST)                MENU_ITEM_P(submenu, PLABEL, DEST)
+#define SUBMENU(LABEL, DEST)                     SUBMENU_P(GET_TEXT(LABEL), DEST)
+
+#define BACK_ITEM(LABEL)                         MENU_ITEM(back, LABEL)
+#define SKIP_ITEM() (_thisItemNr++)
 
 ////////////////////////////////////////////
 /////////////// Menu Screens ///////////////
diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index c86ae2fec7..64c90923c9 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -78,7 +78,7 @@ void menu_backlash();
   void menu_pwm() {
     START_MENU();
     BACK_ITEM(MSG_ADVANCED_SETTINGS);
-    #define EDIT_CURRENT_PWM(LABEL,I) EDIT_ITEM(long5, LABEL, &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power)
+    #define EDIT_CURRENT_PWM(LABEL,I) EDIT_ITEM_P(long5, PSTR(LABEL), &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power)
     #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
       EDIT_CURRENT_PWM(MSG_X MSG_Y, 0);
     #endif
@@ -109,7 +109,7 @@ void menu_backlash();
       #if EXTRUDERS == 1
         EDIT_ITEM(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
       #elif EXTRUDERS > 1
-        #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K LCD_STR_E##N, &planner.extruder_advance_K[N], 0, 999)
+        #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K_E##N, &planner.extruder_advance_K[N], 0, 999)
         EDIT_ADVANCE_K(0);
         EDIT_ADVANCE_K(1);
         #if EXTRUDERS > 2
@@ -134,7 +134,7 @@ void menu_backlash();
         #if EXTRUDERS == 1
           EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM, &planner.filament_size[0], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
         #else // EXTRUDERS > 1
-          #define EDIT_FIL_DIAM(N) EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM LCD_STR_N##N, &planner.filament_size[N], 1.5f, 3.25f, planner.calculate_volumetric_multipliers)
+          #define EDIT_FIL_DIAM(N) EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM_E##N, &planner.filament_size[N], 1.5f, 3.25f, planner.calculate_volumetric_multipliers)
           EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
           EDIT_FIL_DIAM(0);
           EDIT_FIL_DIAM(1);
@@ -166,7 +166,7 @@ void menu_backlash();
       #if EXTRUDERS == 1
         EDIT_ITEM_FAST(float3, MSG_FILAMENT_UNLOAD, &fc_settings[0].unload_length, 0, extrude_maxlength);
       #elif EXTRUDERS > 1
-        #define EDIT_FIL_UNLOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENT_UNLOAD LCD_STR_N##N, &fc_settings[N].unload_length, 0, extrude_maxlength)
+        #define EDIT_FIL_UNLOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENTUNLOAD_E##N, &fc_settings[N].unload_length, 0, extrude_maxlength)
         EDIT_ITEM_FAST(float3, MSG_FILAMENT_UNLOAD, &fc_settings[active_extruder].unload_length, 0, extrude_maxlength);
         EDIT_FIL_UNLOAD(0);
         EDIT_FIL_UNLOAD(1);
@@ -187,7 +187,7 @@ void menu_backlash();
       #if EXTRUDERS == 1
         EDIT_ITEM_FAST(float3, MSG_FILAMENT_LOAD, &fc_settings[0].load_length, 0, extrude_maxlength);
       #elif EXTRUDERS > 1
-        #define EDIT_FIL_LOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENT_LOAD LCD_STR_N##N, &fc_settings[N].load_length, 0, extrude_maxlength)
+        #define EDIT_FIL_LOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENTLOAD_E##N, &fc_settings[N].load_length, 0, extrude_maxlength)
         EDIT_ITEM_FAST(float3, MSG_FILAMENT_LOAD, &fc_settings[active_extruder].load_length, 0, extrude_maxlength);
         EDIT_FIL_LOAD(0);
         EDIT_FIL_LOAD(1);
@@ -268,8 +268,43 @@ void menu_backlash();
     thermalManager.updatePID();
   }
 
+  #define _DEFINE_PIDTEMP_BASE_FUNCS(N) \
+    void copy_and_scalePID_i_E##N() { copy_and_scalePID_i(N); } \
+    void copy_and_scalePID_d_E##N() { copy_and_scalePID_d(N); }
+
+#else
+
+  #define _DEFINE_PIDTEMP_BASE_FUNCS(N) //
+
+#endif
+
+#if ENABLED(PID_AUTOTUNE_MENU)
+  #define DEFINE_PIDTEMP_FUNCS(N) \
+    _DEFINE_PIDTEMP_BASE_FUNCS(N); \
+    void lcd_autotune_callback_E##N() { _lcd_autotune(N); } //
+#else
+  #define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N); //
 #endif
 
+#if HOTENDS
+  DEFINE_PIDTEMP_FUNCS(0);
+  #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+    DEFINE_PIDTEMP_FUNCS(1);
+    #if HOTENDS > 2
+      DEFINE_PIDTEMP_FUNCS(2);
+      #if HOTENDS > 3
+        DEFINE_PIDTEMP_FUNCS(3);
+        #if HOTENDS > 4
+          DEFINE_PIDTEMP_FUNCS(4);
+          #if HOTENDS > 5
+            DEFINE_PIDTEMP_FUNCS(5);
+          #endif // HOTENDS > 5
+        #endif // HOTENDS > 4
+      #endif // HOTENDS > 3
+    #endif // HOTENDS > 2
+  #endif // HOTENDS > 1 && PID_PARAMS_PER_HOTEND
+#endif // HOTENDS
+
 #define SHOW_MENU_ADVANCED_TEMPERATURE ((ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND) || EITHER(PID_AUTOTUNE_MENU, PID_EDIT_MENU))
 
 //
@@ -300,53 +335,57 @@ void menu_backlash();
     //
     #if ENABLED(PID_EDIT_MENU)
 
-      #define _PID_BASE_MENU_ITEMS(ELABEL, eindex) \
-        raw_Ki = unscalePID_i(PID_PARAM(Ki, eindex)); \
-        raw_Kd = unscalePID_d(PID_PARAM(Kd, eindex)); \
-        EDIT_ITEM(float52sign, MSG_PID_P ELABEL, &PID_PARAM(Kp, eindex), 1, 9990); \
-        EDIT_ITEM(float52sign, MSG_PID_I ELABEL, &raw_Ki, 0.01f, 9990, [](){ copy_and_scalePID_i(eindex); }); \
-        EDIT_ITEM(float52sign, MSG_PID_D ELABEL, &raw_Kd, 1, 9990, [](){ copy_and_scalePID_d(eindex); })
+      #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+        #define PID_LABEL(MSG,N) MSG##_E##N
+      #else
+        #define PID_LABEL(MSG,N) MSG
+      #endif
+
+      #define _PID_BASE_MENU_ITEMS(N) \
+        raw_Ki = unscalePID_i(PID_PARAM(Ki, N)); \
+        raw_Kd = unscalePID_d(PID_PARAM(Kd, N)); \
+        EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_P,N), &PID_PARAM(Kp, N), 1, 9990); \
+        EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_I,N), &raw_Ki, 0.01f, 9990, [](){ copy_and_scalePID_i(N); }); \
+        EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_D,N), &raw_Kd, 1, 9990, [](){ copy_and_scalePID_d(N); })
 
       #if ENABLED(PID_EXTRUSION_SCALING)
-        #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
-          _PID_BASE_MENU_ITEMS(ELABEL, eindex); \
-          EDIT_ITEM(float3, MSG_PID_C ELABEL, &PID_PARAM(Kc, eindex), 1, 9990)
+        #define _PID_EDIT_MENU_ITEMS(N) \
+          _PID_BASE_MENU_ITEMS(N); \
+          EDIT_ITEM(float3, PID_LABEL(MSG_PID_C,N), &PID_PARAM(Kc, N), 1, 9990)
       #else
-        #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_BASE_MENU_ITEMS(ELABEL, eindex)
+        #define _PID_EDIT_MENU_ITEMS(N) _PID_BASE_MENU_ITEMS(N)
       #endif
 
     #else
 
-      #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) NOOP
+      #define _PID_EDIT_MENU_ITEMS(N) NOOP
 
     #endif
 
     #if ENABLED(PID_AUTOTUNE_MENU)
-      #define PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
-        _PID_EDIT_MENU_ITEMS(ELABEL, eindex); \
-        EDIT_ITEM_FAST(int3, MSG_PID_AUTOTUNE ELABEL, &autotune_temp[eindex], 150, heater_maxtemp[eindex] - 15, [](){ _lcd_autotune(eindex); })
+      #define PID_EDIT_MENU_ITEMS(N) \
+        _PID_EDIT_MENU_ITEMS(N); \
+        EDIT_ITEM_FAST(int3, PID_LABEL(MSG_AUTOTUNE_PID,N), &autotune_temp[N], 150, heater_maxtemp[N] - 15, [](){ _lcd_autotune(N); })
     #else
-      #define PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_EDIT_MENU_ITEMS(ELABEL, eindex)
+      #define PID_EDIT_MENU_ITEMS(N) _PID_EDIT_MENU_ITEMS(N)
     #endif
 
-    #if ENABLED(PID_PARAMS_PER_HOTEND) && HOTENDS > 1
-      PID_EDIT_MENU_ITEMS(" " LCD_STR_E0, 0);
-      PID_EDIT_MENU_ITEMS(" " LCD_STR_E1, 1);
+    PID_EDIT_MENU_ITEMS(0);
+    #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+      PID_EDIT_MENU_ITEMS(1);
       #if HOTENDS > 2
-        PID_EDIT_MENU_ITEMS(" " LCD_STR_E2, 2);
+        PID_EDIT_MENU_ITEMS(2);
         #if HOTENDS > 3
-          PID_EDIT_MENU_ITEMS(" " LCD_STR_E3, 3);
+          PID_EDIT_MENU_ITEMS(3);
           #if HOTENDS > 4
-            PID_EDIT_MENU_ITEMS(" " LCD_STR_E4, 4);
+            PID_EDIT_MENU_ITEMS(4);
             #if HOTENDS > 5
-              PID_EDIT_MENU_ITEMS(" " LCD_STR_E5, 5);
+              PID_EDIT_MENU_ITEMS(5);
             #endif // HOTENDS > 5
           #endif // HOTENDS > 4
         #endif // HOTENDS > 3
       #endif // HOTENDS > 2
-    #else // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
-      PID_EDIT_MENU_ITEMS("", 0);
-    #endif // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
+    #endif // HOTENDS > 1 && PID_PARAMS_PER_HOTEND
 
     END_MENU();
   }
@@ -385,14 +424,14 @@ void menu_backlash();
     #else
       const xyze_feedrate_t &max_fr_edit_scaled = max_fr_edit;
     #endif
-    #define EDIT_VMAX(N) EDIT_ITEM_FAST(float3, MSG_VMAX MSG_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, max_fr_edit_scaled[_AXIS(N)])
+    #define EDIT_VMAX(N) EDIT_ITEM_FAST(float3, MSG_VMAX_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, max_fr_edit_scaled[_AXIS(N)])
     EDIT_VMAX(A);
     EDIT_VMAX(B);
     EDIT_VMAX(C);
 
     #if ENABLED(DISTINCT_E_FACTORS)
-      #define EDIT_VMAX_E(N) EDIT_ITEM_FAST(float3, MSG_VMAX LCD_STR_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N)], 1, max_fr_edit_scaled.e)
-      EDIT_ITEM_FAST(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
+      #define EDIT_VMAX_E(N) EDIT_ITEM_FAST(float3, MSG_VMAX_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N)], 1, max_fr_edit_scaled.e)
+      EDIT_ITEM_FAST(float3, MSG_VMAX_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
       EDIT_VMAX_E(0);
       EDIT_VMAX_E(1);
       #if E_STEPPERS > 2
@@ -408,7 +447,7 @@ void menu_backlash();
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
     #elif E_STEPPERS
-      EDIT_ITEM_FAST(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, max_fr_edit_scaled.e);
+      EDIT_ITEM_FAST(float3, MSG_VMAX_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, max_fr_edit_scaled.e);
     #endif
 
     // M205 S Min Feedrate
@@ -451,15 +490,15 @@ void menu_backlash();
       const xyze_ulong_t &max_accel_edit_scaled = max_accel_edit;
     #endif
 
-    #define EDIT_AMAX(Q,L) EDIT_ITEM_FAST(long5_25, MSG_AMAX MSG_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], [](){ planner.reset_acceleration_rates(); })
+    #define EDIT_AMAX(Q,L) EDIT_ITEM_FAST(long5_25, MSG_AMAX_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], [](){ planner.reset_acceleration_rates(); })
 
     EDIT_AMAX(A,100);
     EDIT_AMAX(B,100);
     EDIT_AMAX(C, 10);
 
     #if ENABLED(DISTINCT_E_FACTORS)
-      #define EDIT_AMAX_E(N) EDIT_ITEM_FAST(long5_25, MSG_AMAX LCD_STR_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(N)], 100, max_accel_edit_scaled.e, [](){ _reset_e_acceleration_rate(N); })
-      EDIT_ITEM_FAST(long5_25, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
+      #define EDIT_AMAX_E(N) EDIT_ITEM_FAST(long5_25, MSG_AMAX_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(N)], 100, max_accel_edit_scaled.e, [](){ _reset_e_acceleration_rate(N); })
+      EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
       EDIT_AMAX_E(0);
       EDIT_AMAX_E(1);
       #if E_STEPPERS > 2
@@ -475,7 +514,7 @@ void menu_backlash();
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
     #elif E_STEPPERS
-      EDIT_ITEM_FAST(long5_25, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
+      EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
     #endif
 
     END_MENU();
@@ -524,14 +563,14 @@ void menu_backlash();
     START_MENU();
     BACK_ITEM(MSG_ADVANCED_SETTINGS);
 
-    #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, [](){ planner.refresh_positioning(); })
+    #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, [](){ planner.refresh_positioning(); })
     EDIT_QSTEPS(A);
     EDIT_QSTEPS(B);
     EDIT_QSTEPS(C);
 
     #if ENABLED(DISTINCT_E_FACTORS)
       #define EDIT_ESTEPS(N) EDIT_ITEM_FAST(float51, MSG_E##N##_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(N)], 5, 9999, [](){ _planner_refresh_e_positioning(N); })
-      EDIT_ITEM_FAST(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, [](){ planner.refresh_positioning(); });
+      EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, [](){ planner.refresh_positioning(); });
       EDIT_ESTEPS(0);
       EDIT_ESTEPS(1);
       #if E_STEPPERS > 2
@@ -547,7 +586,7 @@ void menu_backlash();
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
     #elif E_STEPPERS
-      EDIT_ITEM_FAST(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, [](){ planner.refresh_positioning(); });
+      EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, [](){ planner.refresh_positioning(); });
     #endif
 
     END_MENU();
@@ -559,7 +598,7 @@ void menu_backlash();
 
     static void lcd_init_eeprom_confirm() {
       do_select_screen(
-        PSTR(MSG_BUTTON_INIT), PSTR(MSG_BUTTON_CANCEL),
+        GET_TEXT(MSG_BUTTON_INIT), GET_TEXT(MSG_BUTTON_CANCEL),
         []{
           const bool inited = settings.init_eeprom();
           #if HAS_BUZZER
@@ -568,7 +607,7 @@ void menu_backlash();
           UNUSED(inited);
         },
         ui.goto_previous_screen,
-        PSTR(MSG_INIT_EEPROM), nullptr, PSTR("?")
+        GET_TEXT(MSG_INIT_EEPROM), nullptr, PSTR("?")
       );
     }
 
@@ -632,7 +671,7 @@ void menu_advanced_settings() {
     #if EXTRUDERS == 1
       EDIT_ITEM(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
     #elif EXTRUDERS > 1
-      #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K LCD_STR_E##N, &planner.extruder_advance_K[N], 0, 999)
+      #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K_E##N, &planner.extruder_advance_K[N], 0, 999)
       EDIT_ADVANCE_K(0);
       EDIT_ADVANCE_K(1);
       #if EXTRUDERS > 2
diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp
index 30ef29a64e..cc0b3a2c99 100644
--- a/Marlin/src/lcd/menu/menu_backlash.cpp
+++ b/Marlin/src/lcd/menu/menu_backlash.cpp
@@ -38,7 +38,7 @@ void menu_backlash() {
 
   EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on);
 
-  #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
+  #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
   EDIT_BACKLASH_DISTANCE(A);
   EDIT_BACKLASH_DISTANCE(B);
   EDIT_BACKLASH_DISTANCE(C);
diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp
index 13441e6f3d..ac2a68fb36 100644
--- a/Marlin/src/lcd/menu/menu_bed_corners.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp
@@ -86,7 +86,7 @@ static inline void _lcd_goto_next_corner() {
 
 static inline void menu_level_bed_corners() {
   do_select_screen(
-    PSTR(MSG_BUTTON_NEXT), PSTR(MSG_BUTTON_DONE),
+    GET_TEXT(MSG_BUTTON_NEXT), GET_TEXT(MSG_BUTTON_DONE),
     _lcd_goto_next_corner,
     []{
       #if HAS_LEVELING
@@ -94,7 +94,7 @@ static inline void menu_level_bed_corners() {
       #endif
       ui.goto_previous_screen_no_defer();
     },
-    PSTR(
+    GET_TEXT(
       #if ENABLED(LEVEL_CENTER_TOO)
         MSG_LEVEL_BED_NEXT_POINT
       #else
diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
index ba03477735..1318e2307e 100644
--- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
@@ -74,14 +74,14 @@
       #if MANUAL_PROBE_HEIGHT > 0 && DISABLED(MESH_BED_LEVELING)
         // Display "Done" screen and wait for moves to complete
         line_to_z(MANUAL_PROBE_HEIGHT);
-        ui.synchronize(PSTR(MSG_LEVEL_BED_DONE));
+        ui.synchronize(GET_TEXT(MSG_LEVEL_BED_DONE));
       #endif
       ui.goto_previous_screen_no_defer();
       #if HAS_BUZZER
         ui.completion_feedback();
       #endif
     }
-    if (ui.should_draw()) draw_menu_item_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_DONE));
+    if (ui.should_draw()) draw_menu_item_static(LCD_HEIGHT >= 4 ? 1 : 0, GET_TEXT(MSG_LEVEL_BED_DONE));
     ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
   }
 
@@ -132,7 +132,7 @@
     //
     if (ui.should_draw()) {
       const float v = current_position.z;
-      draw_edit_screen(PSTR(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+'));
+      draw_edit_screen(GET_TEXT(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+'));
     }
   }
 
@@ -143,7 +143,7 @@
     if (ui.should_draw()) {
       char msg[10];
       sprintf_P(msg, PSTR("%i / %u"), (int)(manual_probe_index + 1), total_probe_points);
-      draw_edit_screen(PSTR(MSG_LEVEL_BED_NEXT_POINT), msg);
+      draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_NEXT_POINT), msg);
     }
     ui.refresh(LCDVIEW_CALL_NO_REDRAW);
     if (!ui.wait_for_bl_move) ui.goto_screen(_lcd_level_bed_get_z);
@@ -169,7 +169,7 @@
   //         Move to the first probe position
   //
   void _lcd_level_bed_homing_done() {
-    if (ui.should_draw()) draw_edit_screen(PSTR(MSG_LEVEL_BED_WAITING));
+    if (ui.should_draw()) draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_WAITING));
     if (ui.use_click()) {
       manual_probe_index = 0;
       _lcd_level_goto_next_point();
diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp
index 3dd2d9c5b1..62f6f45ce5 100644
--- a/Marlin/src/lcd/menu/menu_configuration.cpp
+++ b/Marlin/src/lcd/menu/menu_configuration.cpp
@@ -68,7 +68,7 @@ void menu_advanced_settings();
     bar_percent += (int8_t)ui.encoderPosition;
     LIMIT(bar_percent, 0, 100);
     ui.encoderPosition = 0;
-    draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), SS_CENTER|SS_INVERT);
+    draw_menu_item_static(0, GET_TEXT(MSG_PROGRESS_BAR_TEST), SS_CENTER|SS_INVERT);
     lcd_put_int((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2, bar_percent); lcd_put_wchar('%');
     lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
   }
@@ -203,17 +203,17 @@ void menu_advanced_settings();
     ACTION_ITEM(MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode);
     #if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU)
       SUBMENU(MSG_BLTOUCH_5V_MODE, []{
-        do_select_screen(PSTR(MSG_BLTOUCH_5V_MODE), PSTR(MSG_BUTTON_CANCEL), bltouch._set_5V_mode, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+        do_select_screen(GET_TEXT(MSG_BLTOUCH_5V_MODE), GET_TEXT(MSG_BUTTON_CANCEL), bltouch._set_5V_mode, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
       });
       SUBMENU(MSG_BLTOUCH_OD_MODE, []{
-        do_select_screen(PSTR(MSG_BLTOUCH_OD_MODE), PSTR(MSG_BUTTON_CANCEL), bltouch._set_OD_mode, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+        do_select_screen(GET_TEXT(MSG_BLTOUCH_OD_MODE), GET_TEXT(MSG_BUTTON_CANCEL), bltouch._set_OD_mode, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
       });
       ACTION_ITEM(MSG_BLTOUCH_MODE_STORE, bltouch._mode_store);
       SUBMENU(MSG_BLTOUCH_MODE_STORE_5V, []{
-        do_select_screen(PSTR(MSG_BLTOUCH_MODE_STORE_5V), PSTR(MSG_BUTTON_CANCEL), bltouch.mode_conv_5V, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+        do_select_screen(GET_TEXT(MSG_BLTOUCH_MODE_STORE_5V), GET_TEXT(MSG_BUTTON_CANCEL), bltouch.mode_conv_5V, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
       });
       SUBMENU(MSG_BLTOUCH_MODE_STORE_OD, []{
-        do_select_screen(PSTR(MSG_BLTOUCH_MODE_STORE_OD), PSTR(MSG_BUTTON_CANCEL), bltouch.mode_conv_OD, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+        do_select_screen(GET_TEXT(MSG_BLTOUCH_MODE_STORE_OD), GET_TEXT(MSG_BUTTON_CANCEL), bltouch.mode_conv_OD, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
       });
       ACTION_ITEM(MSG_BLTOUCH_MODE_ECHO, bltouch_report);
     #endif
diff --git a/Marlin/src/lcd/menu/menu_custom.cpp b/Marlin/src/lcd/menu/menu_custom.cpp
index 24c213544c..81b324114a 100644
--- a/Marlin/src/lcd/menu/menu_custom.cpp
+++ b/Marlin/src/lcd/menu/menu_custom.cpp
@@ -51,19 +51,19 @@ void menu_user() {
   START_MENU();
   BACK_ITEM(MSG_MAIN);
   #if defined(USER_DESC_1) && defined(USER_GCODE_1)
-    ACTION_ITEM(USER_DESC_1, [](){ _lcd_user_gcode(PSTR(USER_GCODE_1 _DONE_SCRIPT)); });
+    ACTION_ITEM_P(PSTR(USER_DESC_1), [](){ _lcd_user_gcode(PSTR(USER_GCODE_1 _DONE_SCRIPT)); });
   #endif
   #if defined(USER_DESC_2) && defined(USER_GCODE_2)
-    ACTION_ITEM(USER_DESC_2, [](){ _lcd_user_gcode(PSTR(USER_GCODE_2 _DONE_SCRIPT)); });
+    ACTION_ITEM_P(PSTR(USER_DESC_2), [](){ _lcd_user_gcode(PSTR(USER_GCODE_2 _DONE_SCRIPT)); });
   #endif
   #if defined(USER_DESC_3) && defined(USER_GCODE_3)
-    ACTION_ITEM(USER_DESC_3, [](){ _lcd_user_gcode(PSTR(USER_GCODE_3 _DONE_SCRIPT)); });
+    ACTION_ITEM_P(PSTR(USER_DESC_3), [](){ _lcd_user_gcode(PSTR(USER_GCODE_3 _DONE_SCRIPT)); });
   #endif
   #if defined(USER_DESC_4) && defined(USER_GCODE_4)
-    ACTION_ITEM(USER_DESC_4, [](){ _lcd_user_gcode(PSTR(USER_GCODE_4 _DONE_SCRIPT)); });
+    ACTION_ITEM_P(PSTR(USER_DESC_4), [](){ _lcd_user_gcode(PSTR(USER_GCODE_4 _DONE_SCRIPT)); });
   #endif
   #if defined(USER_DESC_5) && defined(USER_GCODE_5)
-    ACTION_ITEM(USER_DESC_5, [](){ _lcd_user_gcode(PSTR(USER_GCODE_5 _DONE_SCRIPT)); });
+    ACTION_ITEM_P(PSTR(USER_DESC_5), [](){ _lcd_user_gcode(PSTR(USER_GCODE_5 _DONE_SCRIPT)); });
   #endif
   END_MENU();
 }
diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
index ae827f2483..38e94c0908 100644
--- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
+++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
@@ -60,7 +60,7 @@ void _man_probe_pt(const xy_pos_t &xy) {
       host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), PSTR("Continue"));
     #endif
     #if ENABLED(EXTENSIBLE_UI)
-      ExtUI::onUserConfirmRequired(PSTR("Delta Calibration in progress"));
+      ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress"));
     #endif
     while (wait_for_user) idle();
     ui.goto_previous_screen_no_defer();
@@ -104,12 +104,12 @@ void lcd_delta_settings() {
   START_MENU();
   BACK_ITEM(MSG_DELTA_CALIBRATE);
   EDIT_ITEM(float52sign, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10, delta_height + 10, _recalc_delta_settings);
-  #define EDIT_ENDSTOP_ADJ(LABEL,N) EDIT_ITEM(float43, LABEL, &delta_endstop_adj.N, -5, 5, _recalc_delta_settings)
+  #define EDIT_ENDSTOP_ADJ(LABEL,N) EDIT_ITEM_P(float43, PSTR(LABEL), &delta_endstop_adj.N, -5, 5, _recalc_delta_settings)
   EDIT_ENDSTOP_ADJ("Ex",a);
   EDIT_ENDSTOP_ADJ("Ey",b);
   EDIT_ENDSTOP_ADJ("Ez",c);
   EDIT_ITEM(float52sign, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5, delta_radius + 5, _recalc_delta_settings);
-  #define EDIT_ANGLE_TRIM(LABEL,N) EDIT_ITEM(float43, LABEL, &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings)
+  #define EDIT_ANGLE_TRIM(LABEL,N) EDIT_ITEM_P(float43, PSTR(LABEL), &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings)
   EDIT_ANGLE_TRIM("Tx",a);
   EDIT_ANGLE_TRIM("Ty",b);
   EDIT_ANGLE_TRIM("Tz",c);
diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp
index f3b202623f..e32e93d23c 100644
--- a/Marlin/src/lcd/menu/menu_filament.cpp
+++ b/Marlin/src/lcd/menu/menu_filament.cpp
@@ -52,7 +52,7 @@ inline PGM_P _change_filament_temp_command() {
     default:
       return PSTR("M600 B0 T%d");
   }
-  return PSTR(MSG_FILAMENTCHANGE);
+  return GET_TEXT(MSG_FILAMENTCHANGE);
 }
 
 // Initiate Filament Load/Unload/Change at the specified temperature
@@ -70,12 +70,12 @@ static void _change_filament_temp(const uint16_t temperature) {
 inline PGM_P change_filament_header(const PauseMode mode) {
   switch (mode) {
     case PAUSE_MODE_LOAD_FILAMENT:
-      return PSTR(MSG_FILAMENTLOAD);
+      return GET_TEXT(MSG_FILAMENTLOAD);
     case PAUSE_MODE_UNLOAD_FILAMENT:
-      return PSTR(MSG_FILAMENTUNLOAD);
+      return GET_TEXT(MSG_FILAMENTUNLOAD);
     default: break;
   }
-  return PSTR(MSG_FILAMENTCHANGE);
+  return GET_TEXT(MSG_FILAMENTCHANGE);
 }
 
 void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
@@ -107,14 +107,14 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
 
     // Change filament
     #if E_STEPPERS == 1
-      PGM_P const msg0 = PSTR(MSG_FILAMENTCHANGE);
+      PGM_P const msg0 = GET_TEXT(MSG_FILAMENTCHANGE);
       if (thermalManager.targetTooColdToExtrude(active_extruder))
         MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 0); });
       else
         MENU_ITEM_P(gcode, msg0, PSTR("M600 B0"));
     #else
-      PGM_P const msg0 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E0);
-      PGM_P const msg1 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E1);
+      PGM_P const msg0 = GET_TEXT(MSG_FILAMENTCHANGE_E0);
+      PGM_P const msg1 = GET_TEXT(MSG_FILAMENTCHANGE_E1);
       if (thermalManager.targetTooColdToExtrude(0))
         MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 0); });
       else
@@ -124,25 +124,25 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
       else
         MENU_ITEM_P(gcode, msg1, PSTR("M600 B0 T1"));
       #if E_STEPPERS > 2
-        PGM_P const msg2 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E2);
+        PGM_P const msg2 = GET_TEXT(MSG_FILAMENTCHANGE_E2);
         if (thermalManager.targetTooColdToExtrude(2))
           MENU_ITEM_P(submenu, msg2, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 2); });
         else
           MENU_ITEM_P(gcode, msg2, PSTR("M600 B0 T2"));
         #if E_STEPPERS > 3
-          PGM_P const msg3 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E3);
+          PGM_P const msg3 = GET_TEXT(MSG_FILAMENTCHANGE_E3);
           if (thermalManager.targetTooColdToExtrude(3))
             MENU_ITEM_P(submenu, msg3, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 3); });
           else
             MENU_ITEM_P(gcode, msg3, PSTR("M600 B0 T3"));
           #if E_STEPPERS > 4
-            PGM_P const msg4 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E4);
+            PGM_P const msg4 = GET_TEXT(MSG_FILAMENTCHANGE_E4);
             if (thermalManager.targetTooColdToExtrude(4))
               MENU_ITEM_P(submenu, msg4, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 4); });
             else
               MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4"));
             #if E_STEPPERS > 5
-              PGM_P const msg5 = PSTR(MSG_FILAMENTCHANGE " " LCD_STR_E5);
+              PGM_P const msg5 = GET_TEXT(MSG_FILAMENTCHANGE_E5);
               if (thermalManager.targetTooColdToExtrude(5))
                 MENU_ITEM_P(submenu, msg5, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 5); });
               else
@@ -157,14 +157,14 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
       if (!printer_busy()) {
         // Load filament
         #if E_STEPPERS == 1
-          PGM_P const msg0 = PSTR(MSG_FILAMENTLOAD);
+          PGM_P const msg0 = GET_TEXT(MSG_FILAMENTLOAD);
           if (thermalManager.targetTooColdToExtrude(active_extruder))
             MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); });
           else
             MENU_ITEM_P(gcode, msg0, PSTR("M701"));
         #else
-          PGM_P const msg0 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E0);
-          PGM_P const msg1 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E1);
+          PGM_P const msg0 = GET_TEXT(MSG_FILAMENTLOAD_E0);
+          PGM_P const msg1 = GET_TEXT(MSG_FILAMENTLOAD_E1);
           if (thermalManager.targetTooColdToExtrude(0))
             MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); });
           else
@@ -174,25 +174,25 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
           else
             MENU_ITEM_P(gcode, msg1, PSTR("M701 T1"));
           #if E_STEPPERS > 2
-            PGM_P const msg2 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E2);
+            PGM_P const msg2 = GET_TEXT(MSG_FILAMENTLOAD_E2);
             if (thermalManager.targetTooColdToExtrude(2))
               MENU_ITEM_P(submenu, msg2, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 2); });
             else
               MENU_ITEM_P(gcode, msg2, PSTR("M701 T2"));
             #if E_STEPPERS > 3
-              PGM_P const msg3 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E3);
+              PGM_P const msg3 = GET_TEXT(MSG_FILAMENTLOAD_E3);
               if (thermalManager.targetTooColdToExtrude(3))
                 MENU_ITEM_P(submenu, msg3, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 3); });
               else
                 MENU_ITEM_P(gcode, msg3, PSTR("M701 T3"));
               #if E_STEPPERS > 4
-                PGM_P const msg4 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E4);
+                PGM_P const msg4 = GET_TEXT(MSG_FILAMENTLOAD_E4);
                 if (thermalManager.targetTooColdToExtrude(4))
                   MENU_ITEM_P(submenu, msg4, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 4); });
                 else
                   MENU_ITEM_P(gcode, msg4, PSTR("M701 T4"));
                 #if E_STEPPERS > 5
-                  PGM_P const msg5 = PSTR(MSG_FILAMENTLOAD " " LCD_STR_E5);
+                  PGM_P const msg5 = GET_TEXT(MSG_FILAMENTLOAD_E5);
                   if (thermalManager.targetTooColdToExtrude(5))
                     MENU_ITEM_P(submenu, msg5, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 5); });
                   else
@@ -223,33 +223,33 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
             SUBMENU(MSG_FILAMENTUNLOAD_ALL, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, -1); });
           #endif
           if (thermalManager.targetHotEnoughToExtrude(0))
-            GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E0, PSTR("M702 T0"));
+            GCODES_ITEM(MSG_FILAMENTUNLOAD_E0, PSTR("M702 T0"));
           else
-            SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E0, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); });
+            SUBMENU(MSG_FILAMENTUNLOAD_E0, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); });
           if (thermalManager.targetHotEnoughToExtrude(1))
-            GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E1, PSTR("M702 T1"));
+            GCODES_ITEM(MSG_FILAMENTUNLOAD_E1, PSTR("M702 T1"));
           else
-            SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E1, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 1); });
+            SUBMENU(MSG_FILAMENTUNLOAD_E1, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 1); });
           #if E_STEPPERS > 2
             if (thermalManager.targetHotEnoughToExtrude(2))
-              GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E2, PSTR("M702 T2"));
+              GCODES_ITEM(MSG_FILAMENTUNLOAD_E2, PSTR("M702 T2"));
             else
-              SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E2, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 2); });
+              SUBMENU(MSG_FILAMENTUNLOAD_E2, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 2); });
             #if E_STEPPERS > 3
               if (thermalManager.targetHotEnoughToExtrude(3))
-                GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E3, PSTR("M702 T3"));
+                GCODES_ITEM(MSG_FILAMENTUNLOAD_E3, PSTR("M702 T3"));
               else
-                SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E3, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 3); });
+                SUBMENU(MSG_FILAMENTUNLOAD_E3, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 3); });
               #if E_STEPPERS > 4
                 if (thermalManager.targetHotEnoughToExtrude(4))
-                  GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E4, PSTR("M702 T4"));
+                  GCODES_ITEM(MSG_FILAMENTUNLOAD_E4, PSTR("M702 T4"));
                 else
-                  SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E4, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 4); });
+                  SUBMENU(MSG_FILAMENTUNLOAD_E4, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 4); });
                 #if E_STEPPERS > 5
                   if (thermalManager.targetHotEnoughToExtrude(5))
-                    GCODES_ITEM(MSG_FILAMENTUNLOAD " " LCD_STR_E5, PSTR("M702 T5"));
+                    GCODES_ITEM(MSG_FILAMENTUNLOAD_E5, PSTR("M702 T5"));
                   else
-                    SUBMENU(MSG_FILAMENTUNLOAD " " LCD_STR_E5, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 5); });
+                    SUBMENU(MSG_FILAMENTUNLOAD_E5, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 5); });
                 #endif // E_STEPPERS > 5
               #endif // E_STEPPERS > 4
             #endif // E_STEPPERS > 3
@@ -267,22 +267,21 @@ static uint8_t hotend_status_extruder = 0;
 static PGM_P pause_header() {
   switch (pause_mode) {
     case PAUSE_MODE_CHANGE_FILAMENT:
-      return PSTR(MSG_FILAMENT_CHANGE_HEADER);
+      return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER);
     case PAUSE_MODE_LOAD_FILAMENT:
-      return PSTR(MSG_FILAMENT_CHANGE_HEADER_LOAD);
+      return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_LOAD);
     case PAUSE_MODE_UNLOAD_FILAMENT:
-      return PSTR(MSG_FILAMENT_CHANGE_HEADER_UNLOAD);
-    case PAUSE_MODE_PAUSE_PRINT:
+      return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_UNLOAD);
     default: break;
   }
-  return PSTR(MSG_FILAMENT_CHANGE_HEADER_PAUSE);
+  return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_PAUSE);
 }
 
 // Portions from STATIC_ITEM...
 #define HOTEND_STATUS_ITEM() do { \
   if (_menuLineNr == _thisItemNr) { \
     if (ui.should_draw()) { \
-      draw_menu_item_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT); \
+      draw_menu_item_static(_lcdLineNr, GET_TEXT(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT); \
       ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \
     } \
     if (_skipStatic && encoderLine <= _thisItemNr) { \
@@ -312,137 +311,42 @@ void menu_pause_option() {
 //
 // ADVANCED_PAUSE_FEATURE message screens
 //
+// Warning: msg must have three null bytes to delimit lines!
+//
+void _lcd_pause_message(PGM_P const msg) {
+  PGM_P const msg1 = msg;
+  PGM_P const msg2 = msg1 + strlen_P(msg1) + 1;
+  PGM_P const msg3 = msg2 + strlen_P(msg2) + 1;
+  const bool has2 = msg2[0], has3 = msg3[0],
+             skip1 = !has2 && (LCD_HEIGHT) >= 5;
 
-void _lcd_pause_message(PGM_P const msg1, PGM_P const msg2=nullptr, PGM_P const msg3=nullptr) {
   START_SCREEN();
-  STATIC_ITEM_P(pause_header(), SS_CENTER|SS_INVERT);
-  STATIC_ITEM_P(msg1);
-  if (msg2) STATIC_ITEM_P(msg2);
-  if (msg3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_P(msg3);
-  if ((!!msg2) + (!!msg3) + 2 < (LCD_HEIGHT) - 1) STATIC_ITEM(" ");
-  HOTEND_STATUS_ITEM();
+  STATIC_ITEM_P(pause_header(), SS_CENTER|SS_INVERT);           // 1: Header
+  if (skip1) SKIP_ITEM();                                       // Move a single-line message down
+  STATIC_ITEM_P(msg1);                                          // 2: Message Line 1
+  if (has2) STATIC_ITEM_P(msg2);                                // 3: Message Line 2
+  if (has3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_P(msg3);           // 4: Message Line 3 (if LCD has 5 lines)
+  if (skip1 + 1 + has2 + has3 < (LCD_HEIGHT) - 2) SKIP_ITEM();  // Push Hotend Status down, if needed
+  HOTEND_STATUS_ITEM();                                         // 5: Hotend Status
   END_SCREEN();
 }
 
-void lcd_pause_pausing_message() {
-  _lcd_pause_message(PSTR(MSG_PAUSE_PRINT_INIT_1)
-    #ifdef MSG_PAUSE_PRINT_INIT_2
-      , PSTR(MSG_PAUSE_PRINT_INIT_2)
-      #ifdef MSG_PAUSE_PRINT_INIT_3
-        , PSTR(MSG_PAUSE_PRINT_INIT_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_changing_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_INIT_1)
-    #ifdef MSG_FILAMENT_CHANGE_INIT_2
-      , PSTR(MSG_FILAMENT_CHANGE_INIT_2)
-      #ifdef MSG_FILAMENT_CHANGE_INIT_3
-        , PSTR(MSG_FILAMENT_CHANGE_INIT_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_unload_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_UNLOAD_1)
-    #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
-      , PSTR(MSG_FILAMENT_CHANGE_UNLOAD_2)
-      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
-        , PSTR(MSG_FILAMENT_CHANGE_UNLOAD_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_heating_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_HEATING_1)
-    #ifdef MSG_FILAMENT_CHANGE_HEATING_2
-      , PSTR(MSG_FILAMENT_CHANGE_HEATING_2)
-      #ifdef MSG_FILAMENT_CHANGE_HEATING_3
-        , PSTR(MSG_FILAMENT_CHANGE_HEATING_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_heat_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_HEAT_1)
-    #ifdef MSG_FILAMENT_CHANGE_HEAT_2
-      , PSTR(MSG_FILAMENT_CHANGE_HEAT_2)
-      #ifdef MSG_FILAMENT_CHANGE_HEAT_3
-        , PSTR(MSG_FILAMENT_CHANGE_HEAT_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_insert_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_INSERT_1)
-    #ifdef MSG_FILAMENT_CHANGE_INSERT_2
-      , PSTR(MSG_FILAMENT_CHANGE_INSERT_2)
-      #ifdef MSG_FILAMENT_CHANGE_INSERT_3
-        , PSTR(MSG_FILAMENT_CHANGE_INSERT_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_load_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_LOAD_1)
-    #ifdef MSG_FILAMENT_CHANGE_LOAD_2
-      , PSTR(MSG_FILAMENT_CHANGE_LOAD_2)
-      #ifdef MSG_FILAMENT_CHANGE_LOAD_3
-        , PSTR(MSG_FILAMENT_CHANGE_LOAD_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_waiting_message() {
-  _lcd_pause_message(PSTR(MSG_ADVANCED_PAUSE_WAITING_1)
-    #ifdef MSG_ADVANCED_PAUSE_WAITING_2
-      , PSTR(MSG_ADVANCED_PAUSE_WAITING_2)
-      #ifdef MSG_ADVANCED_PAUSE_WAITING_3
-        , PSTR(MSG_ADVANCED_PAUSE_WAITING_3)
-      #endif
-    #endif
-  );
-}
-
-void lcd_pause_resume_message() {
-  _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_RESUME_1)
-    #ifdef MSG_FILAMENT_CHANGE_RESUME_2
-      , PSTR(MSG_FILAMENT_CHANGE_RESUME_2)
-      #ifdef MSG_FILAMENT_CHANGE_RESUME_3
-        , PSTR(MSG_FILAMENT_CHANGE_RESUME_3)
-      #endif
-    #endif
-  );
-}
+void lcd_pause_pausing_message()  { _lcd_pause_message(GET_TEXT(MSG_PAUSE_PRINT_INIT));        }
+void lcd_pause_changing_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_INIT));    }
+void lcd_pause_unload_message()   { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_UNLOAD));  }
+void lcd_pause_heating_message()  { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_HEATING)); }
+void lcd_pause_heat_message()     { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_HEAT));    }
+void lcd_pause_insert_message()   { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_INSERT));  }
+void lcd_pause_load_message()     { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_LOAD));    }
+void lcd_pause_waiting_message()  { _lcd_pause_message(GET_TEXT(MSG_ADVANCED_PAUSE_WAITING));  }
+void lcd_pause_resume_message()   { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_RESUME));  }
 
 void lcd_pause_purge_message() {
-  _lcd_pause_message(
-    #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
-      PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_1)
-      #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_2
-        , PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_2)
-        #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_3
-          , PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_3)
-        #endif
-      #endif
-    #else
-      PSTR(MSG_FILAMENT_CHANGE_PURGE_1)
-      #ifdef MSG_FILAMENT_CHANGE_PURGE_2
-        , PSTR(MSG_FILAMENT_CHANGE_PURGE_2)
-        #ifdef MSG_FILAMENT_CHANGE_PURGE_3
-          , PSTR(MSG_FILAMENT_CHANGE_PURGE_3)
-        #endif
-      #endif
-    #endif
-  );
+  #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
+    _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_CONT_PURGE));
+  #else
+    _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE));
+  #endif
 }
 
 FORCE_INLINE screenFunc_t ap_message_screen(const PauseMessage message) {
diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp
index 26d9441ff7..5ef6bbfc46 100644
--- a/Marlin/src/lcd/menu/menu_info.cpp
+++ b/Marlin/src/lcd/menu/menu_info.cpp
@@ -34,8 +34,8 @@
   #include "game/game.h"
 #endif
 
-#define STATIC_PAIR(MSG, VALUE, STYL)    do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, STYL, buffer); }while(0)
-#define STATIC_PAIR_P(MSG, PVALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, buffer); }while(0)
+#define VALUE_ITEM(MSG, VALUE, STYL)    do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, STYL, buffer); }while(0)
+#define VALUE_ITEM_P(MSG, PVALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, buffer); }while(0)
 
 #if ENABLED(PRINTCOUNTER)
 
@@ -51,37 +51,41 @@
       #endif
     );
 
-    char buffer[21];  // for STATIC_PAIR_P
+    char buffer[21];  // For macro usage
 
     printStatistics stats = print_job_timer.getStats();
 
     START_SCREEN();                                                                           // 12345678901234567890
-    STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT);             // Print Count: 999
-    STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT);     // Completed  : 666
+    VALUE_ITEM(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT);              // Print Count: 999
+    VALUE_ITEM(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT);      // Completed  : 666
 
-    STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", SS_LEFT);                                          // Total print Time:
-    STATIC_ITEM("> ", SS_LEFT, duration_t(stats.printTime).toString(buffer));                 // > 99y 364d 23h 59m 59s
+    STATIC_ITEM(MSG_INFO_PRINT_TIME, SS_LEFT);                                                // Total print Time:
+    STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.printTime).toString(buffer));         // > 99y 364d 23h 59m 59s
 
-    STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", SS_LEFT);                                       // Longest job time:
-    STATIC_ITEM("> ", SS_LEFT, duration_t(stats.longestPrint).toString(buffer));              // > 99y 364d 23h 59m 59s
+    STATIC_ITEM(MSG_INFO_PRINT_LONGEST, SS_LEFT);                                             // Longest job time:
+    STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.longestPrint).toString(buffer));      // > 99y 364d 23h 59m 59s
 
-    STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", SS_LEFT);                                      // Extruded total:
+    STATIC_ITEM(MSG_INFO_PRINT_FILAMENT, SS_LEFT);                                            // Extruded total:
     sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10);
-    STATIC_ITEM("> ", SS_LEFT, buffer);                                                       // > 125m
+    STATIC_ITEM_P(PSTR("> "), SS_LEFT, buffer);                                               // > 125m
+
+    #if SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0
+      strcpy_P(buffer, GET_TEXT(MSG_SERVICE_IN));
+    #endif
 
     #if SERVICE_INTERVAL_1 > 0
-      STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, SS_LEFT);                                    // Service X in:
-      STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService1).toString(buffer));            // > 7d 12h 11m 10s
+      STATIC_ITEM_P(PSTR(SERVICE_NAME_1 " "), SS_LEFT, buffer);                               // Service X in:
+      STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService1).toString(buffer));    // > 7d 12h 11m 10s
     #endif
 
     #if SERVICE_INTERVAL_2 > 0
-      STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, SS_LEFT);
-      STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService2).toString(buffer));
+      STATIC_ITEM_P(PSTR(SERVICE_NAME_2 " "), SS_LEFT, buffer);
+      STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService2).toString(buffer));
     #endif
 
     #if SERVICE_INTERVAL_3 > 0
-      STATIC_ITEM(SERVICE_NAME_3 MSG_SERVICE_IN, SS_LEFT);
-      STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService3).toString(buffer));
+      STATIC_ITEM_P(PSTR(SERVICE_NAME_3 " "), SS_LEFT, buffer);
+      STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService3).toString(buffer));
     #endif
 
     END_SCREEN();
@@ -99,61 +103,61 @@ void menu_info_thermistors() {
     #endif
   );
 
-  char buffer[21];  // for STATIC_PAIR_P
+  char buffer[21];  // For macro usage
 
   START_SCREEN();
 
   #if EXTRUDERS
     #define THERMISTOR_ID TEMP_SENSOR_0
     #include "../thermistornames.h"
-    STATIC_ITEM("T0: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E0 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT);
   #endif
 
   #if TEMP_SENSOR_1 != 0
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_1
     #include "../thermistornames.h"
-    STATIC_ITEM("T1: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E1 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT);
   #endif
 
   #if TEMP_SENSOR_2 != 0
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_2
     #include "../thermistornames.h"
-    STATIC_ITEM("T2: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E2 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT);
   #endif
 
   #if TEMP_SENSOR_3 != 0
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_3
     #include "../thermistornames.h"
-    STATIC_ITEM("T3: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E3 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT);
   #endif
 
   #if TEMP_SENSOR_4 != 0
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_4
     #include "../thermistornames.h"
-    STATIC_ITEM("T4: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E4 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT);
   #endif
 
   #if TEMP_SENSOR_5 != 0
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_5
     #include "../thermistornames.h"
-    STATIC_ITEM("T5: " THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR(LCD_STR_E5 ": " THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
   #endif
 
   #if EXTRUDERS
@@ -174,9 +178,9 @@ void menu_info_thermistors() {
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_BED
     #include "../thermistornames.h"
-    STATIC_ITEM("TBed:" THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR("BED:" THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT);
     STATIC_ITEM(
       #if WATCH_BED
         MSG_INFO_RUNAWAY_ON
@@ -193,9 +197,9 @@ void menu_info_thermistors() {
     #undef THERMISTOR_ID
     #define THERMISTOR_ID TEMP_SENSOR_CHAMBER
     #include "../thermistornames.h"
-    STATIC_ITEM("TCham:" THERMISTOR_NAME, SS_INVERT);
-    STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT);
-    STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT);
+    STATIC_ITEM_P(PSTR("CHAM:" THERMISTOR_NAME), SS_INVERT);
+    VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT);
+    VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT);
     STATIC_ITEM(
       #if WATCH_CHAMBER
         MSG_INFO_RUNAWAY_ON
@@ -220,16 +224,16 @@ void menu_info_board() {
     #endif
   );
 
-  char buffer[21];  // for STATIC_PAIR_P
+  char buffer[21];  // For macro usage
 
   START_SCREEN();
-  STATIC_ITEM(BOARD_INFO_NAME, SS_CENTER|SS_INVERT);                // MyPrinterController
+  STATIC_ITEM_P(PSTR(BOARD_INFO_NAME), SS_CENTER|SS_INVERT);       // MyPrinterController
   #ifdef BOARD_WEBSITE_URL
-    STATIC_ITEM(BOARD_WEBSITE_URL, SS_LEFT);                        // www.my3dprinter.com
+    STATIC_ITEM_P(PSTR(BOARD_WEBSITE_URL), SS_LEFT);               // www.my3dprinter.com
   #endif
-  STATIC_PAIR_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000
-  STATIC_PAIR_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER);    // Protocol: 1.0
-  STATIC_PAIR_P(MSG_INFO_PSU,      PSU_NAME, SS_CENTER);
+  VALUE_ITEM_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000
+  VALUE_ITEM_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER);    // Protocol: 1.0
+  VALUE_ITEM_P(MSG_INFO_PSU,      PSU_NAME, SS_CENTER);
   END_SCREEN();
 }
 
@@ -259,12 +263,13 @@ void menu_info_board() {
       #endif
     );
     START_SCREEN();
-    STATIC_ITEM(MSG_MARLIN, SS_CENTER|SS_INVERT);               // Marlin
-    STATIC_ITEM(SHORT_BUILD_VERSION);                           // x.x.x-Branch
-    STATIC_ITEM(STRING_DISTRIBUTION_DATE);                      // YYYY-MM-DD HH:MM
-    STATIC_ITEM(MACHINE_NAME);                                  // My3DPrinter
-    STATIC_ITEM(WEBSITE_URL);                                   // www.my3dprinter.com
-    STATIC_ITEM(MSG_INFO_EXTRUDERS ": " STRINGIFY(EXTRUDERS));  // Extruders: 2
+    STATIC_ITEM_P(PSTR(MSG_MARLIN), SS_CENTER|SS_INVERT);       // Marlin
+    STATIC_ITEM_P(PSTR(SHORT_BUILD_VERSION));                   // x.x.x-Branch
+    STATIC_ITEM_P(PSTR(STRING_DISTRIBUTION_DATE));              // YYYY-MM-DD HH:MM
+    STATIC_ITEM_P(PSTR(MACHINE_NAME));                          // My3DPrinter
+    STATIC_ITEM_P(PSTR(WEBSITE_URL));                           // www.my3dprinter.com
+    char buffer[21];
+    VALUE_ITEM_P(MSG_INFO_EXTRUDERS, STRINGIFY(EXTRUDERS), SS_CENTER); // Extruders: 2
     #if ENABLED(AUTO_BED_LEVELING_3POINT)
       STATIC_ITEM(MSG_3POINT_LEVELING);                         // 3-Point Leveling
     #elif ENABLED(AUTO_BED_LEVELING_LINEAR)
diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp
index b1e9d3a504..6bba3873b3 100644
--- a/Marlin/src/lcd/menu/menu_main.cpp
+++ b/Marlin/src/lcd/menu/menu_main.cpp
@@ -44,7 +44,7 @@
 
 #if MACHINE_CAN_STOP
   void menu_abort_confirm() {
-    do_select_screen(PSTR(MSG_BUTTON_STOP), PSTR(MSG_BACK), ui.abort_print, ui.goto_previous_screen, PSTR(MSG_STOP_PRINT), nullptr, PSTR("?"));
+    do_select_screen(GET_TEXT(MSG_BUTTON_STOP), GET_TEXT(MSG_BACK), ui.abort_print, ui.goto_previous_screen, GET_TEXT(MSG_STOP_PRINT), nullptr, PSTR("?"));
   }
 #endif // MACHINE_CAN_STOP
 
@@ -238,13 +238,13 @@ void menu_main() {
 
   #if HAS_SERVICE_INTERVALS
     #if SERVICE_INTERVAL_1 > 0
-      SUBMENU(SERVICE_NAME_1, menu_service1);
+      SUBMENU_P(PSTR(SERVICE_NAME_1), menu_service1);
     #endif
     #if SERVICE_INTERVAL_2 > 0
-      SUBMENU(SERVICE_NAME_2, menu_service2);
+      SUBMENU_P(PSTR(SERVICE_NAME_2), menu_service2);
     #endif
     #if SERVICE_INTERVAL_3 > 0
-      SUBMENU(SERVICE_NAME_3, menu_service3);
+      SUBMENU_P(PSTR(SERVICE_NAME_3), menu_service3);
     #endif
   #endif
 
diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp
index d05ec01c82..11c57da605 100644
--- a/Marlin/src/lcd/menu/menu_media.cpp
+++ b/Marlin/src/lcd/menu/menu_media.cpp
@@ -80,9 +80,9 @@ inline void sdcard_start_selected_file() {
     buffer[0] = ' ';
     strcpy(buffer + 1, longest);
     do_select_screen(
-      PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL),
+      GET_TEXT(MSG_BUTTON_PRINT), GET_TEXT(MSG_BUTTON_CANCEL),
       sdcard_start_selected_file, ui.goto_previous_screen,
-      PSTR(MSG_START_PRINT), buffer, PSTR("?")
+      GET_TEXT(MSG_START_PRINT), buffer, PSTR("?")
     );
   }
 
@@ -134,11 +134,11 @@ void menu_media() {
   BACK_ITEM(MSG_MAIN);
   if (card.flag.workDirIsRoot) {
     #if !PIN_EXISTS(SD_DETECT)
-      ACTION_ITEM(LCD_STR_REFRESH MSG_REFRESH, [](){ encoderTopLine = 0; card.mount(); });
+      ACTION_ITEM(MSG_REFRESH, [](){ encoderTopLine = 0; card.mount(); });
     #endif
   }
   else if (card.isMounted())
-    ACTION_ITEM(LCD_STR_FOLDER "..", lcd_sd_updir);
+    ACTION_ITEM_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir);
 
   if (ui.should_draw()) for (uint16_t i = 0; i < fileCnt; i++) {
     if (_menuLineNr == _thisItemNr) {
diff --git a/Marlin/src/lcd/menu/menu_mixer.cpp b/Marlin/src/lcd/menu/menu_mixer.cpp
index c89e67d368..bc3d2798f7 100644
--- a/Marlin/src/lcd/menu/menu_mixer.cpp
+++ b/Marlin/src/lcd/menu/menu_mixer.cpp
@@ -50,7 +50,8 @@
     }
     if (ui.should_draw()) {
       char tmp[21];
-      sprintf_P(tmp, PSTR(MSG_START_Z ": %4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
+      strcpy_P(tmp, GET_TEXT(MSG_START_Z));
+      sprintf_P(tmp + strlen(tmp), PSTR(": %4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
       SETCURSOR(2, (LCD_HEIGHT - 1) / 2);
       LCDPRINT(tmp);
     }
@@ -75,7 +76,8 @@
 
     if (ui.should_draw()) {
       char tmp[21];
-      sprintf_P(tmp, PSTR(MSG_END_Z ": %4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
+      strcpy_P(tmp, GET_TEXT(MSG_END_Z));
+      sprintf_P(tmp + strlen(tmp), PSTR(": %4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
       SETCURSOR(2, (LCD_HEIGHT - 1) / 2);
       LCDPRINT(tmp);
     }
@@ -101,13 +103,13 @@
 
     char tmp[18];
 
-    SUBMENU(MSG_START_Z ":", lcd_mixer_gradient_z_start_edit);
+    SUBMENU(MSG_START_Z, lcd_mixer_gradient_z_start_edit);
     MENU_ITEM_ADDON_START(9);
       sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
       LCDPRINT(tmp);
     MENU_ITEM_ADDON_END();
 
-    SUBMENU(MSG_END_Z ":", lcd_mixer_gradient_z_end_edit);
+    SUBMENU(MSG_END_Z, lcd_mixer_gradient_z_end_edit);
     MENU_ITEM_ADDON_START(9);
       sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
       LCDPRINT(tmp);
@@ -122,9 +124,11 @@ static uint8_t v_index;
 
 #if DUAL_MIXING_EXTRUDER
   void _lcd_draw_mix(const uint8_t y) {
-    char tmp[21];
-    sprintf_P(tmp, PSTR(MSG_MIX ":    %3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
+    char tmp[10]; // "100%_100%"
     SETCURSOR(2, y);
+    lcd_put_u8str_P(GET_TEXT(MSG_MIX));
+    SETCURSOR(LCD_WIDTH - 9, y);
+    sprintf_P(tmp, PSTR("%3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
     LCDPRINT(tmp);
   }
 #endif
@@ -158,7 +162,7 @@ void lcd_mixer_mix_edit() {
 
   #if CHANNEL_MIX_EDITING
 
-    #define EDIT_COLOR(N) EDIT_ITEM_FAST(float52, MSG_MIX_COMPONENT " " STRINGIFY(N), &mixer.collector[N-1], 0, 10);
+    #define EDIT_COLOR(N) EDIT_ITEM_FAST(float52, MSG_MIX_COMPONENT_##N, &mixer.collector[N-1], 0, 10);
 
     START_MENU();
     BACK_ITEM(MSG_MIXER);
@@ -250,14 +254,14 @@ void lcd_mixer_mix_edit() {
 //
 void menu_mixer_vtools_reset_confirm() {
   do_select_screen(
-    PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+    GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
     []{
       mixer.reset_vtools();
       LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
       ui.return_to_status();
     },
     ui.goto_previous_screen,
-    PSTR(MSG_RESET_VTOOLS), nullptr, PSTR("?")
+    GET_TEXT(MSG_RESET_VTOOLS), nullptr, PSTR("?")
   );
 }
 
diff --git a/Marlin/src/lcd/menu/menu_mmu2.cpp b/Marlin/src/lcd/menu/menu_mmu2.cpp
index 0412d86a6f..aa6eb27ea1 100644
--- a/Marlin/src/lcd/menu/menu_mmu2.cpp
+++ b/Marlin/src/lcd/menu/menu_mmu2.cpp
@@ -38,7 +38,7 @@ bool mmuMenuWait;
 void _mmu2_load_filamentToNozzle(uint8_t index) {
   ui.reset_status();
   ui.return_to_status();
-  ui.status_printf_P(0,  PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+  ui.status_printf_P(0,  GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
   if (mmu2.load_filament_to_nozzle(index)) ui.reset_status();
 }
 
@@ -49,7 +49,7 @@ inline void action_mmu2_load_filament_to_nozzle(const uint8_t tool) {
 
 void _mmu2_load_filament(uint8_t index) {
   ui.return_to_status();
-  ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+  ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
   mmu2.load_filament(index);
   ui.reset_status();
 }
@@ -89,7 +89,7 @@ void menu_mmu2_load_to_nozzle() {
 void _mmu2_eject_filament(uint8_t index) {
   ui.reset_status();
   ui.return_to_status();
-  ui.status_printf_P(0, PSTR(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
+  ui.status_printf_P(0, GET_TEXT(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
   if (mmu2.eject_filament(index, true)) ui.reset_status();
 }
 
@@ -162,7 +162,7 @@ void menu_mmu2_pause() {
   currentTool = mmu2.get_current_tool();
   START_MENU();
   #if LCD_HEIGHT > 2
-    STATIC_ITEM(MSG_MMU2_FILAMENT_CHANGE_HEADER, SS_CENTER|SS_INVERT);
+    STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, SS_CENTER|SS_INVERT);
   #endif
   ACTION_ITEM(MSG_MMU2_RESUME, [](){ mmuMenuWait = false; });
   ACTION_ITEM(MSG_MMU2_UNLOAD_FILAMENT, [](){ mmu2.unload(); });
diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp
index 6a3f7cec43..7861dfb7ea 100644
--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -155,9 +155,9 @@ static void _lcd_move_xyz(PGM_P name, AxisEnum axis) {
     draw_edit_screen(name, move_menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr43sign(pos));
   }
 }
-void lcd_move_x() { _lcd_move_xyz(PSTR(MSG_MOVE_X), X_AXIS); }
-void lcd_move_y() { _lcd_move_xyz(PSTR(MSG_MOVE_Y), Y_AXIS); }
-void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
+void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }
+void lcd_move_y() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_Y), Y_AXIS); }
+void lcd_move_z() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_Z), Z_AXIS); }
 
 #if E_MANUAL
 
@@ -185,21 +185,19 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
       ui.encoderPosition = 0;
     }
     if (ui.should_draw()) {
-      PGM_P pos_label;
-      #if E_MANUAL == 1
-        pos_label = PSTR(MSG_MOVE_E);
-      #else
+      PGM_P pos_label = GET_TEXT(MSG_MOVE_E);
+      #if E_MANUAL > 1
         switch (eindex) {
-          default: pos_label = PSTR(MSG_MOVE_E LCD_STR_N0); break;
-          case 1: pos_label = PSTR(MSG_MOVE_E LCD_STR_N1); break;
+          default: pos_label = GET_TEXT(MSG_MOVE_E0); break;
+          case 1: pos_label = GET_TEXT(MSG_MOVE_E1); break;
           #if E_MANUAL > 2
-            case 2: pos_label = PSTR(MSG_MOVE_E LCD_STR_N2); break;
+            case 2: pos_label = GET_TEXT(MSG_MOVE_E2); break;
             #if E_MANUAL > 3
-              case 3: pos_label = PSTR(MSG_MOVE_E LCD_STR_N3); break;
+              case 3: pos_label = GET_TEXT(MSG_MOVE_E3); break;
               #if E_MANUAL > 4
-                case 4: pos_label = PSTR(MSG_MOVE_E LCD_STR_N4); break;
+                case 4: pos_label = GET_TEXT(MSG_MOVE_E4); break;
                 #if E_MANUAL > 5
-                  case 5: pos_label = PSTR(MSG_MOVE_E LCD_STR_N5); break;
+                  case 5: pos_label = GET_TEXT(MSG_MOVE_E5); break;
                 #endif // E_MANUAL > 5
               #endif // E_MANUAL > 4
             #endif // E_MANUAL > 3
@@ -263,13 +261,13 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
     SUBMENU(MSG_MOVE_1MM,  [](){ _goto_manual_move( 1);    });
     SUBMENU(MSG_MOVE_01MM, [](){ _goto_manual_move( 0.1f); });
     if (axis == Z_AXIS && (SHORT_MANUAL_Z_MOVE) > 0.0f && (SHORT_MANUAL_Z_MOVE) < 0.1f) {
-      SUBMENU("", []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
+      SUBMENU_P(PSTR(""), []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
       MENU_ITEM_ADDON_START(1);
         char tmp[20], numstr[10];
         // Determine digits needed right of decimal
         const uint8_t digs = !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 1000 - int((SHORT_MANUAL_Z_MOVE) * 1000)) ? 4 :
                              !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) *  100 - int((SHORT_MANUAL_Z_MOVE) *  100)) ? 3 : 2;
-        sprintf_P(tmp, PSTR(MSG_MOVE_Z_DIST), dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
+        sprintf_P(tmp, GET_TEXT(MSG_MOVE_Z_DIST), dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
         LCDPRINT(tmp);
       MENU_ITEM_ADDON_END();
     }
@@ -316,35 +314,35 @@ void menu_move() {
 
     #if EXTRUDERS >= 4
       switch (active_extruder) {
-        case 0: GCODES_ITEM(MSG_SELECT " " LCD_STR_E1, PSTR("T1")); break;
-        case 1: GCODES_ITEM(MSG_SELECT " " LCD_STR_E0, PSTR("T0")); break;
-        case 2: GCODES_ITEM(MSG_SELECT " " LCD_STR_E3, PSTR("T3")); break;
-        case 3: GCODES_ITEM(MSG_SELECT " " LCD_STR_E2, PSTR("T2")); break;
+        case 0: GCODES_ITEM(MSG_SELECT_E1, PSTR("T1")); break;
+        case 1: GCODES_ITEM(MSG_SELECT_E0, PSTR("T0")); break;
+        case 2: GCODES_ITEM(MSG_SELECT_E3, PSTR("T3")); break;
+        case 3: GCODES_ITEM(MSG_SELECT_E2, PSTR("T2")); break;
         #if EXTRUDERS == 6
-          case 4: GCODES_ITEM(MSG_SELECT " " LCD_STR_E5, PSTR("T5")); break;
-          case 5: GCODES_ITEM(MSG_SELECT " " LCD_STR_E4, PSTR("T4")); break;
+          case 4: GCODES_ITEM(MSG_SELECT_E5, PSTR("T5")); break;
+          case 5: GCODES_ITEM(MSG_SELECT_E4, PSTR("T4")); break;
         #endif
       }
     #elif EXTRUDERS == 3
       if (active_extruder < 2) {
         if (active_extruder)
-          GCODES_ITEM(MSG_SELECT " " LCD_STR_E0, PSTR("T0"));
+          GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
         else
-          GCODES_ITEM(MSG_SELECT " " LCD_STR_E1, PSTR("T1"));
+          GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
       }
     #else
       if (active_extruder)
-        GCODES_ITEM(MSG_SELECT " " LCD_STR_E0, PSTR("T0"));
+        GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
       else
-        GCODES_ITEM(MSG_SELECT " " LCD_STR_E1, PSTR("T1"));
+        GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
     #endif
 
   #elif ENABLED(DUAL_X_CARRIAGE)
 
     if (active_extruder)
-      GCODES_ITEM(MSG_SELECT " " LCD_STR_E0, PSTR("T0"));
+      GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
     else
-      GCODES_ITEM(MSG_SELECT " " LCD_STR_E1, PSTR("T1"));
+      GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
 
   #endif
 
@@ -353,7 +351,7 @@ void menu_move() {
     // The current extruder
     SUBMENU(MSG_MOVE_E, [](){ _menu_move_distance(E_AXIS, [](){ lcd_move_e(); }, -1); });
 
-    #define SUBMENU_MOVE_E(N) SUBMENU(MSG_MOVE_E LCD_STR_N##N, [](){ _menu_move_distance(E_AXIS, [](){ lcd_move_e(N); }, N); });
+    #define SUBMENU_MOVE_E(N) SUBMENU(MSG_MOVE_E##N, [](){ _menu_move_distance(E_AXIS, [](){ lcd_move_e(N); }, N); });
 
     #if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
 
diff --git a/Marlin/src/lcd/menu/menu_service.cpp b/Marlin/src/lcd/menu/menu_service.cpp
index fb7f05c905..0d305d0281 100644
--- a/Marlin/src/lcd/menu/menu_service.cpp
+++ b/Marlin/src/lcd/menu/menu_service.cpp
@@ -45,10 +45,10 @@ inline void _service_reset(const int index) {
     char sram[30];
     strncpy_P(sram, PSTR(SERVICE_NAME_1), 29);
     do_select_screen(
-      PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+      GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
       []{ _service_reset(1); },
       ui.goto_previous_screen,
-      PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+      GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
     );
   }
 #endif
@@ -58,10 +58,10 @@ inline void _service_reset(const int index) {
     char sram[30];
     strncpy_P(sram, PSTR(SERVICE_NAME_2), 29);
     do_select_screen(
-      PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+      GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
       []{ _service_reset(2); },
       ui.goto_previous_screen,
-      PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+      GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
     );
   }
 #endif
@@ -71,10 +71,10 @@ inline void _service_reset(const int index) {
     char sram[30];
     strncpy_P(sram, PSTR(SERVICE_NAME_3), 29);
     do_select_screen(
-      PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+      GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
       []{ _service_reset(3); },
       ui.goto_previous_screen,
-      PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+      GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
     );
   }
 #endif
diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp
index 6d5f3933e3..0d9d16bffe 100644
--- a/Marlin/src/lcd/menu/menu_temperature.cpp
+++ b/Marlin/src/lcd/menu/menu_temperature.cpp
@@ -87,14 +87,14 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
 #if HAS_TEMP_HOTEND || HAS_HEATED_BED
 
   #define _PREHEAT_ITEMS(M,N) do{ \
-    ACTION_ITEM(MSG_PREHEAT_##M##_N LCD_STR_N##N, [](){ _preheat_both(M-1, N); }); \
-    ACTION_ITEM(MSG_PREHEAT_##M##_END " " LCD_STR_E##N, [](){ _preheat_end(M-1, N); }); \
+    ACTION_ITEM(MSG_PREHEAT_##M##_H##N, [](){ _preheat_both(M-1, N); }); \
+    ACTION_ITEM(MSG_PREHEAT_##M##_END_E##N, [](){ _preheat_end(M-1, N); }); \
   }while(0)
   #if HAS_HEATED_BED
     #define PREHEAT_ITEMS(M,N) _PREHEAT_ITEMS(M,N)
   #else
     #define PREHEAT_ITEMS(M,N) \
-      ACTION_ITEM(MSG_PREHEAT_##M##_N LCD_STR_N##N, [](){ _preheat_end(M-1, N); })
+      ACTION_ITEM(MSG_PREHEAT_##M##_H##N, [](){ _preheat_end(M-1, N); })
   #endif
 
   void menu_preheat_m1() {
@@ -196,7 +196,7 @@ void menu_temperature() {
   #if HOTENDS == 1
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(0); });
   #elif HOTENDS > 1
-    #define EDIT_TARGET(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE LCD_STR_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
+    #define EDIT_TARGET(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE_##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
     EDIT_TARGET(0);
     EDIT_TARGET(1);
     #if HOTENDS > 2
@@ -237,23 +237,23 @@ void menu_temperature() {
   #if FAN_COUNT > 0
     #if HAS_FAN0
       editable.uint8 = thermalManager.fan_speed[0];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_1, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_1, &thermalManager.new_fan_speed[0], 3, 255);
       #endif
     #endif
     #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
       editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED " 2", &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_2, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_2, &thermalManager.new_fan_speed[1], 3, 255);
       #endif
     #endif
     #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
       editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED " 3", &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_3, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_3, &thermalManager.new_fan_speed[2], 3, 255);
       #endif
     #endif
   #endif // FAN_COUNT > 0
diff --git a/Marlin/src/lcd/menu/menu_tmc.cpp b/Marlin/src/lcd/menu/menu_tmc.cpp
index 4d6f539e2d..ee74b95171 100644
--- a/Marlin/src/lcd/menu/menu_tmc.cpp
+++ b/Marlin/src/lcd/menu/menu_tmc.cpp
@@ -32,7 +32,7 @@
 #include "../../module/stepper/indirection.h"
 #include "../../feature/tmc_util.h"
 
-#define TMC_EDIT_STORED_I_RMS(ST,MSG) EDIT_ITEM(uint16_4, MSG, &stepper##ST.val_mA, 100, 3000, [](){ stepper##ST.refresh_stepper_current(); })
+#define TMC_EDIT_STORED_I_RMS(ST,MSG) EDIT_ITEM_P(uint16_4, PSTR(MSG), &stepper##ST.val_mA, 100, 3000, [](){ stepper##ST.refresh_stepper_current(); })
 
 void menu_tmc_current() {
   START_MENU();
@@ -81,7 +81,7 @@ void menu_tmc_current() {
 
 #if ENABLED(HYBRID_THRESHOLD)
 
-  #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) EDIT_ITEM(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, [](){ stepper##ST.refresh_hybrid_thrs(); });
+  #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) EDIT_ITEM_P(uint8, PSTR(MSG), &stepper##ST.stored.hybrid_thrs, 0, 255, [](){ stepper##ST.refresh_hybrid_thrs(); });
 
   void menu_tmc_hybrid_thrs() {
     START_MENU();
@@ -132,7 +132,7 @@ void menu_tmc_current() {
 
 #if ENABLED(SENSORLESS_HOMING)
 
-  #define TMC_EDIT_STORED_SGT(ST) EDIT_ITEM(int4, MSG_##ST, &stepper##ST.stored.homing_thrs, stepper##ST.sgt_min, stepper##ST.sgt_max, [](){ stepper##ST.refresh_homing_thrs(); });
+  #define TMC_EDIT_STORED_SGT(ST) EDIT_ITEM_P(int4, PSTR(MSG_##ST), &stepper##ST.stored.homing_thrs, stepper##ST.sgt_min, stepper##ST.sgt_max, [](){ stepper##ST.refresh_homing_thrs(); });
 
   void menu_tmc_homing_thrs() {
     START_MENU();
@@ -156,7 +156,7 @@ void menu_tmc_current() {
 
 #if HAS_STEALTHCHOP
 
-  #define TMC_EDIT_STEP_MODE(ST, MSG) EDIT_ITEM(bool, MSG, &stepper##ST.stored.stealthChop_enabled, [](){ stepper##ST.refresh_stepping_mode(); })
+  #define TMC_EDIT_STEP_MODE(ST, MSG) EDIT_ITEM_P(bool, PSTR(MSG), &stepper##ST.stored.stealthChop_enabled, [](){ stepper##ST.refresh_stepping_mode(); })
 
   void menu_tmc_step_mode() {
     START_MENU();
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index b096cd75bb..e89d18995c 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -74,7 +74,8 @@
           #else
             lcd_moveto(0, LCD_HEIGHT - 1);
           #endif
-          lcd_put_u8str_P(PSTR(MSG_BABYSTEP_TOTAL ":"));
+          lcd_put_u8str_P(GET_TEXT(MSG_BABYSTEP_TOTAL));
+          lcd_put_wchar(':');
           lcd_put_u8str(ftostr54sign(spm * babystep.axis_total[BS_TOTAL_AXIS(axis)]));
         }
       #endif
@@ -88,12 +89,12 @@
   }
 
   #if ENABLED(BABYSTEP_XY)
-    void _lcd_babystep_x() { _lcd_babystep(X_AXIS, PSTR(MSG_BABYSTEP_X)); }
-    void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, PSTR(MSG_BABYSTEP_Y)); }
+    void _lcd_babystep_x() { _lcd_babystep(X_AXIS, GET_TEXT(MSG_BABYSTEP_X)); }
+    void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, GET_TEXT(MSG_BABYSTEP_Y)); }
   #endif
 
   #if DISABLED(BABYSTEP_ZPROBE_OFFSET)
-    void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEP_Z)); }
+    void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, GET_TEXT(MSG_BABYSTEP_Z)); }
     void lcd_babystep_z()  { _lcd_babystep_go(_lcd_babystep_z); }
   #endif
 
@@ -122,7 +123,7 @@ void menu_tune() {
   #if HOTENDS == 1
     EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(0); });
   #elif HOTENDS > 1
-    #define EDIT_NOZZLE(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE LCD_STR_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
+    #define EDIT_NOZZLE(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE_##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
     EDIT_NOZZLE(0);
     EDIT_NOZZLE(1);
     #if HOTENDS > 2
@@ -155,24 +156,31 @@ void menu_tune() {
   //
   #if FAN_COUNT > 0
     #if HAS_FAN0
+      #if FAN_COUNT == 1
+        #define MSG_FIRST_FAN_SPEED       MSG_FAN_SPEED
+        #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED
+      #else
+        #define MSG_FIRST_FAN_SPEED       MSG_FAN_SPEED_1
+        #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED_1
+      #endif
       editable.uint8 = thermalManager.fan_speed[0];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
       #endif
     #endif
     #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
       editable.uint8 = thermalManager.fan_speed[1];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED " 2", &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_2, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_2, &thermalManager.new_fan_speed[1], 3, 255);
       #endif
     #endif
     #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
       editable.uint8 = thermalManager.fan_speed[2];
-      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED " 3", &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
+      EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_3, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
       #if ENABLED(EXTRA_FAN_SPEED)
-        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
+        EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_3, &thermalManager.new_fan_speed[2], 3, 255);
       #endif
     #endif
   #endif // FAN_COUNT > 0
@@ -185,7 +193,7 @@ void menu_tune() {
     EDIT_ITEM(int3, MSG_FLOW, &planner.flow_percentage[0], 10, 999, [](){ planner.refresh_e_factor(0); });
   #elif EXTRUDERS
     EDIT_ITEM(int3, MSG_FLOW, &planner.flow_percentage[active_extruder], 10, 999, [](){ planner.refresh_e_factor(active_extruder); });
-    #define EDIT_FLOW(N) EDIT_ITEM(int3, MSG_FLOW LCD_STR_N##N, &planner.flow_percentage[N], 10, 999, [](){ planner.refresh_e_factor(N); })
+    #define EDIT_FLOW(N) EDIT_ITEM(int3, MSG_FLOW_##N, &planner.flow_percentage[N], 10, 999, [](){ planner.refresh_e_factor(N); })
     EDIT_FLOW(0);
     EDIT_FLOW(1);
     #if EXTRUDERS > 2
diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp
index 2962d65d06..74a51f0b7b 100644
--- a/Marlin/src/lcd/menu/menu_ubl.cpp
+++ b/Marlin/src/lcd/menu/menu_ubl.cpp
@@ -79,7 +79,7 @@ void _lcd_mesh_edit_NOP() {
 float lcd_mesh_edit() {
   ui.goto_screen(_lcd_mesh_edit_NOP);
   ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
-  _lcd_mesh_fine_tune(PSTR(MSG_MESH_EDITOR));
+  _lcd_mesh_fine_tune(GET_TEXT(MSG_MESH_EDITOR));
   return mesh_edit_value;
 }
 
@@ -89,7 +89,7 @@ void lcd_mesh_edit_setup(const float &initial) {
 }
 
 void _lcd_z_offset_edit() {
-  _lcd_mesh_fine_tune(PSTR(MSG_UBL_Z_OFFSET));
+  _lcd_mesh_fine_tune(GET_TEXT(MSG_UBL_Z_OFFSET));
 }
 
 float lcd_z_offset_edit() {
@@ -358,7 +358,7 @@ void _lcd_ubl_load_mesh_cmd() {
   char ubl_lcd_gcode[25];
   sprintf_P(ubl_lcd_gcode, PSTR("G29 L%i"), ubl_storage_slot);
   lcd_enqueue_one_now(ubl_lcd_gcode);
-  sprintf_P(ubl_lcd_gcode, PSTR("M117 " MSG_MESH_LOADED), ubl_storage_slot);
+  sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_LOADED), ubl_storage_slot);
   lcd_enqueue_one_now(ubl_lcd_gcode);
 }
 
@@ -369,7 +369,7 @@ void _lcd_ubl_save_mesh_cmd() {
   char ubl_lcd_gcode[25];
   sprintf_P(ubl_lcd_gcode, PSTR("G29 S%i"), ubl_storage_slot);
   lcd_enqueue_one_now(ubl_lcd_gcode);
-  sprintf_P(ubl_lcd_gcode, PSTR("M117 " MSG_MESH_SAVED), ubl_storage_slot);
+  sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_SAVED), ubl_storage_slot);
   lcd_enqueue_one_now(ubl_lcd_gcode);
 }
 
@@ -578,13 +578,13 @@ void _menu_ubl_tools() {
 void _lcd_ubl_step_by_step() {
   START_MENU();
   BACK_ITEM(MSG_UBL_LEVEL_BED);
-  GCODES_ITEM("1 " MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
-  GCODES_ITEM("2 " MSG_UBL_SMART_FILLIN, PSTR("G29 P3 T0"));
-  SUBMENU("3 " MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
-  GCODES_ITEM("4 " MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
-  SUBMENU("5 " MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
-  GCODES_ITEM("6 " MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
-  ACTION_ITEM("7 " MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
+  GCODES_ITEM(MSG_UBL_1_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
+  GCODES_ITEM(MSG_UBL_2_SMART_FILLIN, PSTR("G29 P3 T0"));
+  SUBMENU(MSG_UBL_3_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
+  GCODES_ITEM(MSG_UBL_4_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
+  SUBMENU(MSG_UBL_5_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
+  GCODES_ITEM(MSG_UBL_6_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
+  ACTION_ITEM(MSG_UBL_7_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
   END_MENU();
 }
 
diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp
index cb5d8ad8fd..fd762450b9 100644
--- a/Marlin/src/lcd/ultralcd.cpp
+++ b/Marlin/src/lcd/ultralcd.cpp
@@ -44,19 +44,15 @@
 #if HAS_SPI_LCD
   #if ENABLED(STATUS_MESSAGE_SCROLLING)
     uint8_t MarlinUI::status_scroll_offset; // = 0
-    #if LONG_FILENAME_LENGTH > CHARSIZE * 2 * (LCD_WIDTH)
-      #define MAX_MESSAGE_LENGTH LONG_FILENAME_LENGTH
-    #else
-      #define MAX_MESSAGE_LENGTH CHARSIZE * 2 * (LCD_WIDTH)
-    #endif
+    constexpr uint8_t MAX_MESSAGE_LENGTH = max(LONG_FILENAME_LENGTH, MAX_LANG_CHARSIZE * 2 * (LCD_WIDTH));
   #else
-    #define MAX_MESSAGE_LENGTH CHARSIZE * (LCD_WIDTH)
+    constexpr uint8_t MAX_MESSAGE_LENGTH = MAX_LANG_CHARSIZE * (LCD_WIDTH);
   #endif
 #elif ENABLED(EXTENSIBLE_UI)
-  #define MAX_MESSAGE_LENGTH 63
+  constexpr uint8_t MAX_MESSAGE_LENGTH = 63;
 #endif
 
-#ifdef MAX_MESSAGE_LENGTH
+#if HAS_SPI_LCD || ENABLED(EXTENSIBLE_UI)
   uint8_t MarlinUI::alert_level; // = 0
   char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1];
 #endif
@@ -590,9 +586,12 @@ void MarlinUI::status_screen() {
   draw_status_screen();
 }
 
-void MarlinUI::kill_screen(PGM_P lcd_msg) {
+void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
   init();
-  set_alert_status_P(lcd_msg);
+  status_printf_P(1, PSTR(S_FMT ": " S_FMT), lcd_error, lcd_component);
+  #if HAS_LCD_MENU
+    return_to_status();
+  #endif
 
   // RED ALERT. RED ALERT.
   #ifdef LED_BACKLIGHT_TIMEOUT
@@ -843,13 +842,13 @@ void MarlinUI::update() {
         if (old_sd_status == 2)
           card.beginautostart();  // Initial boot
         else
-          set_status_P(PSTR(MSG_MEDIA_INSERTED));
+          set_status_P(GET_TEXT(MSG_MEDIA_INSERTED));
       }
       #if PIN_EXISTS(SD_DETECT)
         else {
           card.release();
           if (old_sd_status != 2) {
-            set_status_P(PSTR(MSG_MEDIA_REMOVED));
+            set_status_P(GET_TEXT(MSG_MEDIA_REMOVED));
             #if HAS_LCD_MENU
               return_to_status();
             #endif
@@ -1428,14 +1427,14 @@ void MarlinUI::update() {
   #include "../Marlin.h"
   #include "../module/printcounter.h"
 
-  static const char print_paused[] PROGMEM = MSG_PRINT_PAUSED;
+  PGM_P print_paused = GET_TEXT(MSG_PRINT_PAUSED);
 
   /**
    * Reset the status message
    */
   void MarlinUI::reset_status() {
-    static const char printing[] PROGMEM = MSG_PRINTING;
-    static const char welcome[] PROGMEM = WELCOME_MSG;
+    PGM_P printing = GET_TEXT(MSG_PRINTING);
+    PGM_P welcome  = GET_TEXT(WELCOME_MSG);
     #if SERVICE_INTERVAL_1 > 0
       static const char service1[] PROGMEM = { "> " SERVICE_NAME_1 "!" };
     #endif
@@ -1487,7 +1486,7 @@ void MarlinUI::update() {
       host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), PSTR("Dismiss"));
     #endif
     print_job_timer.stop();
-    set_status_P(PSTR(MSG_PRINT_ABORTED));
+    set_status_P(GET_TEXT(MSG_PRINT_ABORTED));
     #if HAS_LCD_MENU
       return_to_status();
     #endif
@@ -1499,7 +1498,7 @@ void MarlinUI::update() {
 
   void MarlinUI::pause_print() {
     #if HAS_LCD_MENU
-      synchronize(PSTR(MSG_PAUSE_PRINT));
+      synchronize(GET_TEXT(MSG_PAUSE_PRINT));
     #endif
 
     #if ENABLED(POWER_LOSS_RECOVERY)
@@ -1510,7 +1509,7 @@ void MarlinUI::update() {
       host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("UI Pause"), PSTR("Resume"));
     #endif
 
-    set_status_P(print_paused); // MSG_PRINT_PAUSED
+    set_status_P(print_paused);
 
     #if ENABLED(PARK_HEAD_ON_PAUSE)
       #if HAS_SPI_LCD
diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h
index 72f6ec2cb9..0e27e7eb19 100644
--- a/Marlin/src/lcd/ultralcd.h
+++ b/Marlin/src/lcd/ultralcd.h
@@ -380,7 +380,7 @@ public:
     #endif
 
     static bool get_blink();
-    static void kill_screen(PGM_P const lcd_msg);
+    static void kill_screen(PGM_P const lcd_error, PGM_P const lcd_component);
     static void draw_kill_screen();
     static void set_status(const char* const message, const bool persist=false);
     static void set_status_P(PGM_P const message, const int8_t level=0);
@@ -598,5 +598,8 @@ private:
 
 extern MarlinUI ui;
 
-#define LCD_MESSAGEPGM(x)      ui.set_status_P(PSTR(x))
-#define LCD_ALERTMESSAGEPGM(x) ui.set_alert_status_P(PSTR(x))
+#define LCD_MESSAGEPGM_P(x)      ui.set_status_P(x)
+#define LCD_ALERTMESSAGEPGM_P(x) ui.set_alert_status_P(x)
+
+#define LCD_MESSAGEPGM(x)        LCD_MESSAGEPGM_P(GET_TEXT(x))
+#define LCD_ALERTMESSAGEPGM(x)   LCD_ALERTMESSAGEPGM_P(GET_TEXT(x))
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index 6970a051b3..0cb7c603d4 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -302,7 +302,7 @@ void Endstops::not_homing() {
   // If the last move failed to trigger an endstop, call kill
   void Endstops::validate_homing_move() {
     if (trigger_state()) hit_on_purpose();
-    else kill(PSTR(MSG_ERR_HOMING_FAILED));
+    else kill(GET_TEXT(MSG_LCD_HOMING_FAILED));
   }
 #endif
 
@@ -373,7 +373,7 @@ void Endstops::event_handler() {
     SERIAL_EOL();
 
     #if HAS_SPI_LCD
-      ui.status_printf_P(0, PSTR(S_FMT " %c %c %c %c"), PSTR(MSG_LCD_ENDSTOPS), chrX, chrY, chrZ, chrP);
+      ui.status_printf_P(0, PSTR(S_FMT " %c %c %c %c"), GET_TEXT(MSG_LCD_ENDSTOPS), chrX, chrY, chrZ, chrP);
     #endif
 
     #if BOTH(SD_ABORT_ON_ENDSTOP_HIT, SDSUPPORT)
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index fa80565eb4..8182f23ae0 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -1053,8 +1053,8 @@ uint8_t axes_need_homing(uint8_t axis_bits/*=0x07*/) {
 
 bool axis_unhomed_error(uint8_t axis_bits/*=0x07*/) {
   if ((axis_bits = axes_need_homing(axis_bits))) {
-    static const char home_first[] PROGMEM = MSG_HOME_FIRST;
-    char msg[sizeof(home_first)];
+    PGM_P home_first = GET_TEXT(MSG_HOME_FIRST);
+    char msg[strlen_P(home_first)+1];
     sprintf_P(msg, home_first,
       TEST(axis_bits, X_AXIS) ? "X" : "",
       TEST(axis_bits, Y_AXIS) ? "Y" : "",
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index 0217a2fd59..f183170a20 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -281,7 +281,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
       BUZZ(100, 659);
       BUZZ(100, 698);
 
-      PGM_P const ds_str = deploy ? PSTR(MSG_MANUAL_DEPLOY) : PSTR(MSG_MANUAL_STOW);
+      PGM_P const ds_str = deploy ? GET_TEXT(MSG_MANUAL_DEPLOY) : GET_TEXT(MSG_MANUAL_STOW);
       ui.return_to_status();       // To display the new status message
       ui.set_status_P(ds_str, 99);
       serialprintPGM(ds_str);
@@ -293,7 +293,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("Stow Probe"));
+        ExtUI::onUserConfirmRequired_P(PSTR("Stow Probe"));
       #endif
       while (wait_for_user) idle();
       ui.reset_status();
@@ -406,7 +406,7 @@ bool set_probe_deployed(const bool deploy) {
     if (PROBE_STOWED() == deploy) {                // Unchanged after deploy/stow action?
       if (IsRunning()) {
         SERIAL_ERROR_MSG("Z-Probe failed");
-        LCD_ALERTMESSAGEPGM("Err: ZPROBE");
+        LCD_ALERTMESSAGEPGM_P(PSTR("Err: ZPROBE"));
       }
       stop();
       return true;
@@ -736,7 +736,7 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_
 
   if (isnan(measured_z)) {
     STOW_PROBE();
-    LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED);
+    LCD_MESSAGEPGM(MSG_LCD_PROBING_FAILED);
     SERIAL_ERROR_MSG(MSG_ERR_PROBING_FAILED);
   }
 
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index ba4aec0155..e1cd9c5619 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -94,17 +94,17 @@ Temperature thermalManager;
  */
 
 #if HAS_HEATED_BED
-  #define _BED_PSTR(M,E) (E) == H_BED ? PSTR(M) :
+  #define _BED_PSTR(h) (h) == H_BED ? GET_TEXT(MSG_BED) :
 #else
-  #define _BED_PSTR(M,E)
+  #define _BED_PSTR(h)
 #endif
 #if HAS_HEATED_CHAMBER
-  #define _CHAMBER_PSTR(M,E) (E) == H_CHAMBER ? PSTR(M) :
+  #define _CHAMBER_PSTR(h) (h) == H_CHAMBER ? GET_TEXT(MSG_CHAMBER) :
 #else
-  #define _CHAMBER_PSTR(M,E)
+  #define _CHAMBER_PSTR(h)
 #endif
-#define _E_PSTR(M,E,N) ((HOTENDS) > (N) && (E) == (N)) ? PSTR(LCD_STR_E##N " " M) :
-#define TEMP_ERR_PSTR(M,E) _BED_PSTR(M##_BED,E) _CHAMBER_PSTR(M##_CHAMBER,E) _E_PSTR(M,E,1) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) PSTR(LCD_STR_E0 " " M)
+#define _E_PSTR(h,N) ((HOTENDS) > N && (h) == N) ? PSTR(LCD_STR_E##N) :
+#define HEATER_PSTR(h) _BED_PSTR(h) _CHAMBER_PSTR(h) _E_PSTR(h,1) _E_PSTR(h,2) _E_PSTR(h,3) _E_PSTR(h,4) _E_PSTR(h,5) PSTR(LCD_STR_E0)
 
 // public:
 
@@ -518,10 +518,10 @@ volatile bool Temperature::temp_meas_ready = false;
                 if (current_temp > watch_temp_target) heated = true;     // - Flag if target temperature reached
               }
               else if (ELAPSED(ms, temp_change_ms))                 // Watch timer expired
-                _temp_error(heater, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, heater));
+                _temp_error(heater, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
             }
             else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
-              _temp_error(heater, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, heater));
+              _temp_error(heater, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
           }
         #endif
       } // every 2 seconds
@@ -621,45 +621,34 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
   }
 }
 
+#define _EFANOVERLAP(A,B) _FANOVERLAP(E##A,B)
+
 #if HAS_AUTO_FAN
 
-  #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_3_IS_0 (E3_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_3_IS_1 (E3_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_3_IS_2 (E3_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_4_IS_0 (E4_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
-  #define AUTO_5_IS_0 (E5_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_5_IS_1 (E5_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_5_IS_2 (E5_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_5_IS_3 (E5_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
-  #define AUTO_5_IS_4 (E5_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
   #define CHAMBER_FAN_INDEX HOTENDS
 
   void Temperature::checkExtruderAutoFans() {
+    #define _EFAN(A,B) _EFANOVERLAP(A,B) ? B :
     static const uint8_t fanBit[] PROGMEM = {
       0
       #if HOTENDS > 1
-        , AUTO_1_IS_0 ? 0 : 1
+        , _EFAN(1,0) 1
       #endif
       #if HOTENDS > 2
-        , AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 : 2
+        , _EFAN(2,0) _EFAN(2,1) 2
       #endif
       #if HOTENDS > 3
-        , AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3
+        , _EFAN(3,0) _EFAN(3,1) _EFAN(3,2) 3
       #endif
       #if HOTENDS > 4
-        , AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4
+        , _EFAN(4,0) _EFAN(4,1) _EFAN(4,2) _EFAN(4,3) 4
       #endif
       #if HOTENDS > 5
-        , AUTO_5_IS_0 ? 0 : AUTO_5_IS_1 ? 1 : AUTO_5_IS_2 ? 2 : AUTO_5_IS_3 ? 3 : AUTO_5_IS_4 ? 4 : 5
+        , _EFAN(5,0) _EFAN(5,1) _EFAN(5,2) _EFAN(5,3) _EFAN(5,4) 5
       #endif
       #if HAS_AUTO_CHAMBER_FAN
-        , AUTO_CHAMBER_IS_0 ? 0 : AUTO_CHAMBER_IS_1 ? 1 : AUTO_CHAMBER_IS_2 ? 2 : AUTO_CHAMBER_IS_3 ? 3 : AUTO_CHAMBER_IS_4 ? 4 : AUTO_CHAMBER_IS_5 ? 5 : 6
+        #define _CFAN(B) _FANOVERLAP(CHAMBER,B) ? B :
+        , _CFAN(0) _CFAN(1) _CFAN(2) _CFAN(3) _CFAN(4) _CFAN(5) 6
       #endif
     };
     uint8_t fanState = 0;
@@ -731,7 +720,7 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
 // Temperature Error Handlers
 //
 
-inline void loud_kill(PGM_P const lcd_msg) {
+inline void loud_kill(PGM_P const lcd_msg, const heater_ind_t heater) {
   Running = false;
   #if USE_BEEPER
     for (uint8_t i = 20; i--;) {
@@ -740,7 +729,7 @@ inline void loud_kill(PGM_P const lcd_msg) {
     }
     WRITE(BEEPER_PIN, HIGH);
   #endif
-  kill(lcd_msg);
+  kill(lcd_msg, HEATER_PSTR(heater));
 }
 
 void Temperature::_temp_error(const heater_ind_t heater, PGM_P const serial_msg, PGM_P const lcd_msg) {
@@ -777,23 +766,23 @@ void Temperature::_temp_error(const heater_ind_t heater, PGM_P const serial_msg,
         if (ELAPSED(ms, expire_ms)) ++killed;
         break;
       case 2:
-        loud_kill(lcd_msg);
+        loud_kill(lcd_msg1, heater);
         ++killed;
         break;
     }
   #elif defined(BOGUS_TEMPERATURE_GRACE_PERIOD)
     UNUSED(killed);
   #else
-    if (!killed) { killed = 1; loud_kill(lcd_msg); }
+    if (!killed) { killed = 1; loud_kill(lcd_msg, heater); }
   #endif
 }
 
 void Temperature::max_temp_error(const heater_ind_t heater) {
-  _temp_error(heater, PSTR(MSG_T_MAXTEMP), TEMP_ERR_PSTR(MSG_ERR_MAXTEMP, heater));
+  _temp_error(heater, PSTR(MSG_T_MAXTEMP), GET_TEXT(MSG_ERR_MAXTEMP));
 }
 
 void Temperature::min_temp_error(const heater_ind_t heater) {
-  _temp_error(heater, PSTR(MSG_T_MINTEMP), TEMP_ERR_PSTR(MSG_ERR_MINTEMP, heater));
+  _temp_error(heater, PSTR(MSG_T_MINTEMP), GET_TEXT(MSG_ERR_MINTEMP));
 }
 
 #if HOTENDS
@@ -1019,7 +1008,7 @@ void Temperature::manage_heater() {
     HOTEND_LOOP() {
       #if ENABLED(THERMAL_PROTECTION_HOTENDS)
         if (degHotend(e) > temp_range[e].maxtemp)
-          _temp_error((heater_ind_t)e, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, e));
+          _temp_error((heater_ind_t)e, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
       #endif
 
       #if HEATER_IDLE_HANDLER
@@ -1037,7 +1026,7 @@ void Temperature::manage_heater() {
         // Make sure temperature is increasing
         if (watch_hotend[e].next_ms && ELAPSED(ms, watch_hotend[e].next_ms)) { // Time to check this extruder?
           if (degHotend(e) < watch_hotend[e].target)                             // Failed to increase enough?
-            _temp_error((heater_ind_t)e, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, e));
+            _temp_error((heater_ind_t)e, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
           else                                                                 // Start again if the target is still far off
             start_watching_hotend(e);
         }
@@ -1046,7 +1035,7 @@ void Temperature::manage_heater() {
       #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
         // Make sure measured temperatures are close together
         if (ABS(temp_hotend[0].celsius - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF)
-          _temp_error(H_E0, PSTR(MSG_REDUNDANCY), PSTR(MSG_ERR_REDUNDANT_TEMP));
+          _temp_error(H_E0, PSTR(MSG_REDUNDANCY), GET_TEXT(MSG_ERR_REDUNDANT_TEMP));
       #endif
 
     } // HOTEND_LOOP
@@ -1072,14 +1061,14 @@ void Temperature::manage_heater() {
 
     #if ENABLED(THERMAL_PROTECTION_BED)
       if (degBed() > BED_MAXTEMP)
-        _temp_error(H_BED, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, H_BED));
+        _temp_error(H_BED, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
     #endif
 
     #if WATCH_BED
       // Make sure temperature is increasing
       if (watch_bed.elapsed(ms)) {        // Time to check the bed?
         if (degBed() < watch_bed.target)                                // Failed to increase enough?
-          _temp_error(H_BED, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, H_BED));
+          _temp_error(H_BED, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
         else                                                            // Start again if the target is still far off
           start_watching_bed();
       }
@@ -1150,14 +1139,14 @@ void Temperature::manage_heater() {
 
     #if ENABLED(THERMAL_PROTECTION_CHAMBER)
       if (degChamber() > CHAMBER_MAXTEMP)
-        _temp_error(H_CHAMBER, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, H_CHAMBER));
+        _temp_error(H_CHAMBER, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
     #endif
 
     #if WATCH_CHAMBER
       // Make sure temperature is increasing
       if (watch_chamber.elapsed(ms)) {              // Time to check the chamber?
         if (degChamber() < watch_chamber.target)    // Failed to increase enough?
-          _temp_error(H_CHAMBER, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, H_CHAMBER));
+          _temp_error(H_CHAMBER, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
         else
           start_watching_chamber();                 // Start again if the target is still far off
       }
@@ -1685,19 +1674,19 @@ void Temperature::init() {
   #if HAS_AUTO_FAN_0
     INIT_E_AUTO_FAN_PIN(E0_AUTO_FAN_PIN);
   #endif
-  #if HAS_AUTO_FAN_1 && !AUTO_1_IS_0
+  #if HAS_AUTO_FAN_1 && !_EFANOVERLAP(1,0)
     INIT_E_AUTO_FAN_PIN(E1_AUTO_FAN_PIN);
   #endif
-  #if HAS_AUTO_FAN_2 && !(AUTO_2_IS_0 || AUTO_2_IS_1)
+  #if HAS_AUTO_FAN_2 && !(_EFANOVERLAP(2,0) || _EFANOVERLAP(2,1))
     INIT_E_AUTO_FAN_PIN(E2_AUTO_FAN_PIN);
   #endif
-  #if HAS_AUTO_FAN_3 && !(AUTO_3_IS_0 || AUTO_3_IS_1 || AUTO_3_IS_2)
+  #if HAS_AUTO_FAN_3 && !(_EFANOVERLAP(3,0) || _EFANOVERLAP(3,1) || _EFANOVERLAP(3,2))
     INIT_E_AUTO_FAN_PIN(E3_AUTO_FAN_PIN);
   #endif
-  #if HAS_AUTO_FAN_4 && !(AUTO_4_IS_0 || AUTO_4_IS_1 || AUTO_4_IS_2 || AUTO_4_IS_3)
+  #if HAS_AUTO_FAN_4 && !(_EFANOVERLAP(4,0) || _EFANOVERLAP(4,1) || _EFANOVERLAP(4,2) || _EFANOVERLAP(4,3))
     INIT_E_AUTO_FAN_PIN(E4_AUTO_FAN_PIN);
   #endif
-  #if HAS_AUTO_FAN_5 && !(AUTO_5_IS_0 || AUTO_5_IS_1 || AUTO_5_IS_2 || AUTO_5_IS_3 || AUTO_5_IS_4)
+  #if HAS_AUTO_FAN_5 && !(_EFANOVERLAP(5,0) || _EFANOVERLAP(5,1) || _EFANOVERLAP(5,2) || _EFANOVERLAP(5,3) || _EFANOVERLAP(5,4))
     INIT_E_AUTO_FAN_PIN(E5_AUTO_FAN_PIN);
   #endif
   #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
@@ -1928,7 +1917,7 @@ void Temperature::init() {
         sm.state = TRRunaway;
 
       case TRRunaway:
-        _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, heater_id));
+        _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
     }
   }
 
@@ -2923,7 +2912,7 @@ void Temperature::isr() {
         #else
           PSTR("E " S_FMT)
         #endif
-        , heating ? PSTR(MSG_HEATING) : PSTR(MSG_COOLING)
+        , heating ? GET_TEXT(MSG_HEATING) : GET_TEXT(MSG_COOLING)
       );
     }
   #endif
diff --git a/buildroot/share/tests/DUE-tests b/buildroot/share/tests/DUE-tests
index 844c1054af..d68026f0f6 100755
--- a/buildroot/share/tests/DUE-tests
+++ b/buildroot/share/tests/DUE-tests
@@ -9,6 +9,7 @@ set -e
 backup_ramps     # pins_set is used below...
 
 restore_configs
+opt_set LCD_LANGUAGE bg
 opt_set MOTHERBOARD BOARD_RAMPS4DUE_EFB
 opt_set TEMP_SENSOR_0 -2
 opt_set TEMP_SENSOR_BED 2
@@ -38,7 +39,7 @@ exec_test $1 $2 "RAMPS4DUE_EFB with ABL (Bilinear), EXTENSIBLE_UI, S-Curve, many
 restore_configs
 opt_set MOTHERBOARD BOARD_RADDS
 opt_enable USE_XMAX_PLUG USE_YMAX_PLUG BLTOUCH AUTO_BED_LEVELING_BILINEAR \
-           Z_TRIPLE_STEPPER_DRIVERS Z_TRIPLE_ENDSTOPS Z_STEPPER_AUTO_ALIGN ENDSTOPPULLUPS \
+           Z_TRIPLE_STEPPER_DRIVERS Z_TRIPLE_ENDSTOPS Z_STEPPER_AUTO_ALIGN ENDSTOPPULLUPS
            LULZBOT_TOUCH_UI LCD_ALEPHOBJECTS_CLCD_UI OTHER_PIN_LAYOUT
 opt_add Z2_MAX_ENDSTOP_INVERTING false
 opt_add Z3_MAX_ENDSTOP_INVERTING false
@@ -52,6 +53,7 @@ exec_test $1 $2 "RADDS with Lulzbot Touch UI, Bilinear ABL, Triple-Z and Z Auto-
 # Test SWITCHING_EXTRUDER
 #
 restore_configs
+opt_set LCD_LANGUAGE fi
 opt_set MOTHERBOARD BOARD_RAMPS4DUE_EEF
 opt_set EXTRUDERS 2
 opt_set NUM_SERVOS 1
diff --git a/buildroot/share/tests/megaatmega1280-tests b/buildroot/share/tests/megaatmega1280-tests
index c4ab0f4a71..05e262f6e7 100644
--- a/buildroot/share/tests/megaatmega1280-tests
+++ b/buildroot/share/tests/megaatmega1280-tests
@@ -16,6 +16,7 @@ set -e
 # Test MESH_BED_LEVELING feature, with LCD
 #
 restore_configs
+opt_set LCD_LANGUAGE an
 opt_enable SPINDLE_FEATURE ULTIMAKERCONTROLLER LCD_BED_LEVELING \
            MESH_BED_LEVELING ENABLE_LEVELING_FADE_HEIGHT MESH_G28_REST_ORIGIN \
            G26_MESH_VALIDATION MESH_EDIT_MENU
diff --git a/buildroot/share/tests/megaatmega2560-tests b/buildroot/share/tests/megaatmega2560-tests
index 80a00d79e3..33bc47ca3f 100755
--- a/buildroot/share/tests/megaatmega2560-tests
+++ b/buildroot/share/tests/megaatmega2560-tests
@@ -51,6 +51,7 @@ exec_test $1 $2 "RAMPS, 2 extruders, LCD/SD, Probe, ABL-Linear, PLR, LEDs, many
 use_example_configs AnimationExample
 opt_set SHOW_CUSTOM_BOOTSCREEN
 opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE fr
 opt_set EXTRUDERS 5
 opt_set TEMP_SENSOR_1 1
 opt_set TEMP_SENSOR_2 5
@@ -79,10 +80,11 @@ exec_test $1 $2 "... Sled Z Probe, Skew, UBL Cartesian moves, Japanese, and Z pr
 # ...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES
 #
 restore_configs
-opt_enable ZONESTAR_LCD Z_PROBE_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE BOOT_MARLIN_LOGO_ANIMATED \
-           AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT M114_DETAIL
+opt_set LCD_LANGUAGE zh_CN
 opt_set NUM_SERVOS 1
-opt_enable NO_VOLUMETRICS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP G38_PROBE_TARGET JOYSTICK
+opt_enable ZONESTAR_LCD Z_PROBE_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE BOOT_MARLIN_LOGO_ANIMATED \
+           AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT M114_DETAIL \
+           NO_VOLUMETRICS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP G38_PROBE_TARGET JOYSTICK
 exec_test $1 $2 "RAMPS with ZONESTAR_LCD, Servo Probe, 3-Point ABL, DEBUG_LEVELING_FEATURE, EEPROM, G38, and more"
 
 #
@@ -90,6 +92,7 @@ exec_test $1 $2 "RAMPS with ZONESTAR_LCD, Servo Probe, 3-Point ABL, DEBUG_LEVELI
 #
 restore_configs
 opt_set MOTHERBOARD BOARD_MINIRAMBO
+opt_set LCD_LANGUAGE de
 opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT \
            ULTIMAKERCONTROLLER SDSUPPORT PCA9632 LCD_INFO_MENU \
            AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY LCD_BED_LEVELING G26_MESH_VALIDATION MESH_EDIT_MENU \
@@ -107,6 +110,7 @@ exec_test $1 $2 "MINIRAMBO with M100, PWM_MOTOR_CURRENT, PRINTCOUNTER, etc."
 #
 restore_configs
 opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE el_gr
 opt_enable MIXING_EXTRUDER GRADIENT_MIX GRADIENT_VTOOL CR10_STOCKDISPLAY
 opt_set MIXING_STEPPERS 5
 opt_set LCD_LANGUAGE ru
@@ -117,6 +121,7 @@ exec_test $1 $2 "Mixing Extruder with 5 steppers, Cyrillic"
 #
 restore_configs
 opt_set MOTHERBOARD BOARD_RUMBA
+opt_set LCD_LANGUAGE pt
 opt_set EXTRUDERS 2
 opt_set TEMP_SENSOR_1 1
 opt_enable USE_XMAX_PLUG DUAL_X_CARRIAGE
@@ -143,6 +148,7 @@ exec_test $1 $2 "DUAL_X_CARRIAGE"
 #
 restore_configs
 opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE it
 opt_set EXTRUDERS 2
 opt_set TEMP_SENSOR_1 -4
 opt_set SERVO_DELAY "{ 300, 300, 300 }"
@@ -268,6 +274,7 @@ exec_test $1 $2 "Full-featured CR-10S config"
 #
 # Delta Config (generic) + ABL bilinear + BLTOUCH
 use_example_configs delta/generic
+opt_set LCD_LANGUAGE cz
 opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER DELTA_CALIBRATION_MENU AUTO_BED_LEVELING_BILINEAR BLTOUCH BLTOUCH_FORCE_5V_MODE
 exec_test $1 $2 "Delta Config (generic) + ABL bilinear + BLTOUCH"
 
@@ -275,6 +282,7 @@ exec_test $1 $2 "Delta Config (generic) + ABL bilinear + BLTOUCH"
 # Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS
 #
 use_example_configs delta/generic
+opt_set LCD_LANGUAGE ko_KR
 opt_enable AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 Z_PROBE_ALLEN_KEY EEPROM_SETTINGS EEPROM_CHITCHAT \
            OLED_PANEL_TINYBOY2 MESH_EDIT_GFX_OVERLAY
 exec_test $1 $2 "Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS"
@@ -295,6 +303,7 @@ exec_test $1 $2 "Delta Config (FLSUN AC because it's complex)"
 # SCARA with TMC2130
 #
 use_example_configs SCARA
+opt_set LCD_LANGUAGE es
 opt_enable USE_ZMIN_PLUG FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR PAUSE_BEFORE_DEPLOY_STOW \
            EEPROM_SETTINGS EEPROM_CHITCHAT ULTIMAKERCONTROLLER M114_DETAIL \
            MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD SENSORLESS_HOMING SQUARE_WAVE_STEPPING
@@ -309,6 +318,7 @@ exec_test $1 $2 "SCARA with TMC2130, TMC2209, and TMC2660"
 # Test mixed TMC config
 #
 restore_configs
+opt_set LCD_LANGUAGE vi
 opt_set X_DRIVER_TYPE TMC2160
 opt_set Y_DRIVER_TYPE TMC5160
 opt_set Z_DRIVER_TYPE TMC2208
-- 
GitLab