diff --git a/Marlin/Makefile b/Marlin/Makefile
index 05535fed0c014b60db1827d3a0d759baa5839af7..ec420ff66c0a628977da1283b2d3616a85b3e478 100644
--- a/Marlin/Makefile
+++ b/Marlin/Makefile
@@ -691,9 +691,9 @@ LIBWARN = -w -Wno-packed-bitfield-compat
 CSTANDARD = -std=gnu99
 CXXSTANDARD = -std=gnu++11
 CDEBUG = -g$(DEBUG)
-CWARN   = -Wall -Wstrict-prototypes -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
-CXXWARN = -Wall                     -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
-CTUNING = -fsigned-char -funsigned-bitfields -fpack-struct -fno-exceptions \
+CWARN   = -Wall -Wstrict-prototypes -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter -Wno-format
+CXXWARN = -Wall                     -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter -Wno-format
+CTUNING = -fsigned-char -funsigned-bitfields -fno-exceptions \
           -fshort-enums -ffunction-sections -fdata-sections
 ifneq ($(HARDWARE_MOTHERBOARD),)
   CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h
index 8a5876c19f5954a43140807392387a839c602e0a..5e6d7255d9d23caf7c03d1a905a096a4403e5a54 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h
@@ -82,6 +82,13 @@
   #define TOUCH_UI_UTF8_WESTERN_CHARSET
 #endif
 
+// When labels do not fit buttons, use smaller font
+//#define TOUCH_UI_FIT_TEXT
+
+// Enable support for selection of languages at run-time
+// (otherwise will use the value of LCD_LANGUAGE)
+//#define TOUCH_UI_LANGUAGE_MENU
+
 // Use a numeric passcode for "Parental lock".
 // This is a recommended for smaller displays.
 //#define TOUCH_UI_PASSCODE
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp
index c7d15994515b44a81e9223e707c4605acdc875bd..79b4eb8685a731cd0390317c3bcfd931192005ac 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp
@@ -66,7 +66,7 @@ uint16_t CLCD::FontMetrics::get_text_width(const char *str, size_t n) const {
   return width;
 }
 
-uint16_t CLCD::FontMetrics::get_text_width_P(const char *str, size_t n) const {
+uint16_t CLCD::FontMetrics::get_text_width(progmem_str str, size_t n) const {
   uint16_t width = 0;
   const uint8_t *p = (const uint8_t *) str;
   for(;;) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.h
index b0082867e9dd7fba0f0d2953c6ea5287a3906e39..5e16a13fef26d287de80b2e0bbf8e38c4cd71932 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.h
@@ -166,7 +166,7 @@ class CLCD::FontMetrics {
 
     // Returns width of string, up to a maximum of n characters.
     uint16_t get_text_width(const char *str, size_t n = SIZE_MAX) const;
-    uint16_t get_text_width_P(const char *str, size_t n = SIZE_MAX) const;
+    uint16_t get_text_width(progmem_str str, size_t n = SIZE_MAX) const;
 };
 
 /******************* FT800/810 Graphic Commands *********************************/
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
index b011e96371678926e1d4a63a5d3d51ab5f98eec6..0fd7889a179f9c9cd4c70d80fa84288a516b1ed2 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
@@ -220,6 +220,14 @@ class CommandProcessor : public CLCD::CommandFifo {
       return *this;
     }
 
+    CommandProcessor& toggle2(int16_t x, int16_t y, int16_t w, int16_t h, progmem_str no, progmem_str yes, bool state, uint16_t options = FTDI::OPT_3D) {
+      char text[strlen_P((const char *)no) + strlen_P((const char *)yes) + 2];
+      strcpy_P(text, (const char *)no);
+      strcat(text, "\xFF");
+      strcat_P(text, (const char *)yes);
+      return toggle(x, y, w, h, text, state, options);
+    }
+
     // Contrained drawing routines. These constrain the widget inside a box for easier layout.
     // The FORCEDINLINE ensures that the code is inlined so that all the math is done at compile time.
 
@@ -288,8 +296,28 @@ class CommandProcessor : public CLCD::CommandFifo {
 
     void apply_text_alignment(int16_t &x, int16_t &y, int16_t w, int16_t h, uint16_t options) {
       using namespace FTDI;
-      x += ((options & OPT_CENTERX) ? w / 2 : ((options & OPT_RIGHTX) ? w : 0));
-      y += ((options & OPT_CENTERY) ? h / 2 : h);
+      x += ((options & OPT_CENTERX) ? w/2 : ((options & OPT_RIGHTX) ? w : 0));
+      y += ((options & OPT_CENTERY) ? h/2 : h);
+    }
+
+    // Reduce font size until text fits the enclosing box.
+    template<typename T>
+    int8_t apply_fit_text(int16_t w, int16_t h, T text) {
+      using namespace FTDI;
+      int8_t font = _font;
+      for (;;) {
+        #ifdef TOUCH_UI_USE_UTF8
+          const int16_t width  = get_utf8_text_width(text, font_size_t::from_romfont(font));
+          const int16_t height = font_size_t::from_romfont(font).get_height();
+        #else
+          CLCD::FontMetrics fm(font);
+          const int16_t width  = fm.get_text_width(text);
+          const int16_t height = fm.height;
+        #endif
+        if ((width < w && height < h) || font == 26) break;
+        font--;
+      }
+      return font;
     }
 
     CommandProcessor& number(int16_t x, int16_t y, int16_t w, int16_t h, int32_t n, uint16_t options = FTDI::OPT_CENTER) {
@@ -299,14 +327,19 @@ class CommandProcessor : public CLCD::CommandFifo {
       return *this;
     }
 
-    template<typename T> FORCEDINLINE
+    template<typename T>
     CommandProcessor& text(int16_t x, int16_t y, int16_t w, int16_t h, T text, uint16_t options = FTDI::OPT_CENTER) {
       using namespace FTDI;
       apply_text_alignment(x, y, w, h, options);
+      #ifdef TOUCH_UI_FIT_TEXT
+        const int8_t font = apply_fit_text(w, h, text);
+      #else
+        const int8_t font = _font;
+      #endif
       #ifdef TOUCH_UI_USE_UTF8
-        draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(_font), options);
+        draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), options);
       #else
-        CLCD::CommandFifo::text(x, y, _font, options);
+        CLCD::CommandFifo::text(x, y, font, options);
         CLCD::CommandFifo::str(text);
       #endif
       return *this;
@@ -319,8 +352,8 @@ class CommandProcessor : public CLCD::CommandFifo {
         cmd(BITMAP_TRANSFORM_A(uint32_t(float(256)/scale)));
         cmd(BITMAP_TRANSFORM_E(uint32_t(float(256)/scale)));
       }
-      cmd(BITMAP_SIZE(info.filter, info.wrapx, info.wrapy, info.width * scale, info.height * scale));
-      cmd(VERTEX2F((x + w / 2 - info.width * scale / 2) * 16, (y + h / 2 - info.height * scale / 2) * 16));
+      cmd(BITMAP_SIZE(info.filter, info.wrapx, info.wrapy, info.width*scale, info.height*scale));
+      cmd(VERTEX2F((x + w/2 - info.width*scale/2)*16, (y + h/2 - info.height*scale/2)*16));
       if (scale != 1) {
         cmd(BITMAP_TRANSFORM_A(256));
         cmd(BITMAP_TRANSFORM_E(256));
@@ -333,11 +366,16 @@ class CommandProcessor : public CLCD::CommandFifo {
       using namespace FTDI;
       bool styleModified = false;
       if (_btn_style_callback) styleModified = _btn_style_callback(*this, _tag, _style, options, false);
-      CLCD::CommandFifo::button(x, y, w, h, _font, options);
+      #ifdef TOUCH_UI_FIT_TEXT
+        const int8_t font = apply_fit_text(w, h, text);
+      #else
+        const int8_t font = _font;
+      #endif
+      CLCD::CommandFifo::button(x, y, w, h, font, options);
       #ifdef TOUCH_UI_USE_UTF8
         apply_text_alignment(x, y, w, h, OPT_CENTER);
         CLCD::CommandFifo::str(F(""));
-        draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(_font), OPT_CENTER);
+        draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), OPT_CENTER);
       #else
         CLCD::CommandFifo::str(text);
       #endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..73c0a69cf634f6eec699779b380ab556bb5fb182
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp
@@ -0,0 +1,55 @@
+/*****************
+ * language.cpp *
+ *****************/
+
+/****************************************************************************
+ *   Written By Mark Pelletier  2017 - Aleph Objects, Inc.                  *
+ *   Written By Marcio Teixeira 2018 - 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/>.                              *
+ ****************************************************************************/
+
+#include "../compat.h"
+
+#if ENABLED(LULZBOT_TOUCH_UI) && defined(TOUCH_UI_LANGUAGE_MENU)
+
+  #include "language_de.h"
+  #include "language_en.h"
+  #include "language_fr.h"
+
+  PROGMEM Language_List languages = {
+    &Language_de::strings,
+    &Language_en::strings,
+    &Language_fr::strings
+  };
+
+  uint8_t get_language_count() {
+    return sizeof(languages)/sizeof(languages[0]);
+  }
+
+  static uint8_t lang = 0;
+
+  void set_language(uint8_t l) {
+    lang = l;
+  };
+
+  const char *get_text(uint8_t lang, String_Indices index) {
+    const Language_Strings* strings = (const Language_Strings*) pgm_read_ptr(&languages[lang]);
+    return (const char *)pgm_read_ptr(&(*strings)[int(index)]);
+  };
+
+  const char *get_text(String_Indices index) {
+    return get_text(lang, index);
+  };
+#endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
new file mode 100644
index 0000000000000000000000000000000000000000..52aae2502241bf267171ee61acf57f8875b1580b
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
@@ -0,0 +1,46 @@
+/**************
+ * 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
+
+enum class String_Indices { LANGUAGE_STRINGS, COUNT };
+
+typedef const char Language_Str[];
+typedef const char* const Language_Strings[int(String_Indices::COUNT)];
+typedef const Language_Strings* const Language_List[];
+
+#ifndef TOUCH_UI_LANGUAGE_MENU
+  // Default mode, support only one language.
+  #define __GET_TEXTF(MSG,LANG) Language_##LANG::MSG
+  #define _GET_TEXTF(MSG,LANG) __GET_TEXTF(MSG,LANG)
+  #define GET_TEXTF(MSG) reinterpret_cast<const __FlashStringHelper *>(_GET_TEXTF(MSG,LCD_LANGUAGE))
+  #define GET_TEXT(MSG) _GET_TEXTF(MSG,LCD_LANGUAGE)
+  #define MAKE_LANGUAGE_STRINGS()
+#else
+  // Support multiple languages at run-time.
+  uint8_t get_language_count();
+  void set_language(uint8_t index);
+  const char *get_text(String_Indices index);
+  const char *get_text(uint8_t lang, String_Indices index);
+  #define GET_TEXT(MSG) get_text(String_Indices::MSG)
+  #define GET_TEXTF(MSG) reinterpret_cast<const __FlashStringHelper *>(get_text(String_Indices::MSG))
+  #define MAKE_LANGUAGE_STRINGS() PROGMEM Language_Strings strings = { LANGUAGE_STRINGS }
+#endif
\ No newline at end of file
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
new file mode 100644
index 0000000000000000000000000000000000000000..e34b588cec07dd36d26f9fccaeb0bb1e46b23573
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
@@ -0,0 +1,84 @@
+/*****************
+ * language_de.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
+
+#include "language_en.h"
+
+namespace Language_de {
+  using namespace Language_en;
+
+  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";
+
+  PROGMEM Language_Str MOVE_AXIS                = u8"Achsen bewegen";
+  PROGMEM Language_Str MOTORS_OFF               = u8"Motoren deaktivieren";
+  PROGMEM Language_Str TEMPERATURE              = u8"Temperatur";
+  PROGMEM Language_Str CHANGE_FILAMENT          = u8"Filament wechseln";
+  PROGMEM Language_Str ADVANCED_SETTINGS        = u8"Erw. Einstellungen";
+  PROGMEM Language_Str ABOUT_PRINTER            = u8"Über den Drucker";
+  PROGMEM Language_Str PRINTER_STATISTICS       = u8"Drucker-Statistik";
+
+  PROGMEM Language_Str ZPROBE_ZOFFSET           = u8"Sondenversatz Z";
+  PROGMEM Language_Str TOOL_OFFSETS             = u8"Werkzeugversätze";
+  PROGMEM Language_Str VELOCITY                 = u8"Geschwindigkeit";
+  PROGMEM Language_Str ACCELERATION             = u8"Beschleunigung";
+  PROGMEM Language_Str ACCEL_PRINTING           = u8"Beschleunigung";
+  PROGMEM Language_Str ACCEL_TRAVEL             = u8"A Einzug";
+  PROGMEM Language_Str ACCEL_RETRACT            = u8"A Leerfahrt";
+  PROGMEM Language_Str BACKLASH                 = u8"Spiel";
+  PROGMEM Language_Str SMOOTHING                = u8"Glätten";
+  PROGMEM Language_Str CORRECTION               = u8"Korrektur";
+  PROGMEM Language_Str ENDSTOPS                 = u8"Endstopp";
+  PROGMEM Language_Str SOFT_ENDSTOPS            = u8"Software-Endstopp";
+  PROGMEM Language_Str RESTORE_DEFAULTS         = u8"Standardwerte laden";
+
+
+  PROGMEM Language_Str HOTEND                   = u8"Düse";
+  PROGMEM Language_Str HOTEND1                  = u8"Düse 1";
+  PROGMEM Language_Str HOTEND2                  = u8"Düse 2";
+  PROGMEM Language_Str HOTEND3                  = u8"Düse 3";
+  PROGMEM Language_Str HOTEND4                  = u8"Düse 4";
+  PROGMEM Language_Str BED                      = u8"Bett";
+  PROGMEM Language_Str AXIS_ALL                 = u8"Alle";
+
+  PROGMEM Language_Str FAN_SPEED                = u8"Lüfter";
+
+  PROGMEM Language_Str PRINT_FILE               = u8"Drucken";
+
+  PROGMEM Language_Str RESUME_PRINT             = u8"SD-Druck fortsetzen";
+  PROGMEM Language_Str PAUSE_PRINT              = u8"SD-Druck pausieren";
+  PROGMEM Language_Str STOP_PRINT               = u8"SD-Druck abbrechen";
+
+  PROGMEM Language_Str INFO_PRINT_COUNT         = u8"Gesamte Drucke";
+  PROGMEM Language_Str INFO_COMPLETED_PRINTS    = u8"Komplette Drucke";
+  PROGMEM Language_Str INFO_PRINT_TIME          = u8"Gesamte Druckzeit";
+  PROGMEM Language_Str INFO_PRINT_LONGEST       = u8"Längste Druckzeit";
+  PROGMEM Language_Str INFO_PRINT_FILAMENT      = u8"Gesamt Extrudiert";
+
+  PROGMEM Language_Str PRINTER_HALTED           = u8"DRUCKER GESTOPPT";
+  PROGMEM Language_Str PLEASE_RESET             = u8"Bitte neustarten";
+
+  MAKE_LANGUAGE_STRINGS();
+}; // namespace Language_de
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
new file mode 100644
index 0000000000000000000000000000000000000000..5731e4984bde283c85602ec6da9ac0907e910fba
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
@@ -0,0 +1,410 @@
+/*****************
+ * language_en.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
+
+// The list LANGUAGE_STRINGS should define all the strings used in the default
+// language (Language_en). Translations do *not* need to re-define this.
+
+#define LANGUAGE_STRINGS \
+  LANGUAGE, \
+  YES, \
+  NO, \
+  BACK, \
+  COLOR_TOUCH_PANEL, \
+  ABOUT_ALEPH_OBJECTS, OKAY, \
+  FIRMWARE_FOR_TOOLHEAD, \
+  AUTO_HOME, \
+  CLEAN_NOZZLE, \
+  CHANGE_FILAMENT, \
+  ADVANCED_SETTINGS, \
+  PRINTER_STATISTICS, \
+  ABOUT_PRINTER, \
+  MOTORS_OFF, \
+  ZPROBE_ZOFFSET, \
+  STEPS_PER_MM, \
+  HOME_SENSE, \
+  TOOL_OFFSETS, \
+  MOTOR_CURRENT, \
+  FILAMENT, \
+  ENDSTOPS, \
+  X_MAX, \
+  X_MIN, \
+  Y_MAX, \
+  Y_MIN, \
+  Z_MAX, \
+  Z_MIN, \
+  Z_PROBE, \
+  RUNOUT_1, \
+  RUNOUT_2, \
+  SOFT_ENDSTOPS, \
+  DISPLAY_MENU, \
+  INTERFACE_SETTINGS, \
+  RESTORE_DEFAULTS, \
+  VELOCITY, \
+  VMAX_X, \
+  VMAX_Y, \
+  VMAX_Z, \
+  VMAX_E1, \
+  VMAX_E2, \
+  VMAX_E3, \
+  VMAX_E4, \
+  ACCELERATION, \
+  ACCEL_PRINTING, \
+  ACCEL_TRAVEL, \
+  ACCEL_RETRACT, \
+  AMAX_X, \
+  AMAX_Y, \
+  AMAX_Z, \
+  AMAX_E1, \
+  AMAX_E2, \
+  AMAX_E3, \
+  AMAX_E4, \
+  JERK, \
+  JUNCTION_DEVIATION, \
+  BACKLASH, \
+  MEASURE_AUTOMATICALLY, \
+  H_OFFSET, \
+  V_OFFSET, \
+  TOUCH_SCREEN, \
+  CALIBRATE, \
+  HOME, \
+  UNITS_MILLIAMP, \
+  UNITS_MM, \
+  UNITS_MM_S, \
+  UNITS_MM_S2, \
+  UNITS_STEP_MM, \
+  UNITS_PERCENT, \
+  UNITS_C, \
+  TEMP_IDLE, \
+  MATERIAL_PLA, \
+  MATERIAL_ABS, \
+  MATERIAL_HIGH_TEMP, \
+  AXIS_X, \
+  AXIS_Y, \
+  AXIS_Z, \
+  AXIS_E, \
+  AXIS_E1, \
+  AXIS_E2, \
+  AXIS_E3, \
+  AXIS_E4, \
+  AXIS_ALL, \
+  HOTEND, \
+  HOTEND1, \
+  HOTEND2, \
+  HOTEND3, \
+  HOTEND4, \
+  BED, \
+  SMOOTHING, \
+  CORRECTION, \
+  PRINTING, \
+  SET_MAXIMUM, \
+  RUNOUT_SENSOR, \
+  DETECTION_THRESHOLD, \
+  DISTANCE, \
+  TEMPERATURE, \
+  COOLDOWN, \
+  FAN_SPEED, \
+  PRINT_SPEED, \
+  SPEED, \
+  MOVE_AXIS, \
+  LINEAR_ADVANCE, \
+  LINEAR_ADVANCE_K, \
+  LINEAR_ADVANCE_K1, \
+  LINEAR_ADVANCE_K2, \
+  LINEAR_ADVANCE_K3, \
+  LINEAR_ADVANCE_K4, \
+  NUDGE_NOZZLE, \
+  ADJUST_BOTH_NOZZLES, \
+  SHOW_OFFSETS, \
+  INCREMENT, \
+  ERASE_FLASH_WARNING, \
+  ERASING, \
+  ERASED, \
+  CALIBRATION_WARNING, \
+  ABORT_WARNING, \
+  EXTRUDER_SELECTION, \
+  CURRENT_TEMPERATURE, \
+  REMOVAL_TEMPERATURE, \
+  HEATING, \
+  CAUTION, \
+  HOT, \
+  UNLOAD_FILAMENT, \
+  LOAD_FILAMENT, \
+  MOMENTARY, \
+  CONTINUOUS, \
+  PLEASE_WAIT, \
+  PRINT_MENU, \
+  FINE_MOTION, \
+  MEDIA, \
+  ENABLE_MEDIA, \
+  INSERT_MEDIA, \
+  MENU, \
+  LCD_BRIGHTNESS, \
+  SOUND_VOLUME, \
+  SCREEN_LOCK, \
+  BOOT_SCREEN, \
+  INTERFACE_SOUNDS, \
+  EEPROM_RESTORED, \
+  EEPROM_RESET, \
+  EEPROM_SAVED, \
+  EEPROM_SAVE_PROMPT, \
+  EEPROM_RESET_WARNING, \
+  OPEN_DIR, \
+  PRINT_FILE, \
+  PRINT_STARTING, \
+  PRINT_FINISHED, \
+  PRINT_ERROR, \
+  PASSCODE_REJECTED, \
+  PASSCODE_ACCEPTED, \
+  PASSCODE_SELECT, \
+  PASSCODE_REQUEST, \
+  PRINTER_HALTED, \
+  PLEASE_RESET, \
+  CLICK_SOUNDS, \
+  INFO_PRINT_COUNT, \
+  INFO_COMPLETED_PRINTS, \
+  INFO_PRINT_TIME, \
+  INFO_PRINT_LONGEST, \
+  INFO_PRINT_FILAMENT, \
+  RESUME_PRINT, \
+  PAUSE_PRINT, \
+  STOP_PRINT, \
+  TOUCH_CALIBRATION_START, \
+  TOUCH_CALIBRATION_PROMPT \
+  LULZBOT_BIOPRINTER_STRINGS
+
+#ifndef LULZBOT_USE_BIOPRINTER_UI
+  #define LULZBOT_BIOPRINTER_STRINGS
+#else
+  #define LULZBOT_BIOPRINTER_STRINGS ,\
+    MAIN_MENU, \
+    UNLOCK_XY_AXIS, \
+    LOAD_SYRINGE, \
+    BED_TEMPERATURE, \
+    LOADING_WARNING, \
+    HOMING_WARNING
+#endif
+
+#include "language.h" // This must be included after LANGUAGE_STRINGS
+
+// The string table for this language.
+
+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";
+  PROGMEM Language_Str OKAY                     = u8"Okay";
+  PROGMEM Language_Str MENU                     = u8"Menu";
+  PROGMEM Language_Str MEDIA                    = u8"Media";
+
+  PROGMEM Language_Str AUTO_HOME                = u8"Auto Home";
+  PROGMEM Language_Str CLEAN_NOZZLE             = u8"Clean Nozzle";
+  PROGMEM Language_Str MOVE_AXIS                = u8"Move Axis";
+  PROGMEM Language_Str MOTORS_OFF               = u8"Motors Off";
+  PROGMEM Language_Str TEMPERATURE              = u8"Temperature";
+  PROGMEM Language_Str CHANGE_FILAMENT          = u8"Change Filament";
+  PROGMEM Language_Str ADVANCED_SETTINGS        = u8"Advanced Settings";
+  PROGMEM Language_Str ABOUT_PRINTER            = u8"About Printer";
+  PROGMEM Language_Str PRINTER_STATISTICS       = u8"Printer Statistics";
+
+  PROGMEM Language_Str ZPROBE_ZOFFSET           = u8"Z Offset";
+  PROGMEM Language_Str STEPS_PER_MM             = u8"Steps/mm";
+  PROGMEM Language_Str TOOL_OFFSETS             = u8"Tool Offsets";
+  PROGMEM Language_Str VELOCITY                 = u8"Velocity";
+  PROGMEM Language_Str VMAX_X                   = u8"Vmax X";
+  PROGMEM Language_Str VMAX_Y                   = u8"Vmax Y";
+  PROGMEM Language_Str VMAX_Z                   = u8"Vmax Z";
+  PROGMEM Language_Str VMAX_E1                  = u8"Vmax E1";
+  PROGMEM Language_Str VMAX_E2                  = u8"Vmax E2";
+  PROGMEM Language_Str VMAX_E3                  = u8"Vmax E3";
+  PROGMEM Language_Str VMAX_E4                  = u8"Vmax E4";
+  PROGMEM Language_Str ACCELERATION             = u8"Acceleration";
+  PROGMEM Language_Str ACCEL_PRINTING           = u8"Printing";
+  PROGMEM Language_Str ACCEL_TRAVEL             = u8"Travel";
+  PROGMEM Language_Str ACCEL_RETRACT            = u8"Retraction";
+  PROGMEM Language_Str AMAX_X                   = u8"Amax X";
+  PROGMEM Language_Str AMAX_Y                   = u8"Amax Y";
+  PROGMEM Language_Str AMAX_Z                   = u8"Amax Z";
+  PROGMEM Language_Str AMAX_E1                  = u8"Amax E1";
+  PROGMEM Language_Str AMAX_E2                  = u8"Amax E2";
+  PROGMEM Language_Str AMAX_E3                  = u8"Amax E3";
+  PROGMEM Language_Str AMAX_E4                  = u8"Amax E4";
+  PROGMEM Language_Str JERK                     = u8"Jerk";
+  PROGMEM Language_Str JUNCTION_DEVIATION       = u8"Junc Dev";
+  PROGMEM Language_Str BACKLASH                 = u8"Backlash";
+  PROGMEM Language_Str SMOOTHING                = u8"Smoothing";
+  PROGMEM Language_Str CORRECTION               = u8"Correction";
+  PROGMEM Language_Str MOTOR_CURRENT            = u8"Currents";
+  PROGMEM Language_Str FILAMENT                 = u8"Filament";
+  PROGMEM Language_Str ENDSTOPS                 = u8"Endstops";
+  PROGMEM Language_Str SOFT_ENDSTOPS            = u8"Soft Endstops";
+  PROGMEM Language_Str RESTORE_DEFAULTS         = u8"Restore Defaults";
+
+  PROGMEM Language_Str HOTEND                   = u8"Hot End";
+  PROGMEM Language_Str HOTEND1                  = u8"Hot End 1";
+  PROGMEM Language_Str HOTEND2                  = u8"Hot End 2";
+  PROGMEM Language_Str HOTEND3                  = u8"Hot End 3";
+  PROGMEM Language_Str HOTEND4                  = u8"Hot End 4";
+  PROGMEM Language_Str BED                      = u8"Bed";
+  PROGMEM Language_Str AXIS_X                   = u8"X";
+  PROGMEM Language_Str AXIS_Y                   = u8"Y";
+  PROGMEM Language_Str AXIS_Z                   = u8"Z";
+  PROGMEM Language_Str AXIS_E                   = u8"E";
+  PROGMEM Language_Str AXIS_E1                  = u8"E1";
+  PROGMEM Language_Str AXIS_E2                  = u8"E2";
+  PROGMEM Language_Str AXIS_E3                  = u8"E3";
+  PROGMEM Language_Str AXIS_E4                  = u8"E4";
+  PROGMEM Language_Str AXIS_ALL                 = u8"All";
+  PROGMEM Language_Str HOME                     = u8"Home";
+
+  PROGMEM Language_Str FAN_SPEED                = u8"Fan Speed";
+  PROGMEM Language_Str RUNOUT_SENSOR            = u8"Runout Sensor";
+
+  PROGMEM Language_Str OPEN_DIR                 = u8"Open";
+  PROGMEM Language_Str PRINT_FILE               = u8"Print";
+
+  PROGMEM Language_Str RESUME_PRINT             = u8"Resume Print";
+  PROGMEM Language_Str PAUSE_PRINT              = u8"Pause Print";
+  PROGMEM Language_Str STOP_PRINT               = u8"Stop Print";
+
+  PROGMEM Language_Str PRINT_STARTING           = u8"Print starting";
+  PROGMEM Language_Str PRINT_FINISHED           = u8"Print finished";
+  PROGMEM Language_Str PRINT_ERROR              = u8"Print error";
+
+  PROGMEM Language_Str INFO_PRINT_COUNT         = u8"Print Count";
+  PROGMEM Language_Str INFO_COMPLETED_PRINTS    = u8"Total Prints";
+  PROGMEM Language_Str INFO_PRINT_TIME          = u8"Total Print Time";
+  PROGMEM Language_Str INFO_PRINT_LONGEST       = u8"Longest Print";
+  PROGMEM Language_Str INFO_PRINT_FILAMENT      = u8"Filament Used";
+
+  PROGMEM Language_Str PRINTER_HALTED           = u8"PRINTER HALTED";
+  PROGMEM Language_Str PLEASE_RESET             = u8"Please reset";
+
+  PROGMEM Language_Str COLOR_TOUCH_PANEL        = u8"Color Touch Panel";
+  PROGMEM Language_Str ABOUT_ALEPH_OBJECTS      = u8"(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com";
+
+  PROGMEM Language_Str FIRMWARE_FOR_TOOLHEAD    = u8"Firmware for toolhead:\n%s\n\n";
+
+  PROGMEM Language_Str HOME_SENSE               = u8"Home Sense";
+  PROGMEM Language_Str X_MAX                    = u8"X Max";
+  PROGMEM Language_Str X_MIN                    = u8"X Min";
+  PROGMEM Language_Str Y_MAX                    = u8"Y Max";
+  PROGMEM Language_Str Y_MIN                    = u8"Y Min";
+  PROGMEM Language_Str Z_MAX                    = u8"Z Max";
+  PROGMEM Language_Str Z_MIN                    = u8"Z Min";
+  PROGMEM Language_Str Z_PROBE                  = u8"Z Probe";
+  PROGMEM Language_Str RUNOUT_1                 = u8"Runout 1";
+  PROGMEM Language_Str RUNOUT_2                 = u8"Runout 2";
+  PROGMEM Language_Str DISPLAY_MENU             = u8"Display";
+  PROGMEM Language_Str INTERFACE_SETTINGS       = u8"Interface Settings";
+  PROGMEM Language_Str MEASURE_AUTOMATICALLY    = u8"Measure automatically";
+  PROGMEM Language_Str H_OFFSET                 = u8"H Offset";
+  PROGMEM Language_Str V_OFFSET                 = u8"V Offset";
+  PROGMEM Language_Str TOUCH_SCREEN             = u8"Touch Screen";
+  PROGMEM Language_Str CALIBRATE                = u8"Calibrate";
+
+  PROGMEM Language_Str UNITS_MILLIAMP           = u8"mA";
+  PROGMEM Language_Str UNITS_MM                 = u8"mm";
+  PROGMEM Language_Str UNITS_MM_S               = u8"mm/s";
+  PROGMEM Language_Str UNITS_MM_S2              = u8"mm/s^2";
+  PROGMEM Language_Str UNITS_STEP_MM            = u8"st/mm";
+  PROGMEM Language_Str UNITS_PERCENT            = u8"%";
+  #if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
+    PROGMEM Language_Str UNITS_C                = u8"°C";
+  #else
+    PROGMEM Language_Str UNITS_C                = u8" C";
+  #endif
+  PROGMEM Language_Str MATERIAL_PLA             = u8"PLA";
+  PROGMEM Language_Str MATERIAL_ABS             = u8"ABS";
+  PROGMEM Language_Str MATERIAL_HIGH_TEMP       = u8"High";
+  PROGMEM Language_Str TEMP_IDLE                = u8"idle";
+
+  PROGMEM Language_Str PRINTING                 = u8"Printing";
+  PROGMEM Language_Str SET_MAXIMUM              = u8"Set Maximum";
+  PROGMEM Language_Str DETECTION_THRESHOLD      = u8"Detection Threshold";
+  PROGMEM Language_Str DISTANCE                 = u8"Distance";
+  PROGMEM Language_Str COOLDOWN                 = u8"Cooldown (All Off)";
+  PROGMEM Language_Str PRINT_SPEED              = u8"Print Speed";
+  PROGMEM Language_Str SPEED                    = u8"Speed";
+  PROGMEM Language_Str LINEAR_ADVANCE           = u8"Linear Advance";
+  PROGMEM Language_Str LINEAR_ADVANCE_K         = u8"K";
+  PROGMEM Language_Str LINEAR_ADVANCE_K1        = u8"K E1";
+  PROGMEM Language_Str LINEAR_ADVANCE_K2        = u8"K E2";
+  PROGMEM Language_Str LINEAR_ADVANCE_K3        = u8"K E3";
+  PROGMEM Language_Str LINEAR_ADVANCE_K4        = u8"K E4";
+  PROGMEM Language_Str NUDGE_NOZZLE             = u8"Nudge Nozzle";
+  PROGMEM Language_Str ADJUST_BOTH_NOZZLES      = u8"Adjust Both Nozzles";
+  PROGMEM Language_Str SHOW_OFFSETS             = u8"Show Offsets";
+  PROGMEM Language_Str INCREMENT                = u8"Increment";
+  PROGMEM Language_Str ERASE_FLASH_WARNING      = u8"Are you sure? SPI flash will be erased.";
+  PROGMEM Language_Str ERASING                  = u8"Erasing...";
+  PROGMEM Language_Str ERASED                   = u8"SPI flash erased";
+  PROGMEM Language_Str CALIBRATION_WARNING      = u8"For best results, unload the filament and clean the hotend prior to starting calibration. Continue?";
+  PROGMEM Language_Str ABORT_WARNING            = u8"Are you sure you want to cancel the print?";
+  PROGMEM Language_Str EXTRUDER_SELECTION       = u8"Extruder Selection";
+  PROGMEM Language_Str CURRENT_TEMPERATURE      = u8"Current Temp";
+  PROGMEM Language_Str REMOVAL_TEMPERATURE      = u8"Removal Temp";
+  PROGMEM Language_Str HEATING                  = u8"Heating";
+  PROGMEM Language_Str CAUTION                  = u8"Caution:";
+  PROGMEM Language_Str HOT                      = u8"Hot!";
+  PROGMEM Language_Str UNLOAD_FILAMENT          = u8"Unload";
+  PROGMEM Language_Str LOAD_FILAMENT            = u8"Load/Extruder";
+  PROGMEM Language_Str MOMENTARY                = u8"Momentary";
+  PROGMEM Language_Str CONTINUOUS               = u8"Continuous";
+  PROGMEM Language_Str PLEASE_WAIT              = u8"Please wait...";
+  PROGMEM Language_Str PRINT_MENU               = u8"Print Menu";
+  PROGMEM Language_Str FINE_MOTION              = u8"Fine motion";
+  PROGMEM Language_Str ENABLE_MEDIA             = u8"Enable Media";
+  PROGMEM Language_Str INSERT_MEDIA             = u8"Insert Media...";
+  PROGMEM Language_Str LCD_BRIGHTNESS           = u8"LCD brightness";
+  PROGMEM Language_Str SOUND_VOLUME             = u8"Sound volume";
+  PROGMEM Language_Str SCREEN_LOCK              = u8"Screen lock";
+  PROGMEM Language_Str BOOT_SCREEN              = u8"Boot screen";
+  PROGMEM Language_Str INTERFACE_SOUNDS         = u8"Interface Sounds";
+  PROGMEM Language_Str CLICK_SOUNDS             = u8"Click sounds";
+  PROGMEM Language_Str EEPROM_RESTORED          = u8"Settings restored from backup";
+  PROGMEM Language_Str EEPROM_RESET             = u8"Settings restored to default";
+  PROGMEM Language_Str EEPROM_SAVED             = u8"Settings saved!";
+  PROGMEM Language_Str EEPROM_SAVE_PROMPT       = u8"Do you wish to save these settings as defaults?";
+  PROGMEM Language_Str EEPROM_RESET_WARNING     = u8"Are you sure? Customizations will be lost.";
+
+  PROGMEM Language_Str PASSCODE_REJECTED        = u8"Wrong passcode!";
+  PROGMEM Language_Str PASSCODE_ACCEPTED        = u8"Passcode accepted!";
+  PROGMEM Language_Str PASSCODE_SELECT          = u8"Select Passcode:";
+  PROGMEM Language_Str PASSCODE_REQUEST         = u8"Enter Passcode:";
+
+  PROGMEM Language_Str TOUCH_CALIBRATION_START  = u8"Release to begin screen calibration";
+  PROGMEM Language_Str TOUCH_CALIBRATION_PROMPT = u8"Touch the dots to calibrate";
+
+  #ifdef LULZBOT_USE_BIOPRINTER_UI
+    PROGMEM Language_Str MAIN_MENU              = u8"Main Menu";
+    PROGMEM Language_Str UNLOCK_XY_AXIS         = u8"Unlock XY Axis";
+    PROGMEM Language_Str LOAD_SYRINGE           = u8"Load Syringe";
+    PROGMEM Language_Str BED_TEMPERATURE        = u8"Bed Temperature";
+    PROGMEM Language_Str LOADING_WARNING        = u8"About to home to loading position.\nEnsure the top and the bed of the printer are clear.\n\nContinue?";
+    PROGMEM Language_Str HOMING_WARNING         = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?";
+  #endif
+
+  MAKE_LANGUAGE_STRINGS();
+}; // namespace Language_en
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
new file mode 100644
index 0000000000000000000000000000000000000000..73319c5ea8f0c49c4d02f1fb30247a88eec7dedd
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
@@ -0,0 +1,90 @@
+/*****************
+ * language_fr.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
+
+#include "language_en.h"
+
+namespace Language_fr {
+  using namespace Language_en;
+
+  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";
+
+  PROGMEM Language_Str AUTO_HOME                = u8"Origine auto";
+  //PROGMEM Language_Str CLEAN_NOZZLE             = u8"Clean Nozzle";
+  PROGMEM Language_Str MOVE_AXIS                = u8"Déplacer un axe";
+  PROGMEM Language_Str MOTORS_OFF               = u8"Arrêter moteurs";
+  PROGMEM Language_Str TEMPERATURE              = u8"Température";
+  PROGMEM Language_Str CHANGE_FILAMENT          = u8"Changer filament";
+  PROGMEM Language_Str ADVANCED_SETTINGS        = u8"Config. avancée";
+  PROGMEM Language_Str ABOUT_PRINTER            = u8"Infos imprimante";
+  PROGMEM Language_Str PRINTER_STATISTICS       = u8"Stats. imprimante";
+
+  PROGMEM Language_Str ZPROBE_ZOFFSET           = u8"Décalage Z";
+  PROGMEM Language_Str STEPS_PER_MM             = u8"Pas/mm";
+  PROGMEM Language_Str TOOL_OFFSETS             = u8"Offsets Outil";
+  PROGMEM Language_Str VELOCITY                 = u8"Vélocité";
+  PROGMEM Language_Str ACCELERATION             = u8"Accélération";
+  PROGMEM Language_Str ACCEL_PRINTING           = u8"A impr.";
+  PROGMEM Language_Str ACCEL_TRAVEL             = u8"A dépl.";
+  PROGMEM Language_Str ACCEL_RETRACT            = u8"A retrait";
+  PROGMEM Language_Str JUNCTION_DEVIATION       = u8"Déviat. jonct.";
+  //PROGMEM Language_Str BACKLASH                 = u8"Backlash";
+  PROGMEM Language_Str SMOOTHING                = u8"Lissage";
+  PROGMEM Language_Str MOTOR_CURRENT            = u8"Courant";
+  PROGMEM Language_Str ENDSTOPS                 = u8"Butées";
+  PROGMEM Language_Str SOFT_ENDSTOPS            = u8"Butées SW";
+  PROGMEM Language_Str RESTORE_DEFAULTS         = u8"Restaurer défauts";
+
+
+  PROGMEM Language_Str HOTEND                   = u8"Buse";
+  PROGMEM Language_Str HOTEND1                  = u8"Buse 1";
+  PROGMEM Language_Str HOTEND2                  = u8"Buse 2";
+  PROGMEM Language_Str HOTEND3                  = u8"Buse 3";
+  PROGMEM Language_Str HOTEND4                  = u8"Buse 4";
+  PROGMEM Language_Str BED                      = u8"Lit";
+  PROGMEM Language_Str AXIS_ALL                 = u8"Tous";
+  PROGMEM Language_Str HOME                     = u8"Origine";
+
+  PROGMEM Language_Str FAN_SPEED                = u8"Vitesse ventil.";
+  PROGMEM Language_Str RUNOUT_SENSOR            = u8"Capteur fil.";
+
+  PROGMEM Language_Str PRINT_FILE               = u8"Imprimer";
+
+  PROGMEM Language_Str RESUME_PRINT             = u8"Reprendre impr.";
+  PROGMEM Language_Str PAUSE_PRINT              = u8"Pause impression";
+  PROGMEM Language_Str STOP_PRINT               = u8"Arrêter impr.";
+
+  PROGMEM Language_Str INFO_PRINT_COUNT         = u8"Nbre impressions";
+  PROGMEM Language_Str INFO_COMPLETED_PRINTS    = u8"Terminées";
+  PROGMEM Language_Str INFO_PRINT_TIME          = u8"Tps impr. total";
+  PROGMEM Language_Str INFO_PRINT_LONGEST       = u8"Impr. la + longue";
+  PROGMEM Language_Str INFO_PRINT_FILAMENT      = u8"Total filament";
+
+  PROGMEM Language_Str PRINTER_HALTED           = u8"IMPR. STOPPÉE";
+  PROGMEM Language_Str PLEASE_RESET             = u8"Redémarrer SVP";
+
+  MAKE_LANGUAGE_STRINGS();
+}; // namespace Language_fr
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h
new file mode 100644
index 0000000000000000000000000000000000000000..03edc5515712350d8f005365ce5f997f1b522534
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h
@@ -0,0 +1,26 @@
+/***************
+ * languages.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
+
+#include "language_en.h"
+#include "language_de.h"
+#include "language_fr.h"
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
index f27d1401fcd7203ebb8240e6cd64b0c17c6b5667..b062446cab87e6bed128df7ed010f0d0ab5f4eb7 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
@@ -49,22 +49,33 @@ void AboutScreen::onRedraw(draw_mode_t) {
       #ifdef LULZBOT_LCD_MACHINE_NAME
       LULZBOT_LCD_MACHINE_NAME
       #else
-      "Color Touch Panel"
+      GET_TEXTF(COLOR_TOUCH_PANEL)
       #endif
     ), OPT_CENTER, font_xlarge);
 
+  #ifdef LULZBOT_LCD_TOOLHEAD_NAME
+   char about_str[
+     strlen_P(GET_TEXT(FIRMWARE_FOR_TOOLHEAD)) +
+     strlen_P(LULZBOT_LCD_TOOLHEAD_NAME) +
+     strlen_P(GET_TEXT(ABOUT_ALEPH_OBJECTS)) + 1];
+
+   sprintf_P(about_str, GET_TEXT(FIRMWARE_FOR_TOOLHEAD), LULZBOT_LCD_TOOLHEAD_NAME);
+   strcat_P(about_str,  GET_TEXT(ABOUT_ALEPH_OBJECTS));
+  #endif
+
   cmd.tag(2);
-  draw_text_box(cmd, BTN_POS(1,3), BTN_SIZE(4,3), F(
+  draw_text_box(cmd, BTN_POS(1,3), BTN_SIZE(4,3),
       #ifdef LULZBOT_LCD_TOOLHEAD_NAME
-        "Firmware for toolhead:\n" LULZBOT_LCD_TOOLHEAD_NAME "\n\n"
+        about_str
+      #else
+        GET_TEXTF(ABOUT_ALEPH_OBJECTS)
       #endif
-      "(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"
-  ), OPT_CENTER, font_medium);
+  , OPT_CENTER, font_medium);
 
   cmd.tag(0);
   draw_text_box(cmd, BTN_POS(1,6), BTN_SIZE(4,2), progmem_str(getFirmwareName_str()), OPT_CENTER, font_medium);
 
-  cmd.font(font_medium).colors(action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(2,1), F("Okay"));
+  cmd.font(font_medium).colors(action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(2,1), GET_TEXTF(OKAY));
 }
 
 bool AboutScreen::onTouchEnd(uint8_t tag) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
index f711003c708f6c0c6fa19805aeb3d9b7d378d0de..4a4947666b17da3d9bb3c03fef2fd836102d357b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
@@ -49,52 +49,52 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
       #else
         .enabled(0)
       #endif
-      .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), F("Z Offset "))
+      .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(ZPROBE_ZOFFSET))
       .enabled(1)
-      .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), F("Steps/mm"))
+      .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
       #if HAS_TRINAMIC
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(13).button( BTN_POS(1,5), BTN_SIZE(1,1), F("Motor mA"))
+      .tag(13).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
       #if HAS_TRINAMIC
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(14).button( BTN_POS(1,4), BTN_SIZE(1,1), F("Bump Sense"))
+      .tag(14).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(HOME_SENSE))
       #if HOTENDS > 1
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(4) .button( BTN_POS(1,2), BTN_SIZE(1,1), F("Nozzle Offset"))
+      .tag(4) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(TOOL_OFFSETS))
       #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), F("Filament"))
-      .tag(12).button( BTN_POS(1,6), BTN_SIZE(1,1), F("Endstops"))
-      .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), F("Display"))
-      .tag(9) .button( BTN_POS(1,7), BTN_SIZE(2,1), F("Interface Settings"))
-      .tag(10).button( BTN_POS(1,8), BTN_SIZE(2,1), F("Restore Factory Defaults"))
-      .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), F("Velocity "))
-      .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), F("Acceleration"))
+      .tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
+      .tag(12).button( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
+      .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
+      .tag(9) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
+      .tag(10).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(RESTORE_DEFAULTS))
+      .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY))
+      .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION))
       #if ENABLED(JUNCTION_DEVIATION)
-      .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), F("Junc Dev"))
+      .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION))
       #else
-      .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), F("Jerk"))
+      .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK))
       #endif
       #if ENABLED(BACKLASH_GCODE)
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(8).button( BTN_POS(2,5), BTN_SIZE(1,1), F("Backlash"))
+      .tag(8).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
       .colors(action_btn)
-      .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), F("Back"));
+      .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
       #undef GRID_COLS
       #undef GRID_ROWS
     #else
@@ -105,47 +105,47 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
       #else
         .enabled(0)
       #endif
-      .tag(2) .button( BTN_POS(1,1),  BTN_SIZE(1,2), F("Z Offset "))
+      .tag(2) .button( BTN_POS(1,1),  BTN_SIZE(1,2), GET_TEXTF(ZPROBE_ZOFFSET))
       .enabled(1)
-      .tag(3) .button( BTN_POS(2,1),  BTN_SIZE(1,1), F("Steps/mm"))
+      .tag(3) .button( BTN_POS(2,1),  BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
       #if HAS_TRINAMIC
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(13).button( BTN_POS(3,1), BTN_SIZE(1,1), F("Motor mA"))
+      .tag(13).button( BTN_POS(3,1), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
       #if HAS_TRINAMIC
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(14).button( BTN_POS(3,2), BTN_SIZE(1,1), F("Bump Sense"))
+      .tag(14).button( BTN_POS(3,2), BTN_SIZE(1,1), GET_TEXTF(HOME_SENSE))
       #if ENABLED(BACKLASH_GCODE)
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(8).button( BTN_POS(3,3),  BTN_SIZE(1,1), F("Backlash"))
+      .tag(8).button( BTN_POS(3,3),  BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
       #if HOTENDS > 1
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(4) .button( BTN_POS(1,3),  BTN_SIZE(1,1), F("Nozzle Offsets"))
-      .tag(12).button( BTN_POS(3,4),  BTN_SIZE(1,1), F("Endstops"))
-      .tag(5) .button( BTN_POS(2,2),  BTN_SIZE(1,1), F("Velocity "))
-      .tag(6) .button( BTN_POS(2,3),  BTN_SIZE(1,1), F("Acceleration"))
+      .tag(4) .button( BTN_POS(1,3),  BTN_SIZE(1,1), GET_TEXTF(TOOL_OFFSETS))
+      .tag(12).button( BTN_POS(3,4),  BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
+      .tag(5) .button( BTN_POS(2,2),  BTN_SIZE(1,1), GET_TEXTF(VELOCITY))
+      .tag(6) .button( BTN_POS(2,3),  BTN_SIZE(1,1), GET_TEXTF(ACCELERATION))
       #if ENABLED(JUNCTION_DEVIATION)
-      .tag(7) .button( BTN_POS(2,4),  BTN_SIZE(1,1), F("Junc Dev"))
+      .tag(7) .button( BTN_POS(2,4),  BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION))
       #else
-      .tag(7) .button( BTN_POS(2,4),  BTN_SIZE(1,1), F("Jerk"))
+      .tag(7) .button( BTN_POS(2,4),  BTN_SIZE(1,1), GET_TEXTF(JERK))
       #endif
-      .tag(11).button( BTN_POS(1,4),  BTN_SIZE(1,1), F("Filament"))
-      .tag(15).button( BTN_POS(3,5),  BTN_SIZE(1,1), F("Display"))
-      .tag(9) .button( BTN_POS(1,5),  BTN_SIZE(2,1), F("Interface Settings"))
-      .tag(10).button( BTN_POS(1,6),  BTN_SIZE(2,1), F("Restore Defaults"))
+      .tag(11).button( BTN_POS(1,4),  BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
+      .tag(15).button( BTN_POS(3,5),  BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
+      .tag(9) .button( BTN_POS(1,5),  BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
+      .tag(10).button( BTN_POS(1,6),  BTN_SIZE(2,1), GET_TEXTF(RESTORE_DEFAULTS))
       .colors(action_btn)
-      .tag(1) .button( BTN_POS(3,6),  BTN_SIZE(1,1), F("Back"));
+      .tag(1) .button( BTN_POS(3,6),  BTN_SIZE(1,1), GET_TEXTF(BACK));
     #endif
   }
 }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
index 257b80004e6edfe6aab32b4a6c1b3e82afc02ff6..925a0f2f5a2a6797880df7c73d70555a84072a9c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
@@ -32,17 +32,17 @@ using namespace Theme;
 
 void BacklashCompensationScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(2).units(PSTR("mm"));
-  w.heading(                  PSTR("Axis Backlash"));
-  w.color(x_axis).adjuster(2, PSTR("X:"), getAxisBacklash_mm(X));
-  w.color(y_axis).adjuster(4, PSTR("Y:"), getAxisBacklash_mm(Y));
-  w.color(z_axis).adjuster(6, PSTR("Z:"), getAxisBacklash_mm(Z));
+  w.precision(2).units(       GET_TEXTF(UNITS_MM));
+  w.heading(                  GET_TEXTF(BACKLASH));
+  w.color(x_axis).adjuster(2, GET_TEXTF(AXIS_X), getAxisBacklash_mm(X));
+  w.color(y_axis).adjuster(4, GET_TEXTF(AXIS_Y), getAxisBacklash_mm(Y));
+  w.color(z_axis).adjuster(6, GET_TEXTF(AXIS_Z), getAxisBacklash_mm(Z));
   #if ENABLED(CALIBRATION_GCODE)
-  w.button(12, PSTR("Measure automatically"));
+  w.button(12, GET_TEXTF(MEASURE_AUTOMATICALLY));
   #endif
-  w.color(other).adjuster(8,  PSTR("Smoothing:"), getBacklashSmoothing_mm());
-  w.precision(0).units(PSTR("%"))
-                .adjuster(10, PSTR("Correction:"), getBacklashCorrection_percent());
+  w.color(other).adjuster(8,  GET_TEXTF(SMOOTHING), getBacklashSmoothing_mm());
+  w.precision(0).units(GET_TEXTF(UNITS_PERCENT))
+                .adjuster(10, GET_TEXTF(CORRECTION), getBacklashCorrection_percent());
   w.precision(2).increments();
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
index 2fb5c98cba275d795f17218b232e320806f28920..9c8cca68e639e8485c431ed83c5045cb3e405f5d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
@@ -50,15 +50,15 @@ BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what
     cmd.font(font_medium)
        .colors(action_btn)
     #ifdef TOUCH_UI_PORTRAIT
-       .tag(1).button( BTN_POS(1,10), BTN_SIZE(13,1), F("Back"))
+       .tag(1).button( BTN_POS(1,10), BTN_SIZE(13,1), GET_TEXTF(BACK))
     #else
-       .tag(1).button( BTN_POS(15,7), BTN_SIZE(4,1),  F("Back"))
+       .tag(1).button( BTN_POS(15,7), BTN_SIZE(4,1),  GET_TEXTF(BACK))
     #endif
        .colors(normal_btn);
   }
 
   _line = 1;
-  _units = PSTR("");
+  _units = F("");
 }
 
 BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t::precision(uint8_t decimals, precision_default_t initial) {
@@ -69,14 +69,14 @@ BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t::
   return *this;
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::heading(const char *label) {
+void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) {
   CommandProcessor cmd;
   cmd.font(font_medium).cmd(COLOR_RGB(bg_text_enabled));
   if (_what & BACKGROUND) {
     #ifdef TOUCH_UI_PORTRAIT
-      cmd.tag(0).fgcolor(bg_color).button( BTN_POS(1, _line), BTN_SIZE(12,1), progmem_str(label), OPT_FLAT);
+      cmd.tag(0).fgcolor(bg_color).button( BTN_POS(1, _line), BTN_SIZE(12,1), label, OPT_FLAT);
     #else
-      cmd.tag(0).fgcolor(bg_color).button( BTN_POS(5, _line), BTN_SIZE(8,1),  progmem_str(label), OPT_FLAT);
+      cmd.tag(0).fgcolor(bg_color).button( BTN_POS(5, _line), BTN_SIZE(8,1),  label, OPT_FLAT);
     #endif
   }
 
@@ -140,9 +140,9 @@ void BaseNumericAdjustmentScreen::widgets_t::increments() {
     cmd.fgcolor(bg_color)
        .tag(0)
     #ifdef TOUCH_UI_PORTRAIT
-       .font(font_small).button( BTN_POS(1, _line),  BTN_SIZE(4,1), F("Increment:"), OPT_FLAT);
+       .font(font_small).button( BTN_POS(1, _line),  BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT);
     #else
-       .font(font_medium).button( BTN_POS(15,1),     BTN_SIZE(4,1), F("Increment:"), OPT_FLAT);
+       .font(font_medium).button( BTN_POS(15,1),     BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT);
     #endif
   }
 
@@ -157,7 +157,7 @@ void BaseNumericAdjustmentScreen::widgets_t::increments() {
   #endif
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, const char *label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
   CommandProcessor cmd;
 
   if (_what & BACKGROUND) {
@@ -179,7 +179,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, cons
   _line++;
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, const char *label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
   if (_what & BACKGROUND) {
     adjuster_sram_val(tag, label, nullptr);
   }
@@ -191,7 +191,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, const char *l
   }
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, const char *label, float value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str label, float value, bool is_enabled) {
   if (_what & BACKGROUND) {
     adjuster_sram_val(tag, label, nullptr);
   }
@@ -205,7 +205,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, const char *l
   }
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, const char *label, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, progmem_str label, bool is_enabled) {
   if (_what & FOREGROUND) {
     CommandProcessor cmd;
     cmd.colors(normal_btn)
@@ -216,13 +216,13 @@ void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, const char *lab
     #else
        .font(font_medium)
     #endif
-    .button(BTN_POS(5,_line), BTN_SIZE(9,1), progmem_str(label));
+    .button(BTN_POS(5,_line), BTN_SIZE(9,1), label);
   }
 
   _line++;
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, const char *label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
   CommandProcessor cmd;
 
   if (_what & BACKGROUND) {
@@ -230,7 +230,7 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, const char
        .font(font_small)
        .cmd(COLOR_RGB(bg_text_enabled))
        .fgcolor(_color).tag(0).button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""),               OPT_FLAT)
-       .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), (progmem_str) label, OPT_FLAT);
+       .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), label, OPT_FLAT);
   }
 
   if (_what & FOREGROUND) {
@@ -242,7 +242,7 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, const char
   _line++;
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, const char *label1, uint8_t tag2, const char *label2, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, progmem_str label1, uint8_t tag2, progmem_str label2, bool is_enabled) {
   if (_what & FOREGROUND) {
     CommandProcessor cmd;
     cmd.enabled(is_enabled)
@@ -251,23 +251,23 @@ void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, const cha
     #else
        .font(font_medium)
     #endif
-    .tag(is_enabled ? tag1: 0).button(BTN_POS(5,_line),   BTN_SIZE(4.5,1), progmem_str(label1))
-    .tag(is_enabled ? tag2: 0).button(BTN_POS(9.5,_line), BTN_SIZE(4.5,1), progmem_str(label2));
+    .tag(is_enabled ? tag1: 0).button(BTN_POS(5,_line),   BTN_SIZE(4.5,1), label1)
+    .tag(is_enabled ? tag2: 0).button(BTN_POS(9.5,_line), BTN_SIZE(4.5,1), label2);
   }
 
   _line++;
 }
 
-void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, const char *label, const char *text, bool value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str label, bool value, bool is_enabled) {
   if (_what & BACKGROUND) {
     CommandProcessor cmd;
     cmd.fgcolor(bg_color)
        .tag(0)
        .font(font_small)
     #ifdef TOUCH_UI_PORTRAIT
-       .button( BTN_POS(1, _line), BTN_SIZE( 8,1), progmem_str(label), OPT_FLAT);
+       .button( BTN_POS(1, _line), BTN_SIZE( 8,1), label, OPT_FLAT);
     #else
-       .button( BTN_POS(1, _line), BTN_SIZE(10,1), progmem_str(label), OPT_FLAT);
+       .button( BTN_POS(1, _line), BTN_SIZE(10,1), label, OPT_FLAT);
     #endif
   }
 
@@ -278,9 +278,9 @@ void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, const char *lab
        .font(font_small)
        .colors(ui_toggle)
     #ifdef TOUCH_UI_PORTRAIT
-      .toggle(BTN_POS( 9,_line), BTN_SIZE(5,1), progmem_str(text), value);
+      .toggle2(BTN_POS( 9,_line), BTN_SIZE(5,1), GET_TEXTF(NO), GET_TEXTF(YES), value);
     #else
-      .toggle(BTN_POS(10,_line), BTN_SIZE(4,1), progmem_str(text), value);
+      .toggle2(BTN_POS(10,_line), BTN_SIZE(4,1), GET_TEXTF(NO), GET_TEXTF(YES), value);
     #endif
   }
 
@@ -293,7 +293,7 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) {
     cmd.fgcolor(bg_color)
        .tag(0)
        .font(font_small)
-       .button( BTN_POS(1, _line),  BTN_SIZE(4,1), F("Home:"), OPT_FLAT);
+       .button( BTN_POS(1, _line),  BTN_SIZE(4,1), GET_TEXTF(HOME), OPT_FLAT);
   }
 
   if (_what & FOREGROUND) {
@@ -304,10 +304,10 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) {
     #else
        .font(font_medium)
     #endif
-       .tag(tag+0).button(BTN_POS(5,_line),  BTN_SIZE(2,1), F("X"))
-       .tag(tag+1).button(BTN_POS(7,_line),  BTN_SIZE(2,1), F("Y"))
-       .tag(tag+2).button(BTN_POS(9,_line),  BTN_SIZE(2,1), F("Z"))
-       .tag(tag+3).button(BTN_POS(11,_line), BTN_SIZE(3,1), F("All"));
+       .tag(tag+0).button(BTN_POS(5,_line),  BTN_SIZE(2,1), GET_TEXTF(AXIS_X))
+       .tag(tag+1).button(BTN_POS(7,_line),  BTN_SIZE(2,1), GET_TEXTF(AXIS_Y))
+       .tag(tag+2).button(BTN_POS(9,_line),  BTN_SIZE(2,1), GET_TEXTF(AXIS_Z))
+       .tag(tag+3).button(BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL));
   }
 
   _line++;
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
index 1fddbd6541cde4d2155cbf6c738a127069b6195a..da02d24f186039b86852bb3aa819672d087b3e67 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
@@ -43,52 +43,52 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
     #define GRID_ROWS 9
     #define GRID_COLS 2
 
-      .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), F("Display"))
+      .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
       #if HAS_TRINAMIC
        .enabled(1)
       #else
        .enabled(0)
       #endif
-      .tag(3) .button( BTN_POS(1,2), BTN_SIZE(1,1), F("Motor mA"))
+      .tag(3) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
       #if HAS_TRINAMIC
        .enabled(1)
       #else
        .enabled(0)
       #endif
-      .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), F("Bump Sense"))
-      .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), F("Endstops"))
+      .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(BUMP_SENSE))
+      .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
       #if HOTENDS > 1
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(6) .button( BTN_POS(1,5), BTN_SIZE(1,1), F("Nozzle Offset"))
+      .tag(6) .button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(NOZZLE_OFFSETS))
 
 
-      .tag(7) .button( BTN_POS(2,1), BTN_SIZE(1,1), F("Steps/mm"))
-      .tag(8) .button( BTN_POS(2,2), BTN_SIZE(1,1), F("Velocity "))
-      .tag(9) .button( BTN_POS(2,3), BTN_SIZE(1,1), F("Acceleration"))
+      .tag(7) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
+      .tag(8) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(MAX_VELOCITY))
+      .tag(9) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(MAX_ACCELERATION))
       #if ENABLED(JUNCTION_DEVIATION)
-        .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), F("Junc Dev"))
+        .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION))
       #else
-        .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), F("Jerk"))
+        .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(MAX_JERK))
       #endif
       #if ENABLED(BACKLASH_GCODE)
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(11) .button( BTN_POS(2,5), BTN_SIZE(1,1), F("Backlash"))
+      .tag(11) .button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
       #if ENABLED(LIN_ADVANCE)
       .enabled(1)
       #else
       .enabled(0)
       #endif
-      .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), F("Linear Advance"))
-      .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), F("Interface Settings"))
-      .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), F("Restore Factory Defaults"))
+      .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(LINEAR_ADVANCE))
+      .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
+      .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(RESTORE_FAILSAFE))
       .colors(action_btn)
-      .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), F("Back"));
+      .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
     #undef GRID_COLS
     #undef GRID_ROWS
   }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
index c106db2422339d56b69be96cff67493cbf5d52c4..c43a80e1c3291c036019caacb74025da76ddcc4f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
@@ -29,7 +29,7 @@
 using namespace FTDI;
 
 void BioConfirmHomeE::onRedraw(draw_mode_t) {
-  drawMessage(F("About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"));
+  drawMessage(GET_TEXTF(HOMING_WARNING));
   drawYesNoButtons(1);
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
index dbd04fc3595f3956dced4d1e4442f3ba7a4767fb..091a2baaf3ceeefe44a65a1498cb63560a586247 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
@@ -29,7 +29,7 @@
 using namespace FTDI;
 
 void BioConfirmHomeXYZ::onRedraw(draw_mode_t) {
-  drawMessage(F("About to home to loading position.\nEnsure the top and the bed of the printer are clear.\n\nContinue?"));
+  drawMessage(GET_TEXTF(LOADING_WARNING));
   drawYesNoButtons(1);
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
index 0a42bc580461cc5ec7346bf8b864eb0baecdb0a4..a42cb547aaaecf459e6228136a52d6d7f008c722 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
@@ -42,17 +42,17 @@ void MainMenu::onRedraw(draw_mode_t what) {
   if (what & FOREGROUND) {
     CommandProcessor cmd;
     cmd.cmd(COLOR_RGB(bg_text_enabled))
-       .font(font_large).text( BTN_POS(1,1), BTN_SIZE(2,1), F("Main Menu"))
+       .font(font_large).text( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(MAIN_MENU))
        .colors(normal_btn)
        .font(font_medium)
-       .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), F("Load Syringe"))
-       .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), F("Unlock XY Axis"))
-       .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), F("Bed Temperature"))
-       .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), F("Interface Settings"))
-       .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), F("Advanced Settings"))
-       .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), F("About Printer"))
+       .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE))
+       .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS))
+       .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE))
+       .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
+       .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS))
+       .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER))
        .colors(action_btn)
-       .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), F("Back"));
+       .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
   }
 
   #undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
index 7e119a5e179a303c68430aa6b70e1d18f6e8875a..7c55d962c4e87a6d3898d8e2a21f1e256d4f5d02 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
@@ -91,12 +91,12 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
        .cmd(COLOR_RGB(bg_text_enabled));
 
     if (!isHeaterIdle(BED) && getTargetTemp_celsius(BED) > 0) {
-      sprintf_P(bed_str, PSTR("%-3d C"), ROUND(getTargetTemp_celsius(BED)));
+      sprintf_P(bed_str, F("%3d%S"), ROUND(getTargetTemp_celsius(BED), GET_TEXT(UNITS_C)));
       ui.bounds(POLY(target_temp), x, y, h, v);
       cmd.text(x, y, h, v, bed_str);
     }
 
-    sprintf_P(bed_str, PSTR("%-3d C"), ROUND(getActualTemp_celsius(BED)));
+    sprintf_P(bed_str, F("%3d%S"), ROUND(getActualTemp_celsius(BED)), GET_TEXT(UNITS_C));
     ui.bounds(POLY(actual_temp), x, y, h, v);
     cmd.text(x, y, h, v, bed_str);
   }
@@ -175,13 +175,13 @@ void StatusScreen::draw_fine_motion(draw_mode_t what) {
 
     ui.bounds(POLY(fine_label), x, y, h, v);
     cmd.cmd(COLOR_RGB(bg_text_enabled))
-       .text(x, y, h, v, F("Fine motion:"));
+       .text(x, y, h, v, GET_TEXTF(FINE_MOTION));
   }
 
   if (what & FOREGROUND) {
     ui.bounds(POLY(fine_toggle), x, y, h, v);
     cmd.colors(ui_toggle)
-       .toggle(x, y, h, v, F("no\xFFyes"), fine_motion);
+       .toggle2(x, y, h, v, GET_TEXTF(NO), GET_TEXTF(YES), fine_motion);
   }
 }
 
@@ -226,16 +226,12 @@ void StatusScreen::draw_buttons(draw_mode_t) {
      .colors(has_media ? action_btn : normal_btn)
      .tag(9).button(BTN_POS(1,9), BTN_SIZE(1,1),
         isPrintingFromMedia() ?
-          F("Printing") :
-      #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+          GET_TEXTF(PRINTING) :
         #ifdef LULZBOT_MANUAL_USB_STARTUP
-        (Sd2Card::ready() ? F("USB Drive") : F("Enable USB"))
+        (Sd2Card::ready() ? GET_TEXTF(MEDIA) : GET_TEXTF(ENABLE_MEDIA))
         #else
-        F("USB Drive")
+        GET_TEXTF(MEDIA)
         #endif
-      #else
-        F("SD Card")
-      #endif
       );
 
   cmd.colors(!has_media ? action_btn : normal_btn).tag(10).button(BTN_POS(2,9), BTN_SIZE(1,1), F("Menu"));
@@ -282,7 +278,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
     case 9:
       #if ENABLED(USB_FLASH_DRIVE_SUPPORT) && defined(LULZBOT_MANUAL_USB_STARTUP)
       if (!Sd2Card::ready()) {
-        StatusScreen::setStatusMessage(F("Insert USB drive..."));
+        StatusScreen::setStatusMessage(GET_TEXTF(INSERT_MEDIA));
         Sd2Card::usbStartup();
       } else {
         GOTO_SCREEN(FilesScreen);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
index 09aedbd337b1a6bdc66249f4171616f037a097bc..ab6f2dda892bd390e6ffbdec2db65a40bb1516ae 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
@@ -38,27 +38,26 @@ void TuneMenu::onRedraw(draw_mode_t what) {
        .font(font_medium);
   }
 
-  #define GRID_ROWS 8
+  #define GRID_ROWS 7
   #define GRID_COLS 2
 
   if (what & FOREGROUND) {
     CommandProcessor cmd;
     cmd.cmd(COLOR_RGB(bg_text_enabled))
-       .font(font_large).text  ( BTN_POS(1,1), BTN_SIZE(2,1), F("Print Menu"))
+       .font(font_large).text  ( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(PRINT_MENU))
        .colors(normal_btn)
        .font(font_medium)
-       .enabled(!isPrinting()).tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), isPrinting() ? F("Printing...") : F("Print Again"))
-       .enabled( isPrinting()).tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), F("Print Speed"))
-                              .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), F("Bed Temperature"))
+       .enabled( isPrinting()).tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(PRINT_SPEED))
+                              .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE))
         #if ENABLED(BABYSTEPPING)
           .enabled(true)
         #else
           .enabled(false)
         #endif
-                              .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), F("Nudge Nozzle"))
-       .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), F("Load Syringe"))
-       .enabled(!isPrinting()).tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), F("Unlock XY Axis"))
-       .colors(action_btn)    .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), F("Back"));
+                              .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE))
+       .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE))
+       .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS))
+       .colors(action_btn)    .tag(1).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(BACK));
   }
   #undef GRID_COLS
   #undef GRID_ROWS
@@ -66,18 +65,12 @@ void TuneMenu::onRedraw(draw_mode_t what) {
 
 bool TuneMenu::onTouchEnd(uint8_t tag) {
   switch (tag) {
-    case 1:  GOTO_PREVIOUS();                    break;
-    case 2: {
-      FileList files;
-      printFile(files.shortFilename());
-      GOTO_PREVIOUS();
-      break;
-    }
-    case 3: GOTO_SCREEN(FeedratePercentScreen); break;
-    case 4: GOTO_SCREEN(TemperatureScreen);     break;
-    case 5: GOTO_SCREEN(NudgeNozzleScreen);     break;
-    case 6: GOTO_SCREEN(BioConfirmHomeXYZ);     break;
-    case 7: StatusScreen::unlockMotors();       break;
+    case 1: GOTO_PREVIOUS();                    break;
+    case 2: GOTO_SCREEN(FeedratePercentScreen); break;
+    case 3: GOTO_SCREEN(TemperatureScreen);     break;
+    case 4: GOTO_SCREEN(NudgeNozzleScreen);     break;
+    case 5: GOTO_SCREEN(BioConfirmHomeXYZ);     break;
+    case 6: StatusScreen::unlockMotors();       break;
     default:
       return false;
   }
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 c697e63404a0119e8863ea73c1718abaf4a51802..c5af7ad553c768b8d2b4239a03dd004b1b7382ed 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
@@ -57,13 +57,14 @@ void BootScreen::onIdle() {
     // in case the display is borked.
     InterfaceSettingsScreen::failSafeSettings();
 
+    StatusScreen::loadBitmaps();
     GOTO_SCREEN(TouchCalibrationScreen);
     current_screen.forget();
     PUSH_SCREEN(StatusScreen);
   } else {
     if (!UIFlashStorage::is_valid()) {
       StatusScreen::loadBitmaps();
-      SpinnerDialogBox::show(F("Please wait..."));
+      SpinnerDialogBox::show(GET_TEXTF(PLEASE_WAIT));
       UIFlashStorage::format_flash();
       SpinnerDialogBox::hide();
     }
@@ -82,6 +83,9 @@ void BootScreen::onIdle() {
       current_screen.forget();
       PUSH_SCREEN(StatusScreen);
       PUSH_SCREEN(BioConfirmHomeE);
+    #elif defined(TOUCH_UI_LANGUAGE_MENU)
+      StatusScreen::setStatusMessage(F(WELCOME_MSG));
+      GOTO_SCREEN(LanguageMenu);
     #else
       StatusScreen::setStatusMessage(F(WELCOME_MSG));
       GOTO_SCREEN(StatusScreen);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
index 8945aeb43dd47ca360969940cb85a48c3c8a5f6c..04ff0cf7c3880c911eb33b50e2dc7be86232c929 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
@@ -114,29 +114,24 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
     #else
        .font(font_medium)
     #endif
-       .text(BTN_POS(1,1), BTN_SIZE(2,1), F("Extruder Selection:"))
+       .text(BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(EXTRUDER_SELECTION))
     #ifdef TOUCH_UI_PORTRAIT
-       .text(BTN_POS(1,7), BTN_SIZE(1,1), F("Current Temp:"))
+       .text(BTN_POS(1,7), BTN_SIZE(1,1), F(""))
     #else
-       .text(BTN_POS(3,1), BTN_SIZE(2,1), F("Current Temp:"))
+       .text(BTN_POS(3,1), BTN_SIZE(2,1), GET_TEXTF(CURRENT_TEMPERATURE))
        .font(font_small)
     #endif
-       .text(BTN_POS(1,3), BTN_SIZE(2,1), F("Removal Temp:"));
+       .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(REMOVAL_TEMPERATURE));
     drawTempGradient(BTN_POS(1,4), BTN_SIZE(1,3));
   }
 
   if (what & FOREGROUND) {
     char e_str[15];
 
-    const char *idle = PSTR("%-3d C / idle");
-    const char *not_idle = PSTR("%-3d / %-3d C");
-
-    sprintf_P(
-      e_str,
-      isHeaterIdle(getExtruder()) ? idle : not_idle,
-      ROUND(getActualTemp_celsius(getExtruder())),
-      ROUND(getTargetTemp_celsius(getExtruder()))
-    );
+      if (isHeaterIdle(getExtruder()))
+      sprintf_P(e_str, PSTR("%3d%S / %S"), ROUND(getActualTemp_celsius(getExtruder())), GET_TEXT(UNITS_C), GET_TEXT(TEMP_IDLE));
+    else
+      sprintf_P(e_str, PSTR("%3d / %3d%S"), ROUND(getActualTemp_celsius(getExtruder())), ROUND(getTargetTemp_celsius(getExtruder())), GET_TEXT(UNITS_C));
 
     const rgb_t tcol = getWarmColor(getActualTemp_celsius(getExtruder()), COOL_TEMP, LOW_TEMP, MED_TEMP, HIGH_TEMP);
     cmd.cmd(COLOR_RGB(tcol))
@@ -158,12 +153,12 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
     const bool t_ok = getActualTemp_celsius(getExtruder()) > getSoftenTemp() - 10;
 
     if (screen_data.ChangeFilamentScreen.t_tag && !t_ok) {
-      cmd.text(BTN_POS(1,6), BTN_SIZE(1,1), F("Heating..."));
+      cmd.text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(HEATING));
     } else if (getActualTemp_celsius(getExtruder()) > 100) {
       cmd.cmd(COLOR_RGB(0xFF0000))
-         .text(BTN_POS(1,4), BTN_SIZE(1,1), F("Caution:"))
+         .text(BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(CAUTION))
          .colors(normal_btn)
-         .text(BTN_POS(1,6), BTN_SIZE(1,1), F("Hot!"));
+         .text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(HOT));
     }
 
     #define TOG_STYLE(A) colors(A ? action_btn : normal_btn)
@@ -195,15 +190,28 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
     const bool tog7 = screen_data.ChangeFilamentScreen.repeat_tag == 7;
     const bool tog8 = screen_data.ChangeFilamentScreen.repeat_tag == 8;
 
+
     #ifdef TOUCH_UI_PORTRAIT
-      cmd.font(font_large)
+      cmd.font(font_large);
     #else
-      cmd.font(font_small)
+      cmd.font(font_small);
     #endif
-       .tag(2) .TOG_STYLE(tog2) .button (BTN_POS(2,6), BTN_SIZE(1,1), F( STRINGIFY(LOW_TEMP)  "C (PLA)"))
-       .tag(3) .TOG_STYLE(tog3) .button (BTN_POS(2,5), BTN_SIZE(1,1), F( STRINGIFY(MED_TEMP)  "C (ABS)"))
-       .tag(4) .TOG_STYLE(tog4) .button (BTN_POS(2,4), BTN_SIZE(1,1), F( STRINGIFY(HIGH_TEMP) "C (High)"))
-       .colors(normal_btn)
+    {
+      char str[30];
+      sprintf_P(str, PSTR("%3d%S (%S)"), LOW_TEMP, GET_TEXT(UNITS_C), GET_TEXT(MATERIAL_PLA));
+      cmd.tag(2) .TOG_STYLE(tog2) .button (BTN_POS(2,6), BTN_SIZE(1,1), str);
+    }
+    {
+      char str[30];
+      sprintf_P(str, PSTR("%3d%S (%S)"), MED_TEMP, GET_TEXT(UNITS_C), GET_TEXT(MATERIAL_ABS));
+      cmd.tag(3) .TOG_STYLE(tog3) .button (BTN_POS(2,5), BTN_SIZE(1,1), str);
+    }
+    {
+      char str[30];
+      sprintf_P(str, PSTR("%3d%S (%S)"), HIGH_TEMP, GET_TEXT(UNITS_C), GET_TEXT(MATERIAL_HIGH_TEMP));
+      cmd.tag(4) .TOG_STYLE(tog4) .button (BTN_POS(2,4), BTN_SIZE(1,1), str);
+    }
+    cmd.colors(normal_btn)
 
     // Add tags to color gradient
     .cmd(COLOR_MASK(0,0,0,0))
@@ -215,23 +223,23 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
     .cmd(COLOR_RGB(t_ok ? bg_text_enabled : bg_text_disabled))
     #ifdef TOUCH_UI_PORTRAIT
        .font(font_large)
-       .tag(0)                              .text   (BTN_POS(1,8),  BTN_SIZE(1,1), F("Unload"))
-                                            .text   (BTN_POS(2,8),  BTN_SIZE(1,1), F("Load/Extrude"))
-       .tag(5)                .enabled(t_ok).button (BTN_POS(1,9),  BTN_SIZE(1,1), F("Momentary"))
-       .tag(6)                .enabled(t_ok).button (BTN_POS(2,9),  BTN_SIZE(1,1), F("Momentary"))
-       .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(1,10), BTN_SIZE(1,1), F("Continuous"))
-       .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(2,10), BTN_SIZE(1,1), F("Continuous"))
-       .tag(1).colors(action_btn)           .button (BTN_POS(1,11), BTN_SIZE(2,1), F("Back"));
+       .tag(0)                              .text   (BTN_POS(1,8),  BTN_SIZE(1,1), GET_TEXTF(UNLOAD_FILAMENT))
+                                            .text   (BTN_POS(2,8),  BTN_SIZE(1,1), GET_TEXTF(LOAD_FILAMENT))
+       .tag(5)                .enabled(t_ok).button (BTN_POS(1,9),  BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
+       .tag(6)                .enabled(t_ok).button (BTN_POS(2,9),  BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
+       .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(1,10), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
+       .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(2,10), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
+       .tag(1).colors(action_btn)           .button (BTN_POS(1,11), BTN_SIZE(2,1), GET_TEXTF(BACK));
     #else
        .font(font_small)
-       .tag(0)                              .text   (BTN_POS(3,3),  BTN_SIZE(1,1), F("Unload"))
-                                            .text   (BTN_POS(4,3),  BTN_SIZE(1,1), F("Load/Extrude"))
-       .tag(5)                .enabled(t_ok).button (BTN_POS(3,4),  BTN_SIZE(1,1), F("Momentary"))
-       .tag(6)                .enabled(t_ok).button (BTN_POS(4,4),  BTN_SIZE(1,1), F("Momentary"))
-       .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(3,5),  BTN_SIZE(1,1), F("Continuous"))
-       .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(4,5),  BTN_SIZE(1,1), F("Continuous"))
+       .tag(0)                              .text   (BTN_POS(3,3),  BTN_SIZE(1,1), GET_TEXTF(UNLOAD_FILAMENT))
+                                            .text   (BTN_POS(4,3),  BTN_SIZE(1,1), GET_TEXTF(LOAD_FILAMENT))
+       .tag(5)                .enabled(t_ok).button (BTN_POS(3,4),  BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
+       .tag(6)                .enabled(t_ok).button (BTN_POS(4,4),  BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
+       .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(3,5),  BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
+       .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(4,5),  BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
        .font(font_medium)
-       .tag(1).colors(action_btn)           .button (BTN_POS(3,6),  BTN_SIZE(2,1), F("Back"));
+       .tag(1).colors(action_btn)           .button (BTN_POS(3,6),  BTN_SIZE(2,1), GET_TEXTF(BACK));
     #endif
   }
   #undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
index 77d4fcfaca218a3d97eeeb9e14dd1c240be60724..32dba3df0f3ce3ca5491a1308b15780af7f39824 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
@@ -29,7 +29,7 @@
 using namespace ExtUI;
 
 void ConfirmAbortPrintDialogBox::onRedraw(draw_mode_t) {
-  drawMessage(F("Are you sure you want to cancel the print?"));
+  drawMessage(GET_TEXTF(ABORT_WARNING));
   drawYesNoButtons();
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
index 395fe83fb8c11eacea832b425ff3b6145464c444..161828595f8a327bb582a7db5d106980685fb3b8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
@@ -30,7 +30,7 @@ using namespace ExtUI;
 using namespace Theme;
 
 void ConfirmAutoCalibrationDialogBox::onRedraw(draw_mode_t) {
-  drawMessage(F("For best results, unload the filament and clean the hotend prior to starting calibration. Continue?"));
+  drawMessage(GET_TEXTF(CALIBRATION_WARNING));
   drawYesNoButtons();
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
index 6db2ff4d3dbc830bb7e595b21f35c265772839a9..610d97b1188ca182ee1b034d54c0d1f7beee732e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
@@ -31,17 +31,17 @@
 using namespace FTDI;
 
 void ConfirmEraseFlashDialogBox::onRedraw(draw_mode_t) {
-  drawMessage(F("Are you sure? SPI flash will be erased."));
+  drawMessage(GET_TEXTF(ERASE_FLASH_WARNING));
   drawYesNoButtons();
 }
 
 bool ConfirmEraseFlashDialogBox::onTouchEnd(uint8_t tag) {
   switch (tag) {
     case 1:
-      SpinnerDialogBox::show(F("Erasing..."));
+      SpinnerDialogBox::show(GET_TEXTF(ERASING));
       UIFlashStorage::format_flash();
       SpinnerDialogBox::hide();
-      AlertDialogBox::show(F("SPI flash erased"));
+      AlertDialogBox::show(GET_TEXTF(ERASED));
       // Remove ConfirmEraseFlashDialogBox from the stack
       // so the alert box doesn't return to me.
       current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
index 1e1cb8457a0aea5610c114d68742a78e9d629934..fdfacd58cebd8c917be870c264882901d7514f17 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
@@ -33,14 +33,14 @@ using namespace Theme;
 void DefaultAccelerationScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0);
-  w.units(PSTR("mm/s^2"));
-  w.heading(      PSTR("Default Acceleration"));
+  w.units(GET_TEXTF(UNITS_MM_S2));
+  w.heading(      GET_TEXTF(ACCELERATION));
   w.color(other);
-  w.adjuster(  2, PSTR("Printing:"),   getPrintingAcceleration_mm_s2() );
-  w.adjuster(  4, PSTR("Travel:"),     getTravelAcceleration_mm_s2() );
-  w.adjuster(  6, PSTR("Retraction:"), getRetractAcceleration_mm_s2() );
+  w.adjuster(  2, GET_TEXTF(ACCEL_PRINTING), getPrintingAcceleration_mm_s2() );
+  w.adjuster(  4, GET_TEXTF(ACCEL_TRAVEL),   getTravelAcceleration_mm_s2() );
+  w.adjuster(  6, GET_TEXTF(ACCEL_RETRACT),  getRetractAcceleration_mm_s2() );
   w.increments();
-  w.button(    8, PSTR("Set Axis Maximum"));
+  w.button(    8, GET_TEXTF(SET_MAXIMUM));
 }
 
 bool DefaultAccelerationScreen::onTouchHeld(uint8_t tag) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
index 6178a71e940d3802681a9d047927792032cea034..09075b2c544f22d1930bf0d2ba811d825ad30659 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
@@ -45,19 +45,19 @@ void DialogBoxBaseClass::drawMessage(const T message, int16_t font) {
 }
 
 template void DialogBoxBaseClass::drawMessage(const char *, int16_t font);
-template void DialogBoxBaseClass::drawMessage(const progmem_str, int16_t font);
+template void DialogBoxBaseClass::drawMessage(progmem_str, int16_t font);
 
 void DialogBoxBaseClass::drawYesNoButtons(uint8_t default_btn) {
   CommandProcessor cmd;
   cmd.font(font_medium)
-     .colors(default_btn == 1 ? action_btn : normal_btn).tag(1).button( BTN_POS(1,8), BTN_SIZE(1,1), F("Yes"))
-     .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button( BTN_POS(2,8), BTN_SIZE(1,1), F("No"));
+     .colors(default_btn == 1 ? action_btn : normal_btn).tag(1).button( BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXTF(YES))
+     .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button( BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXTF(NO));
 }
 
 void DialogBoxBaseClass::drawOkayButton() {
   CommandProcessor cmd;
   cmd.font(font_medium)
-     .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), F("Okay"));
+     .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(OKAY));
 }
 
 void DialogBoxBaseClass::drawButton(const progmem_str label) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
index 7af436a5c7a8f8456f34138dd778fbaa64df597b..eedc3d22c8dba30ee133df18de315f4e5cac638c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
@@ -32,14 +32,14 @@ using namespace Theme;
 void DisplayTuningScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0, BaseNumericAdjustmentScreen::DEFAULT_LOWEST);
-  w.units(PSTR(""));
-  w.heading(     PSTR("Display Tuning"));
+  w.units(F(""));
+  w.heading(GET_TEXTF(DISPLAY_MENU));
   w.color(other);
-  w.adjuster( 2, PSTR("H Offset:"), CLCD::mem_read_16(CLCD::REG::HOFFSET) );
-  w.adjuster( 4, PSTR("V Offset:"), CLCD::mem_read_16(CLCD::REG::VOFFSET) );
+  w.adjuster( 2, GET_TEXTF(H_OFFSET), CLCD::mem_read_16(CLCD::REG::HOFFSET) );
+  w.adjuster( 4, GET_TEXTF(V_OFFSET), CLCD::mem_read_16(CLCD::REG::VOFFSET) );
   w.increments();
-  w.heading(     PSTR("Touch Screen"));
-  w.button(6, PSTR("Calibrate"));
+  w.heading(     GET_TEXTF(TOUCH_SCREEN));
+  w.button(6,    GET_TEXTF(CALIBRATE));
 }
 
 bool DisplayTuningScreen::onTouchHeld(uint8_t tag) {
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 f1e13d3a9a6c0ccd1e38485dca261d89fb22cbdf..b474b0c168f3d3b89937212a10d8c2fa10476eed 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
@@ -48,7 +48,7 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
   #define GRID_ROWS 7
   #define GRID_COLS 6
 
-  #define PIN_BTN(X,Y,PIN,LABEL)          button(BTN_POS(X,Y), BTN_SIZE(2,1), F(LABEL))
+  #define PIN_BTN(X,Y,PIN,LABEL)          button(BTN_POS(X,Y), BTN_SIZE(2,1), LABEL)
   #define PIN_ENABLED(LABEL,PIN,INV,X,Y)  cmd.enabled(1).colors(READ(PIN##_PIN) != INV ? action_btn : normal_btn).PIN_BTN(X,Y,PIN,LABEL);
   #define PIN_DISABLED(LABEL,PIN,INV,X,Y) cmd.enabled(0).PIN_BTN(X,Y,PIN,LABEL);
 
@@ -57,68 +57,68 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
   #else
   cmd.font(font_medium)
   #endif
-     .text(BTN_POS(1,1), BTN_SIZE(6,1), F("Endstop States:"))
+     .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXTF(ENDSTOPS))
      .font(font_tiny);
   #if PIN_EXISTS(X_MAX)
-    PIN_ENABLED ("X Max", X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
+    PIN_ENABLED (GET_TEXTF(X_MAX), X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
   #else
-    PIN_DISABLED("X Max",X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
+    PIN_DISABLED(GET_TEXTF(X_MAX),X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
   #endif
   #if PIN_EXISTS(Y_MAX)
-    PIN_ENABLED ("Y Max",Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
+    PIN_ENABLED (GET_TEXTF(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
   #else
-    PIN_DISABLED("Y Max",Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
+    PIN_DISABLED(GET_TEXTF(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
   #endif
   #if PIN_EXISTS(Z_MAX)
-    PIN_ENABLED ("Z Max",Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
+    PIN_ENABLED (GET_TEXTF(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
   #else
-    PIN_DISABLED("Z Max",Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
+    PIN_DISABLED(GET_TEXTF(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
   #endif
   #if PIN_EXISTS(X_MIN)
-    PIN_ENABLED ("X Min",X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
+    PIN_ENABLED (GET_TEXTF(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
   #else
-    PIN_DISABLED("X Min",X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
+    PIN_DISABLED(GET_TEXTF(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
   #endif
   #if PIN_EXISTS(Y_MIN)
-    PIN_ENABLED ("Y Min",Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
+    PIN_ENABLED (GET_TEXTF(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
   #else
-    PIN_DISABLED("Y Min",Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
+    PIN_DISABLED(GET_TEXTF(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
   #endif
   #if PIN_EXISTS(Z_MIN)
-    PIN_ENABLED ("Z Min",Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
+    PIN_ENABLED (GET_TEXTF(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
   #else
-    PIN_DISABLED("Z Min",Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
+    PIN_DISABLED(GET_TEXTF(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
   #endif
   #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
-    PIN_ENABLED ("Runout 1",FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
+    PIN_ENABLED (GET_TEXTF(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
   #else
-    PIN_DISABLED("Runout 1",FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
+    PIN_DISABLED(GET_TEXTF(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
   #endif
   #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT2)
-    PIN_ENABLED ("Runout 2",FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
+    PIN_ENABLED (GET_TEXTF(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
   #else
-    PIN_DISABLED("Runout 2",FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
+    PIN_DISABLED(GET_TEXTF(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
   #endif
   #if PIN_EXISTS(Z_MIN_PROBE)
-    PIN_ENABLED ("Z Probe",Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
+    PIN_ENABLED (GET_TEXTF(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
   #else
-    PIN_DISABLED("Z Probe",Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
+    PIN_DISABLED(GET_TEXTF(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
   #endif
 
   #if HAS_SOFTWARE_ENDSTOPS
     #undef EDGE_R
     #define EDGE_R 30
     cmd.font(font_small)
-       .text         (BTN_POS(1,5), BTN_SIZE(3,1), F("Soft Limits:"), OPT_RIGHTX | OPT_CENTERY)
+       .text         (BTN_POS(1,5), BTN_SIZE(3,1), GET_TEXTF(SOFT_ENDSTOPS), OPT_RIGHTX | OPT_CENTERY)
        .colors(ui_toggle)
-       .tag(2).toggle(BTN_POS(4,5), BTN_SIZE(3,1), F("off\xFFon"), getSoftEndstopState());
+       .tag(2).toggle2(BTN_POS(4,5), BTN_SIZE(3,1), GET_TEXTF(NO), GET_TEXTF(YES), getSoftEndstopState());
       #undef EDGE_R
       #define EDGE_R 0
   #endif
 
   cmd.font(font_medium)
      .colors(action_btn)
-     .tag(1).button( BTN_POS(1,7), BTN_SIZE(6,1), F("Back"));
+     .tag(1).button( BTN_POS(1,7), BTN_SIZE(6,1), GET_TEXTF(BACK));
   #undef GRID_COLS
   #undef GRID_ROWS
 }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
index e9f527ef969dc90c43951e50a61eb872f6a85d40..c42296f79cf6f0ce95d48bd6cc9398aa38a7e68d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
@@ -31,10 +31,10 @@ using namespace ExtUI;
 
 void FeedratePercentScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(0).units(PSTR("%"));
+  w.precision(0).units(GET_TEXTF(UNITS_PERCENT));
 
-  w.heading(PSTR("Print Speed"));
-  w.adjuster(4,  PSTR("Speed"), getFeedrate_percent());
+  w.heading(GET_TEXTF(PRINT_SPEED));
+  w.adjuster(4,  GET_TEXTF(SPEED), getFeedrate_percent());
   w.increments();
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
index 55280859af205785e91327a093d89eec9b69be27..a0213d5edc663113580f364200b86fcc06049b5b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
@@ -43,43 +43,43 @@ void FilamentMenu::onRedraw(draw_mode_t what) {
     #ifdef TOUCH_UI_PORTRAIT
       #define GRID_ROWS 9
       #define GRID_COLS 2
-         .text  ( BTN_POS(1,1),      BTN_SIZE(2,1), F("Filament Options:"))
+         .text  ( BTN_POS(1,1),      BTN_SIZE(2,1), GET_TEXTF(FILAMENT))
          .font(font_medium).colors(normal_btn)
       #if ENABLED(FILAMENT_RUNOUT_SENSOR)
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(2).button( BTN_POS(1,2),  BTN_SIZE(2,1), F("Runout Sensor"))
+      .tag(2).button( BTN_POS(1,2),  BTN_SIZE(2,1), GET_TEXTF(RUNOUT_SENSOR))
       #if ENABLED(LIN_ADVANCE)
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(3).button( BTN_POS(1,3),  BTN_SIZE(2,1), F("Linear Advance"))
+      .tag(3).button( BTN_POS(1,3),  BTN_SIZE(2,1), GET_TEXTF(LINEAR_ADVANCE))
       .colors(action_btn)
-      .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), F("Back"));
+      .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
       #undef GRID_COLS
       #undef GRID_ROWS
     #else
       #define GRID_ROWS 6
       #define GRID_COLS 3
-         .text  ( BTN_POS(1,1),      BTN_SIZE(3,1), F("Filament Options:"))
+         .text  ( BTN_POS(1,1),      BTN_SIZE(3,1), GET_TEXTF(FILAMENT))
          .font(font_medium).colors(normal_btn)
       #if ENABLED(FILAMENT_RUNOUT_SENSOR)
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(2).button( BTN_POS(1,2),  BTN_SIZE(3,1), F("Filament Runout"))
+      .tag(2).button( BTN_POS(1,2),  BTN_SIZE(3,1), GET_TEXTF(RUNOUT_SENSOR))
       #if ENABLED(LIN_ADVANCE)
         .enabled(1)
       #else
         .enabled(0)
       #endif
-      .tag(3).button( BTN_POS(1,3),  BTN_SIZE(3,1), F("Linear Advance"))
+      .tag(3).button( BTN_POS(1,3),  BTN_SIZE(3,1), GET_TEXTF(LINEAR_ADVANCE))
       .colors(action_btn)
-      .tag(1) .button( BTN_POS(1,6), BTN_SIZE(3,1), F("Back"));
+      .tag(1) .button( BTN_POS(1,6), BTN_SIZE(3,1), GET_TEXTF(BACK));
     #endif
   }
 }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
index ccad90171dff8c63e8923e0d0e520a52d5fa64c9..12bf61d68bb4ea6d6f94157cc4022f0c70b7444b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
@@ -32,15 +32,15 @@ using namespace Theme;
 
 void FilamentRunoutScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.heading(   PSTR("Runout Detection:"));
-  w.toggle( 2, PSTR("Filament Sensor:"), PSTR("off\xFFon"), getFilamentRunoutEnabled());
+  w.heading(   GET_TEXTF(FILAMENT));
+  w.toggle( 2, GET_TEXTF(RUNOUT_SENSOR), getFilamentRunoutEnabled());
 
   #ifdef FILAMENT_RUNOUT_DISTANCE_MM
-    w.heading(PSTR("Detection Threshold:"));
-    w.units(PSTR("mm"));
+    w.heading(GET_TEXTF(DETECTION_THRESHOLD));
+    w.units(GET_TEXTF(UNITS_MM));
     w.precision(0);
     w.color(e_axis);
-    w.adjuster( 10, PSTR("Distance:"), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
+    w.adjuster( 10, GET_TEXTF(DISTANCE), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
     w.increments();
   #endif
 }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
index e8aaf36ff7ff887cd7fd21f3371f495f33452a3a..fac80d1f77ac746c3c1d40becca8fb6469b5aa4e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
@@ -165,13 +165,13 @@ void FilesScreen::drawFooter() {
   cmd.colors(normal_btn)
      .font(font_medium)
      .colors(has_selection ? normal_btn : action_btn)
-     .tag(back_tag).button( BTN_POS(4,y), BTN_SIZE(3,h), F("Back"))
+     .tag(back_tag).button( BTN_POS(4,y), BTN_SIZE(3,h), GET_TEXTF(BACK))
      .enabled(has_selection)
      .colors(has_selection ? action_btn : normal_btn);
   if (screen_data.FilesScreen.flags.is_dir) {
-    cmd.tag(244).button( BTN_POS(1, y), BTN_SIZE(3,h), F("Open"));
+    cmd.tag(244).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXTF(OPEN_DIR));
   } else {
-    cmd.tag(243).button( BTN_POS(1, y), BTN_SIZE(3,h), F("Print"));
+    cmd.tag(243).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXTF(PRINT_FILE));
   }
 }
 
@@ -210,7 +210,7 @@ bool FilesScreen::onTouchEnd(uint8_t tag) {
       break;
     case 243:
       printFile(getSelectedShortFilename());
-      StatusScreen::setStatusMessage(F("Print Starting"));
+      StatusScreen::setStatusMessage(GET_TEXTF(PRINT_STARTING));
       GOTO_SCREEN(StatusScreen);
       return true;
     case 244:
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
index 265d0e103aa14064172c2e3bcc8c5d433ecf43dd..e1b27c79ae000cff9fe64f05176f4a1d2b9f7f92 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
@@ -69,15 +69,15 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
        .cmd(COLOR_RGB(bg_text_enabled))
        .tag(0)
        .font(font_medium)
-       .text(BTN_POS(1,1), BTN_SIZE(4,1), F("Interface Settings"))
+       .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SETTINGS))
     #undef EDGE_R
     #define EDGE_R 30
        .font(font_small)
        .tag(0)
-       .text(BTN_POS(1,2), BTN_SIZE(2,1), F("LCD brightness:"), OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,3), BTN_SIZE(2,1), F("Sound volume:"),   OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,4), BTN_SIZE(2,1), F("Screen lock:"),    OPT_RIGHTX | OPT_CENTERY);
-    cmd.text(BTN_POS(1,5), BTN_SIZE(2,1), F("Boot screen:"),    OPT_RIGHTX | OPT_CENTERY);
+       .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LCD_BRIGHTNESS), OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(SOUND_VOLUME),   OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(SCREEN_LOCK),    OPT_RIGHTX | OPT_CENTERY);
+    cmd.text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(BOOT_SCREEN),    OPT_RIGHTX | OPT_CENTERY);
     #undef EDGE_R
   }
 
@@ -94,19 +94,19 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
        .tag(2).slider(BTN_POS(3,2), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.brightness, 128)
        .tag(3).slider(BTN_POS(3,3), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.volume,     0xFF)
        .colors(ui_toggle)
-       .tag(4).toggle(BTN_POS(3,4), BTN_SIZE(w,1), F("off\xFFon"), LockScreen::is_enabled())
-       .tag(5).toggle(BTN_POS(3,5), BTN_SIZE(w,1), F("off\xFFon"), UIData::animations_enabled())
+       .tag(4).toggle2(BTN_POS(3,4), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), LockScreen::is_enabled())
+       .tag(5).toggle2(BTN_POS(3,5), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), UIData::animations_enabled())
     #undef EDGE_R
     #define EDGE_R 0
     #ifdef TOUCH_UI_PORTRAIT
        .colors(normal_btn)
-       .tag(6).button (BTN_POS(1,6), BTN_SIZE(4,1), F("Customize Sounds"))
+       .tag(6).button (BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SOUNDS))
        .colors(action_btn)
-       .tag(1).button (BTN_POS(1,7), BTN_SIZE(4,1), F("Back"));
+       .tag(1).button (BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXTF(BACK));
     #else
-       .tag(6).button (BTN_POS(1,6), BTN_SIZE(2,1), F("Customize Sounds"))
+       .tag(6).button (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SOUNDS))
        .colors(action_btn)
-       .tag(1).button (BTN_POS(3,6), BTN_SIZE(2,1), F("Back"));
+       .tag(1).button (BTN_POS(3,6), BTN_SIZE(2,1), GET_TEXTF(BACK));
     #endif
   }
 }
@@ -263,9 +263,9 @@ void InterfaceSettingsScreen::loadSettings(const char *buff) {
       success = persistentStore.write_data(0, data, LULZBOT_EEPROM_BACKUP_SIZE) == PERSISTENT_STORE_SUCCESS;
 
     if (success)
-      StatusScreen::setStatusMessage(F("Settings restored from backup"));
+      StatusScreen::setStatusMessage(GET_TEXTF(EEPROM_RESTORED));
     else
-      StatusScreen::setStatusMessage(F("Settings restored to default"));
+      StatusScreen::setStatusMessage(GET_TEXTF(EEPROM_RESET));
 
     return success;
   }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
index a1a05d080649773037abfee09450ee84d93d5267..a116ae29fe5ac46ba7cdf3a6d2809e1cf2ed195c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
@@ -71,15 +71,15 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
     #define GRID_ROWS 9
 
        .font(font_medium)
-       .text(BTN_POS(1,1), BTN_SIZE(4,1), F("Interface Sounds"))
+       .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SOUNDS))
     #undef EDGE_R
     #define EDGE_R 30
        .font(font_small)
-       .tag(0).text      (BTN_POS(1,2), BTN_SIZE(2,1), F("Sound volume:"),   OPT_RIGHTX | OPT_CENTERY)
-              .text      (BTN_POS(1,3), BTN_SIZE(2,1), F("Click sounds:"),   OPT_RIGHTX | OPT_CENTERY)
-              .text      (BTN_POS(1,5), BTN_SIZE(2,1), F("Print starting:"), OPT_RIGHTX | OPT_CENTERY)
-              .text      (BTN_POS(1,6), BTN_SIZE(2,1), F("Print finished:"), OPT_RIGHTX | OPT_CENTERY)
-              .text      (BTN_POS(1,7), BTN_SIZE(2,1), F("Print error:"),    OPT_RIGHTX | OPT_CENTERY);
+       .tag(0).text      (BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(SOUND_VOLUME),   OPT_RIGHTX | OPT_CENTERY)
+              .text      (BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(CLICK_SOUNDS),   OPT_RIGHTX | OPT_CENTERY)
+              .text      (BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(PRINT_STARTING), OPT_RIGHTX | OPT_CENTERY)
+              .text      (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(PRINT_FINISHED), OPT_RIGHTX | OPT_CENTERY)
+              .text      (BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(PRINT_ERROR),    OPT_RIGHTX | OPT_CENTERY);
     #undef EDGE_R
   }
 
@@ -95,7 +95,7 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
     #define EDGE_R 30
        .tag(2).slider    (BTN_POS(3,2), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.volume, 0xFF)
        .colors(ui_toggle)
-       .tag(3).toggle    (BTN_POS(3,3), BTN_SIZE(w,1), F("off\xFFon"), UIData::touch_sounds_enabled())
+       .tag(3).toggle2   (BTN_POS(3,3), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), UIData::touch_sounds_enabled())
     #undef EDGE_R
        .colors(normal_btn)
     #define EDGE_R 0
@@ -103,7 +103,7 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
        .tag(5).button    (BTN_POS(3,6), BTN_SIZE(2,1), getSoundSelection(PRINTING_FINISHED))
        .tag(6).button    (BTN_POS(3,7), BTN_SIZE(2,1), getSoundSelection(PRINTING_FAILED))
        .colors(action_btn)
-       .tag(1).button    (BTN_POS(1,9), BTN_SIZE(4,1), F("Back"));
+       .tag(1).button    (BTN_POS(1,9), BTN_SIZE(4,1), GET_TEXTF(BACK));
   }
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
index 7ffb4c5ddff8986cb59e8b723acb96f0de8546a8..705331475726db0159d2afdc2871e80573418eff 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
@@ -34,12 +34,12 @@ void JerkScreen::onRedraw(draw_mode_t what) {
 
   widgets_t w(what);
   w.precision(1);
-  w.units(PSTR("mm/s"));
-  w.heading(                           PSTR("Maximum Jerk"));
-  w.color(x_axis) .adjuster( 2, PSTR("X:"), getAxisMaxJerk_mm_s(X) );
-  w.color(y_axis) .adjuster( 4, PSTR("Y:"), getAxisMaxJerk_mm_s(Y) );
-  w.color(z_axis) .adjuster( 6, PSTR("Z:"), getAxisMaxJerk_mm_s(Z) );
-  w.color(e_axis) .adjuster( 8, PSTR("E:"), getAxisMaxJerk_mm_s(E0) );
+  w.units(GET_TEXTF(UNITS_MM_S));
+  w.heading(GET_TEXTF(JERK));
+  w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisMaxJerk_mm_s(X) );
+  w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisMaxJerk_mm_s(Y) );
+  w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisMaxJerk_mm_s(Z) );
+  w.color(e_axis) .adjuster( 8, GET_TEXTF(AXIS_E), getAxisMaxJerk_mm_s(E0) );
   w.increments();
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
index 1cc4471b59e128f455819f20bdb3aa4d4f140f4b..b4381b7efffd6d2cd3b7cb76c07310195554c990 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
@@ -33,8 +33,8 @@ using namespace Theme;
 void JunctionDeviationScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(2);
-  w.units(PSTR("mm"));
-  w.heading(                          PSTR("Junction Deviation"));
+  w.units(GET_TEXTF(UNITS_MM));
+  w.heading(GET_TEXTF(JUNCTION_DEVIATION));
   w.color(other) .adjuster( 2, PSTR(""), getJunctionDeviation_mm() );
   w.increments();
 }
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 84cbd583cd5a462c7e72b50ea32a4fa4432e79f2..7fa85067344b2e5ddf039e47ea0d57e83aecd988 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
@@ -46,8 +46,8 @@ void KillScreen::show(progmem_str message) {
   cmd.font(Theme::font_large)
      .cmd(COLOR_RGB(Theme::bg_text_enabled))
      .text(BTN_POS(1,2), BTN_SIZE(4,1), message)
-     .text(BTN_POS(1,3), BTN_SIZE(4,1), F("PRINTER HALTED"))
-     .text(BTN_POS(1,6), BTN_SIZE(4,1), F("Please reset"));
+     .text(BTN_POS(1,3), BTN_SIZE(4,1), GET_TEXTF(PRINTER_HALTED))
+     .text(BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXTF(PLEASE_RESET));
 
   #undef GRID_COLS
   #undef GRID_ROWS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cea354b7137fe14b10d561c6b4f381f82c9425e6
--- /dev/null
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp
@@ -0,0 +1,56 @@
+/*********************
+ * language_menu.cpp *
+ *********************/
+
+/****************************************************************************
+ *   Written By Mark Pelletier  2017 - Aleph Objects, Inc.                  *
+ *   Written By Marcio Teixeira 2018 - 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/>.                              *
+ ****************************************************************************/
+
+#include "../config.h"
+
+#if ENABLED(LULZBOT_TOUCH_UI) && defined(TOUCH_UI_LANGUAGE_MENU)
+
+#include "screens.h"
+
+using namespace FTDI;
+using namespace Theme;
+
+void LanguageMenu::onRedraw(draw_mode_t) {
+  CommandProcessor cmd;
+  cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
+     .cmd(CLEAR(true,true,true))
+     .colors(normal_btn)
+     .font(Theme::font_medium);
+
+  #define GRID_ROWS 8
+  #define GRID_COLS 1
+
+  for (uint8_t i = 0; i < get_language_count(); i++)
+    cmd.tag(1 + i).button(BTN_POS(1,i + 1), BTN_SIZE(1,1), get_text(i, String_Indices::LANGUAGE));
+}
+
+bool LanguageMenu::onTouchEnd(uint8_t tag) {
+  const uint8_t lang = tag - 1;
+  if (tag != 0) {
+    set_language(lang);
+    GOTO_SCREEN(StatusScreen);
+    return true;
+  }
+  return false;
+}
+
+#endif // LULZBOT_TOUCH_UI
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
index 8b7137cb8194bf46c9b3d3bc7eda543a137a3570..2c08fb24c82aa608583ff3feec6ba5ca1c01bd20 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
@@ -33,16 +33,16 @@ using namespace Theme;
 void LinearAdvanceScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(2, DEFAULT_LOWEST).color(e_axis);
-  w.heading(           PSTR("Linear Advance:"));
+  w.heading(           GET_TEXTF(LINEAR_ADVANCE));
   #if EXTRUDERS == 1
-    w.adjuster(     2, PSTR("K:"),    getLinearAdvance_mm_mm_s(E0) );
+    w.adjuster(     2, GET_TEXTF(LINEAR_ADVANCE_K),    getLinearAdvance_mm_mm_s(E0) );
   #else
-    w.adjuster(     2, PSTR("K E1:"), getLinearAdvance_mm_mm_s(E0) );
-    w.adjuster(     4, PSTR("K E2:"), getLinearAdvance_mm_mm_s(E1) );
+    w.adjuster(     2, GET_TEXTF(LINEAR_ADVANCE_K1), getLinearAdvance_mm_mm_s(E0) );
+    w.adjuster(     4, GET_TEXTF(LINEAR_ADVANCE_K2), getLinearAdvance_mm_mm_s(E1) );
     #if EXTRUDERS > 2
-      w.adjuster(   6, PSTR("K E3:"), getLinearAdvance_mm_mm_s(E2) );
+      w.adjuster(   6, GET_TEXTF(LINEAR_ADVANCE_K3), getLinearAdvance_mm_mm_s(E2) );
       #if EXTRUDERS > 3
-        w.adjuster( 8, PSTR("K E4:"), getLinearAdvance_mm_mm_s(E3) );
+        w.adjuster( 8, GET_TEXTF(LINEAR_ADVANCE_K4), getLinearAdvance_mm_mm_s(E3) );
       #endif
     #endif
   #endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
index 99b78933acba06ed93efe3acb431a0642e28ed8e..ae683ced54fc33d865a2623419e371ce9c7ef3a8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
@@ -65,16 +65,16 @@ void LockScreen::onRedraw(draw_mode_t what) {
     progmem_str message;
     switch (message_style()) {
       case 'w':
-        message = F("Wrong passcode!");
+        message = GET_TEXTF(PASSCODE_REJECTED);
         break;
       case 'g':
-        message = F("Passcode accepted!");
+        message = GET_TEXTF(PASSCODE_ACCEPTED);
         break;
       default:
         if (passcode == 0) {
-          message = F("Select Passcode:");
+          message = GET_TEXTF(PASSCODE_SELECT);
         } else {
-          message = F("Enter Passcode:");
+          message = GET_TEXTF(PASSCODE_REQUEST);
         }
     }
     message_style() = '\0'; // Terminate the string.
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
index 9c6a3f4c2dff2a8f81e5b01cdff799279fcdc993..827e3b5a1555ea43bbb81930dfd8d590125a603f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
@@ -43,53 +43,53 @@ void MainMenu::onRedraw(draw_mode_t what) {
     #ifdef TOUCH_UI_PORTRAIT
       #define GRID_ROWS 8
       #define GRID_COLS 2
-        .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), F("Auto Home"))
+        .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(AUTO_HOME))
         #ifdef NOZZLE_CLEAN_FEATURE
          .enabled(1)
         #else
          .enabled(0)
         #endif
-        .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), F("Clean Nozzle"))
-        .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), F("Move Axis"))
-        .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), F("Motors Off"))
-        .tag(6).button( BTN_POS(1,3), BTN_SIZE(2,1), F("Temperature"))
-        .tag(7).button( BTN_POS(1,4), BTN_SIZE(2,1), F("Change Filament"))
-        .tag(8).button( BTN_POS(1,5), BTN_SIZE(2,1), F("Advanced Settings"))
+        .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(CLEAN_NOZZLE))
+        .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOVE_AXIS))
+        .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(MOTORS_OFF))
+        .tag(6).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(TEMPERATURE))
+        .tag(7).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(CHANGE_FILAMENT))
+        .tag(8).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS))
         #ifdef PRINTCOUNTER
          .enabled(1)
         #else
          .enabled(0)
         #endif
-        .tag(9).button( BTN_POS(1,7), BTN_SIZE(2,1), F("Printer Statistics"))
-        .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), F("About Printer"))
+        .tag(9).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(PRINTER_STATISTICS))
+        .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER))
         .colors(action_btn)
-        .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), F("Back"));
+        .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
       #undef GRID_COLS
       #undef GRID_ROWS
     #else
       #define GRID_ROWS 5
       #define GRID_COLS 2
-        .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), F("Auto Home"))
+        .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT(AUTO_HOME))
         #if ENABLED(NOZZLE_CLEAN_FEATURE)
          .enabled(1)
         #else
          .enabled(0)
         #endif
-        .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), F("Clean Nozzle"))
-        .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), F("Move Axis"))
-        .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), F("Motors Off"))
-        .tag(6).button( BTN_POS(1,3), BTN_SIZE(1,1), F("Temperature"))
-        .tag(7).button( BTN_POS(2,3), BTN_SIZE(1,1), F("Change Filament"))
-        .tag(8).button( BTN_POS(1,4), BTN_SIZE(1,1), F("Advanced Settings"))
+        .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(CLEAN_NOZZLE))
+        .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOVE_AXIS))
+        .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(MOTORS_OFF))
+        .tag(6).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(TEMPERATURE))
+        .tag(7).button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(CHANGE_FILAMENT))
+        .tag(8).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(ADVANCED_SETTINGS))
         #ifdef PRINTCOUNTER
          .enabled(1)
         #else
          .enabled(0)
         #endif
-        .tag(9).button( BTN_POS(2,4), BTN_SIZE(1,1), F("Printer Statistics"))
-        .tag(10).button( BTN_POS(1,5), BTN_SIZE(1,1), F("About Printer"))
+        .tag(9).button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(PRINTER_STATISTICS))
+        .tag(10).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(ABOUT_PRINTER))
         .colors(action_btn)
-        .tag(1).button( BTN_POS(2,5), BTN_SIZE(1,1), F("Back"));
+        .tag(1).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACK));
       #undef GRID_COLS
       #undef GRID_ROWS
     #endif
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 ccc58b5a3c51f626941e91af415069ea1c7c8485..80e7f59cde70fd26cd397e19031f03303f3c191f 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
@@ -33,21 +33,21 @@ using namespace Theme;
 void MaxAccelerationScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0);
-  w.units(PSTR("mm/s^2"));
-  w.heading(                     PSTR("Maximum Acceleration"));
-  w.color(x_axis)  .adjuster( 2, PSTR("X:"),  getAxisMaxAcceleration_mm_s2(X) );
-  w.color(y_axis)  .adjuster( 4, PSTR("Y:"),  getAxisMaxAcceleration_mm_s2(Y) );
-  w.color(z_axis)  .adjuster( 6, PSTR("Z:"),  getAxisMaxAcceleration_mm_s2(Z) );
+  w.units(GET_TEXTF(UNITS_MM_S2));
+  w.heading(GET_TEXTF(ACCELERATION));
+  w.color(x_axis)  .adjuster( 2, GET_TEXTF(AMAX_X),  getAxisMaxAcceleration_mm_s2(X) );
+  w.color(y_axis)  .adjuster( 4, GET_TEXTF(AMAX_Y),  getAxisMaxAcceleration_mm_s2(Y) );
+  w.color(z_axis)  .adjuster( 6, GET_TEXTF(AMAX_Z),  getAxisMaxAcceleration_mm_s2(Z) );
   #if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
-    w.color(e_axis).adjuster( 8, PSTR("E:"),  getAxisMaxAcceleration_mm_s2(E0) );
+    w.color(e_axis).adjuster( 8, GET_TEXTF(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
   #elif EXTRUDERS > 1
-    w.color(e_axis).adjuster( 8, PSTR("E1:"), getAxisMaxAcceleration_mm_s2(E0) );
-    w.color(e_axis).adjuster(10, PSTR("E2:"), getAxisMaxAcceleration_mm_s2(E1) );
+    w.color(e_axis).adjuster( 8, GET_TEXTF(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
+    w.color(e_axis).adjuster(10, GET_TEXTF(AMAX_E2), getAxisMaxAcceleration_mm_s2(E1) );
     #if EXTRUDERS > 2
-    w.color(e_axis).adjuster(12, PSTR("E3:"), getAxisMaxAcceleration_mm_s2(E2) );
+    w.color(e_axis).adjuster(12, GET_TEXTF(AMAX_E3), getAxisMaxAcceleration_mm_s2(E2) );
     #endif
     #if EXTRUDERS > 3
-    w.color(e_axis).adjuster(14, PSTR("E4:"), getAxisMaxAcceleration_mm_s2(E3) );
+    w.color(e_axis).adjuster(14, GET_TEXTF(AMAX_E4), getAxisMaxAcceleration_mm_s2(E3) );
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
index e147bfe4e1bc850b2b2b7c63d72627e5f36e1d2d..719e5a308e284f95d87ecaa101146ca5d019317d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
@@ -34,21 +34,21 @@ void MaxVelocityScreen::onRedraw(draw_mode_t what) {
   using namespace ExtUI;
   widgets_t w(what);
   w.precision(0);
-  w.units(PSTR("mm/s"));
-  w.heading(                        PSTR("Maximum Velocity"));
-  w.color(x_axis)    .adjuster(  2, PSTR("X:"),  getAxisMaxFeedrate_mm_s(X) );
-  w.color(y_axis)    .adjuster(  4, PSTR("Y:"),  getAxisMaxFeedrate_mm_s(Y) );
-  w.color(z_axis)    .adjuster(  6, PSTR("Z:"),  getAxisMaxFeedrate_mm_s(Z) );
+  w.units(GET_TEXTF(UNITS_MM_S));
+  w.heading(                        GET_TEXTF(VELOCITY));
+  w.color(x_axis)    .adjuster(  2, GET_TEXTF(VMAX_X), getAxisMaxFeedrate_mm_s(X) );
+  w.color(y_axis)    .adjuster(  4, GET_TEXTF(VMAX_Y), getAxisMaxFeedrate_mm_s(Y) );
+  w.color(z_axis)    .adjuster(  6, GET_TEXTF(VMAX_Z), getAxisMaxFeedrate_mm_s(Z) );
   #if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
-    w.color(e_axis)  .adjuster(  8, PSTR("E:"),  getAxisMaxFeedrate_mm_s(E0) );
+    w.color(e_axis)  .adjuster(  8, GET_TEXTF(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
   #elif EXTRUDERS > 1
-    w.color(e_axis)  .adjuster(  8, PSTR("E1:"), getAxisMaxFeedrate_mm_s(E0) );
-    w.color(e_axis)  .adjuster( 10, PSTR("E2:"), getAxisMaxFeedrate_mm_s(E1) );
+    w.color(e_axis)  .adjuster(  8, GET_TEXTF(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
+    w.color(e_axis)  .adjuster( 10, GET_TEXTF(VMAX_E2), getAxisMaxFeedrate_mm_s(E1) );
     #if EXTRUDERS > 2
-      w.color(e_axis).adjuster( 12, PSTR("E3:"), getAxisMaxFeedrate_mm_s(E2) );
+      w.color(e_axis).adjuster( 12, GET_TEXTF(VMAX_E3), getAxisMaxFeedrate_mm_s(E2) );
     #endif
     #if EXTRUDERS > 3
-      w.color(e_axis).adjuster( 14, PSTR("E4:"), getAxisMaxFeedrate_mm_s(E3) );
+      w.color(e_axis).adjuster( 14, GET_TEXTF(VMAX_E4), getAxisMaxFeedrate_mm_s(E3) );
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
index 5a5f70576e10420228154ed180b647c06139d1fd..a2edde8b3bd5487333395199d2003dfe95b532ae 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
@@ -45,23 +45,23 @@ void MoveAxisScreen::onEntry() {
 void MoveAxisScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(1);
-  w.units(PSTR("mm"));
-  w.heading(                                PSTR("Move Axis"));
+  w.units(GET_TEXTF(UNITS_MM));
+  w.heading(                                GET_TEXTF(MOVE_AXIS));
   w.home_buttons(20);
-  w.color(Theme::x_axis  )   .adjuster(  2, PSTR("X:"),  getAxisPosition_mm(X), canMove(X));
-  w.color(Theme::y_axis  )   .adjuster(  4, PSTR("Y:"),  getAxisPosition_mm(Y), canMove(Y));
-  w.color(Theme::z_axis  )   .adjuster(  6, PSTR("Z:"),  getAxisPosition_mm(Z), canMove(Z));
+  w.color(Theme::x_axis  )   .adjuster(  2, GET_TEXTF(AXIS_X),  getAxisPosition_mm(X), canMove(X));
+  w.color(Theme::y_axis  )   .adjuster(  4, GET_TEXTF(AXIS_Y),  getAxisPosition_mm(Y), canMove(Y));
+  w.color(Theme::z_axis  )   .adjuster(  6, GET_TEXTF(AXIS_Z),  getAxisPosition_mm(Z), canMove(Z));
 
   #if EXTRUDERS == 1
-    w.color(Theme::e_axis)   .adjuster(  8, PSTR("E:"),  screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
+    w.color(Theme::e_axis)   .adjuster(  8, GET_TEXTF(AXIS_E),  screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
   #elif EXTRUDERS > 1
-    w.color(Theme::e_axis)   .adjuster(  8, PSTR("E1:"), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
-    w.color(Theme::e_axis)   .adjuster( 10, PSTR("E2:"), screen_data.MoveAxisScreen.e_rel[1], canMove(E1));
+    w.color(Theme::e_axis)   .adjuster(  8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
+    w.color(Theme::e_axis)   .adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1));
     #if EXTRUDERS > 2
-      w.color(Theme::e_axis) .adjuster( 12, PSTR("E3:"), screen_data.MoveAxisScreen.e_rel[2], canMove(E2));
+      w.color(Theme::e_axis) .adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2));
     #endif
     #if EXTRUDERS > 3
-      w.color(Theme::e_axis) .adjuster( 14, PSTR("E4:"), screen_data.MoveAxisScreen.e_rel[3], canMove(E3));
+      w.color(Theme::e_axis) .adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3));
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
index 558c1acfce10095f223f80771ea6e0f68ab08ea0..e8835ba858204b6c129716fb500a5ae02c70d6db 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
@@ -39,14 +39,14 @@ void NozzleOffsetScreen::onEntry() {
 
 void NozzleOffsetScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(2).units(PSTR("mm"));
+  w.precision(2).units(GET_TEXTF(UNITS_MM));
 
-  w.heading(                          PSTR("Nozzle Offset"));
-  w.color(Theme::x_axis).adjuster(2,  PSTR("X:"), ExtUI::getNozzleOffset_mm(X, E1));
-  w.color(Theme::y_axis).adjuster(4,  PSTR("Y:"), ExtUI::getNozzleOffset_mm(Y, E1));
-  w.color(Theme::z_axis).adjuster(6,  PSTR("Z:"), ExtUI::getNozzleOffset_mm(Z, E1));
+  w.heading(                          GET_TEXTF(TOOL_OFFSETS));
+  w.color(Theme::x_axis).adjuster(2,  GET_TEXTF(AXIS_X), ExtUI::getNozzleOffset_mm(X, E1));
+  w.color(Theme::y_axis).adjuster(4,  GET_TEXTF(AXIS_Y), ExtUI::getNozzleOffset_mm(Y, E1));
+  w.color(Theme::z_axis).adjuster(6,  GET_TEXTF(AXIS_Z), ExtUI::getNozzleOffset_mm(Z, E1));
   #if ENABLED(CALIBRATION_GCODE)
-  w.button(8, PSTR("Measure automatically"), !isPrinting());
+  w.button(8, GET_TEXTF(MEASURE_AUTOMATICALLY), !isPrinting());
   #endif
   w.increments();
 }
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
index b956c37a9c0c95e74f86f169c08cdfa6ef944783..2fe4eb38a499bd47725b14c70de13463a7b92ff4 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
@@ -44,41 +44,42 @@ void NudgeNozzleScreen::onEntry() {
 
 void NudgeNozzleScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(PSTR("mm"));
+  w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXTF(UNITS_MM));
 
-  w.heading(                          PSTR("Nudge Nozzle"));
+  w.heading(                   GET_TEXTF(NUDGE_NOZZLE));
   #if ENABLED(BABYSTEP_XY)
-  w.color(x_axis).adjuster(2,  PSTR("X:"), screen_data.NudgeNozzleScreen.rel[0] / getAxisSteps_per_mm(X));
-  w.color(y_axis).adjuster(4,  PSTR("Y:"), screen_data.NudgeNozzleScreen.rel[1] / getAxisSteps_per_mm(Y));
+  w.color(x_axis).adjuster(2,  GET_TEXTF(AXIS_X), screen_data.NudgeNozzleScreen.rel[0] / getAxisSteps_per_mm(X));
+  w.color(y_axis).adjuster(4,  GET_TEXTF(AXIS_Y), screen_data.NudgeNozzleScreen.rel[1] / getAxisSteps_per_mm(Y));
   #endif
-  w.color(z_axis).adjuster(6,  PSTR("Z:"), screen_data.NudgeNozzleScreen.rel[2] / getAxisSteps_per_mm(Z));
+  w.color(z_axis).adjuster(6,  GET_TEXTF(AXIS_Z), screen_data.NudgeNozzleScreen.rel[2] / getAxisSteps_per_mm(Z));
   w.increments();
   #if EXTRUDERS > 1
-    w.toggle  (8,  PSTR("Adjust Both Nozzles:"), PSTR("no\xFFyes"), screen_data.NudgeNozzleScreen.link_nozzles, PSTR("Yes\nNo"));
+    w.toggle  (8,  GET_TEXTF(ADJUST_BOTH_NOZZLES), screen_data.NudgeNozzleScreen.link_nozzles);
   #endif
 
   #if EXTRUDERS > 1 || HAS_BED_PROBE
-    w.toggle  (9,  PSTR("Show Offsets:"), PSTR("no\xFFyes"), screen_data.NudgeNozzleScreen.show_offsets, PSTR("Yes\nNo"));
+    w.toggle  (9,  GET_TEXTF(SHOW_OFFSETS), screen_data.NudgeNozzleScreen.show_offsets);
 
     if (screen_data.NudgeNozzleScreen.show_offsets) {
-      char str[19], num1[7];
+      char str[19];
 
       w.draw_mode(BOTH);
       w.color(other);
 
       #if HAS_BED_PROBE
-        dtostrf(getZOffset_mm(), 4, 2, num1);
-        sprintf_P(str, PSTR("%s mm"), num1);
-        w.text_field  (0,  PSTR("Z Offset"), str);
+        dtostrf(getZOffset_mm(), 4, 2, str);
+        strcat(str, " ");
+        strcat_P(str, GET_TEXT(UNITS_MM));
+        w.text_field  (0,  GET_TEXTF(ZPROBE_ZOFFSET), str);
       #endif
 
       #if EXTRUDERS > 1
-        char num2[7], num3[7];
+        char num1[7], num2[7], num3[7];
         dtostrf(getNozzleOffset_mm(X, E1), 4, 2, num1);
         dtostrf(getNozzleOffset_mm(Y, E1), 4, 2, num2);
         dtostrf(getNozzleOffset_mm(Z, E1), 4, 2, num3);
-        sprintf_P(str, PSTR("%s; %s; %s mm"), num1, num2, num3);
-        w.text_field  (0,  PSTR("Noz. Offset"), str);
+        sprintf_P(str, PSTR("%s; %s; %s %S"), num1, num2, num3, GET_TEXT(UNITS_MM));
+        w.text_field  (0, GET_TEXTF(TOOL_OFFSETS), str);
       #endif
     }
   #endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
index a93727cd8d0ad9361f22724386641695860d3344..717fea9cac2df016fbc9823a2a630c6ce14d6d7c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
@@ -29,15 +29,15 @@
 using namespace ExtUI;
 
 void RestoreFailsafeDialogBox::onRedraw(draw_mode_t) {
-  drawMessage(F("Are you sure? Customizations will be lost."));
+  drawMessage(GET_TEXTF(EEPROM_RESET_WARNING));
   drawYesNoButtons();
 }
 
 bool RestoreFailsafeDialogBox::onTouchEnd(uint8_t tag) {
   switch (tag) {
     case 1:
-      ExtUI::injectCommands_P(PSTR("M502\nM117 Factory settings restored."));
-      AlertDialogBox::show(F("Factory settings restored."));
+      ExtUI::injectCommands_P(PSTR("M502"));
+      AlertDialogBox::show(GET_TEXTF(EEPROM_RESET));
       // Remove RestoreFailsafeDialogBox from the stack
       // so the alert box doesn't return to it.
       current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
index 8a58af119c3f0a7c40507fd101b1f76e58ff1628..b29c171cf75dfac2f3a86e01536f2534626d6a06 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
@@ -31,7 +31,7 @@ using namespace ExtUI;
 bool SaveSettingsDialogBox::needs_save = false;
 
 void SaveSettingsDialogBox::onRedraw(draw_mode_t) {
-  drawMessage(F("Do you wish to save these settings as defaults?"));
+  drawMessage(GET_TEXTF(EEPROM_SAVE_PROMPT));
   drawYesNoButtons();
 }
 
@@ -40,7 +40,7 @@ bool SaveSettingsDialogBox::onTouchEnd(uint8_t tag) {
   switch (tag) {
     case 1:
       injectCommands_P(PSTR("M500"));
-      AlertDialogBox::show(F("Settings saved!"));
+      AlertDialogBox::show(GET_TEXTF(EEPROM_SAVED));
       // Remove SaveSettingsDialogBox from the stack
       // so the alert box doesn't return to me.
       current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
index c4f456c3e49e74fcfb592f971345363fcffdbc58..eb8644d5cc02a8a4cb11d1cdae0f2507072773ec 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
@@ -31,6 +31,9 @@ screen_data_t screen_data;
 
 SCREEN_TABLE {
   DECL_SCREEN(BootScreen),
+  #if ENABLED(TOUCH_UI_LANGUAGE_MENU)
+    DECL_SCREEN(LanguageMenu),
+  #endif
   DECL_SCREEN(TouchCalibrationScreen),
   DECL_SCREEN(StatusScreen),
   DECL_SCREEN(MainMenu),
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 6d50509f6fa0b4d7993a9388dc70da6d87e990e0..f7552d200e191dea4229fc836965ef810370dd3a 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
@@ -23,6 +23,7 @@
 #pragma once
 
 #include "../ftdi_eve_lib/ftdi_eve_lib.h"
+#include "../language/languages.h"
 #include "../theme/theme.h"
 
 #define ROUND(val) uint16_t((val)+0.5)
@@ -219,6 +220,7 @@ class StatusScreen : public BaseScreen, public CachedScreen<STATUS_SCREEN_CACHE,
     static void draw_status_message(draw_mode_t, const char * const);
 
   public:
+    static void loadBitmaps();
     static void setStatusMessage(const char *);
     static void setStatusMessage(progmem_str);
     static void onRedraw(draw_mode_t);
@@ -350,7 +352,7 @@ class BaseNumericAdjustmentScreen : public BaseScreen {
         uint8_t     _line;
         uint32_t    _color;
         uint8_t     _decimals;
-        const char *_units;
+        progmem_str _units;
 
       protected:
         void _draw_increment_btn(uint8_t line, const uint8_t tag);
@@ -359,19 +361,19 @@ class BaseNumericAdjustmentScreen : public BaseScreen {
         widgets_t(draw_mode_t);
 
         widgets_t &color(uint32_t color)       {_color = color; return *this;}
-        widgets_t &units(const char *units)    {_units = units; return *this;}
+        widgets_t &units(progmem_str units)    {_units = units; return *this;}
         widgets_t &draw_mode(draw_mode_t what) {_what  = what;  return *this;}
         widgets_t &precision(uint8_t decimals, precision_default_t = DEFAULT_HIGHEST);
 
-        void heading       (const char *label);
-        void adjuster_sram_val (uint8_t tag,  const char *label, const char *value,  bool is_enabled = true);
-        void adjuster          (uint8_t tag,  const char *label, const char *value,  bool is_enabled = true);
-        void adjuster          (uint8_t tag,  const char *label, float value=0,      bool is_enabled = true);
-        void button            (uint8_t tag,  const char *label,                     bool is_enabled = true);
-        void text_field        (uint8_t tag,  const char *label, const char *value,  bool is_enabled = true);
-        void two_buttons       (uint8_t tag1, const char *label1,
-                                uint8_t tag2, const char *label2,                    bool is_enabled = true);
-        void toggle            (uint8_t tag,  const char *label, const char *text, bool value, bool is_enabled = true);
+        void heading           (progmem_str label);
+        void adjuster_sram_val (uint8_t tag,  progmem_str label, const char *value,  bool is_enabled = true);
+        void adjuster          (uint8_t tag,  progmem_str label, const char *value,  bool is_enabled = true);
+        void adjuster          (uint8_t tag,  progmem_str label, float value=0,      bool is_enabled = true);
+        void button            (uint8_t tag,  progmem_str label,                     bool is_enabled = true);
+        void text_field        (uint8_t tag,  progmem_str label, const char *value,  bool is_enabled = true);
+        void two_buttons       (uint8_t tag1, progmem_str label1,
+                                uint8_t tag2, progmem_str label2,                    bool is_enabled = true);
+        void toggle            (uint8_t tag,  progmem_str label,                     bool value, bool is_enabled = true);
         void home_buttons      (uint8_t tag);
         void increments        ();
     };
@@ -710,3 +712,11 @@ class MediaPlayerScreen : public BaseScreen, public UncachedScreen {
 
     static void playStream(void *obj, media_streamer_func_t*);
 };
+
+#if ENABLED(TOUCH_UI_LANGUAGE_MENU)
+  class LanguageMenu : public BaseScreen, public UncachedScreen {
+    public:
+      static void onRedraw(draw_mode_t);
+      static bool onTouchEnd(uint8_t tag);
+  };
+#endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
index 971bd5e5ba2091d8cded26248db186716fdedd69..1beae4df3ac8c1cb595971aef52d58d21fb674ed 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
@@ -46,7 +46,7 @@ void SpinnerDialogBox::hide() {
 }
 
 void SpinnerDialogBox::enqueueAndWait_P(const progmem_str commands) {
-  enqueueAndWait_P(F("Please wait..."), commands);
+  enqueueAndWait_P(GET_TEXTF(PLEASE_WAIT), commands);
 }
 
 void SpinnerDialogBox::enqueueAndWait_P(const progmem_str message, const progmem_str commands) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
index 18a3a4da60e8868987c87326c7030fa096a29d12..e468159d2cb657b9a9e72fc99794eb1fe175175d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
@@ -44,14 +44,14 @@ void StatisticsScreen::onRedraw(draw_mode_t what) {
        .tag(0)
 
        .font(Theme::font_medium)
-       .text(BTN_POS(1,1), BTN_SIZE(4,1), F("Printer Statistics"))
+       .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(PRINTER_STATISTICS))
        .font(Theme::font_small)
        .tag(0)
-       .text(BTN_POS(1,2), BTN_SIZE(2,1), F("Total Prints:"),     OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,3), BTN_SIZE(2,1), F("Finished Prints:"),  OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,4), BTN_SIZE(2,1), F("Total Print Time:"), OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,5), BTN_SIZE(2,1), F("Longest Print:"),    OPT_RIGHTX | OPT_CENTERY)
-       .text(BTN_POS(1,6), BTN_SIZE(2,1), F("Filament Used:"),    OPT_RIGHTX | OPT_CENTERY);
+       .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_COUNT),      OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(INFO_COMPLETED_PRINTS), OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_TIME),       OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_LONGEST),    OPT_RIGHTX | OPT_CENTERY)
+       .text(BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_FILAMENT),   OPT_RIGHTX | OPT_CENTERY);
     // Don't chain the following, it causes strange issues with evaluation ordering!
     cmd.text(BTN_POS(3,2), BTN_SIZE(2,1), getTotalPrints_str(buffer));
     cmd.text(BTN_POS(3,3), BTN_SIZE(2,1), getFinishedPrints_str(buffer));
@@ -63,7 +63,7 @@ void StatisticsScreen::onRedraw(draw_mode_t what) {
   if (what & FOREGROUND) {
     cmd.font(Theme::font_medium)
        .colors(action_btn)
-       .tag(1).button(BTN_POS(1,7), BTN_SIZE(4,1), F("Back"));
+       .tag(1).button(BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXTF(BACK));
   }
 }
 
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
index c5dfcfebdd0693a9fec28efd068d95044342443e..597173ab7f8c01f5e6bc38744806c6a43ddfda5f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
@@ -22,14 +22,14 @@
 
 #include "../config.h"
 
-#if ENABLED(LULZBOT_TOUCH_UI) && !defined(LULZBOT_USE_BIOPRINTER_UI)
+#if ENABLED(LULZBOT_TOUCH_UI) && DISABLED(LULZBOT_USE_BIOPRINTER_UI)
 
 #include "screens.h"
 #include "screen_data.h"
 
 #include "../archim2-flash/flash_storage.h"
 
-#if ENABLED(SDSUPPORT) && defined(LULZBOT_MANUAL_USB_STARTUP)
+#if BOTH(SDSUPPORT, LULZBOT_MANUAL_USB_STARTUP)
   #include "../../../../../sd/cardreader.h"
 #endif
 
@@ -57,9 +57,9 @@ void StatusScreen::draw_axis_position(draw_mode_t what) {
                          .button( BTN_POS(1,7), BTN_SIZE(2,1), F(""), OPT_FLAT)
 
         .font(Theme::font_small)
-                         .text  ( BTN_POS(1,5), BTN_SIZE(1,1), F("X"))
-                         .text  ( BTN_POS(1,6), BTN_SIZE(1,1), F("Y"))
-                         .text  ( BTN_POS(1,7), BTN_SIZE(1,1), F("Z"))
+                         .text  ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_X))
+                         .text  ( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(AXIS_Y))
+                         .text  ( BTN_POS(1,7), BTN_SIZE(1,1), GET_TEXTF(AXIS_Z))
 
         .font(Theme::font_medium)
         .fgcolor(Theme::x_axis) .button( BTN_POS(2,5), BTN_SIZE(2,1), F(""), OPT_FLAT)
@@ -73,9 +73,9 @@ void StatusScreen::draw_axis_position(draw_mode_t what) {
                          .button( BTN_POS(3,5), BTN_SIZE(1,2), F(""),  OPT_FLAT)
 
         .font(Theme::font_small)
-                         .text  ( BTN_POS(1,5), BTN_SIZE(1,1), F("X"))
-                         .text  ( BTN_POS(2,5), BTN_SIZE(1,1), F("Y"))
-                         .text  ( BTN_POS(3,5), BTN_SIZE(1,1), F("Z"))
+                         .text  ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_X))
+                         .text  ( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_Y))
+                         .text  ( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_Z))
                          .font(Theme::font_medium)
 
         .fgcolor(Theme::x_axis) .button( BTN_POS(1,6), BTN_SIZE(1,1), F(""), OPT_FLAT)
@@ -92,21 +92,24 @@ void StatusScreen::draw_axis_position(draw_mode_t what) {
 
     if (isAxisPositionKnown(X)) {
       dtostrf(getAxisPosition_mm(X), 5, 1, x_str);
-      strcat_P(x_str, PSTR(" mm"));
+      strcat_P(x_str, " ");
+      strcat_P(x_str, GET_TEXT(UNITS_MM));
     } else {
       strcpy_P(x_str, PSTR("?"));
     }
 
     if (isAxisPositionKnown(Y)) {
       dtostrf(getAxisPosition_mm(Y), 5, 1, y_str);
-      strcat_P(y_str, PSTR(" mm"));
+      strcat_P(y_str, " ");
+      strcat_P(y_str, GET_TEXT(UNITS_MM));
     } else {
       strcpy_P(y_str, PSTR("?"));
     }
 
     if (isAxisPositionKnown(Z)) {
       dtostrf(getAxisPosition_mm(Z), 5, 1, z_str);
-      strcat_P(z_str, PSTR(" mm"));
+      strcat_P(z_str, " ");
+      strcat_P(z_str, GET_TEXT(UNITS_MM));
     } else {
       strcpy_P(z_str, PSTR("?"));
     }
@@ -182,10 +185,10 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
 
   if (what & FOREGROUND) {
     using namespace ExtUI;
-    char e0_str[15];
-    char e1_str[15];
-    char bed_str[15];
-    char fan_str[15];
+    char e0_str[20];
+    char e1_str[20];
+    char bed_str[20];
+    char fan_str[20];
 
     sprintf_P(
       fan_str,
@@ -193,35 +196,21 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
       int8_t(getActualFan_percent(FAN0))
     );
 
-    #if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
-      const char *idle = PSTR(u8"%3d°C / idle");
-      const char *not_idle = PSTR(u8"%3d / %3d°C");
-    #else
-      const char *idle = PSTR("%3d C / idle");
-      const char *not_idle = PSTR("%3d / %3d C");
-    #endif
+    if (isHeaterIdle(BED))
+      sprintf_P(bed_str, PSTR("%3d%S / %S"), ROUND(getActualTemp_celsius(BED)), GET_TEXT(UNITS_C), GET_TEXT(TEMP_IDLE));
+    else
+      sprintf_P(bed_str, PSTR("%3d / %3d%S"), ROUND(getActualTemp_celsius(BED)), ROUND(getTargetTemp_celsius(BED)), GET_TEXT(UNITS_C));
 
-    sprintf_P(
-      bed_str,
-      isHeaterIdle(BED) ? idle : not_idle,
-      ROUND(getActualTemp_celsius(BED)),
-      ROUND(getTargetTemp_celsius(BED))
-    );
-
-    sprintf_P(
-      e0_str,
-      isHeaterIdle(H0) ? idle : not_idle,
-      ROUND(getActualTemp_celsius(H0)),
-      ROUND(getTargetTemp_celsius(H0))
-    );
+    if (isHeaterIdle(H0))
+      sprintf_P(e0_str, PSTR("%3d%S / %S"), ROUND(getActualTemp_celsius(H0)), GET_TEXT(UNITS_C), GET_TEXT(TEMP_IDLE));
+    else
+      sprintf_P(e0_str, PSTR("%3d / %3d%S"), ROUND(getActualTemp_celsius(H0)), ROUND(getTargetTemp_celsius(H0)), GET_TEXT(UNITS_C));
 
     #if EXTRUDERS == 2
-      sprintf_P(
-        e1_str,
-        isHeaterIdle(H1) ? idle : not_idle,
-        ROUND(getActualTemp_celsius(H1)),
-        ROUND(getTargetTemp_celsius(H1))
-      );
+      if (isHeaterIdle(H1))
+        sprintf_P(e1_str, PSTR("%3d%S / %S"), ROUND(getActualTemp_celsius(H1)), PSTR(GET_TEXT(UNITS_C)), GET_TEXT(TEMP_IDLE));
+      else
+        sprintf_P(e1_str, PSTR("%3d / %3d%S"), ROUND(getActualTemp_celsius(H1)), ROUND(getTargetTemp_celsius(H1)), GET_TEXT(UNITS_C));
     #else
       strcpy_P(
         e1_str,
@@ -290,7 +279,7 @@ void StatusScreen::draw_interaction_buttons(draw_mode_t what) {
     CommandProcessor cmd;
     cmd.colors(normal_btn)
        .font(Theme::font_medium)
-    #if ENABLED(USB_FLASH_DRIVE_SUPPORT) && defined(LULZBOT_MANUAL_USB_STARTUP)
+    #if BOTH(SDSUPPORT, LULZBOT_MANUAL_USB_STARTUP)
       .enabled(!Sd2Card::ready() || has_media)
     #else
       .enabled(has_media)
@@ -301,22 +290,17 @@ void StatusScreen::draw_interaction_buttons(draw_mode_t what) {
       #else
          .tag(3).button( BTN_POS(1,7), BTN_SIZE(2,2),
       #endif
-      isPrintingFromMedia() ? F("Printing") :
-      #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
-        #ifdef LULZBOT_MANUAL_USB_STARTUP
-        (Sd2Card::ready() ? F("USB Drive") : F("Enable USB"))
-        #else
-        F("USB Drive")
-        #endif
-        )
+      isPrintingFromMedia() ? GET_TEXTF(PRINTING) :
+      #if BOTH(SDSUPPORT, LULZBOT_MANUAL_USB_STARTUP)
+      (!Sd2Card::ready() ? GET_TEXTF(ENABLE_MEDIA) :
       #else
-        F("SD Card"))
+      GET_TEXTF(MEDIA))
       #endif
       .colors(!has_media ? action_btn : normal_btn)
       #ifdef TOUCH_UI_PORTRAIT
-       .tag(4).button( BTN_POS(3,8), BTN_SIZE(2,1), F("MENU"));
+       .tag(4).button( BTN_POS(3,8), BTN_SIZE(2,1), GET_TEXTF(MENU));
       #else
-       .tag(4).button( BTN_POS(3,7), BTN_SIZE(2,2), F("MENU"));
+       .tag(4).button( BTN_POS(3,7), BTN_SIZE(2,2), GET_TEXTF(MENU));
     #endif
   }
   #undef  GRID_COLS
@@ -423,9 +407,9 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
 
   switch (tag) {
     case 3:
-      #if ENABLED(USB_FLASH_DRIVE_SUPPORT) && defined(LULZBOT_MANUAL_USB_STARTUP)
+      #if BOTH(SDSUPPORT, LULZBOT_MANUAL_USB_STARTUP)
       if (!Sd2Card::ready()) {
-        StatusScreen::setStatusMessage(F("Insert USB drive..."));
+        StatusScreen::setStatusMessage(GET_TEXTF(INSERT_MEDIA));
         Sd2Card::usbStartup();
       } else {
         GOTO_SCREEN(FilesScreen);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
index 651bfa8d5c029e4994c457022fd461ca8857af19..2a7a79baece6c906e6ee0e8000750823ac3eb12d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
@@ -33,22 +33,22 @@ using namespace Theme;
 void StepperBumpSensitivityScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0, BaseNumericAdjustmentScreen::DEFAULT_LOWEST);
-  w.heading(                     PSTR("TMC Bump Sensitivity"));
-  w.color(x_axis)  .adjuster( 2, PSTR("X:"),  getTMCBumpSensitivity(X),
+  w.heading(                     GET_TEXTF(HOME_SENSE));
+  w.color(x_axis)  .adjuster( 2, GET_TEXTF(AXIS_X),  getTMCBumpSensitivity(X),
   #if X_SENSORLESS && AXIS_HAS_STALLGUARD(X)
     true
   #else
     false
   #endif
   );
-  w.color(y_axis)  .adjuster( 4, PSTR("Y:"),  getTMCBumpSensitivity(Y),
+  w.color(y_axis)  .adjuster( 4, GET_TEXTF(AXIS_Y),  getTMCBumpSensitivity(Y),
    #if Y_SENSORLESS && AXIS_HAS_STALLGUARD(Y)
      true
    #else
      false
    #endif
   );
-  w.color(z_axis)  .adjuster( 6, PSTR("Z:"),  getTMCBumpSensitivity(Z),
+  w.color(z_axis)  .adjuster( 6, GET_TEXTF(AXIS_Z),  getTMCBumpSensitivity(Z),
    #if Z_SENSORLESS && AXIS_HAS_STALLGUARD(Z)
      true
    #else
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
index edeed6825145feaa22bb5803c2258fa375466b95..48d542bb5927c2e7fbe3b689636976b66ef09f7b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
@@ -33,21 +33,21 @@ using namespace Theme;
 void StepperCurrentScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0);
-  w.units(PSTR("mA"));
-  w.heading(                     PSTR("Stepper Current"));
-  w.color(x_axis)  .adjuster( 2, PSTR("X:"),  getAxisCurrent_mA(X) );
-  w.color(y_axis)  .adjuster( 4, PSTR("Y:"),  getAxisCurrent_mA(Y) );
-  w.color(z_axis)  .adjuster( 6, PSTR("Z:"),  getAxisCurrent_mA(Z) );
+  w.units(GET_TEXTF(UNITS_MILLIAMP));
+  w.heading(                     GET_TEXTF(MOTOR_CURRENT));
+  w.color(x_axis)  .adjuster( 2, GET_TEXTF(AXIS_X),  getAxisCurrent_mA(X) );
+  w.color(y_axis)  .adjuster( 4, GET_TEXTF(AXIS_Y),  getAxisCurrent_mA(Y) );
+  w.color(z_axis)  .adjuster( 6, GET_TEXTF(AXIS_Z),  getAxisCurrent_mA(Z) );
   #if EXTRUDERS == 1
-    w.color(e_axis).adjuster( 8, PSTR("E:"),  getAxisCurrent_mA(E0) );
+    w.color(e_axis).adjuster( 8, GET_TEXTF(AXIS_E),  getAxisCurrent_mA(E0) );
   #elif EXTRUDERS > 1
-    w.color(e_axis).adjuster( 8, PSTR("E1:"), getAxisCurrent_mA(E0) );
-    w.color(e_axis).adjuster(10, PSTR("E2:"), getAxisCurrent_mA(E1) );
+    w.color(e_axis).adjuster( 8, GET_TEXTF(AXIS_E1), getAxisCurrent_mA(E0) );
+    w.color(e_axis).adjuster(10, GET_TEXTF(AXIS_E2), getAxisCurrent_mA(E1) );
     #if EXTRUDERS > 2
-    w.color(e_axis).adjuster(12, PSTR("E3:"), getAxisCurrent_mA(E2) );
+    w.color(e_axis).adjuster(12, GET_TEXTF(AXIS_E3), getAxisCurrent_mA(E2) );
     #endif
     #if EXTRUDERS > 3
-    w.color(e_axis).adjuster(14, PSTR("E4:"), getAxisCurrent_mA(E3) );
+    w.color(e_axis).adjuster(14, GET_TEXTF(AXIS_E4), getAxisCurrent_mA(E3) );
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
index f368b3b4258a987a18c9023dec33714a961014e5..3f69e25559d2b295062951541faca86c2889a335 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
@@ -33,21 +33,21 @@ using namespace Theme;
 void StepsScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
   w.precision(0);
-  w.units(PSTR("st/mm"));
-  w.heading(                               PSTR("Steps/mm"));
-  w.color(x_axis)     .adjuster( 2, PSTR("X:"),  getAxisSteps_per_mm(X) );
-  w.color(y_axis)     .adjuster( 4, PSTR("Y:"),  getAxisSteps_per_mm(Y) );
-  w.color(z_axis)     .adjuster( 6, PSTR("Z:"),  getAxisSteps_per_mm(Z) );
+  w.units(GET_TEXTF(UNITS_STEP_MM));
+  w.heading(                        GET_TEXTF(STEPS_PER_MM));
+  w.color(x_axis)     .adjuster( 2, GET_TEXTF(AXIS_X),  getAxisSteps_per_mm(X) );
+  w.color(y_axis)     .adjuster( 4, GET_TEXTF(AXIS_Y),  getAxisSteps_per_mm(Y) );
+  w.color(z_axis)     .adjuster( 6, GET_TEXTF(AXIS_Z),  getAxisSteps_per_mm(Z) );
   #if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
-    w.color(e_axis)   .adjuster( 8, PSTR("E:"),  getAxisSteps_per_mm(E0) );
+    w.color(e_axis)   .adjuster( 8, GET_TEXTF(AXIS_E),  getAxisSteps_per_mm(E0) );
   #elif EXTRUDERS > 1
-    w.color(e_axis)   .adjuster( 8, PSTR("E1:"), getAxisSteps_per_mm(E0) );
-    w.color(e_axis)   .adjuster(10, PSTR("E2:"), getAxisSteps_per_mm(E1) );
+    w.color(e_axis)   .adjuster( 8, GET_TEXTF(AXIS_E1), getAxisSteps_per_mm(E0) );
+    w.color(e_axis)   .adjuster(10, GET_TEXTF(AXIS_E2), getAxisSteps_per_mm(E1) );
     #if EXTRUDERS > 2
-      w.color(e_axis) .adjuster(12, PSTR("E3:"), getAxisSteps_per_mm(E2) );
+      w.color(e_axis) .adjuster(12, GET_TEXTF(AXIS_E3), getAxisSteps_per_mm(E2) );
     #endif
     #if EXTRUDERS > 3
-      w.color(e_axis) .adjuster(14, PSTR("E4:"), getAxisSteps_per_mm(E3) );
+      w.color(e_axis) .adjuster(14, GET_TEXTF(AXIS_E4), getAxisSteps_per_mm(E3) );
     #endif
   #endif
   w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
index 841e1d94031c75681fb610ab1d749f257f3798d7..aeaecb4096c9f2a87ac905721eddf9ae56b84de9 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
@@ -32,36 +32,29 @@ using namespace ExtUI;
 
 void TemperatureScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(0).color(temp).units(
-    PSTR(
-    #if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
-      u8"°C"
-    #else
-      "C"
-    #endif
-  ));
-  w.heading(         PSTR("Temperature:"));
-  w.button(30, PSTR("Cooldown (All Off)"));
+  w.precision(0).color(temp).units(GET_TEXTF(UNITS_C));
+  w.heading(GET_TEXTF(TEMPERATURE));
+  w.button(30, GET_TEXTF(COOLDOWN));
   #ifndef LULZBOT_DISABLE_TOOLHEAD_HEATER
     #if HOTENDS == 1
-      w.adjuster(   2, PSTR("Hot End:"),   getTargetTemp_celsius(E0));
+      w.adjuster(   2, GET_TEXTF(HOTEND),   getTargetTemp_celsius(E0));
     #else
-      w.adjuster(   2, PSTR("Hot End 1:"), getTargetTemp_celsius(E0));
-      w.adjuster(   4, PSTR("Hot End 2:"), getTargetTemp_celsius(E1));
+      w.adjuster(   2, GET_TEXTF(HOTEND1), getTargetTemp_celsius(E0));
+      w.adjuster(   4, GET_TEXTF(HOTEND2), getTargetTemp_celsius(E1));
       #if HOTENDS > 2
-        w.adjuster( 6, PSTR("Hot End 3:"), getTargetTemp_celsius(E2));
+        w.adjuster( 6, GET_TEXTF(HOTEND3), getTargetTemp_celsius(E2));
       #endif
       #if HOTENDS > 3
-        w.adjuster( 8, PSTR("Hot End 4:"), getTargetTemp_celsius(E3));
+        w.adjuster( 8, GET_TEXTF(HOTEND4), getTargetTemp_celsius(E3));
       #endif
     #endif
   #endif
   #if HAS_HEATED_BED
-    w.adjuster(    20, PSTR("Bed:"),     getTargetTemp_celsius(BED));
+    w.adjuster(    20, GET_TEXTF(BED),     getTargetTemp_celsius(BED));
   #endif
   #if FAN_COUNT > 0
-    w.color(fan_speed).units(PSTR("%"));
-    w.adjuster(    10, PSTR("Fan Speed:"), getTargetFan_percent(FAN0));
+    w.color(fan_speed).units(GET_TEXTF(UNITS_PERCENT));
+    w.adjuster(    10, GET_TEXTF(FAN_SPEED), getTargetFan_percent(FAN0));
   #endif
   w.increments();
 }
@@ -88,8 +81,8 @@ bool TemperatureScreen::onTouchHeld(uint8_t tag) {
     case  9: UI_INCREMENT(TargetTemp_celsius, E3); break;
     #endif
     #if FAN_COUNT > 0
-    case 10: UI_DECREMENT(TargetFan_percent, FAN0);      break;
-    case 11: UI_INCREMENT(TargetFan_percent, FAN0);      break;
+    case 10: UI_DECREMENT(TargetFan_percent, FAN0); break;
+    case 11: UI_INCREMENT(TargetFan_percent, FAN0); break;
     #endif
     case 30:
       setTargetTemp_celsius(0,E0);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
index 0adf2885b0e717eca25a74686f52af3b3ee3d7aa..2e513d320c62857341d91e8944b0395f4da9c936 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
@@ -44,22 +44,9 @@ void TouchCalibrationScreen::onEntry() {
     cmd.cmd(CMD_DLSTART)
        .cmd(CLEAR_COLOR_RGB(bg_color))
        .cmd(CLEAR(true,true,true))
-       .cmd(COLOR_RGB(bg_text_enabled))
-    #ifdef TOUCH_UI_PORTRAIT
-       .font(font_large)
-       .text  ( BTN_POS(1,8), BTN_SIZE(4,1), F("Release to begin"))
-       .text  ( BTN_POS(1,9), BTN_SIZE(4,1), F("screen calibration"))
-    #else
-       .font(
-        #ifdef TOUCH_UI_800x480
-          font_large
-        #else
-          font_medium
-        #endif
-        )
-       .text  ( BTN_POS(1,1), BTN_SIZE(4,16), F("Release to calibrate"))
-    #endif
-       .cmd(DL::DL_DISPLAY)
+       .cmd(COLOR_RGB(bg_text_enabled));
+    draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXTF(TOUCH_CALIBRATION_START), OPT_CENTER, font_large);
+    cmd.cmd(DL::DL_DISPLAY)
        .cmd(CMD_SWAP)
        .execute();
 
@@ -88,23 +75,10 @@ void TouchCalibrationScreen::onRedraw(draw_mode_t) {
   CommandProcessor cmd;
   cmd.cmd(CLEAR_COLOR_RGB(bg_color))
      .cmd(CLEAR(true,true,true))
-     .cmd(COLOR_RGB(bg_text_enabled))
-
-  #ifdef TOUCH_UI_PORTRAIT
-     .font(font_large)
-     .text  ( BTN_POS(1,8), BTN_SIZE(4,1), F("Touch the dots"))
-     .text  ( BTN_POS(1,9), BTN_SIZE(4,1), F("to calibrate"))
-  #else
-     .font(
-       #ifdef TOUCH_UI_800x480
-         font_large
-       #else
-         font_medium
-       #endif
-     )
-     .text  ( BTN_POS(1,1), BTN_SIZE(4,16), F("Touch the dots to calibrate"))
-  #endif
-     .cmd(CMD_CALIBRATE);
+     .cmd(COLOR_RGB(bg_text_enabled));
+
+  draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXTF(TOUCH_CALIBRATION_PROMPT), OPT_CENTER, font_large);
+  cmd.cmd(CMD_CALIBRATE);
 }
 
 void TouchCalibrationScreen::onIdle() {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
index 08f1d67aa24410fd8b24cb57faa222711530599e..416a0146fef7346d96907382e4a80c4ae95ade55 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
@@ -52,79 +52,79 @@ void TuneMenu::onRedraw(draw_mode_t what) {
     cmd.colors(normal_btn)
        .font(font_medium)
     #ifdef TOUCH_UI_PORTRAIT
-       .tag(2).enabled(1)      .button( BTN_POS(1,1), BTN_SIZE(2,1), F("Temperature"))
-       .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(2,1), F("Change Filament"))
-        #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
+       .tag(2).enabled(1)      .button( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(TEMPERATURE))
+       .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(CHANGE_FILAMENT))
+       #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
           .enabled(1)
         #else
           .enabled(0)
         #endif
-       .tag(9).button( BTN_POS(1,3), BTN_SIZE(2,1), F("Filament Options"))
+       .tag(9).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(FILAMENT))
       #if ENABLED(BABYSTEPPING)
-       .tag(4).enabled(1)      .button( BTN_POS(1,4), BTN_SIZE(2,1), F("Nudge Nozzle"))
+       .tag(4).enabled(1)      .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE))
       #else
         #if HAS_BED_PROBE
           .enabled(1)
         #else
           .enabled(0)
         #endif
-       .tag(4)                 .button( BTN_POS(1,4), BTN_SIZE(2,1), F("Adjust Z-Offset"))
+       .tag(4)                 .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(ZPROBE_ZOFFSET))
       #endif
-       .tag(5).enabled(1)      .button( BTN_POS(1,5), BTN_SIZE(2,1), F("Print Speed"))
+       .tag(5).enabled(1)      .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(PRINT_SPEED))
        .tag(isPrintingFromMediaPaused() ? 7 : 6)
       #if ENABLED(SDSUPPORT)
         .enabled(isPrintingFromMedia())
       #else
         .enabled(0)
       #endif
-        .button( BTN_POS(1,6), BTN_SIZE(2,1), isPrintingFromMediaPaused() ? F("Resume Print") : F("Pause Print"))
+        .button( BTN_POS(1,6), BTN_SIZE(2,1), isPrintingFromMediaPaused() ? GET_TEXTF(RESUME_PRINT) : GET_TEXTF(PAUSE_PRINT))
       #if ENABLED(SDSUPPORT)
         .enabled(isPrintingFromMedia())
       #else
         .enabled(0)
       #endif
-      .tag(8)             .button( BTN_POS(1,7), BTN_SIZE(2,1), F("Cancel Print"))
+      .tag(8)             .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(STOP_PRINT))
       .tag(1).colors(action_btn)
-                          .button( BTN_POS(1,8), BTN_SIZE(2,1), F("Back"));
+                          .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
     #else // TOUCH_UI_PORTRAIT
-       .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(1,1), F("Temperature"))
-       .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(1,1), F("Change Filament"))
+       .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(TEMPERATURE))
+       .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(CHANGE_FILAMENT))
       #if ENABLED(BABYSTEPPING)
        .enabled(1)
       #else
        .enabled(0)
       #endif
         #if ENABLED(BABYSTEPPING)
-          .tag(4)         .button( BTN_POS(2,1), BTN_SIZE(1,1), F("Nudge Nozzle"))
+          .tag(4)         .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(NUDGE_NOZZLE))
         #else
           #if HAS_BED_PROBE
             .enabled(1)
           #else
             .enabled(0)
           #endif
-          .tag(4)         .button( BTN_POS(1,4), BTN_SIZE(2,1), F("Adjust Z-Offset"))
+          .tag(4)         .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(ZPROBE_ZOFFSET))
         #endif
-       .tag(5).enabled(1) .button( BTN_POS(2,2), BTN_SIZE(1,1), F("Print Speed"))
+       .tag(5).enabled(1) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(PRINT_SPEED))
        .tag(isPrintingFromMediaPaused() ? 7 : 6)
       #if ENABLED(SDSUPPORT)
         .enabled(isPrintingFromMedia())
       #else
         .enabled(0)
       #endif
-                          .button( BTN_POS(1,3), BTN_SIZE(1,1), isPrintingFromMediaPaused() ? F("Resume Print") : F("Pause Print"))
+                          .button( BTN_POS(1,3), BTN_SIZE(1,1), isPrintingFromMediaPaused() ? GET_TEXTF(RESUME_PRINT) : GET_TEXTF(PAUSE_PRINT))
       #if ENABLED(SDSUPPORT)
         .enabled(isPrintingFromMedia())
       #else
         .enabled(0)
       #endif
-       .tag(8).           button( BTN_POS(2,3), BTN_SIZE(1,1), F("Cancel Print"))
-        #if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
+       .tag(8).           button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(STOP_PRINT))
+       #if ENABLED(LIN_ADVANCE) || ENABLED(FILAMENT_RUNOUT_SENSOR)
           .enabled(1)
         #else
           .enabled(0)
         #endif
-       .tag(9).button( BTN_POS(1,4), BTN_SIZE(1,1), F("Filament Options"))
-       .tag(1).colors(action_btn) .button( BTN_POS(2,4), BTN_SIZE(1,1), F("Back"));
+       .tag(9).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
+       .tag(1).colors(action_btn) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(BACK));
     #endif
   }
   #undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
index 5b26bb5394a7a25c3a31ebda2182d193377a4242..32a54c09bf1f016f8265aa096b9f7621a2eba68e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
@@ -32,10 +32,10 @@ using namespace Theme;
 
 void ZOffsetScreen::onRedraw(draw_mode_t what) {
   widgets_t w(what);
-  w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(PSTR("mm"));
+  w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXTF(UNITS_MM));
 
-  w.heading(                  PSTR("Z Offset"));
-  w.color(z_axis).adjuster(4, PSTR("Z Offset:"), getZOffset_mm());
+  w.heading(                  GET_TEXTF(ZPROBE_ZOFFSET));
+  w.color(z_axis).adjuster(4, GET_TEXTF(ZPROBE_ZOFFSET), getZOffset_mm());
   w.increments();
 }
 
diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h
index 0ba59bdb68d4b1142914bce29a59ddfc79137613..35442401ba0e94faeeff3d6baf5000e39b0a399c 100644
--- a/config/default/Configuration_adv.h
+++ b/config/default/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
index 6277477534aea0df077253891ac42ee8f40ce156..3922a101cdc50195b9311d4eda0a35343c28ef53 100644
--- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
+++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
index aa729faaa4e7f85e9db70ef819f8249fd0fab331..6c946432c01b05f6e2e6fef2012434b62a32147f 100644
--- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h	
+++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
index 14481395b5d724b8bc0cc10425d2a97ca0facc2d..ede80f46e3dcf249171d5c1e63606bcc175371d7 100644
--- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h	
+++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h
index 01709226baf31604662b9e2afc6150cd7400b077..0035ed653e834fb312587844626feca215989a0f 100644
--- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h
+++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
index bdf8bf55cee851809cc15266ae6a721538a596dc..c6d23307ce97866b62c1b0344ea52d1a203b5595 100644
--- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
+++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
@@ -1215,6 +1215,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h
index cf47d26a86c8fec2f1eb64f0d351073a0c9e44ea..13988ef7d8ac457dbd712604bd86a3d086c4ce03 100644
--- a/config/examples/Alfawise/U20/Configuration_adv.h
+++ b/config/examples/Alfawise/U20/Configuration_adv.h
@@ -1214,6 +1214,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
index fd301b694268525578fb0a47e4bfb67586dca7dc..6ab3085f0e4a45cfecc94cf276f60da26935c6a1 100644
--- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h
+++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h
index eff097caaf2c71bae857c11b80361ae10032c29f..6e09e109ebd64ae7f7312bb4b19ef6a052391877 100644
--- a/config/examples/Anet/A2/Configuration_adv.h
+++ b/config/examples/Anet/A2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h
index eff097caaf2c71bae857c11b80361ae10032c29f..6e09e109ebd64ae7f7312bb4b19ef6a052391877 100644
--- a/config/examples/Anet/A2plus/Configuration_adv.h
+++ b/config/examples/Anet/A2plus/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h
index 84d89395cdac5f3c3204eba58ebefa135eba5c4a..837ec895373fbfaf7d19e043d5d9f2defa599bb4 100644
--- a/config/examples/Anet/A6/Configuration_adv.h
+++ b/config/examples/Anet/A6/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h
index 4105782fd4be074051d5a38f7f4ee858093cb908..b62057b44f71b9722681c776bdeea0678efb4259 100644
--- a/config/examples/Anet/A8/Configuration_adv.h
+++ b/config/examples/Anet/A8/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h
index 92f5fe3a8f8084e48ebe50175e67c00382e9c979..3a2f7d5f7b700dea9becced3af178de85c403c37 100644
--- a/config/examples/Anet/A8plus/Configuration_adv.h
+++ b/config/examples/Anet/A8plus/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h
index f347c161a4df84a263f10bb3b3a0f1b39d33f75b..57f3382404311c5a1e111c8640ebb28b17141210 100644
--- a/config/examples/Anet/E16/Configuration_adv.h
+++ b/config/examples/Anet/E16/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h
index 221f945aeed714aa94bffb6d5464c04847d21c93..95dfa55b09e3058b1ba43e39284c48e144c6ca4f 100644
--- a/config/examples/AnyCubic/i3/Configuration_adv.h
+++ b/config/examples/AnyCubic/i3/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h
index b34a15f8e7f95083d1df5eee5b358ec0d0df5295..0bf753502bf1bdce4b39f91e9dc304acbde54691 100644
--- a/config/examples/ArmEd/Configuration_adv.h
+++ b/config/examples/ArmEd/Configuration_adv.h
@@ -1215,6 +1215,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
index 5e7b56fcfa415f54caf32761c93ad88c81d51b18..ba736c012b535e5462e824cc6b08fa5c672bd9e8 100644
--- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h
index 48f3325d2796c1b94314e415c9695f8917f74a9d..42a8786e80e86eaa2a47a7eb63868e1f46521ba2 100644
--- a/config/examples/BIBO/TouchX/default/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h
index a9727ebbddec45b696fbae05b1a86738ce92b164..7fdb7df73a548641e93ffccbe23bd66b9a29249b 100644
--- a/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h
index 2fa88aed5cda70b73b1c8e5947cd2a394c1bd488..1525ae7a4f9cb77d99439dd6b950dc51fa110295 100644
--- a/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -1219,6 +1219,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h
index a9727ebbddec45b696fbae05b1a86738ce92b164..7fdb7df73a548641e93ffccbe23bd66b9a29249b 100644
--- a/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h
index 9e57c85c7addb3d395b54391464fd9a1e879804b..242404bcab5397c1529f672f134b8dea911c1bd4 100644
--- a/config/examples/Cartesio/Configuration_adv.h
+++ b/config/examples/Cartesio/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h
index 3d15f58aa629492e6f7b803aadfb070e8c52bebb..a7982791798b0030bab937c612e15561cd1e294e 100644
--- a/config/examples/Creality/CR-10/Configuration_adv.h
+++ b/config/examples/Creality/CR-10/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h
index 5c99b692fd0d324697bbb125d3041b0506ae7942..2a757c1ec83c00f9cc5d69d2fa44df371a6a68d9 100644
--- a/config/examples/Creality/CR-10S/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h
index 13dbd86cf24d308b8c06245d06292cdf5ed55d20..120a2d329d736caa1975b47f9405bcd8ca9a6156 100644
--- a/config/examples/Creality/CR-10_5S/Configuration_adv.h
+++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h
index a7a38f9a4192476fcac4847d7cc93c1acbac089d..1485a9b681d0e14a6dd149eb2d4f35771eedaa46 100644
--- a/config/examples/Creality/CR-10mini/Configuration_adv.h
+++ b/config/examples/Creality/CR-10mini/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h
index 2cfb90adae948abace0335dae03184abf5740dc3..3a75f67d113147f83a5738fb8d7418faf8c0f65b 100644
--- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h	
+++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h
index d205aca8e6970c1e399182872d3f2ec26ccd712d..73f1ee4250a4f3b9bfe3e93cc0eb5f4b31f87bc1 100644
--- a/config/examples/Creality/CR-20/Configuration_adv.h
+++ b/config/examples/Creality/CR-20/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h
index 02531657dbab1ffa5ba70ee47afc870d0ae71514..03550e8e160e26bd055ce704037e17136624512d 100644
--- a/config/examples/Creality/CR-8/Configuration_adv.h
+++ b/config/examples/Creality/CR-8/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h
index 5daba654f96ede99f0e5b7b35fb5de7c61004122..25c2c33513a9c738cebdc86cc223026914493ce7 100644
--- a/config/examples/Creality/Ender-2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h
index e2e8e4d073ddae006d3d7f66e01a96d0de14d60d..dcdd15f46e3b22b73cef16f2587d3cd981607606 100644
--- a/config/examples/Creality/Ender-3/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h
index 09569215ea6b3189ee368f0dbee5fe7403781c23..f22edda37d36d0eb7c33c4a98d549b70d76d4039 100644
--- a/config/examples/Creality/Ender-4/Configuration_adv.h
+++ b/config/examples/Creality/Ender-4/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h
index 2029812ea757bcdafb54ece7820f1850bcb22f94..41a5d82f25c68e853f6f078e492d15352e42929a 100644
--- a/config/examples/Creality/Ender-5/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
index 81ad79e7b6bdf07f9db167f3873bf3473f79b4d8..a97e5288497148e904d958615983d8e2e3a32e1e 100644
--- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h	
+++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h
index 910b5655a3681867a4adaa3c81983d1d921cc04d..b7de2d61e5b556157e860b69058d428f57eee75b 100755
--- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h	
+++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h
index e404c82e8cdee3591a856fac9c4d0bb8a7132703..678b19641a8052d4e3d7410697d73f062a378513 100644
--- a/config/examples/Einstart-S/Configuration_adv.h
+++ b/config/examples/Einstart-S/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h
index 5ad08b99e3ea569694d83b534649ff668ce3d366..f2ddcf1e292be1ad3e7c417175dba23ed25a570d 100644
--- a/config/examples/FYSETC/AIO_II/Configuration_adv.h
+++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h
index 9cc8ef563955d4091c21de138ba0aed10b64b683..1746450b57111deb037de8a647f654b5befcd07e 100644
--- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h	
+++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h
index 9cc8ef563955d4091c21de138ba0aed10b64b683..1746450b57111deb037de8a647f654b5befcd07e 100644
--- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h	
+++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
index 9cc8ef563955d4091c21de138ba0aed10b64b683..1746450b57111deb037de8a647f654b5befcd07e 100644
--- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
index 9cc8ef563955d4091c21de138ba0aed10b64b683..1746450b57111deb037de8a647f654b5befcd07e 100644
--- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h
index a835d3a22cc8691dc2366155948903a915035c0a..cf770c3a6a7ff6221042dbde4b93d16e058282c9 100644
--- a/config/examples/FYSETC/F6_13/Configuration_adv.h
+++ b/config/examples/FYSETC/F6_13/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h
index eb36a3a6cd49445d040ab871930bddff516ea680..b3c0cbedd763b59d45e931c285334387cb30b2d3 100644
--- a/config/examples/Felix/Configuration_adv.h
+++ b/config/examples/Felix/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
index e3d09fafcdbf3198adce68b2895a353408334db2..eb496469991eda5af0dd1e51c5be7fa3218d3302 100644
--- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h
+++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
@@ -1210,6 +1210,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
index 104a905467e40f8f8639ea7e67a206055c8503d7..7c0e0033b815cea642222f107f615ea268fe6f52 100644
--- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h
+++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h
index 5867d60a8426101bf572f310af26bb9b9c2d00ae..c6dc2d2566630f5a473a5cf9ccfa2b7269290fee 100644
--- a/config/examples/Formbot/Raptor/Configuration_adv.h
+++ b/config/examples/Formbot/Raptor/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
index 9827e26a6af0fe44e58dfe05ca0971167070ce71..e6e9861f0c3120cfc556d93d64cedefdab17efca 100644
--- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
@@ -1215,6 +1215,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
index dac0e9e715a5689aeb4d4a8a0cc478dde2b9cf28..57e1eb8819595902edd8b364839765817ded52d8 100644
--- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
@@ -1215,6 +1215,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h
index 3bb556b4c14f72f4ec7ddbb913f0dcb641ec6efb..6f9e1139e7bdfe281c63e03b61686e81127ab3d1 100644
--- a/config/examples/Geeetech/A10/Configuration_adv.h
+++ b/config/examples/Geeetech/A10/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h
index 8c5c123d406120750a86eafb4ba968663edf9669..e5c728dd31f02064e3d82c748f0891f0aadd9d53 100644
--- a/config/examples/Geeetech/A10M/Configuration_adv.h
+++ b/config/examples/Geeetech/A10M/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h
index 2f6b3c195043be7982e67dd6035027e6d13f814f..639b0f1c3f3d04d3173b06e6fced675c4f60426c 100644
--- a/config/examples/Geeetech/A20M/Configuration_adv.h
+++ b/config/examples/Geeetech/A20M/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
index b39c4ed64c56faccbf0270fefd454dd9d565d3ea..a0dfbdde471c3afb011369791ccaf89f39ff0b59 100644
--- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h
+++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
index 3bb556b4c14f72f4ec7ddbb913f0dcb641ec6efb..6f9e1139e7bdfe281c63e03b61686e81127ab3d1 100644
--- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h	
+++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
index 3bb556b4c14f72f4ec7ddbb913f0dcb641ec6efb..6f9e1139e7bdfe281c63e03b61686e81127ab3d1 100644
--- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h	
+++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h
index b6756a634979cc73a730f32923f466b8364fae8d..b501996d99179807a81eceeba744a90bb6098a8e 100644
--- a/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h
index 91b289bfcb5329819fcbdd513964deed86d64cba..19417775a0d494c5e8b5e715d2780eeddc2259e2 100644
--- a/config/examples/JGAurora/A1/Configuration_adv.h
+++ b/config/examples/JGAurora/A1/Configuration_adv.h
@@ -1216,6 +1216,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h
index 5f4c2067ec48477e305505b40f5227668701cc82..0ef5a5dd19ae71328dd6d91370fa7165490a883b 100644
--- a/config/examples/JGAurora/A5/Configuration_adv.h
+++ b/config/examples/JGAurora/A5/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h
index 91b289bfcb5329819fcbdd513964deed86d64cba..19417775a0d494c5e8b5e715d2780eeddc2259e2 100644
--- a/config/examples/JGAurora/A5S/Configuration_adv.h
+++ b/config/examples/JGAurora/A5S/Configuration_adv.h
@@ -1216,6 +1216,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h
index 5bbef202e3a4c8620c1f049056806b1f3640ccbd..65ff8c12e2237dbee4150f7110570e9236a42f9c 100644
--- a/config/examples/MakerParts/Configuration_adv.h
+++ b/config/examples/MakerParts/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h
index 1c9ddcc9d11555fa7834d55563a6e68379f89b8d..00372a64adb61da398a379d0ff72ac5577a3389a 100644
--- a/config/examples/Malyan/M150/Configuration_adv.h
+++ b/config/examples/Malyan/M150/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h
index 2bdfc2cf3e3218f1112ed2697d69596c70e46ff0..3d4c7ef059921a8ad2c3d7319a5fdce8d5fe513f 100644
--- a/config/examples/Malyan/M200/Configuration_adv.h
+++ b/config/examples/Malyan/M200/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
index b2c2de4f1e508a66d3d22c824fde8f63d808a5e6..b00a5aff6f8f58c5364d1c0bd4f21d093b984e85 100644
--- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h
+++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h
index 22982e2a19bce99aab2d459175f863e7fc64c4bb..15b9a312ef69b09a1af770b256203559603392ca 100644
--- a/config/examples/Mks/Robin/Configuration_adv.h
+++ b/config/examples/Mks/Robin/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h
index 3f66cd88ff062da63c36e756cd7f35ee0a62e11a..274c1655468e3ee5e46fc65df436adfa6c4bf90b 100644
--- a/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/config/examples/Mks/Sbase/Configuration_adv.h
@@ -1212,6 +1212,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h
index 7f81fa0d108e827b49072b1754193f5e73086696..44e14166e5cc0b92b4694ff67ce010e3bce51a14 100644
--- a/config/examples/RapideLite/RL200/Configuration_adv.h
+++ b/config/examples/RapideLite/RL200/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h
index b6b6c0ac1a29730a21a39590895d3d2cad0357a9..49ca9a66da1a0993216ea3b3227269680fb293c9 100644
--- a/config/examples/RigidBot/Configuration_adv.h
+++ b/config/examples/RigidBot/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h
index 3f953d2431dacdfdaa0007ee130da1f72678ccbc..3743fce5d5f4e1dd8a260c497d101099df43bbf6 100644
--- a/config/examples/SCARA/Configuration_adv.h
+++ b/config/examples/SCARA/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
index a738a4886a5db6abcdb5fd1bd8ffb3a65bd4788e..682d4e2741b10e2c114ab7e819b5fe9dda96b9e7 100644
--- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
+++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h
index 3f064a49e0333a34577f9e52f3845d1488376ca5..e0ffec6b98b512d05416d05fc334dae5abf20376 100644
--- a/config/examples/Sanguinololu/Configuration_adv.h
+++ b/config/examples/Sanguinololu/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h
index ab05f960ec0e47993bb0cde27d532436bf6f1927..9559d27b221203f86b026118c0599b16b0e658fe 100644
--- a/config/examples/Tevo/Michelangelo/Configuration_adv.h
+++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
index 5a9889165f1bdae757e8666a8ca6d0af0e75ea41..4484b3dcb9f6ae1b4c4cdfdcb93d1cf46e2acd21 100755
--- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h	
+++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h	
@@ -1207,6 +1207,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
index 19e605c8719f803a17858c5de1e3104606b6a393..4c987ec70a40e0bf02c8c9b82b9512e8f2388be0 100755
--- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h	
+++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
index 19e605c8719f803a17858c5de1e3104606b6a393..4c987ec70a40e0bf02c8c9b82b9512e8f2388be0 100755
--- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h	
+++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h
index 579d69df521162cc541a39cfd4e12ad93ba8106a..ce2ef53a1060898683644e5a5a00fd6b93224c1b 100644
--- a/config/examples/TheBorg/Configuration_adv.h
+++ b/config/examples/TheBorg/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h
index 2e80fae0e90d8772bdf9ca583b2ec4950caad1b7..17f3c0a8849cd7ecb95f5026bc8acc7f75d261d7 100644
--- a/config/examples/TinyBoy2/Configuration_adv.h
+++ b/config/examples/TinyBoy2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h
index 6ec87b9443ecd4749a388da5cf6d311e2ed75ab1..6b3d3f9b5e4ccb1e677bcc84cf9836e395313036 100644
--- a/config/examples/Tronxy/X3A/Configuration_adv.h
+++ b/config/examples/Tronxy/X3A/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
index ae1f353001ebb7658791faf1fcf3ff87fa21a6d9..fe3946219e066168bc1a6c45ff13efc2553df39e 100644
--- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h
+++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h
index a8f8af17b9d7ce0a63796377025a0fbb3a884308..777ad3c694a6741849efa39e4928118a20ad04d3 100644
--- a/config/examples/UltiMachine/Archim1/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h
index 101dc42ed21f16a81ae01081b1faa0c141506335..652f1b70aefec8d88af4ed0d5d441a1de2866659 100644
--- a/config/examples/UltiMachine/Archim2/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h
index c9ae4c639ac67ef7fb1ada7cac77381c4c1524a6..42e8cb9e10035fe0be6e55d00289e22e63c3975d 100644
--- a/config/examples/VORONDesign/Configuration_adv.h
+++ b/config/examples/VORONDesign/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h
index b4021204f91b5117c2372a2cc87254f38c284879..5ece7806df7dddb3f392df78a0f3b87cf9230b1a 100644
--- a/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/config/examples/Velleman/K8200/Configuration_adv.h
@@ -1224,6 +1224,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h
index fc32a6eba07861bce893e8b0d79eecbdff8e9520..229312d29e74a6bfdc08a385f427138c5586810b 100644
--- a/config/examples/Velleman/K8400/Configuration_adv.h
+++ b/config/examples/Velleman/K8400/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h
index f5d4f1f4dd4132df0dceaba4242b72199ecd423c..5298216d2b65b53c0b14fbb8b3afc642a2061841 100644
--- a/config/examples/WASP/PowerWASP/Configuration_adv.h
+++ b/config/examples/WASP/PowerWASP/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
index 73308254bc840201714182383a3a9cb2d51af3bb..eb71be5e344d763f160b1609616bea5c268c2829 100644
--- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h	
+++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h	
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
index 0ab060a2cfee3716899156569c92a921bc0bd104..c2c5dddfe3470e779abf0088e539281fca210027 100644
--- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h	
+++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h	
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
index 561edee0ad672622422d573b61e96d1346b67da5..d363c4c6d56b892a7321172704784a72b247d16d 100644
--- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
+++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
index 61a651a4b724135cdb80df2db3b86d695a63414e..f5b8f603eb17a6fc09fc6e315a31dd6141535810 100644
--- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
index 61a651a4b724135cdb80df2db3b86d695a63414e..f5b8f603eb17a6fc09fc6e315a31dd6141535810 100644
--- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
index 5a3a16981384dd1490618790e89da8a28ec887fa..00fa3fba2ae70df8a9344412650afe0c6440b966 100644
--- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
index 5a3a16981384dd1490618790e89da8a28ec887fa..00fa3fba2ae70df8a9344412650afe0c6440b966 100644
--- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
index a653ba87375a1559496b025f263c1bfa635ea725..e530c09073fb007eb55c2ba6a4ea3b833ecaccde 100644
--- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
index d5967de29ca917c15b3fa8f9f5612d2a73225fed..eb9d199cb0c33e9b8d760e7874194f176436d114 100644
--- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h	
+++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h	
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h
index efb13d920e75d1e2115b032cde0d6411e222a47a..de1ed198e08dde625f24fcc7e5b4e02edafa46ee 100644
--- a/config/examples/delta/MKS/SBASE/Configuration_adv.h
+++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h
index 78834e48391918b216d6f908033b5e5e61abeead..13167d929d3153298ca994464708ffe21a847d25 100644
--- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h	
+++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h	
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h
index a653ba87375a1559496b025f263c1bfa635ea725..e530c09073fb007eb55c2ba6a4ea3b833ecaccde 100644
--- a/config/examples/delta/generic/Configuration_adv.h
+++ b/config/examples/delta/generic/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h
index a653ba87375a1559496b025f263c1bfa635ea725..e530c09073fb007eb55c2ba6a4ea3b833ecaccde 100644
--- a/config/examples/delta/kossel_mini/Configuration_adv.h
+++ b/config/examples/delta/kossel_mini/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h
index 69a1f708df408a4d1aa26553ec4071c722de03aa..993807094d89f52087293ae106342ed6ddf46306 100644
--- a/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -1213,6 +1213,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
index e3c122fd70c6f2baff232e12d85de02a4da14c95..1fecb22f98420598ec44d637ef47785ddd5df79c 100644
--- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h
index d61fbed6a6f427f8cef53a4d3b64fdd1714cd8c2..7f5f49fba0f2648216a90602a03e641be34485f8 100644
--- a/config/examples/makibox/Configuration_adv.h
+++ b/config/examples/makibox/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h
index 36a4b041db404bb83a5aaa56efadad396deb8f05..e447c6f4878c2e1cb8e383edcc03c7297c5cf04d 100644
--- a/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -1211,6 +1211,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE
diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h
index 46bd41420423432953a40e22d816f4f9cc984cae..2f59a60e9a7241d85125a3140c6c8abbb63f5b18 100644
--- a/config/examples/wt150/Configuration_adv.h
+++ b/config/examples/wt150/Configuration_adv.h
@@ -1212,6 +1212,13 @@
     #define TOUCH_UI_UTF8_WESTERN_CHARSET
   #endif
 
+  // When labels do not fit buttons, use smaller font
+  #define TOUCH_UI_FIT_TEXT
+
+  // Enable support for selection of languages at run-time
+  // (otherwise will use the value of LCD_LANGUAGE)
+  //#define TOUCH_UI_LANGUAGE_MENU
+
   // Use a numeric passcode for "Screen lock" keypad.
   // (recommended for smaller displays)
   //#define TOUCH_UI_PASSCODE