lcd folder

This commit is contained in:
Malte Reents 2024-05-19 11:47:16 +02:00
parent 402d623376
commit c257f43edd
79 changed files with 25335 additions and 0 deletions

View File

@ -0,0 +1,235 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Aragonese
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
namespace Language_an {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Aragonese");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" parada.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Tarcheta mesa");
LSTR MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Menu prencipal");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Inicio automatico");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Amortar motors");
LSTR MSG_HOMING = _UxGT("Orichen");
LSTR MSG_AUTO_HOME = _UxGT("Levar a l'orichen");
LSTR MSG_AUTO_HOME_X = _UxGT("Orichen X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Orichen Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Orichen Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Orichen XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Encetar (pretar)");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Vinient punto");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivelacion feita!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Achustar desfases");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicau");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Precalentar ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Tot");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Base");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Conf");
LSTR MSG_PREHEAT_M = _UxGT("Precalentar $");
LSTR MSG_PREHEAT_M_H = _UxGT("Precalentar $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Precal. $ Boquilla");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Boquilla ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Precalentar $ Tot");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Precalentar $ Base");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Precalentar $ Conf");
#endif
LSTR MSG_COOLDOWN = _UxGT("Enfriar");
LSTR MSG_SWITCH_PS_ON = _UxGT("Enchegar Fuent");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Amortar Fuent");
LSTR MSG_EXTRUDE = _UxGT("Extruir");
LSTR MSG_RETRACT = _UxGT("Retraer");
LSTR MSG_MOVE_AXIS = _UxGT("Mover Eixes");
LSTR MSG_BED_LEVELING = _UxGT("Nivelar base");
LSTR MSG_LEVEL_BED = _UxGT("Nivelar base");
LSTR MSG_MOVE_X = _UxGT("Mover X");
LSTR MSG_MOVE_Y = _UxGT("Mover Y");
LSTR MSG_MOVE_Z = _UxGT("Mover Z");
LSTR MSG_MOVE_N = _UxGT("Mover @");
LSTR MSG_MOVE_E = _UxGT("Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
LSTR MSG_MOVE_N_MM = _UxGT("Mover $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidat");
LSTR MSG_BED_Z = _UxGT("Base Z");
LSTR MSG_NOZZLE = _UxGT("Boquilla");
LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
LSTR MSG_BED = _UxGT("Base");
LSTR MSG_FAN_SPEED = _UxGT("Ixoriador");
LSTR MSG_FAN_SPEED_N = _UxGT("Ixoriador ~");
LSTR MSG_FLOW = _UxGT("Fluxo");
LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
LSTR MSG_SELECT = _UxGT("Trigar");
LSTR MSG_SELECT_E = _UxGT("Trigar *");
LSTR MSG_ACC = _UxGT("Aceleracion");
LSTR MSG_VTRAV_MIN = _UxGT("Vel. viache min");
LSTR MSG_ACCELERATION = _UxGT("Accel");
LSTR MSG_AMAX_A = _UxGT("Acel. max ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Acel. max ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Acel. max ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Acel. max @");
LSTR MSG_AMAX_E = _UxGT("Acel. max E");
LSTR MSG_AMAX_EN = _UxGT("Acel. max *");
LSTR MSG_A_RETRACT = _UxGT("Acel. retrac.");
LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje");
LSTR MSG_STEPS_PER_MM = _UxGT("Trangos/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" trangos/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" trangos/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" trangos/mm");
LSTR MSG_N_STEPS = _UxGT("@ trangos/mm");
LSTR MSG_E_STEPS = _UxGT("E trangos/mm");
LSTR MSG_EN_STEPS = _UxGT("* trangos/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movimiento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_CONTRAST = _UxGT("Contraste");
LSTR MSG_STORE_EEPROM = _UxGT("Alzar memoria");
LSTR MSG_LOAD_EEPROM = _UxGT("Cargar memoria");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurar memoria");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar");
LSTR MSG_INFO_SCREEN = _UxGT("Informacion");
LSTR MSG_PREPARE = _UxGT("Preparar");
LSTR MSG_TUNE = _UxGT("Achustar");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresion");
LSTR MSG_RESUME_PRINT = _UxGT("Contin. impresion");
LSTR MSG_STOP_PRINT = _UxGT("Detener Impresion");
LSTR MSG_MEDIA_MENU = _UxGT("Menu de SD");
LSTR MSG_NO_MEDIA = _UxGT("No i hai tarcheta");
LSTR MSG_DWELL = _UxGT("Reposo...");
LSTR MSG_USERWAIT = _UxGT("Aguardand ordines");
LSTR MSG_PRINT_ABORTED = _UxGT("Impres. cancelada");
LSTR MSG_NO_MOVE = _UxGT("Sin movimiento");
LSTR MSG_KILLED = _UxGT("Aturada d'emerch.");
LSTR MSG_STOPPED = _UxGT("Aturada.");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retraer mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer F");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Devantar mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet F");
LSTR MSG_AUTORETRACT = _UxGT("Retraccion auto.");
LSTR MSG_FILAMENTCHANGE = _UxGT("Cambear filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambear filamento *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Encetan. tarcheta");
LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
LSTR MSG_BABYSTEP_N = _UxGT("Micropaso @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Error: en calentar");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Error: temperatura");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("Error de temperatura");
LSTR MSG_ERR_MAXTEMP = _UxGT("Error: Temp Max");
LSTR MSG_ERR_MINTEMP = _UxGT("Error: Temp Min");
LSTR MSG_HALTED = _UxGT("IMPRESORA ATURADA");
LSTR MSG_PLEASE_RESET = _UxGT("Per favor reinic.");
LSTR MSG_HEATING = _UxGT("Calentando...");
LSTR MSG_BED_HEATING = _UxGT("Calentando base...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
LSTR MSG_INFO_MENU = _UxGT("Inf. Impresora");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Inf. Impresora");
LSTR MSG_INFO_STATS_MENU = _UxGT("Estadisticas Imp.");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Inf. Controlador");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
LSTR MSG_CASE_LIGHT = _UxGT("Luz");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Conteo de impresion");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total d'imp.");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresion mas larga");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total d'extrusion");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresions");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Mas larga");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrusion");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temperatura menima");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temperatura maxima");
LSTR MSG_INFO_PSU = _UxGT("Fuente de aliment");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Fuerza d'o driver");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escri. DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Resumir imp.");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Aguardand iniciar", "d'o filamento", "cambear"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Meta o filamento", "y prete lo boton", "pa continar..."));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Aguardand iniciar", "d'o fil. cambear"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Meta o filamento", "y prete lo boton"));
#endif // LCD_HEIGHT < 4
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Aguardando a", "expulsar filament"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Aguardando a", "cargar filamento"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Aguardando impre.", "pa continar"));
}

View File

@ -0,0 +1,158 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Bulgarian
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_5
namespace Language_bg {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Bulgarian");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Картата е поставена");
LSTR MSG_MEDIA_REMOVED = _UxGT("Картата е извадена");
LSTR MSG_MAIN = _UxGT("Меню");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели");
LSTR MSG_AUTO_HOME = _UxGT("Паркиране");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Подгряване ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Подгряване ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Всички");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Легло");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Настройки ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_M = _UxGT("Подгряване $");
LSTR MSG_PREHEAT_M_H = _UxGT("Подгряване $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Подгряване $ Дюза");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Подгряване $ Дюза ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Подгр. $ Всички");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Подгр. $ Легло");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Настройки $");
#endif
LSTR MSG_COOLDOWN = _UxGT("Охлаждане");
LSTR MSG_SWITCH_PS_ON = _UxGT("Вкл. захранване");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Изкл. захранване");
LSTR MSG_EXTRUDE = _UxGT("Екструзия");
LSTR MSG_RETRACT = _UxGT("Откат");
LSTR MSG_MOVE_AXIS = _UxGT("Движение по ос");
LSTR MSG_BED_LEVELING = _UxGT("Нивелиране");
LSTR MSG_LEVEL_BED = _UxGT("Нивелиране");
LSTR MSG_MOVE_X = _UxGT("Движение по X");
LSTR MSG_MOVE_Y = _UxGT("Движение по Y");
LSTR MSG_MOVE_Z = _UxGT("Движение по Z");
LSTR MSG_MOVE_N = _UxGT("Движение по @");
LSTR MSG_MOVE_E = _UxGT("Екструдер");
LSTR MSG_MOVE_EN = _UxGT("Екструдер *");
LSTR MSG_MOVE_N_MM = _UxGT("Премести с $mm");
LSTR MSG_MOVE_01MM = _UxGT("Премести с 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Премести с 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Премести с 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Премести с 100mm");
LSTR MSG_SPEED = _UxGT("Скорост");
LSTR MSG_BED_Z = _UxGT("Bed Z");
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
LSTR MSG_FAN_SPEED = _UxGT("Вентилатор");
LSTR MSG_FAN_SPEED_N = _UxGT("Вентилатор ~");
LSTR MSG_FLOW = _UxGT("Поток");
LSTR MSG_FLOW_N = _UxGT("Поток ~");
LSTR MSG_CONTROL = _UxGT("Управление");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Минимум");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Максимум");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
LSTR MSG_AUTOTEMP = _UxGT("Авто-темп.");
LSTR MSG_LCD_ON = _UxGT("Вкл.");
LSTR MSG_LCD_OFF = _UxGT("Изкл.");
LSTR MSG_A_RETRACT = _UxGT("A-откат");
LSTR MSG_A_TRAVEL = _UxGT("A-travel");
LSTR MSG_STEPS_PER_MM = _UxGT("Стъпки/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" стъпки/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" стъпки/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" стъпки/mm");
LSTR MSG_N_STEPS = _UxGT("@ стъпки/mm");
LSTR MSG_E_STEPS = _UxGT("E стъпки/mm");
LSTR MSG_EN_STEPS = _UxGT("* стъпки/mm");
LSTR MSG_TEMPERATURE = _UxGT("Температура");
LSTR MSG_MOTION = _UxGT("Движение");
LSTR MSG_FILAMENT = _UxGT("Нишка");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. нишка");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. нишка *");
LSTR MSG_CONTRAST = _UxGT("LCD контраст");
LSTR MSG_STORE_EEPROM = _UxGT("Запази в EPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Фабрични настройки");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови");
LSTR MSG_INFO_SCREEN = _UxGT("Преглед");
LSTR MSG_PREPARE = _UxGT("Действия");
LSTR MSG_TUNE = _UxGT("Настройка");
LSTR MSG_PAUSE_PRINT = _UxGT("Пауза");
LSTR MSG_RESUME_PRINT = _UxGT("Възобнови печата");
LSTR MSG_STOP_PRINT = _UxGT("Спри печата");
LSTR MSG_MEDIA_MENU = _UxGT("Меню карта");
LSTR MSG_NO_MEDIA = _UxGT("Няма карта");
LSTR MSG_DWELL = _UxGT("Почивка...");
LSTR MSG_USERWAIT = _UxGT("Изчакване");
LSTR MSG_PRINT_ABORTED = _UxGT("Печатът е прекъснат");
LSTR MSG_NO_MOVE = _UxGT("Няма движение");
LSTR MSG_KILLED = _UxGT("УБИТО.");
LSTR MSG_STOPPED = _UxGT("СПРЯНО.");
LSTR MSG_CONTROL_RETRACT = _UxGT("Откат mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смяна Откат mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Откат V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Скок mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Възврат mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Смяна Възврат mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Възврат V");
LSTR MSG_AUTORETRACT = _UxGT("Автоoткат");
LSTR MSG_FILAMENTCHANGE = _UxGT("Смяна нишка");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Смяна нишка *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Иниц. SD-Карта");
LSTR MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта");
LSTR MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние");
LSTR MSG_BABYSTEP_X = _UxGT("Министъпка X");
LSTR MSG_BABYSTEP_Y = _UxGT("Министъпка Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Министъпка Z");
LSTR MSG_BABYSTEP_N = _UxGT("Министъпка @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Стоп Кр.Изключватели");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Делта Калибровка");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калибровка X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровка Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровка Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровка Център");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неправилен принтер");
}

View File

@ -0,0 +1,229 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Catalan
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_ca {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Catalan");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" preparada.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Targeta detectada.");
LSTR MSG_MEDIA_REMOVED = _UxGT("Targeta extreta.");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops");
LSTR MSG_MAIN = _UxGT("Menú principal");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Inici automatic");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors");
LSTR MSG_DEBUG_MENU = _UxGT("Menu de depuracio");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres");
LSTR MSG_HOMING = _UxGT("Origen");
LSTR MSG_AUTO_HOME = _UxGT("Ves a l'origen");
LSTR MSG_AUTO_HOME_X = _UxGT("X a origen");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y a origen");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z a origen");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Premeu per iniciar");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Següent punt");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Anivellament fet!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajusta decalatge");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalatge aplicat");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Preescalfa ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Tot");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Llit");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Conf.");
LSTR MSG_PREHEAT_M = _UxGT("Preescalfa $");
LSTR MSG_PREHEAT_M_H = _UxGT("Preescalfa $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Preescalfa $ End");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preescalfa $ End ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preescalfa $ Tot");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preescalfa $ Llit");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preescalfa $ Conf.");
#endif
LSTR MSG_COOLDOWN = _UxGT("Refreda");
LSTR MSG_EXTRUDE = _UxGT("Extrudeix");
LSTR MSG_RETRACT = _UxGT("Retreu");
LSTR MSG_MOVE_AXIS = _UxGT("Mou eixos");
LSTR MSG_BED_LEVELING = _UxGT("Anivella llit");
LSTR MSG_LEVEL_BED = _UxGT("Anivella llit");
LSTR MSG_MOVING = _UxGT("Movent..");
LSTR MSG_FREE_XY = _UxGT("XY lliures");
LSTR MSG_MOVE_X = _UxGT("Mou X");
LSTR MSG_MOVE_Y = _UxGT("Mou Y");
LSTR MSG_MOVE_Z = _UxGT("Mou Z");
LSTR MSG_MOVE_N = _UxGT("Mou @");
LSTR MSG_MOVE_E = _UxGT("Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
LSTR MSG_MOVE_N_MM = _UxGT("Mou $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mou 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mou 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mou 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mou 100mm");
LSTR MSG_SPEED = _UxGT("Velocitat");
LSTR MSG_BED_Z = _UxGT("Llit Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_BED = _UxGT("Llit");
LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
LSTR MSG_FLOW = _UxGT("Flux");
LSTR MSG_FLOW_N = _UxGT("Flux ~");
LSTR MSG_VTRAV_MIN = _UxGT("VViatge min");
LSTR MSG_A_RETRACT = _UxGT("Accel. retracc");
LSTR MSG_A_TRAVEL = _UxGT("Accel. Viatge");
LSTR MSG_STEPS_PER_MM = _UxGT("Passos/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" passos/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" passos/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" passos/mm");
LSTR MSG_E_STEPS = _UxGT("@ passos/mm");
LSTR MSG_N_STEPS = _UxGT("E passos/mm");
LSTR MSG_EN_STEPS = _UxGT("* passos/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Moviment");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. Fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. Fil. *");
LSTR MSG_CONTRAST = _UxGT("Contrast de LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Desa memoria");
LSTR MSG_LOAD_EEPROM = _UxGT("Carrega memoria");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaura valors");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza");
LSTR MSG_INFO_SCREEN = _UxGT("Pantalla Info.");
LSTR MSG_PREPARE = _UxGT("Prepara");
LSTR MSG_TUNE = _UxGT("Ajusta");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausa impressio");
LSTR MSG_RESUME_PRINT = _UxGT("Repren impressio");
LSTR MSG_STOP_PRINT = _UxGT("Atura impressio.");
LSTR MSG_MEDIA_MENU = _UxGT("Imprimeix de SD");
LSTR MSG_NO_MEDIA = _UxGT("No hi ha targeta");
LSTR MSG_DWELL = _UxGT("En repos...");
LSTR MSG_USERWAIT = _UxGT("Esperant usuari..");
LSTR MSG_PRINT_ABORTED = _UxGT("Imp. cancelada");
LSTR MSG_NO_MOVE = _UxGT("Sense moviment.");
LSTR MSG_KILLED = _UxGT("MATAT.");
LSTR MSG_STOPPED = _UxGT("ATURADA.");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retreu mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retreure mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retreu V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Aixeca mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet +mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet +mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto retraccio");
LSTR MSG_FILAMENTCHANGE = _UxGT("Canvia filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Canvia filament *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Inicialitza SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Canvia SD");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fora");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s primer");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Decalatge Z");
LSTR MSG_BABYSTEP_X = _UxGT("Micropas X");
LSTR MSG_BABYSTEP_Y = _UxGT("Micropas Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Micropas Z");
LSTR MSG_BABYSTEP_N = _UxGT("Micropas @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancel. Endstop");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Error al escalfar");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP REDUNDANT");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MAXIMA");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
LSTR MSG_HALTED = _UxGT("IMPRESSORA PARADA");
LSTR MSG_PLEASE_RESET = _UxGT("Reinicieu");
LSTR MSG_HEATING = _UxGT("Escalfant...");
LSTR MSG_BED_HEATING = _UxGT("Escalfant llit...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibratge Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra el centre");
LSTR MSG_INFO_MENU = _UxGT("Quant a la impr.");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info Impressora");
LSTR MSG_INFO_STATS_MENU = _UxGT("Estadistiques");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info placa");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
LSTR MSG_CASE_LIGHT = _UxGT("Llum");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total impressions");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Temps imprimint");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Treball mes llarg");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total extrudit");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Mes llarg");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudit");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp. mínima");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp. màxima");
LSTR MSG_INFO_PSU = _UxGT("Font alimentacio");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Força motor");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Repren impressió");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora incorrecta");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperant per", "iniciar el canvi", "de filament"));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperant per", "treure filament"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Poseu filament", "i premeu el boto", "per continuar..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premeu boto per", "escalfar nozzle."));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Escalfant nozzle", "Espereu..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperant carrega", "de filament"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperant per", "reprendre"));
#else // LCD_HEIGHT < 4
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Espereu..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Expulsant..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insereix i prem"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Escalfant..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregant..."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprenent..."));
#endif // LCD_HEIGHT < 4
}

View File

@ -0,0 +1,588 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Czech
* UTF-8 for Graphical Display
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Translated by Petr Zahradnik, Computer Laboratory
* Blog and video blog Zahradnik se bavi
* https://www.zahradniksebavi.cz
*/
#define DISPLAY_CHARSET_ISO10646_CZ
namespace Language_cz {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Czech");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" připraven.");
LSTR MSG_YES = _UxGT("ANO");
LSTR MSG_NO = _UxGT("NE");
LSTR MSG_BACK = _UxGT("Zpět");
LSTR MSG_MEDIA_ABORTING = _UxGT("Rušení...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Médium vloženo");
LSTR MSG_MEDIA_REMOVED = _UxGT("Médium vyjmuto");
LSTR MSG_MEDIA_WAITING = _UxGT("Čekání na médium");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Chyba čtení média");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB odstraněno");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Chyba USB");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znaku
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstopy");
LSTR MSG_MAIN = _UxGT("Hlavní nabídka");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení");
LSTR MSG_CONFIGURATION = _UxGT("Konfigurace");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory");
LSTR MSG_DEBUG_MENU = _UxGT("Nabídka ladění");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test ukaz. průběhu");
#else
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. průběhu");
#endif
LSTR MSG_AUTO_HOME = _UxGT("Domovská pozice");
LSTR MSG_AUTO_HOME_X = _UxGT("Domů osa X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Domů osa Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Domů osa Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto srovnání Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Měření podložky");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím spusťte");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Další bod");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Měření hotovo!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Výška srovnávání");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Nastavit ofsety");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastaveny");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Zahřát ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Zahřát ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" vše");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" podlož");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" nast");
LSTR MSG_PREHEAT_M = _UxGT("Zahřát $");
LSTR MSG_PREHEAT_M_H = _UxGT("Zahřát $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Zahřát $ end");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Zahřát $ end ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Zahřát $ vše");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Zahřát $ podlož");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Zahřát $ nast");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Zahřát vlastní");
LSTR MSG_COOLDOWN = _UxGT("Zchladit");
LSTR MSG_LASER_MENU = _UxGT("Ovládání laseru");
LSTR MSG_LASER_POWER = _UxGT("Výkon laseru");
LSTR MSG_SPINDLE_MENU = _UxGT("Vřeteno ovládání");
LSTR MSG_SPINDLE_POWER = _UxGT("Vřeteno výkon");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Vřeteno opačně");
LSTR MSG_SWITCH_PS_ON = _UxGT("Zapnout napájení");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Vypnout napájení");
LSTR MSG_EXTRUDE = _UxGT("Vytlačit (extr.)");
LSTR MSG_RETRACT = _UxGT("Zatlačit (retr.)");
LSTR MSG_MOVE_AXIS = _UxGT("Posunout osy");
LSTR MSG_BED_LEVELING = _UxGT("Vyrovnat podložku");
LSTR MSG_LEVEL_BED = _UxGT("Vyrovnat podložku");
LSTR MSG_BED_TRAMMING = _UxGT("Vyrovnat rohy");
LSTR MSG_NEXT_CORNER = _UxGT("Další roh");
LSTR MSG_MESH_EDITOR = _UxGT("Editor sítě");
LSTR MSG_EDIT_MESH = _UxGT("Upravit síť bodů");
LSTR MSG_EDITING_STOPPED = _UxGT("Konec úprav sítě");
LSTR MSG_PROBING_POINT = _UxGT("Měření bodu");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Vlastní příkazy");
LSTR MSG_M48_TEST = _UxGT("M48 test sondy");
LSTR MSG_M48_POINT = _UxGT("M48 bod");
LSTR MSG_M48_DEVIATION = _UxGT("Odchylka");
LSTR MSG_IDEX_MENU = _UxGT("Režim IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Ofsety nástrojů");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikace");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrcadlení");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. tryska @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Provádím G29");
LSTR MSG_UBL_TOOLS = _UxGT("UBL nástroje");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Vyrovnání bodu");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuální síť bodů");
LSTR MSG_UBL_BC_INSERT = _UxGT("Vložte kartu, změřte");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Změřte");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Odstraňte a změřte");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Přesun na další");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovat UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovat UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Úprava sítě bodů");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upravit vlastní síť");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladit síť bodů");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Konec úprav sítě");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastní síť");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvořit síť");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Síť bodů $");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola sítě $");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená síť bodů");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upravit výšku sítě");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Zkontrolovat síť");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast. sítě");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 zahřívání podl.");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 zařívání trysky");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ruční zavedení...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Pevné zavední");
LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovat v síťi");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Síťové rovnání");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnání");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mřížkové rovnání");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Srovnat podložku");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Postranní body");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Typ sítě bodu");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exportovat síť");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Exportovat do PC");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Exportovat do CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Záloha do PC");
LSTR MSG_UBL_INFO_UBL = _UxGT("Info o UBL do PC");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mřížky");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ruční hustota");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Chytrá hustota");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Zaplnit mřížku");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušit všechno");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušit poslední");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Upravit všechny");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upravit poslední");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Uložiště sítí");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Paměťový slot");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Načíst síť bodů");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Uložit síť bodů");
LSTR MSG_MESH_LOADED = _UxGT("Síť %i načtena");
LSTR MSG_MESH_SAVED = _UxGT("Síť %i uložena");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Nedostatek místa");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Ch.: Uložit UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Ch.: Obnovit UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-ofset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Konec Z-ofsetu");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Postupně");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Studená síť bodů");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Chytrá hustota");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Zkontrolovat síť");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Upravit všechny");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Zkontrolovat síť");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Upravit všechny");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Uložit síť bodů");
LSTR MSG_LED_CONTROL = _UxGT("Nastavení LED");
LSTR MSG_LEDS = _UxGT("Světla");
LSTR MSG_LED_PRESETS = _UxGT("Světla Předvolby");
LSTR MSG_SET_LEDS_RED = _UxGT("Červená");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Žlutá");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Zelená");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Modrá");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Bílá");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Výchozí");
LSTR MSG_CUSTOM_LEDS = _UxGT("Vlastní světla");
LSTR MSG_INTENSITY_R = _UxGT("Červená intenzita");
LSTR MSG_INTENSITY_G = _UxGT("Zelená intezita");
LSTR MSG_INTENSITY_B = _UxGT("Modrá intenzita");
LSTR MSG_INTENSITY_W = _UxGT("Bílá intenzita");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Jas");
LSTR MSG_MOVING = _UxGT("Posouvání...");
LSTR MSG_FREE_XY = _UxGT("Uvolnit XY");
LSTR MSG_MOVE_X = _UxGT("Posunout X");
LSTR MSG_MOVE_Y = _UxGT("Posunout Y");
LSTR MSG_MOVE_Z = _UxGT("Posunout Z");
LSTR MSG_MOVE_N = _UxGT("Posunout @");
LSTR MSG_MOVE_E = _UxGT("Extrudér");
LSTR MSG_MOVE_EN = _UxGT("Extrudér *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
LSTR MSG_MOVE_N_MM = _UxGT("Posunout o $mm");
LSTR MSG_MOVE_01MM = _UxGT("Posunout o 0,1mm");
LSTR MSG_MOVE_1MM = _UxGT("Posunout o 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Posunout o 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Posunout o 100mm");
LSTR MSG_SPEED = _UxGT("Rychlost");
LSTR MSG_BED_Z = _UxGT("Výška podl.");
LSTR MSG_NOZZLE = _UxGT("Tryska");
LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
LSTR MSG_BED = _UxGT("Podložka");
LSTR MSG_CHAMBER = _UxGT("Komora");
LSTR MSG_FAN_SPEED = _UxGT("Rychlost vent.");
LSTR MSG_FAN_SPEED_N = _UxGT("Rychlost vent. ~");
LSTR MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Rychlost ex. vent.");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Rychlost ex. vent. ~");
LSTR MSG_FLOW = _UxGT("Průtok");
LSTR MSG_FLOW_N = _UxGT("Průtok ~");
LSTR MSG_CONTROL = _UxGT("Ovládaní");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" fakt");
LSTR MSG_AUTOTEMP = _UxGT("Autoteplota");
LSTR MSG_LCD_ON = _UxGT("Zap");
LSTR MSG_LCD_OFF = _UxGT("Vyp");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID automatika");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID automatika *");
LSTR MSG_SELECT = _UxGT("Vybrat");
LSTR MSG_SELECT_E = _UxGT("Vybrat *");
LSTR MSG_ACC = _UxGT("Zrychl");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk");
LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk");
LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk");
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Odchylka spoje");
LSTR MSG_MAX_SPEED = _UxGT("Max Rychlost");
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Rychlost");
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Rychlost");
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Rychlost");
LSTR MSG_VMAX_N = _UxGT("Max @ Rychlost");
LSTR MSG_VMAX_E = _UxGT("Max E Rychlost");
LSTR MSG_VMAX_EN = _UxGT("Max * Rychlost");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
LSTR MSG_ACCELERATION = _UxGT("Akcelerace");
LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Akcel");
LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Akcel");
LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Akcel");
LSTR MSG_AMAX_N = _UxGT("Max @ Akcel");
LSTR MSG_AMAX_E = _UxGT("Max E Akcel");
LSTR MSG_AMAX_EN = _UxGT("Max * Akcel");
LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
LSTR MSG_A_TRAVEL = _UxGT("A-přejezd");
LSTR MSG_STEPS_PER_MM = _UxGT("Kroků/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" kroků/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" kroků/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" kroků/mm");
LSTR MSG_N_STEPS = _UxGT("@ kroků/mm");
LSTR MSG_E_STEPS = _UxGT("E kroků/mm");
LSTR MSG_EN_STEPS = _UxGT("* kroků/mm");
LSTR MSG_TEMPERATURE = _UxGT("Teplota");
LSTR MSG_MOTION = _UxGT("Pohyb");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E na mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Prum.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Prum. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Vysunout mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Zavést mm");
LSTR MSG_ADVANCE_K = _UxGT("K pro posun");
LSTR MSG_ADVANCE_K_E = _UxGT("K pro posun *");
LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Uložit nastavení");
LSTR MSG_LOAD_EEPROM = _UxGT("Načíst nastavení");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnovit výchozí");
LSTR MSG_INIT_EEPROM = _UxGT("Inic. EEPROM");
LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD");
LSTR MSG_RESET_PRINTER = _UxGT("Reset tiskárny");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnovit");
LSTR MSG_INFO_SCREEN = _UxGT("Info obrazovka");
LSTR MSG_PREPARE = _UxGT("Připrava tisku");
LSTR MSG_TUNE = _UxGT("Doladění tisku");
LSTR MSG_START_PRINT = _UxGT("Spustit tisk");
LSTR MSG_BUTTON_NEXT = _UxGT("Další");
LSTR MSG_BUTTON_INIT = _UxGT("Inicializace");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Tisk");
LSTR MSG_BUTTON_RESET = _UxGT("Reset");
LSTR MSG_BUTTON_CANCEL = _UxGT("Zrušit");
LSTR MSG_BUTTON_DONE = _UxGT("Hotovo");
LSTR MSG_BUTTON_BACK = _UxGT("Zpět");
LSTR MSG_BUTTON_PROCEED = _UxGT("Pokračovat");
LSTR MSG_PAUSE_PRINT = _UxGT("Pozastavit tisk");
LSTR MSG_RESUME_PRINT = _UxGT("Obnovit tisk");
LSTR MSG_STOP_PRINT = _UxGT("Zastavit tisk");
LSTR MSG_PRINTING_OBJECT = _UxGT("Tisk objektu");
LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušit objekt");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušit objekt =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova výpadku");
LSTR MSG_MEDIA_MENU = _UxGT("Tisknout z SD");
LSTR MSG_NO_MEDIA = _UxGT("Žádná SD karta");
LSTR MSG_DWELL = _UxGT("Uspáno...");
LSTR MSG_USERWAIT = _UxGT("Čekání na uživ...");
LSTR MSG_PRINT_PAUSED = _UxGT("Tisk pozastaven");
LSTR MSG_PRINTING = _UxGT("Tisknu...");
LSTR MSG_PRINT_ABORTED = _UxGT("Tisk zrušen");
LSTR MSG_NO_MOVE = _UxGT("Žádný pohyb.");
LSTR MSG_KILLED = _UxGT("PŘERUSENO. ");
LSTR MSG_STOPPED = _UxGT("ZASTAVENO. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Výměna Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraktovat V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zvednuti Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Délka retrakce");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Délka zavedení");
LSTR MSG_TOOL_CHANGE = _UxGT("Výměna nástroje");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvih Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Rychlost primár.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rychlost retrak.");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Tryska standby");
LSTR MSG_FILAMENTCHANGE = _UxGT("Vyměnit filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Vyměnit filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Zavést filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Zavést filament *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Vysunout filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Vysunout filament *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše");
LSTR MSG_ATTACH_MEDIA = _UxGT("Načíst médium");
LSTR MSG_CHANGE_MEDIA = _UxGT("Vyměnit médium");
LSTR MSG_RELEASE_MEDIA = _UxGT("Vysunout médium");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl");
LSTR MSG_SKEW_FACTOR = _UxGT("Faktor zkosení");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch self-test");
LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("BLTouch zasunout");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch vysunout");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW výsun BLTouch");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch 5V režim");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch OD režim");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Uložit režim");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Nastavit 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Nastacit OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Vypsat nastavení");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("VAROVANÍ: Špatné nastavení může způsobit škody! Pokračovat?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Inic. TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z Ofsetu");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Uložiy");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("vysunout TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Vysunout Z-sondu");
LSTR MSG_MANUAL_STOW = _UxGT("Zasunout Z-sondu");
LSTR MSG_HOME_FIRST = _UxGT("Domů %s%s%s první");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Celkem");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop abort");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba zahřívání");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEPLOTA");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÍ ÚNIK");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPL. ÚNIK PODL.");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPL. ÚNIK KOMORA");
LSTR MSG_ERR_MAXTEMP = _UxGT("VYSOKÁ TEPLOTA");
LSTR MSG_ERR_MINTEMP = _UxGT("NÍZKA TEPLOTA");
LSTR MSG_HALTED = _UxGT("TISK. ZASTAVENA");
LSTR MSG_PLEASE_RESET = _UxGT("Proveďte reset");
LSTR MSG_HEATING = _UxGT("Zahřívání...");
LSTR MSG_COOLING = _UxGT("Chlazení...");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_BED_HEATING = _UxGT("Zahřívání podložky");
#else
LSTR MSG_BED_HEATING = _UxGT("Zahřívání podl.");
#endif
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_BED_COOLING = _UxGT("Chlazení podložky");
#else
LSTR MSG_BED_COOLING = _UxGT("Chlazení podl.");
#endif
LSTR MSG_CHAMBER_HEATING = _UxGT("Zahřívání komory...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Chlazení komory...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrace");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovat X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovat Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovat Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovat Střed");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta nastavení");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autokalibrace");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag rameno");
LSTR MSG_DELTA_HEIGHT = _UxGT("Výška");
LSTR MSG_DELTA_RADIUS = _UxGT("Poloměr");
LSTR MSG_INFO_MENU = _UxGT("O tiskárně");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info o tiskárně");
LSTR MSG_3POINT_LEVELING = _UxGT("3-bodové rovnání");
LSTR MSG_LINEAR_LEVELING = _UxGT("Lineárni rovnání");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineární rovnání");
LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
LSTR MSG_MESH_LEVELING = _UxGT("Mřížkové rovnání");
LSTR MSG_INFO_STATS_MENU = _UxGT("Statistika");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info o desce");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
LSTR MSG_INFO_BAUDRATE = _UxGT("Rychlost");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Sledování úniku: VYP");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Sledování úniku: ZAP");
LSTR MSG_CASE_LIGHT = _UxGT("Osvětlení");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas světla");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("NESPRÁVNÁ TISKÁRNA");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tisků");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončeno");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší tisk");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Celkem vytlačeno");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Tisky");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Čas");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačeno");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Buzení motorů");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Motor %");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC uložit EEPROM");
LSTR MSG_ERROR_TMC = _UxGT("TMC CHYBA SPOJENÍ");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMĚNA FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("TISK POZASTAVEN");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENÍ FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTÍ FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI OBNOVENÍ:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačit víc");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnovit tisk");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Délka mm senz.fil.");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Parkování selhalo");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Kalibrace selhala");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktual. MMU firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potř. pozornost.");
LSTR MSG_MMU2_RESUME = _UxGT("Obnovit tisk");
LSTR MSG_MMU2_RESUMING = _UxGT("Obnovování...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Zavést filament");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Zavést všechny");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zavést do trysky");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunout filament");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysun. filament ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vytáhnout filament");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádění fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vytahování fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysouvání fil....");
LSTR MSG_MMU2_ALL = _UxGT("Všechny");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("Resetovat MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Resetování MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Vytáhněte, klikněte");
LSTR MSG_MIX = _UxGT("Mix");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponenta =");
LSTR MSG_MIXER = _UxGT("Mixér");
LSTR MSG_GRADIENT = _UxGT("Přechod");
LSTR MSG_FULL_GRADIENT = _UxGT("Celý přechod");
LSTR MSG_TOGGLE_MIX = _UxGT("Přepnout mix");
LSTR MSG_CYCLE_MIX = _UxGT("Střídat mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Přechod mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Opačný přechod");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástroj");
LSTR MSG_START_VTOOL = _UxGT("Spustit V-nástroj");
LSTR MSG_END_VTOOL = _UxGT("Ukončit V-nástroj");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástroje");
LSTR MSG_RESET_VTOOLS = _UxGT("Resetovat V-nástroj");
LSTR MSG_COMMIT_VTOOL = _UxGT("Uložit V-nástroj mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-nástroj resetovat");
#else
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástr.");
LSTR MSG_START_VTOOL = _UxGT("Spustit V-nástr.");
LSTR MSG_END_VTOOL = _UxGT("Ukončit V-nástr.");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástr.");
LSTR MSG_RESET_VTOOLS = _UxGT("Reset. V-nástr.");
LSTR MSG_COMMIT_VTOOL = _UxGT("Uložit V-nás. mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-nástr. reset.");
#endif
LSTR MSG_START_Z = _UxGT("Počáteční Z:");
LSTR MSG_END_Z = _UxGT(" Koncové Z:");
LSTR MSG_GAMES = _UxGT("Hry");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Bludiště");
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlačítko", "pro obnovení tisku"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekejte prosím", "na zahájení", "výměny filamentu"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stiskněte", "tlačítko..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí trysky"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Čekejte prosím", "na nahřátí tr."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na vysunuti", "filamentu"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na zavedení", "filamentu"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Vyčkejte na", "vytlačení"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klikněte pro", "ukončení", "vytlačování"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Čekejte prosím", "na pokračování", "tisku"));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlač.", "pro obnovení"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čekejte..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte, klikněte"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nahřívání..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysouvání..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádění..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačování..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klikněte pro", "ukončení"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračování..."));
#endif // LCD_HEIGHT < 4
LSTR MSG_TMC_DRIVERS = _UxGT("TMC budiče");
LSTR MSG_TMC_CURRENT = _UxGT("Proud budičů");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybridní práh");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Domů bez senzorů");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Režim kroků");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop povolen");
LSTR MSG_SERVICE_RESET = _UxGT("Reset");
LSTR MSG_SERVICE_IN = _UxGT(" za:");
LSTR MSG_BACKLASH = _UxGT("Vůle");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekce");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Vyhlazení");
}

View File

@ -0,0 +1,199 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Danish
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_da {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Danish");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" er klar");
LSTR MSG_MEDIA_INSERTED = _UxGT("Kort isat");
LSTR MSG_MEDIA_REMOVED = _UxGT("Kort fjernet");
LSTR MSG_MAIN = _UxGT("Menu");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Slå alle steppere fra");
LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); // G28
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik når du er klar");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Næste punkt");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Bed level er færdig!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Sæt forsk. af home");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Forsk. er nu aktiv");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Forvarm ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Forvarm ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Alle");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Bed");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" conf");
LSTR MSG_PREHEAT_M = _UxGT("Forvarm $");
LSTR MSG_PREHEAT_M_H = _UxGT("Forvarm $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Forvarm $ end");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Forvarm $ end ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Forvarm $ Alle");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Forvarm $ Bed");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Forvarm $ conf");
#endif
LSTR MSG_COOLDOWN = _UxGT("Afkøl");
LSTR MSG_SWITCH_PS_ON = _UxGT("Slå strøm til");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Slå strøm fra");
LSTR MSG_EXTRUDE = _UxGT("Extruder");
LSTR MSG_MOVE_AXIS = _UxGT("Flyt akser");
LSTR MSG_BED_LEVELING = _UxGT("Juster bed");
LSTR MSG_LEVEL_BED = _UxGT("Juster bed");
LSTR MSG_MOVE_X = _UxGT("Flyt X");
LSTR MSG_MOVE_Y = _UxGT("Flyt Y");
LSTR MSG_MOVE_Z = _UxGT("Flyt Z");
LSTR MSG_MOVE_N = _UxGT("Flyt @");
LSTR MSG_MOVE_E = _UxGT("Flyt E");
LSTR MSG_MOVE_EN = _UxGT("Flyt *");
LSTR MSG_MOVE_N_MM = _UxGT("Flyt $mm");
LSTR MSG_MOVE_01MM = _UxGT("Flyt 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Flyt 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Flyt 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Flyt 100mm");
LSTR MSG_SPEED = _UxGT("Hastighed");
LSTR MSG_BED_Z = _UxGT("Plade Z");
LSTR MSG_NOZZLE = _UxGT("Dyse");
LSTR MSG_NOZZLE_N = _UxGT("Dyse ~");
LSTR MSG_BED = _UxGT("Plade");
LSTR MSG_FAN_SPEED = _UxGT("Blæser hastighed");
LSTR MSG_FAN_SPEED_N = _UxGT("Blæser hastighed ~");
LSTR MSG_CONTROL = _UxGT("Kontrol");
LSTR MSG_MIN = _UxGT(" \002 Min");
LSTR MSG_MAX = _UxGT(" \002 Max");
LSTR MSG_FACTOR = _UxGT(" \002 Fact");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("Til");
LSTR MSG_LCD_OFF = _UxGT("Fra");
LSTR MSG_SELECT = _UxGT("Vælg");
LSTR MSG_SELECT_E = _UxGT("Vælg *");
LSTR MSG_A_RETRACT = _UxGT("A-retract");
LSTR MSG_A_TRAVEL = _UxGT("A-rejse");
LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
LSTR MSG_MOTION = _UxGT("Bevægelse");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_CONTRAST = _UxGT("LCD kontrast");
LSTR MSG_STORE_EEPROM = _UxGT("Gem i EEPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Gendan Defaults");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk");
LSTR MSG_INFO_SCREEN = _UxGT("Info skærm");
LSTR MSG_PREPARE = _UxGT("Forbered");
LSTR MSG_PAUSE_PRINT = _UxGT("Pause printet");
LSTR MSG_RESUME_PRINT = _UxGT("Forsæt printet");
LSTR MSG_STOP_PRINT = _UxGT("Stop printet");
LSTR MSG_MEDIA_MENU = _UxGT("Print fra SD");
LSTR MSG_NO_MEDIA = _UxGT("Intet SD kort");
LSTR MSG_DWELL = _UxGT("Dvale...");
LSTR MSG_USERWAIT = _UxGT("Venter på bruger...");
LSTR MSG_PRINT_ABORTED = _UxGT("Print annulleret");
LSTR MSG_NO_MOVE = _UxGT("Ingen bevægelse.");
LSTR MSG_KILLED = _UxGT("DRÆBT. ");
LSTR MSG_STOPPED = _UxGT("STOPPET. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Tilbagetræk mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Skift Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Tilbagetræk V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Skift Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENTCHANGE = _UxGT("Skift filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Skift filament *");
LSTR MSG_CHANGE_MEDIA = _UxGT("Skift SD kort");
LSTR MSG_ZPROBE_OUT = _UxGT("Probe udenfor plade");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Selv-Test");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s først");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Opvarmning fejlet");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Fejl: reserve temp");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("Temp løber løbsk");
LSTR MSG_ERR_MAXTEMP = _UxGT("Fejl: Maks temp");
LSTR MSG_ERR_MINTEMP = _UxGT("Fejl: Min temp");
LSTR MSG_HALTED = _UxGT("PRINTER STOPPET");
LSTR MSG_PLEASE_RESET = _UxGT("Reset Venligst");
LSTR MSG_HEATING = _UxGT("Opvarmer...");
LSTR MSG_BED_HEATING = _UxGT("Opvarmer plade...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrer X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrer Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrer Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrerings Center");
LSTR MSG_INFO_MENU = _UxGT("Om Printer");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Ant. Prints");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total print tid");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Længste print");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruderet");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Længste");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderet");
#endif
LSTR MSG_INFO_PSU = _UxGT("Strømfors.");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrke");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driv %");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Forsæt print");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Forkert printer");
#if LCD_HEIGHT >= 4
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vent på start", "af filament", "skift"));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Vent på", "filament udskyd."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Indsæt filament", "og tryk på knap", "for at fortsætte..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Vent på", "filament indtag"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Vent på at print", "fortsætter"));
#else // LCD_HEIGHT < 4
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vent venligst..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Udskyder..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Indsæt og klik"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Indtager..."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsætter..."));
#endif // LCD_HEIGHT < 4
}

View File

@ -0,0 +1,814 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* German
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_de {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Deutsch");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" bereit");
LSTR MSG_YES = _UxGT("JA");
LSTR MSG_NO = _UxGT("NEIN");
LSTR MSG_HIGH = _UxGT("HOCH");
LSTR MSG_LOW = _UxGT("RUNTER");
LSTR MSG_BACK = _UxGT("Zurück");
LSTR MSG_ERROR = _UxGT("Fehler");
LSTR MSG_MEDIA_ABORTING = _UxGT("Abbruch...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Medium erkannt");
LSTR MSG_MEDIA_REMOVED = _UxGT("Medium entfernt");
LSTR MSG_MEDIA_WAITING = _UxGT("Warten auf Medium");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Medium Init fehlgesch.");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Medium Lesefehler");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Gerät entfernt");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Start fehlge.");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall überschritten");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopp"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Software-Endstopp");
LSTR MSG_MAIN = _UxGT("Hauptmenü");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen");
LSTR MSG_TOOLBAR_SETUP = _UxGT("Toolbar Einstellung");
LSTR MSG_OPTION_DISABLED = _UxGT("Option Deaktiviert");
LSTR MSG_CONFIGURATION = _UxGT("Konfiguration");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
LSTR MSG_DEBUG_MENU = _UxGT("Debug-Menü");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test");
LSTR MSG_HOMING = _UxGT("Homing");
LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
LSTR MSG_AUTO_HOME_A = _UxGT("Home @");
LSTR MSG_AUTO_HOME_X = _UxGT("Home X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z");
LSTR MSG_FILAMENT_SET = _UxGT("Fila. Einstellungen");
LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management");
LSTR MSG_MANUAL_LEVELING = _UxGT("Manuell Nivellierung");
LSTR MSG_LEVBED_FL = _UxGT("Vorne Links");
LSTR MSG_LEVBED_FR = _UxGT("Vorne Rechts");
LSTR MSG_LEVBED_C = _UxGT("Mitte");
LSTR MSG_LEVBED_BL = _UxGT("Hinten Links");
LSTR MSG_LEVBED_BR = _UxGT("Hinten Rechts");
LSTR MSG_MANUAL_MESH = _UxGT("manuelles Netz");
LSTR MSG_AUTO_MESH = _UxGT("Netz auto. erstellen");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen");
LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Genauigkeit sinkt!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Genauigkeit erreicht");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ homen");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klick zum Starten");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nächste Koordinate");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivellieren fertig!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Ausblendhöhe");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz");
LSTR MSG_HOME_OFFSET_X = _UxGT("Homeversatz X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Homeversatz Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Homeversatz Z");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Assistent");
LSTR MSG_SELECT_ORIGIN = _UxGT("Wählen Sie Ursprung");
LSTR MSG_LAST_VALUE_SP = _UxGT("Letzter Wert ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen");
LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" Vorwärmen ~");
LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen");
LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ~");
LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" Alles Vorwärmen");
LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" Bett Vorwärmen");
LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" Einstellungen");
#ifdef PREHEAT_2_LABEL
LSTR MSG_PREHEAT_2 = PREHEAT_2_LABEL _UxGT(" Vorwärmen");
LSTR MSG_PREHEAT_2_SETTINGS = PREHEAT_2_LABEL _UxGT(" Vorwärmen Konf");
#endif
#ifdef PREHEAT_3_LABEL
LSTR MSG_PREHEAT_3 = PREHEAT_3_LABEL _UxGT(" Vorwärmen");
LSTR MSG_PREHEAT_3_SETTINGS = PREHEAT_3_LABEL _UxGT(" Vorwärmen Konf");
#endif
LSTR MSG_PREHEAT_M = _UxGT("$ Vorwärmen");
LSTR MSG_PREHEAT_M_H = _UxGT("$ Vorwärmen") " ~";
LSTR MSG_PREHEAT_M_END = _UxGT("$ Extr. Vorwärmen");
LSTR MSG_PREHEAT_M_END_E = _UxGT("$ Extr. Vorwärm. ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("$ Alles Vorwärmen");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ Bett Vorwärmen");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ Einstellungen");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("benutzerdef. Heizen");
LSTR MSG_COOLDOWN = _UxGT("Abkühlen");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequenz");
LSTR MSG_LASER_MENU = _UxGT("Laser");
LSTR MSG_SPINDLE_MENU = _UxGT("Spindel-Steuerung");
LSTR MSG_LASER_POWER = _UxGT("Laserleistung");
LSTR MSG_SPINDLE_POWER = _UxGT("Spindelleistung");
LSTR MSG_LASER_TOGGLE = _UxGT("Laser umschalten");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Gebläse umschalten");
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Luftunterstützung");
LSTR MSG_LASER_PULSE_MS = _UxGT("Test Impuls ms");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Impuls");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Feh. Kühlmittelfluss");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Spindel umschalten");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vakuum umschalten");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindel vorwärts");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindelrichtung");
LSTR MSG_SWITCH_PS_ON = _UxGT("Netzteil ein");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Netzteil aus");
LSTR MSG_EXTRUDE = _UxGT("Extrudieren");
LSTR MSG_RETRACT = _UxGT("Einzug");
LSTR MSG_MOVE_AXIS = _UxGT("Achsen bewegen");
LSTR MSG_BED_LEVELING = _UxGT("Bett-Nivellierung");
LSTR MSG_LEVEL_BED = _UxGT("Bett nivellieren");
LSTR MSG_BED_TRAMMING = _UxGT("Bett ausrichten");
LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Manuelles ausrichten");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Das Bett anpassen, bis zum auslösen.");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Ecken in der Toleranz. Bett ausger.");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Gute Punkte: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Letztes Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Nächste Ecke");
LSTR MSG_MESH_EDITOR = _UxGT("Netz Editor");
LSTR MSG_MESH_VIEWER = _UxGT("Netzbetrachter");
LSTR MSG_EDIT_MESH = _UxGT("Netz bearbeiten");
LSTR MSG_MESH_VIEW = _UxGT("Netz ansehen");
LSTR MSG_EDITING_STOPPED = _UxGT("Netzbearb. angeh.");
LSTR MSG_NO_VALID_MESH = _UxGT("Kein gültiges Netz");
LSTR MSG_ACTIVATE_MESH = _UxGT("Nivellierung aktiv.");
LSTR MSG_PROBING_POINT = _UxGT("Messpunkt");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_INSET = _UxGT("Mesh-Einsatz");
LSTR MSG_MESH_MIN_X = _UxGT("Mesh X Minimum");
LSTR MSG_MESH_MAX_X = _UxGT("Mesh X Maximum");
LSTR MSG_MESH_MIN_Y = _UxGT("Mesh Y Minimum");
LSTR MSG_MESH_MAX_Y = _UxGT("Mesh Y Maximum");
LSTR MSG_MESH_AMAX = _UxGT("Bereich maximieren");
LSTR MSG_MESH_CENTER = _UxGT("Center Area");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z-Wert");
LSTR MSG_MESH_CANCEL = _UxGT("Mesh abgebrochen");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Benutzer-Menü");
LSTR MSG_M48_TEST = _UxGT("M48 Sondentest");
LSTR MSG_M48_POINT = _UxGT("M48 Punkt");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Zu weit draußen");
LSTR MSG_M48_DEVIATION = _UxGT("Abweichung");
LSTR MSG_IDEX_MENU = _UxGT("IDEX-Modus");
LSTR MSG_OFFSETS_MENU = _UxGT("Werkzeugversätze");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Autom. parken");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplizieren");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Spiegelkopie");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("vollstä. Kontrolle");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-Lücke duplizieren");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. Düse Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. Düse @");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 ausführen");
LSTR MSG_UBL_TOOLS = _UxGT("UBL-Werkzeuge");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Berührungspunkt");
LSTR MSG_UBL_TILT_MESH = _UxGT("Tilt Mesh");
LSTR MSG_UBL_TILTING_GRID = _UxGT("Tilting Grid Size");
LSTR MSG_UBL_MESH_TILTED = _UxGT("Mesh Tilted");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Netz manuell erst.");
LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Netz Assistent");
LSTR MSG_UBL_BC_INSERT = _UxGT("Unterlegen & messen");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Messen");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Entfernen & messen");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Nächster Punkt...");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktivieren");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktivieren");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Betttemperatur");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Betttemperatur");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend-Temp.");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend-Temp.");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Netz bearbeiten");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Eigenes Netz bearb.");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Feineinstellung...");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Bearbeitung beendet");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Eigenes Netz erst.");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Netz erstellen");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ Netz erstellen");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Netz erstellen kalt");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Netzhöhe einst.");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höhe");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Netz validieren");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ Netz validieren");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Eig. Netz validieren");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 heizt Bett");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Düse aufheizen");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuell Prime...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Feste Länge Prime");
LSTR MSG_G26_PRIME_DONE = _UxGT("Priming fertig");
LSTR MSG_G26_CANCELED = _UxGT("G26 abgebrochen");
LSTR MSG_G26_LEAVING = _UxGT("G26 verlassen");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Netzerst. forts.");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Netz-Nivellierung");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkt-Nivell.");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Gitternetz-Nivell.");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Netz nivellieren");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Eckpunkte");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Kartentyp");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Karte ausgeben");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Ausgabe für Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Ausgabe für CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externe Sicherung");
LSTR MSG_UBL_INFO_UBL = _UxGT("UBL-Info ausgeben");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Menge an Füllung");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuelles Füllen");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Cleveres Füllen");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Netz Füllen");
LSTR MSG_UBL_MESH_FILLED = _UxGT("Fehlende Punkte erg.");
LSTR MSG_UBL_MESH_INVALID = _UxGT("Ungültiges Netz");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Alles annullieren");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Nächstlieg. ann.");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Feineinst. Alles");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Feineinst. Nächstl.");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Netz-Speicherplatz");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Speicherort");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Bettnetz laden");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Bettnetz speichern");
LSTR MSG_UBL_INVALID_SLOT = _UxGT("Wähle einen Mesh-Slot");
LSTR MSG_MESH_LOADED = _UxGT("Netz %i geladen");
LSTR MSG_MESH_SAVED = _UxGT("Netz %i gespeichert");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Kein Speicher");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err:UBL speichern");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err:UBL wiederherst.");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Versatz: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Versatz angehalten");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Schrittweises UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Netz kalt erstellen");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Intelligent Füllen");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Netz validieren");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Alles Feineinst.");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Netz validieren");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Alles Feineinst.");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Bettnetz speichern");
LSTR MSG_LED_CONTROL = _UxGT("Licht-Steuerung");
LSTR MSG_LEDS = _UxGT("Licht");
LSTR MSG_LED_PRESETS = _UxGT("Licht-Einstellung");
LSTR MSG_SET_LEDS_RED = _UxGT("Rot");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Gelb");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Grün");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Blau");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violett");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Weiß");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal =");
LSTR MSG_LEDS2 = _UxGT("Lichter #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Licht #2 Voreinst.");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Helligkeit");
LSTR MSG_CUSTOM_LEDS = _UxGT("Benutzerdefiniert");
LSTR MSG_INTENSITY_R = _UxGT("Intensität Rot");
LSTR MSG_INTENSITY_G = _UxGT("Intensität Grün");
LSTR MSG_INTENSITY_B = _UxGT("Intensität Blau");
LSTR MSG_INTENSITY_W = _UxGT("Intensität Weiß");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Helligkeit");
LSTR MSG_MOVING = _UxGT("In Bewegung...");
LSTR MSG_FREE_XY = _UxGT("Abstand XY");
LSTR MSG_MOVE_X = _UxGT("Bewege X");
LSTR MSG_MOVE_Y = _UxGT("Bewege Y");
LSTR MSG_MOVE_Z = _UxGT("Bewege Z");
LSTR MSG_MOVE_N = _UxGT("Bewege @");
LSTR MSG_MOVE_E = _UxGT("Bewege Extruder");
LSTR MSG_MOVE_EN = _UxGT("Bewege Extruder *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend zu kalt");
LSTR MSG_MOVE_N_MM = _UxGT(" $ mm");
LSTR MSG_MOVE_01MM = _UxGT(" 0,1 mm");
LSTR MSG_MOVE_1MM = _UxGT(" 1,0 mm");
LSTR MSG_MOVE_10MM = _UxGT(" 10,0 mm");
LSTR MSG_MOVE_100MM = _UxGT("100,0 mm");
LSTR MSG_MOVE_0001IN = _UxGT("0.001 in");
LSTR MSG_MOVE_001IN = _UxGT("0.010 in");
LSTR MSG_MOVE_01IN = _UxGT("0.100 in");
LSTR MSG_MOVE_1IN = _UxGT("1.000 in");
LSTR MSG_SPEED = _UxGT("Geschw.");
LSTR MSG_BED_Z = _UxGT("Bett Z");
LSTR MSG_NOZZLE = _UxGT("Düse");
LSTR MSG_NOZZLE_N = _UxGT("Düse ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Düse geparkt");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Düse bereit");
LSTR MSG_BED = _UxGT("Bett");
LSTR MSG_CHAMBER = _UxGT("Gehäuse");
LSTR MSG_COOLER = _UxGT("Laser-Kühlmittel");
LSTR MSG_COOLER_TOGGLE = _UxGT("Kühler umschalten");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Durchflusssicherheit");
LSTR MSG_LASER = _UxGT("Laser");
LSTR MSG_FAN_SPEED = _UxGT("Lüfter");
LSTR MSG_FAN_SPEED_N = _UxGT("Lüfter ~");
LSTR MSG_STORED_FAN_N = _UxGT("Gespeich. Lüfter ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Geschw. Extralüfter");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Geschw. Extralüfter ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Lüfter Kontroller");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Lüfter Leerlauf");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Motorlast Modus");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Lüfter Motorlast");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Ausschalt Delay");
LSTR MSG_FLOW = _UxGT("Flussrate");
LSTR MSG_FLOW_N = _UxGT("Flussrate ~");
LSTR MSG_CONTROL = _UxGT("Einstellungen");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Faktor");
LSTR MSG_AUTOTEMP = _UxGT("Auto Temperatur");
LSTR MSG_LCD_ON = _UxGT("an");
LSTR MSG_LCD_OFF = _UxGT("aus");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
LSTR MSG_PID_CYCLE = _UxGT("PID Zyklus");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID Tuning fertig");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune fehlge.!");
LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("ungültiger Extruder.");
LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperatur zu hoch.");
LSTR MSG_TIMEOUT = _UxGT("Timeout.");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune fehlge.! Ungültiger Extruder");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune fehlge.! Temperatur zu hoch.");
LSTR MSG_PID_TIMEOUT = _UxGT("Autotune fehlge.! Timeout.");
LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("teste Wärmeverlust");
LSTR MSG_MPC_AUTOTUNE = _UxGT("Autotune MPC");
LSTR MSG_MPC_EDIT = _UxGT("MPC * bearbeiten");
LSTR MSG_MPC_POWER_E = _UxGT("* Leistung");
LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Block C *");
LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor res *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient h *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *");
LSTR MSG_SELECT = _UxGT("Auswählen");
LSTR MSG_SELECT_E = _UxGT("Auswählen *");
LSTR MSG_ACC = _UxGT("Beschleunigung");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk");
LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk");
LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk");
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max ") STR_E _UxGT(" Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
LSTR MSG_MAX_SPEED = _UxGT("Max Geschw. (mm/s)");
LSTR MSG_VMAX_A = _UxGT("V max ") STR_A;
LSTR MSG_VMAX_B = _UxGT("V max ") STR_B;
LSTR MSG_VMAX_C = _UxGT("V max ") STR_C;
LSTR MSG_VMAX_N = _UxGT("V max @");
LSTR MSG_VMAX_E = _UxGT("V max ") STR_E;
LSTR MSG_VMAX_EN = _UxGT("V max *");
LSTR MSG_VMIN = _UxGT("V min ");
LSTR MSG_VTRAV_MIN = _UxGT("V min Leerfahrt");
LSTR MSG_ACCELERATION = _UxGT("Beschleunigung");
LSTR MSG_AMAX_A = _UxGT("A max ") STR_A;
LSTR MSG_AMAX_B = _UxGT("A max ") STR_B;
LSTR MSG_AMAX_C = _UxGT("A max ") STR_C;
LSTR MSG_AMAX_N = _UxGT("A max @");
LSTR MSG_AMAX_E = _UxGT("A max ") STR_E;
LSTR MSG_AMAX_EN = _UxGT("A max *");
LSTR MSG_A_RETRACT = _UxGT("A Einzug");
LSTR MSG_A_TRAVEL = _UxGT("A Leerfahrt");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("max. Frequenz");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("min. Vorschub");
LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" Steps/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" Steps/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" Steps/mm");
LSTR MSG_N_STEPS = _UxGT("@ Steps/mm");
LSTR MSG_E_STEPS = _UxGT("E Steps/mm");
LSTR MSG_EN_STEPS = _UxGT("* Steps/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
LSTR MSG_MOTION = _UxGT("Bewegung");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Filamentdurchmesser");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Filamentdurchmesser *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Entladen mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Laden mm");
LSTR MSG_ADVANCE_K = _UxGT("Vorschubfaktor");
LSTR MSG_ADVANCE_K_E = _UxGT("Vorschubfaktor *");
LSTR MSG_CONTRAST = _UxGT("LCD-Kontrast");
LSTR MSG_BRIGHTNESS = _UxGT("LCD-Helligkeit");
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("LCD-Ruhezustand (s)");
LSTR MSG_SCREEN_TIMEOUT = _UxGT("LCD Timeout (m)");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("LCD ausschalten");
LSTR MSG_STORE_EEPROM = _UxGT("Konfig. speichern");
LSTR MSG_LOAD_EEPROM = _UxGT("Konfig. laden");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
LSTR MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fehler");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fehler");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fehler");
LSTR MSG_SETTINGS_STORED = _UxGT("Einstell. gespei.");
LSTR MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
LSTR MSG_RESET_PRINTER = _UxGT("Drucker neustarten");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aktualisieren");
LSTR MSG_INFO_SCREEN = _UxGT("Info");
LSTR MSG_INFO_MACHINENAME = _UxGT("Machine Name");
LSTR MSG_INFO_SIZE = _UxGT("Größe");
LSTR MSG_INFO_FWVERSION = _UxGT("Firmware Version");
LSTR MSG_INFO_BUILD = _UxGT("Build Datum");
LSTR MSG_PREPARE = _UxGT("Vorbereitung");
LSTR MSG_TUNE = _UxGT("Justierung");
LSTR MSG_POWER_MONITOR = _UxGT("Power Monitor");
LSTR MSG_CURRENT = _UxGT("Strom");
LSTR MSG_VOLTAGE = _UxGT("Spannung");
LSTR MSG_POWER = _UxGT("Power");
LSTR MSG_START_PRINT = _UxGT("Starte Druck");
LSTR MSG_BUTTON_NEXT = _UxGT("Weiter");
LSTR MSG_BUTTON_INIT = _UxGT("Bestätigen");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Drucken");
LSTR MSG_BUTTON_RESET = _UxGT("Reseten");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorieren");
LSTR MSG_BUTTON_CANCEL = _UxGT("Abbrechen");
LSTR MSG_BUTTON_CONFIRM = _UxGT("Bestätigen");
LSTR MSG_BUTTON_CONTINUE = _UxGT("Fortsetzen");
LSTR MSG_BUTTON_DONE = _UxGT("Fertig");
LSTR MSG_BUTTON_BACK = _UxGT("Zurück");
LSTR MSG_BUTTON_PROCEED = _UxGT("Weiter");
LSTR MSG_BUTTON_SKIP = _UxGT("Überspringen");
LSTR MSG_BUTTON_INFO = _UxGT("Info");
LSTR MSG_BUTTON_LEVEL = _UxGT("Level");
LSTR MSG_BUTTON_PAUSE = _UxGT("Pause");
LSTR MSG_BUTTON_RESUME = _UxGT("Fortsetzen");
LSTR MSG_BUTTON_ADVANCED = _UxGT("Erweitert");
LSTR MSG_BUTTON_SAVE = _UxGT("Speichern");
LSTR MSG_BUTTON_PURGE = _UxGT("Reinigen");
LSTR MSG_PAUSING = _UxGT("Pause...");
LSTR MSG_PAUSE_PRINT = _UxGT("SD-Druck pausieren");
LSTR MSG_ADVANCED_PAUSE = _UxGT("Erweiterte Pause");
LSTR MSG_RESUME_PRINT = _UxGT("SD-Druck fortsetzen");
LSTR MSG_HOST_START_PRINT = _UxGT("Host-Druck starten");
LSTR MSG_STOP_PRINT = _UxGT("SD-Druck abbrechen");
LSTR MSG_END_LOOPS = _UxGT("Wiederholung beenden");
LSTR MSG_PRINTING_OBJECT = _UxGT("Objekt drucken");
LSTR MSG_CANCEL_OBJECT = _UxGT("Objekt abbrechen");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma.");
LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Druckauftrag fortset.");
LSTR MSG_MEDIA_MENU = _UxGT("Druck vom Medium");
LSTR MSG_NO_MEDIA = _UxGT("Kein Medium");
LSTR MSG_DWELL = _UxGT("Warten...");
LSTR MSG_USERWAIT = _UxGT("Klick zum Fortsetzen");
LSTR MSG_PRINT_PAUSED = _UxGT("Druck pausiert...");
LSTR MSG_PRINTING = _UxGT("Druckt...");
LSTR MSG_STOPPING = _UxGT("Stoppen...");
LSTR MSG_REMAINING_TIME = _UxGT("Verbleiben");
LSTR MSG_PRINT_ABORTED = _UxGT("Druck abgebrochen");
LSTR MSG_PRINT_DONE = _UxGT("Druck fertig");
LSTR MSG_PRINTER_KILLED = _UxGT("Drucker killed!");
LSTR MSG_TURN_OFF = _UxGT("Drucker ausschalten");
LSTR MSG_NO_MOVE = _UxGT("Motoren angeschaltet");
LSTR MSG_KILLED = _UxGT("ABGEBROCHEN");
LSTR MSG_STOPPED = _UxGT("ANGEHALTEN");
LSTR MSG_FWRETRACT = _UxGT("Firmware Retract");
LSTR MSG_CONTROL_RETRACT = _UxGT("Einzug mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Wechs. Einzug mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("V Einzug");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z-Sprung mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Wechs. Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Autom. Einzug");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Einzugslänge");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra Einzug");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Entladelänge");
LSTR MSG_TOOL_CHANGE = _UxGT("Werkzeugwechsel");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z anheben");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime-Geschwin.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Einzug-Geschwin.");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Kopf parken");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rückzugsgeschwindigkeit");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Lüfter Geschwindigkeit");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Lüfter Zeit");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto AN");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AUS");
LSTR MSG_TOOL_MIGRATION = _UxGT("Werkzeugmigration");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-Migration");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Letzter Extruder");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrieren zu *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Filament wechseln");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Filament wechseln *");
LSTR MSG_FILAMENTLOAD = _UxGT("Filament laden");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Filament laden *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Filament entladen");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Filament entladen *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen");
LSTR MSG_ATTACH_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface
LSTR MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
LSTR MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
LSTR MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb");
LSTR MSG_SKEW_FACTOR = _UxGT("Korrekturfaktor");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Selbsttest");
LSTR MSG_BLTOUCH_RESET = _UxGT("Zurücksetzen");
LSTR MSG_BLTOUCH_STOW = _UxGT("Einfahren");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Ausfahren");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modus");
LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("High Speed");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modus");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modus");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Setze auf 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Setze auf OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Modus: ");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("TouchMI initial.");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z-Versatz");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Speichern");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI ausfahren");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Sonde ausfahren");
LSTR MSG_MANUAL_STOW = _UxGT("Z-Sonde einfahren");
LSTR MSG_HOME_FIRST = _UxGT("Vorher %s%s%s homen");
LSTR MSG_ZPROBE_SETTINGS = _UxGT("Sondeneinstellungen");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Sondenversatz");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Sondenversatz X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Sondenversatz Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Sondenversatz Z");
LSTR MSG_ZPROBE_MARGIN = _UxGT("Sondenrand");
LSTR MSG_Z_FEED_RATE = _UxGT("Z-Vorschub");
LSTR MSG_ENABLE_HS_MODE = _UxGT("HS-Modus aktivieren");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Bewege Düse zum Bett");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Abbr. mit Endstopp");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("HEIZEN ERFOLGLOS");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEMP-ABWEI.");
LSTR MSG_THERMAL_RUNAWAY = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP-FEHLER");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Kühler Runaway");
LSTR MSG_COOLING_FAILED = _UxGT("Kühlung fehlgeschla.");
LSTR MSG_ERR_MAXTEMP = " " LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN");
LSTR MSG_ERR_MINTEMP = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
LSTR MSG_HALTED = _UxGT("DRUCKER GESTOPPT");
LSTR MSG_PLEASE_WAIT = _UxGT("Bitte warten...");
LSTR MSG_PLEASE_RESET = _UxGT("Bitte neustarten");
LSTR MSG_PREHEATING = _UxGT("vorheizen...");
LSTR MSG_HEATING = _UxGT("heizt...");
LSTR MSG_COOLING = _UxGT("kühlt...");
LSTR MSG_BED_HEATING = _UxGT("Bett heizt...");
LSTR MSG_BED_COOLING = _UxGT("Bett kühlt...");
LSTR MSG_PROBE_HEATING = _UxGT("Sonde heizt...");
LSTR MSG_PROBE_COOLING = _UxGT("Sonde kühlt...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Gehäuse heizt...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Gehäuse kühlt...");
LSTR MSG_LASER_COOLING = _UxGT("Laser kühlt...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrieren");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriere X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriere Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriere Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriere Mitte");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Einst. anzeig.");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autom. Kalibrierung");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
LSTR MSG_DELTA_HEIGHT = _UxGT("Höhe");
LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
LSTR MSG_INFO_MENU = _UxGT("Über den Drucker");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Drucker-Info");
LSTR MSG_3POINT_LEVELING = _UxGT("3-Punkt-Nivellierung");
LSTR MSG_LINEAR_LEVELING = _UxGT("Lineare Nivellierung");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineare Nivell.");
LSTR MSG_UBL_LEVELING = _UxGT("Einheit. Bettnivell.");
LSTR MSG_MESH_LEVELING = _UxGT("Netz-Nivellierung");
LSTR MSG_MESH_DONE = _UxGT("Nivellierung fertig");
LSTR MSG_INFO_STATS_MENU = _UxGT("Drucker-Statistik");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Board-Info");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistoren");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruder");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baudrate");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoll");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: AUS");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: AN");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fehler Lüftergeschw.");
LSTR MSG_CASE_LIGHT = _UxGT("Beleuchtung");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Helligkeit");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Falscher Drucker");
LSTR MSG_COLORS_GET = _UxGT("Farbe");
LSTR MSG_COLORS_SELECT = _UxGT("Farben auswählen");
LSTR MSG_COLORS_APPLIED = _UxGT("Farben verwenden");
LSTR MSG_COLORS_RED = _UxGT("Rot");
LSTR MSG_COLORS_GREEN = _UxGT("Grün");
LSTR MSG_COLORS_BLUE = _UxGT("Blau");
LSTR MSG_COLORS_WHITE = _UxGT("Weiß");
LSTR MSG_UI_LANGUAGE = _UxGT("UI Sprache");
LSTR MSG_SOUND_ENABLE = _UxGT("Ton aktivieren");
LSTR MSG_LOCKSCREEN = _UxGT("Bildschirm sperren");
LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Drucker ist gesperrt,");
LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("Scrollen zum Entsper.");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Kein Medium eingelegt.");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Bitte auf Neustart warten.");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Bitte das Hotend vorheizen.");
LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Druckzähler zurücksetzen");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste Druckzeit");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Gesamt Extrudiert");
#else
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Auf Neustart warten");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Bitte vorheizen");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Drucke");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
LSTR MSG_INFO_PSU = _UxGT("Netzteil");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Motorleistung");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Treiber %");
LSTR MSG_ERROR_TMC = _UxGT("TMC Verbindungsfehler");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Werte speichern");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT WECHSEL");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("DRUCK PAUSIERT");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMENT LADEN");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMENT ENTLADEN");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FORTS. OPTIONEN:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Mehr entladen");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Druck weiter");
LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Löschen o. fortfah.?");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Düse: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout-Sensor");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout-Weg mm");
LSTR MSG_RUNOUT_ENABLE = _UxGT("Runout aktivieren");
LSTR MSG_RUNOUT_ACTIVE = _UxGT("Runout aktiv");
LSTR MSG_INVERT_EXTRUDER = _UxGT("Invert Extruder");
LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Extruder Min Temp.");
LSTR MSG_FANCHECK = _UxGT("Lüftergeschw. prüfen");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing gescheitert");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing gescheitert");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMENT WÄHLEN");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU handeln erfor.");
LSTR MSG_MMU2_RESUME = _UxGT("Druck fortsetzen");
LSTR MSG_MMU2_RESUMING = _UxGT("Fortfahren...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Filament laden");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Lade alle");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Düse laden");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Filament auswerfen");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filament ~ auswerfen");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filament entladen ");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Lade Fila. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fila. auswerfen...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fila. entladen...");
LSTR MSG_MMU2_ALL = _UxGT("Alle");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("setze MMU zurück");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU zurücksetzen...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Entfernen, klicken");
LSTR MSG_MIX = _UxGT("Mix");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponente =");
LSTR MSG_MIXER = _UxGT("Mixer");
LSTR MSG_GRADIENT = _UxGT("Gradient"); // equal Farbverlauf
LSTR MSG_FULL_GRADIENT = _UxGT("Volle Gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Mix umschalten");
LSTR MSG_CYCLE_MIX = _UxGT("Zyklus Mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Umgekehrte Gradient");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktives V-Tool");
LSTR MSG_START_VTOOL = _UxGT("V-Tool Start");
LSTR MSG_END_VTOOL = _UxGT("V-Tool Ende");
LSTR MSG_GRADIENT_ALIAS = _UxGT("V-Tool Alias");
LSTR MSG_RESET_VTOOLS = _UxGT("V-Tools Reseten");
LSTR MSG_COMMIT_VTOOL = _UxGT("V-Tool Mix sichern");
LSTR MSG_VTOOLS_RESET = _UxGT("V-Tools ist resetet");
LSTR MSG_START_Z = _UxGT("Z Start:");
LSTR MSG_END_Z = _UxGT("Z Ende:");
LSTR MSG_GAMES = _UxGT("Spiele");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
LSTR MSG_BAD_PAGE = _UxGT("ungült. Seitenzahl");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("ungült. Seitengeschw.");
LSTR MSG_EDIT_PASSWORD = _UxGT("Passwort bearbeiten");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Login erforderlich");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Passwort Einstellungen");
LSTR MSG_ENTER_DIGIT = _UxGT("PIN eingeben");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Passwort ändern");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Passwort löschen");
LSTR MSG_PASSWORD_SET = _UxGT("Passwort ist ");
LSTR MSG_START_OVER = _UxGT("von vorn beginnen");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Bald speichern!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Passwort gelöscht");
//
// Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
// ...oder 2 Zeilen auf einem 3-Zeilen-Display.
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Knopf drücken um", "Druck fortzusetzen"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_2_LINE("Druck ist", "pausiert..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Warte auf den", "Start des", "Filamentwechsels..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filament einlegen", "und Knopf drücken", "um fortzusetzen"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Knopf drücken um", "Düse aufzuheizen"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Düse heizt auf", "bitte warten..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Warte auf", "Entnahme", "des Filaments..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Warte auf", "Laden des", "Filaments..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Warte auf", "Spülung", "der Düse..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klicke um", "die Düsenspülung", "zu beenden"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Warte auf", "Fortsetzen des", "Drucks..."));
#else // LCD_HEIGHT < 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick zum Fortsetzen"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Pausiert..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Bitte warten..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Laden und Klick"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klick zum Heizen"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heizen..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Entnehmen..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laden..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spülen..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klick zum beenden", "der Düsenspülung"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsetzen..."));
#endif // LCD_HEIGHT < 4
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Treiber"); // Max length 18 characters
LSTR MSG_TMC_CURRENT = _UxGT("Treiber Strom");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid threshold");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorloses Homing");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Schrittmodus");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop einsch.");
LSTR MSG_SERVICE_RESET = _UxGT("Reset");
LSTR MSG_SERVICE_IN = _UxGT(" im:");
LSTR MSG_BACKLASH = _UxGT("Spiel");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrektur");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Glätten");
LSTR MSG_LEVEL_X_AXIS = _UxGT("X Achse leveln");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto. Kalibiren");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Idle Timeout, Temperatur gefallen. Drücke Okay, um erneut aufzuheizen und fortzufahren.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Heizungs Timeout");
#endif
LSTR MSG_REHEAT = _UxGT("Erneut aufheizen");
LSTR MSG_REHEATING = _UxGT("Erneut aufhei. ...");
LSTR MSG_REHEATDONE = _UxGT("Aufwärmen fertig");
LSTR MSG_PROBE_WIZARD = _UxGT("Sonden-Assistent");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Sonden-Bezug");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Bewege zur Position");
LSTR MSG_XATC = _UxGT("X-Verdreh-Assistent");
LSTR MSG_XATC_DONE = _UxGT("X-Verdreh-Assi fertig!");
LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Z-Versatz Sonde akt. auf ");
LSTR MSG_SOUND = _UxGT("Ton");
LSTR MSG_TOP_LEFT = _UxGT("Oben Links");
LSTR MSG_BOTTOM_LEFT = _UxGT("Unten Links");
LSTR MSG_TOP_RIGHT = _UxGT("Oben Rechts");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Unten Rechts");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrierung beendet");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrierung geschei.");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" Driver zurück");
LSTR MSG_SD_CARD = _UxGT("SD Karte");
LSTR MSG_USB_DISK = _UxGT("USB Disk");
LSTR MSG_HOST_SHUTDOWN = _UxGT("Host abschalten");
LSTR MSG_SHORT_DAY = _UxGT("t"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
}

View File

@ -0,0 +1,210 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Greek
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_GREEK
namespace Language_el {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Greek (Greece)");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμος.");
LSTR MSG_YES = _UxGT("ΝΑΙ");
LSTR MSG_NO = _UxGT("ΟΧΙ");
LSTR MSG_BACK = _UxGT("Πίσω");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Προχωρημένες ρυθμίσεις");
LSTR MSG_CONFIGURATION = _UxGT("Διαμόρφωση");
LSTR MSG_MEDIA_INSERTED = _UxGT("Κάρτα εισήχθη");
LSTR MSG_MEDIA_REMOVED = _UxGT("Κάρτα αφαιρέθη");
LSTR MSG_MEDIA_WAITING = _UxGT("Αναμονή για κάρτα");
LSTR MSG_MEDIA_ABORTING = _UxGT("Ματαίωση...");
LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" σφάλμα ανάγνωσης");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB αφαιρέθη");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Αποτυχία εκκίνησης USB");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Αποτυχία αρχικοποίησης SD");
LSTR MSG_MAIN = _UxGT("Αρχική Οθόνη");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση μοτέρ");
LSTR MSG_AUTO_HOME = _UxGT("Αυτόμ. επαναφορά XYZ");
LSTR MSG_AUTO_HOME_X = _UxGT("Επαναφορά X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Επαναφορά Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Επαναφορά Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Αυτόμ. επαναφορά XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Πιέστε για έναρξη");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Τέλος επιπεδοποίησης!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός μετατοπίσεων");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμογή μετατοπίσεων");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" bed"); //SHORTEN
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
LSTR MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
LSTR MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ bed"); //SHORTEN
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση"); //SHORTEN
#endif
LSTR MSG_COOLDOWN = _UxGT("Αποθέρμανση");
LSTR MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
LSTR MSG_EXTRUDE = _UxGT("Εξώθηση");
LSTR MSG_RETRACT = _UxGT("Ανάσυρση");
LSTR MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
LSTR MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
LSTR MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
LSTR MSG_MOVE_X = _UxGT("Μετακίνηση X");
LSTR MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
LSTR MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
LSTR MSG_MOVE_N = _UxGT("Μετακίνηση @");
LSTR MSG_MOVE_E = _UxGT("Εξωθητής");
LSTR MSG_MOVE_EN = _UxGT("Εξωθητής *");
LSTR MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
LSTR MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
LSTR MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
LSTR MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
LSTR MSG_SPEED = _UxGT("Ταχύτητα");
LSTR MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
LSTR MSG_BED = _UxGT("Επ. Εκτύπωσης");
LSTR MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
LSTR MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
LSTR MSG_FLOW = _UxGT("Ροή");
LSTR MSG_FLOW_N = _UxGT("Ροή ~");
LSTR MSG_CONTROL = _UxGT("Έλεγχος");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Αυτορρύθμιση θερ/σίας");
LSTR MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
LSTR MSG_ACC = _UxGT("Επιτάχυνση");
LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") STR_A;
LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") STR_B;
LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") STR_C;
LSTR MSG_VN_JERK = _UxGT("Vαντίδραση @");
LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E");
LSTR MSG_VMAX_A = _UxGT("V Μέγιστο") STR_A;
LSTR MSG_VMAX_B = _UxGT("V Μέγιστο") STR_B;
LSTR MSG_VMAX_C = _UxGT("V Μέγιστο") STR_C;
LSTR MSG_VMAX_N = _UxGT("V Μέγιστο@");
LSTR MSG_VMAX_E = _UxGT("V ΜέγιστοE");
LSTR MSG_VMAX_EN = _UxGT("V Μέγιστο *");
LSTR MSG_VMIN = _UxGT("V Ελάχιστο");
LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
LSTR MSG_ACCELERATION = _UxGT("Accel");
LSTR MSG_AMAX_A = _UxGT("Aμεγ ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Aμεγ ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Aμεγ ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Aμεγ @");
LSTR MSG_AMAX_E = _UxGT("Aμεγ E");
LSTR MSG_AMAX_EN = _UxGT("Aμεγ *");
LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
LSTR MSG_A_STEPS = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ");
LSTR MSG_B_STEPS = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ");
LSTR MSG_C_STEPS = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ");
LSTR MSG_N_STEPS = _UxGT("Bήματα @ ανά μμ");
LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
LSTR MSG_MOTION = _UxGT("Κίνηση");
LSTR MSG_FILAMENT = _UxGT("Νήμα");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
LSTR MSG_CONTRAST = _UxGT("Αντίθεση LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Αποθήκευση σε EEPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Φόρτωση από EEPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά προεπιλογών");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
LSTR MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
LSTR MSG_PREPARE = _UxGT("Προετοιμασία");
LSTR MSG_TUNE = _UxGT("Συντονισμός");
LSTR MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
LSTR MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
LSTR MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
LSTR MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
LSTR MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
LSTR MSG_DWELL = _UxGT("Αναστολή λειτουργίας");
LSTR MSG_USERWAIT = _UxGT("Αναμονή για χρήστη");
LSTR MSG_PRINT_ABORTED = _UxGT("Εκτύπωση διεκόπη");
LSTR MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
LSTR MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
LSTR MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης mm"); //SHORTEN
LSTR MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
LSTR MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
LSTR MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
LSTR MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πρώτα");
LSTR MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
LSTR MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
LSTR MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
LSTR MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Ακύρωση endstop");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Αποτυχία θέρμανσης");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΘΕΡΜΙΚΗ ΔΙΑΦΥΓΗ");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("ΘΕΡΜΙΚΗ ΔΥΣΛΕΙΤΟΥΡΓΙΑ");
LSTR MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
LSTR MSG_ERR_MINTEMP = _UxGT("ΑΝΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑ");
LSTR MSG_HALTED = _UxGT("Εκτυπωτής διεκόπη");
LSTR MSG_HEATING = _UxGT("Θερμαίνεται…");
LSTR MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
}

View File

@ -0,0 +1,38 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Greek (Cyprus)
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#include "language_el.h"
namespace Language_el_CY {
using namespace Language_el; // Inherit undefined strings from Greek (or English)
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Greek (Cyprus)");
}

View File

@ -0,0 +1,198 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Greek (Greece)
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_GREEK
namespace Language_el_gr {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Greek (Greece)");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
LSTR MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Βασική Οθόνη");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή");
LSTR MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
LSTR MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Κάντε κλικ για να ξεκινήσετε");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" κλίνη");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση");
LSTR MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
LSTR MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ κλίνη");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση");
#endif
LSTR MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
LSTR MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
LSTR MSG_EXTRUDE = _UxGT("Εξώθηση");
LSTR MSG_RETRACT = _UxGT("Ανάσυρση");
LSTR MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
LSTR MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
LSTR MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
LSTR MSG_MOVE_X = _UxGT("Μετακίνηση X");
LSTR MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
LSTR MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
LSTR MSG_MOVE_N = _UxGT("Μετακίνηση @");
LSTR MSG_MOVE_E = _UxGT("Εξωθητήρας");
LSTR MSG_MOVE_EN = _UxGT("Εξωθητήρας *");
LSTR MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
LSTR MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
LSTR MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
LSTR MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
LSTR MSG_SPEED = _UxGT("Ταχύτητα");
LSTR MSG_BED_Z = _UxGT("Κλίνη Z");
LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
LSTR MSG_BED = _UxGT("Κλίνη");
LSTR MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
LSTR MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
LSTR MSG_FLOW = _UxGT("Ροή");
LSTR MSG_FLOW_N = _UxGT("Ροή ~");
LSTR MSG_CONTROL = _UxGT("Έλεγχος");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
LSTR MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
LSTR MSG_ACC = _UxGT("Επιτάχυνση");
LSTR MSG_JERK = _UxGT("Vαντίδραση");
LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") STR_A;
LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") STR_B;
LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") STR_C;
LSTR MSG_VN_JERK = _UxGT("Vαντίδραση @");
LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E");
LSTR MSG_VMAX_A = _UxGT("Vμεγ ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Vμεγ ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Vμεγ ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Vμεγ @");
LSTR MSG_VMAX_E = _UxGT("Vμεγ E");
LSTR MSG_VMAX_EN = _UxGT("Vμεγ *");
LSTR MSG_VMIN = _UxGT("Vελαχ");
LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
LSTR MSG_ACCELERATION = _UxGT("Accel");
LSTR MSG_AMAX_A = _UxGT("Aμεγ ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Aμεγ ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Aμεγ ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Aμεγ @");
LSTR MSG_AMAX_E = _UxGT("Aμεγ E");
LSTR MSG_AMAX_EN = _UxGT("Aμεγ *");
LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
LSTR MSG_A_STEPS = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ");
LSTR MSG_B_STEPS = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ");
LSTR MSG_C_STEPS = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ");
LSTR MSG_N_STEPS = _UxGT("Bήματα @ ανά μμ");
LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
LSTR MSG_MOTION = _UxGT("Κίνηση");
LSTR MSG_FILAMENT = _UxGT("Νήμα");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
LSTR MSG_CONTRAST = _UxGT("Κοντράστ LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
LSTR MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
LSTR MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
LSTR MSG_PREPARE = _UxGT("Προετοιμασία");
LSTR MSG_TUNE = _UxGT("Συντονισμός");
LSTR MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
LSTR MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
LSTR MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
LSTR MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
LSTR MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
LSTR MSG_DWELL = _UxGT("Αναστολή λειτουργίας…");
LSTR MSG_USERWAIT = _UxGT("Αναμονή για χρήστη…");
LSTR MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση");
LSTR MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
LSTR MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
LSTR MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
LSTR MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
LSTR MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης");
LSTR MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");
LSTR MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
LSTR MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
LSTR MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
LSTR MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Ματαίωση endstop ");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ");
LSTR MSG_ERR_MAXTEMP = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
LSTR MSG_ERR_MINTEMP = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
LSTR MSG_HEATING = _UxGT("Θερμαίνεται…");
LSTR MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης…");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
}

View File

@ -0,0 +1,848 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* English
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Substitutions are applied for the following characters when used in menu items titles:
*
* $ displays an inserted string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
* @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define en 1234
#if LCD_LANGUAGE == en
#define NOT_EXTENDED_ISO10646_1_5X7
#endif
#undef en
#define MEDIA_TYPE_EN "Media"
namespace Language_en {
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("English");
// These strings should be translated
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Ready.");
LSTR MSG_YES = _UxGT("YES");
LSTR MSG_NO = _UxGT("NO");
LSTR MSG_HIGH = _UxGT("HIGH");
LSTR MSG_LOW = _UxGT("LOW");
LSTR MSG_BACK = _UxGT("Back");
LSTR MSG_ERROR = _UxGT("Error");
LSTR MSG_MEDIA_ABORTING = _UxGT("Aborting...");
LSTR MSG_MEDIA_INSERTED = MEDIA_TYPE_EN _UxGT(" Inserted");
LSTR MSG_MEDIA_REMOVED = MEDIA_TYPE_EN _UxGT(" Removed");
LSTR MSG_MEDIA_WAITING = _UxGT("Waiting for ") MEDIA_TYPE_EN;
LSTR MSG_MEDIA_INIT_FAIL = MEDIA_TYPE_EN _UxGT(" Init Fail");
LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" read error");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start failed");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
LSTR MSG_MAIN = _UxGT("Main");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings");
LSTR MSG_TOOLBAR_SETUP = _UxGT("Toolbar Setup");
LSTR MSG_OPTION_DISABLED = _UxGT("Option Disabled");
LSTR MSG_CONFIGURATION = _UxGT("Configuration");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Run Auto Files");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers");
LSTR MSG_DEBUG_MENU = _UxGT("Debug Menu");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test");
LSTR MSG_HOMING = _UxGT("Homing");
LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
LSTR MSG_AUTO_HOME_A = _UxGT("Home @");
LSTR MSG_AUTO_HOME_X = _UxGT("Home X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z");
LSTR MSG_FILAMENT_SET = _UxGT("Filament Settings");
LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management");
LSTR MSG_MANUAL_LEVELING = _UxGT("Manual Leveling");
LSTR MSG_LEVBED_FL = _UxGT("Front Left");
LSTR MSG_LEVBED_FR = _UxGT("Front Right");
LSTR MSG_LEVBED_C = _UxGT("Center");
LSTR MSG_LEVBED_BL = _UxGT("Back Left");
LSTR MSG_LEVBED_BR = _UxGT("Back Right");
LSTR MSG_MANUAL_MESH = _UxGT("Manual Mesh");
LSTR MSG_AUTO_MESH = _UxGT("Auto Build Mesh");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Homing XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click to Begin");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Next Point");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
LSTR MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
LSTR MSG_SELECT_ORIGIN = _UxGT("Select Origin");
LSTR MSG_LAST_VALUE_SP = _UxGT("Last value ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf");
#ifdef PREHEAT_2_LABEL
LSTR MSG_PREHEAT_2 = _UxGT("Preheat ") PREHEAT_2_LABEL;
LSTR MSG_PREHEAT_2_SETTINGS = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf");
#endif
#ifdef PREHEAT_3_LABEL
LSTR MSG_PREHEAT_3 = _UxGT("Preheat ") PREHEAT_3_LABEL;
LSTR MSG_PREHEAT_3_SETTINGS = _UxGT("Preheat ") PREHEAT_3_LABEL _UxGT(" Conf");
#endif
LSTR MSG_PREHEAT_M = _UxGT("Preheat $");
LSTR MSG_PREHEAT_M_H = _UxGT("Preheat $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Preheat $ End");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preheat $ End ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preheat $ All");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preheat $ Bed");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preheat $ Conf");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom");
LSTR MSG_COOLDOWN = _UxGT("Cooldown");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequency");
LSTR MSG_LASER_MENU = _UxGT("Laser Control");
LSTR MSG_SPINDLE_MENU = _UxGT("Spindle Control");
LSTR MSG_LASER_POWER = _UxGT("Laser Power");
LSTR MSG_SPINDLE_POWER = _UxGT("Spindle Pwr");
LSTR MSG_LASER_TOGGLE = _UxGT("Toggle Laser");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower");
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist");
LSTR MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Reverse");
LSTR MSG_SWITCH_PS_ON = _UxGT("Switch Power On");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Switch Power Off");
LSTR MSG_EXTRUDE = _UxGT("Extrude");
LSTR MSG_RETRACT = _UxGT("Retract");
LSTR MSG_MOVE_AXIS = _UxGT("Move Axis");
LSTR MSG_BED_LEVELING = _UxGT("Bed Leveling");
LSTR MSG_LEVEL_BED = _UxGT("Level Bed");
LSTR MSG_BED_TRAMMING = _UxGT("Bed Tramming");
LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Manual Tramming");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Adjust bed until the probe triggers.");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Corners within tolerance. Bed trammed.");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Good Points: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Next Corner");
LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editor");
LSTR MSG_MESH_VIEWER = _UxGT("Mesh Viewer");
LSTR MSG_EDIT_MESH = _UxGT("Edit Mesh");
LSTR MSG_MESH_VIEW = _UxGT("View Mesh");
LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Editing Stopped");
LSTR MSG_NO_VALID_MESH = _UxGT("No valid mesh");
LSTR MSG_ACTIVATE_MESH = _UxGT("Activate Leveling");
LSTR MSG_PROBING_POINT = _UxGT("Probing Point");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_INSET = _UxGT("Mesh Inset");
LSTR MSG_MESH_MIN_X = _UxGT("Mesh X Minimum");
LSTR MSG_MESH_MAX_X = _UxGT("Mesh X Maximum");
LSTR MSG_MESH_MIN_Y = _UxGT("Mesh Y Minimum");
LSTR MSG_MESH_MAX_Y = _UxGT("Mesh Y Maximum");
LSTR MSG_MESH_AMAX = _UxGT("Maximize Area");
LSTR MSG_MESH_CENTER = _UxGT("Center Area");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z Value");
LSTR MSG_MESH_CANCEL = _UxGT("Mesh cancelled");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands");
LSTR MSG_M48_TEST = _UxGT("M48 Probe Test");
LSTR MSG_M48_POINT = _UxGT("M48 Point");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds");
LSTR MSG_M48_DEVIATION = _UxGT("Deviation");
LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Doing G29");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Tools");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
LSTR MSG_UBL_TILT_MESH = _UxGT("Tilt Mesh");
LSTR MSG_UBL_TILTING_GRID = _UxGT("Tilting Grid Size");
LSTR MSG_UBL_MESH_TILTED = _UxGT("Mesh Tilted");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard");
LSTR MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Measure");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Map Type");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Printer Backup");
LSTR MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
LSTR MSG_UBL_MESH_FILLED = _UxGT("Missing Points Filled");
LSTR MSG_UBL_MESH_INVALID = _UxGT("Invalid Mesh");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
LSTR MSG_UBL_INVALID_SLOT = _UxGT("First Select a Mesh Slot");
LSTR MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
LSTR MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
LSTR MSG_UBL_NO_STORAGE = _UxGT("No Storage");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
LSTR MSG_LED_CONTROL = _UxGT("LED Control");
LSTR MSG_LEDS = _UxGT("Lights");
LSTR MSG_LED_PRESETS = _UxGT("Light Presets");
LSTR MSG_SET_LEDS_RED = _UxGT("Red");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Green");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Blue");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
LSTR MSG_SET_LEDS_WHITE = _UxGT("White");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Default");
LSTR MSG_LED_CHANNEL_N = _UxGT("Channel =");
LSTR MSG_LEDS2 = _UxGT("Lights #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Light #2 Presets");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Brightness");
LSTR MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
LSTR MSG_INTENSITY_R = _UxGT("Red Intensity");
LSTR MSG_INTENSITY_G = _UxGT("Green Intensity");
LSTR MSG_INTENSITY_B = _UxGT("Blue Intensity");
LSTR MSG_INTENSITY_W = _UxGT("White Intensity");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
LSTR MSG_MOVING = _UxGT("Moving...");
LSTR MSG_FREE_XY = _UxGT("Free XY");
LSTR MSG_MOVE_X = _UxGT("Move X"); // Used by draw_edit_screen
LSTR MSG_MOVE_Y = _UxGT("Move Y");
LSTR MSG_MOVE_Z = _UxGT("Move Z");
LSTR MSG_MOVE_N = _UxGT("Move @");
LSTR MSG_MOVE_E = _UxGT("Move Extruder");
LSTR MSG_MOVE_EN = _UxGT("Move *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold");
LSTR MSG_MOVE_N_MM = _UxGT("Move $mm");
LSTR MSG_MOVE_01MM = _UxGT("Move 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Move 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Move 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Move 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Move 0.001in");
LSTR MSG_MOVE_001IN = _UxGT("Move 0.01in");
LSTR MSG_MOVE_01IN = _UxGT("Move 0.1in");
LSTR MSG_MOVE_1IN = _UxGT("Move 1.0in");
LSTR MSG_SPEED = _UxGT("Speed");
LSTR MSG_BED_Z = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
LSTR MSG_BED = _UxGT("Bed");
LSTR MSG_CHAMBER = _UxGT("Enclosure");
LSTR MSG_COOLER = _UxGT("Laser Coolant");
LSTR MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety");
LSTR MSG_LASER = _UxGT("Laser");
LSTR MSG_FAN_SPEED = _UxGT("Fan Speed");
LSTR MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
LSTR MSG_FLOW = _UxGT("Flow");
LSTR MSG_FLOW_N = _UxGT("Flow ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("On");
LSTR MSG_LCD_OFF = _UxGT("Off");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
LSTR MSG_PID_CYCLE = _UxGT("PID Cycles");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune failed!");
LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Bad extruder.");
LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperature too high.");
LSTR MSG_TIMEOUT = _UxGT("Timeout.");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed! Bad extruder.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high.");
LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss");
LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Autotune");
LSTR MSG_MPC_EDIT = _UxGT("Edit * MPC");
LSTR MSG_MPC_POWER_E = _UxGT("Power *");
LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Block C *");
LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor res *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient h *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *");
LSTR MSG_SELECT = _UxGT("Select");
LSTR MSG_SELECT_E = _UxGT("Select *");
LSTR MSG_ACC = _UxGT("Accel");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk");
LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk");
LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk");
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
LSTR MSG_MAX_SPEED = _UxGT("Max Speed (mm/s)");
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Speed");
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Speed");
LSTR MSG_VMAX_N = _UxGT("Max @ Speed");
LSTR MSG_VMAX_E = _UxGT("Max E Speed");
LSTR MSG_VMAX_EN = _UxGT("Max * Speed");
LSTR MSG_VMIN = _UxGT("Min Velocity");
LSTR MSG_VTRAV_MIN = _UxGT("Min Travel Speed");
LSTR MSG_ACCELERATION = _UxGT("Acceleration");
LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Accel");
LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Accel");
LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Accel");
LSTR MSG_AMAX_N = _UxGT("Max @ Accel");
LSTR MSG_AMAX_E = _UxGT("Max E Accel");
LSTR MSG_AMAX_EN = _UxGT("Max * Accel");
LSTR MSG_A_RETRACT = _UxGT("Retract Accel");
LSTR MSG_A_TRAVEL = _UxGT("Travel Accel");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Freq Limit");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor");
LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" Steps/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" Steps/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" Steps/mm");
LSTR MSG_N_STEPS = _UxGT("@ steps/mm");
LSTR MSG_E_STEPS = _UxGT("E steps/mm");
LSTR MSG_EN_STEPS = _UxGT("* Steps/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperature");
LSTR MSG_MOTION = _UxGT("Motion");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Load mm");
LSTR MSG_ADVANCE_K = _UxGT("Advance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
LSTR MSG_CONTRAST = _UxGT("LCD Contrast");
LSTR MSG_BRIGHTNESS = _UxGT("LCD Brightness");
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("LCD Timeout (s)");
LSTR MSG_SCREEN_TIMEOUT = _UxGT("LCD Timeout (m)");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("Backlight Off");
LSTR MSG_STORE_EEPROM = _UxGT("Store Settings");
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
LSTR MSG_RESET_PRINTER = _UxGT("Reset Printer");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
LSTR MSG_INFO_SCREEN = _UxGT("Info Screen");
LSTR MSG_INFO_MACHINENAME = _UxGT("Machine Name");
LSTR MSG_INFO_SIZE = _UxGT("Size");
LSTR MSG_INFO_FWVERSION = _UxGT("Firmware Version");
LSTR MSG_INFO_BUILD = _UxGT("Build Datetime");
LSTR MSG_PREPARE = _UxGT("Prepare");
LSTR MSG_TUNE = _UxGT("Tune");
LSTR MSG_POWER_MONITOR = _UxGT("Power monitor");
LSTR MSG_CURRENT = _UxGT("Current");
LSTR MSG_VOLTAGE = _UxGT("Voltage");
LSTR MSG_POWER = _UxGT("Power");
LSTR MSG_START_PRINT = _UxGT("Start Print");
LSTR MSG_BUTTON_NEXT = _UxGT("Next");
LSTR MSG_BUTTON_INIT = _UxGT("Init");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Print");
LSTR MSG_BUTTON_RESET = _UxGT("Reset");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignore");
LSTR MSG_BUTTON_CANCEL = _UxGT("Cancel");
LSTR MSG_BUTTON_CONFIRM = _UxGT("Confirm");
LSTR MSG_BUTTON_CONTINUE = _UxGT("Continue");
LSTR MSG_BUTTON_DONE = _UxGT("Done");
LSTR MSG_BUTTON_BACK = _UxGT("Back");
LSTR MSG_BUTTON_PROCEED = _UxGT("Proceed");
LSTR MSG_BUTTON_SKIP = _UxGT("Skip");
LSTR MSG_BUTTON_INFO = _UxGT("Info");
LSTR MSG_BUTTON_LEVEL = _UxGT("Level");
LSTR MSG_BUTTON_PAUSE = _UxGT("Pause");
LSTR MSG_BUTTON_RESUME = _UxGT("Resume");
LSTR MSG_BUTTON_ADVANCED = _UxGT("Advanced");
LSTR MSG_BUTTON_SAVE = _UxGT("Save");
LSTR MSG_BUTTON_PURGE = _UxGT("Purge");
LSTR MSG_PAUSING = _UxGT("Pausing...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print");
LSTR MSG_ADVANCED_PAUSE = _UxGT("Advanced Pause");
LSTR MSG_RESUME_PRINT = _UxGT("Resume Print");
LSTR MSG_HOST_START_PRINT = _UxGT("Start Host Print");
LSTR MSG_STOP_PRINT = _UxGT("Stop Print");
LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops");
LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Power Outage");
LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Print Job");
LSTR MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN;
LSTR MSG_NO_MEDIA = _UxGT("No ") MEDIA_TYPE_EN;
LSTR MSG_DWELL = _UxGT("Sleep...");
LSTR MSG_USERWAIT = _UxGT("Click to Resume...");
LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused");
LSTR MSG_PRINTING = _UxGT("Printing...");
LSTR MSG_STOPPING = _UxGT("Stopping...");
LSTR MSG_REMAINING_TIME = _UxGT("Remaining");
LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted");
LSTR MSG_PRINT_DONE = _UxGT("Print Done");
LSTR MSG_PRINTER_KILLED = _UxGT("Printer killed!");
LSTR MSG_TURN_OFF = _UxGT("Turn off the printer");
LSTR MSG_NO_MOVE = _UxGT("No Move.");
LSTR MSG_KILLED = _UxGT("KILLED. ");
LSTR MSG_STOPPED = _UxGT("STOPPED. ");
LSTR MSG_FWRETRACT = _UxGT("Firmware Retract");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
LSTR MSG_TOOL_CHANGE = _UxGT("Tool Change");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
LSTR MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Change Filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Load Filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Load *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Unload *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
LSTR MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
LSTR MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
LSTR MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
LSTR MSG_SKEW_FACTOR = _UxGT("Skew Factor");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("Stow");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("High Speed");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Save");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
LSTR MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
LSTR MSG_ZPROBE_SETTINGS = _UxGT("Probe Settings");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
LSTR MSG_ZPROBE_MARGIN = _UxGT("Probe Margin");
LSTR MSG_Z_FEED_RATE = _UxGT("Z Feed Rate");
LSTR MSG_ENABLE_HS_MODE = _UxGT("Enable HS mode");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP MALFUNCTION");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
LSTR MSG_COOLING_FAILED = _UxGT("Cooling Failed");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
LSTR MSG_HALTED = _UxGT("PRINTER HALTED");
LSTR MSG_PLEASE_WAIT = _UxGT("Please wait...");
LSTR MSG_PLEASE_RESET = _UxGT("Please Reset");
LSTR MSG_PREHEATING = _UxGT("Preheating...");
LSTR MSG_HEATING = _UxGT("Heating...");
LSTR MSG_COOLING = _UxGT("Cooling...");
LSTR MSG_BED_HEATING = _UxGT("Bed Heating...");
LSTR MSG_BED_COOLING = _UxGT("Bed Cooling...");
LSTR MSG_PROBE_HEATING = _UxGT("Probe Heating...");
LSTR MSG_PROBE_COOLING = _UxGT("Probe Cooling...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
LSTR MSG_LASER_COOLING = _UxGT("Laser Cooling...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
LSTR MSG_DELTA_HEIGHT = _UxGT("Height");
LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
LSTR MSG_INFO_MENU = _UxGT("About Printer");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Printer Info");
LSTR MSG_3POINT_LEVELING = _UxGT("3-Point Leveling");
LSTR MSG_LINEAR_LEVELING = _UxGT("Linear Leveling");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilinear Leveling");
LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling");
LSTR MSG_MESH_DONE = _UxGT("Mesh probing done");
LSTR MSG_INFO_STATS_MENU = _UxGT("Printer Stats");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Board Info");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruders");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fan speed fault");
LSTR MSG_CASE_LIGHT = _UxGT("Case Light");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
LSTR MSG_COLORS_GET = _UxGT("Get Color");
LSTR MSG_COLORS_SELECT = _UxGT("Select Colors");
LSTR MSG_COLORS_APPLIED = _UxGT("Colors applied");
LSTR MSG_COLORS_RED = _UxGT("Red");
LSTR MSG_COLORS_GREEN = _UxGT("Green");
LSTR MSG_COLORS_BLUE = _UxGT("Blue");
LSTR MSG_COLORS_WHITE = _UxGT("White");
LSTR MSG_UI_LANGUAGE = _UxGT("UI Language");
LSTR MSG_SOUND_ENABLE = _UxGT("Enable sound");
LSTR MSG_LOCKSCREEN = _UxGT("Lock Screen");
LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Printer is Locked,");
LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("Scroll to unlock.");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Please wait until reboot.");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No media inserted.");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Please preheat the hot end.");
LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Reset Print Count");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Print Count");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Print Time");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total");
#else
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No Media");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Please Preheat");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
#endif
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
LSTR MSG_INFO_PSU = _UxGT("PSU");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Purge or Continue?");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
LSTR MSG_RUNOUT_ENABLE = _UxGT("Enable Runout");
LSTR MSG_RUNOUT_ACTIVE = _UxGT("Runout Active");
LSTR MSG_INVERT_EXTRUDER = _UxGT("Invert Extruder");
LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Extruder Min Temp.");
LSTR MSG_FANCHECK = _UxGT("Fan Tacho Check");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
LSTR MSG_MMU2_RESUME = _UxGT("MMU Resume");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
LSTR MSG_MMU2_ALL = _UxGT("All");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("Reset MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
LSTR MSG_MIX = _UxGT("Mix");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Component =");
LSTR MSG_MIXER = _UxGT("Mixer");
LSTR MSG_GRADIENT = _UxGT("Gradient");
LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
LSTR MSG_CYCLE_MIX = _UxGT("Cycle Mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
LSTR MSG_START_VTOOL = _UxGT("Start V-tool");
LSTR MSG_END_VTOOL = _UxGT(" End V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
LSTR MSG_START_Z = _UxGT("Start Z:");
LSTR MSG_END_Z = _UxGT(" End Z:");
LSTR MSG_GAMES = _UxGT("Games");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
LSTR MSG_BAD_PAGE = _UxGT("Bad page index");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
LSTR MSG_EDIT_PASSWORD = _UxGT("Edit Password");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Login Required");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Password Settings");
LSTR MSG_ENTER_DIGIT = _UxGT("Enter Digit");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Set/Edit Password");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Remove Password");
LSTR MSG_PASSWORD_SET = _UxGT("Password is ");
LSTR MSG_START_OVER = _UxGT("Start Over");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Remember to Save!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Password Removed");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Press Button", "to resume print"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wait for", "filament change", "to start"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Please wait..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click to heat"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heating..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejecting..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Loading..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purging..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click to finish"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Resuming..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
LSTR MSG_TMC_CURRENT = _UxGT("Driver Current");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
LSTR MSG_SERVICE_RESET = _UxGT("Reset");
LSTR MSG_SERVICE_IN = _UxGT(" in:");
LSTR MSG_BACKLASH = _UxGT("Backlash");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correction");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Level X Axis");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrate");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
#endif
LSTR MSG_REHEAT = _UxGT("Reheat");
LSTR MSG_REHEATING = _UxGT("Reheating...");
LSTR MSG_REHEATDONE = _UxGT("Reheat Done");
LSTR MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos");
LSTR MSG_XATC = _UxGT("X-Twist Wizard");
LSTR MSG_XATC_DONE = _UxGT("X-Twist Wizard Done!");
LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Update Probe Z-Offset to ");
LSTR MSG_SOUND = _UxGT("Sound");
LSTR MSG_TOP_LEFT = _UxGT("Top Left");
LSTR MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
LSTR MSG_TOP_RIGHT = _UxGT("Top Right");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration Completed");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibration Failed");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
LSTR MSG_SD_CARD = _UxGT("SD Card");
LSTR MSG_USB_DISK = _UxGT("USB Disk");
LSTR MSG_HOST_SHUTDOWN = _UxGT("Host Shutdown");
// These strings can be the same in all languages
LSTR MSG_MARLIN = _UxGT("Marlin");
LSTR MSG_SHORT_DAY = _UxGT("d"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
LSTR MSG_PID_P = _UxGT("PID-P");
LSTR MSG_PID_P_E = _UxGT("PID-P *");
LSTR MSG_PID_I = _UxGT("PID-I");
LSTR MSG_PID_I_E = _UxGT("PID-I *");
LSTR MSG_PID_D = _UxGT("PID-D");
LSTR MSG_PID_D_E = _UxGT("PID-D *");
LSTR MSG_PID_C = _UxGT("PID-C");
LSTR MSG_PID_C_E = _UxGT("PID-C *");
LSTR MSG_PID_F = _UxGT("PID-F");
LSTR MSG_PID_F_E = _UxGT("PID-F *");
LSTR MSG_BACKLASH_N = _UxGT("@");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,579 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Spanish
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_es {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Spanish");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Lista");
LSTR MSG_YES = _UxGT("SI");
LSTR MSG_NO = _UxGT("NO");
LSTR MSG_BACK = _UxGT("Atrás");
LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD/FD insertado");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD/FD retirado");
LSTR MSG_MEDIA_WAITING = _UxGT("Esperando al SD/FD");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Fallo al iniciar SD/FD");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/FD");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbordamiento de subllamada");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
LSTR MSG_MAIN = _UxGT("Menú principal");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados");
LSTR MSG_CONFIGURATION = _UxGT("Configuración");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Inicio automático");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
LSTR MSG_DEBUG_MENU = _UxGT("Menú depuración");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso");
LSTR MSG_HOMING = _UxGT("Origen");
LSTR MSG_AUTO_HOME = _UxGT("Llevar al origen");
LSTR MSG_AUTO_HOME_X = _UxGT("Origen X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Origen Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Origen Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z");
LSTR MSG_ITERATION = _UxGT("G34 Iteración: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("¡Precisión disminuyendo!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Precisión conseguida");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto");
LSTR MSG_LEVEL_BED_DONE = _UxGT("¡Nivelación lista!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Compen. Altura");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajustar desfases");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicada");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Precal. ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Precal. ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Todo");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Cama");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Ajuste");
LSTR MSG_PREHEAT_M = _UxGT("Precal. $");
LSTR MSG_PREHEAT_M_H = _UxGT("Precal. $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Precal. $ Fusor");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Fusor ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Precal. $ Todo");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Precal. $ Cama");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Precal. $ Ajuste");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Precal. manual");
LSTR MSG_COOLDOWN = _UxGT("Enfriar");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
LSTR MSG_LASER_MENU = _UxGT("Control Láser");
LSTR MSG_LASER_POWER = _UxGT("Potencia Láser");
LSTR MSG_SPINDLE_MENU = _UxGT("Control Mandrino");
LSTR MSG_SPINDLE_POWER = _UxGT("Potencia Mandrino");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Invertir giro");
LSTR MSG_SWITCH_PS_ON = _UxGT("Encender Fuente");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Apagar Fuente");
LSTR MSG_EXTRUDE = _UxGT("Extruir");
LSTR MSG_RETRACT = _UxGT("Retraer");
LSTR MSG_MOVE_AXIS = _UxGT("Mover ejes");
LSTR MSG_BED_LEVELING = _UxGT("Nivelando Cama");
LSTR MSG_LEVEL_BED = _UxGT("Nivelar Cama");
LSTR MSG_BED_TRAMMING = _UxGT("Recorrido Cama");
LSTR MSG_NEXT_CORNER = _UxGT("Siguente Esquina");
LSTR MSG_MESH_EDITOR = _UxGT("Editor Mallado");
LSTR MSG_EDIT_MESH = _UxGT("Editar Mallado");
LSTR MSG_EDITING_STOPPED = _UxGT("Ed. Mallado parada");
LSTR MSG_PROBING_POINT = _UxGT("Sondear Punto");
LSTR MSG_MESH_X = _UxGT("Índice X");
LSTR MSG_MESH_Y = _UxGT("Índice Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Com. Personalizados");
LSTR MSG_M48_TEST = _UxGT("M48 Probar Sonda");
LSTR MSG_M48_POINT = _UxGT("M48 Punto");
LSTR MSG_M48_DEVIATION = _UxGT("Desviación");
LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Desfase Herramienta");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Aparcado");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicar");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Reflejada");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2ª Fusor Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2ª Fusor @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Hacer G29");
LSTR MSG_UBL_TOOLS = _UxGT("Herramientas UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Nivelado UBL");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Crear Mallado man.");
LSTR MSG_UBL_BC_INSERT = _UxGT("Colocar cuña y Medir");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Retirar y Medir Cama");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover al Siguente");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Cama");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Cama perso.");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Fusor");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Fusor perso.");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Mallado");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Mallado perso.");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste fino Mallado");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Term. edici. Mallado");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Mallado Pers.");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Mallado");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Mallado ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valid. Mall. ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Mallado Frío");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar alt. Mallado");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Cantidad de altura");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valid. Mallado");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valid. Mall. perso.");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Calentando Cama");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Calent. Boquilla");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Imprimado manual...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Impri. longit. fija");
LSTR MSG_G26_PRIME_DONE = _UxGT("Imprimación Lista");
LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
LSTR MSG_G26_LEAVING = _UxGT("Dejando G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Contin. Mallado cama");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelando Mallado");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelando 3Puntos");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niv. Mall. cuadri");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivel de Mallado");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterales");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de mapa ");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Salida Mapa mallado");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Salida para el host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salida para CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Cópia de seg. ext");
LSTR MSG_UBL_INFO_UBL = _UxGT("Salida Info. UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidad de relleno");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Relleno manual");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Relleno inteligente");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Mallado de relleno");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar proximos");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajustar Fino Todo");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Fino proxi.");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacen de Mallado");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Huecos memoria");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Cargar Mall. cama");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Guardar Mall. cama");
LSTR MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
LSTR MSG_MESH_SAVED = _UxGT("Malla %i Guardada");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Sin guardar");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Error: Guardar UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Error: Restaurar UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Parado");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crear Mall. Frío");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Relleno intelig.");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valid. Mallado");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajustar Fino Todo");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valid. Mallado");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajustar Fino Todo");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Guardar Mall. cama");
LSTR MSG_LED_CONTROL = _UxGT("Control LED");
LSTR MSG_LEDS = _UxGT("LEDS");
LSTR MSG_LED_PRESETS = _UxGT("Color predefinido");
LSTR MSG_SET_LEDS_RED = _UxGT("Rojo");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Naranja");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Amarillo");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Azul");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Blanco");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
LSTR MSG_CUSTOM_LEDS = _UxGT("Color personalizado");
LSTR MSG_INTENSITY_R = _UxGT("Intensidad Rojo");
LSTR MSG_INTENSITY_G = _UxGT("Intensidad Verde");
LSTR MSG_INTENSITY_B = _UxGT("Intensidad Azul");
LSTR MSG_INTENSITY_W = _UxGT("Intensidad Blanco");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brillo");
LSTR MSG_MOVING = _UxGT("Moviendo...");
LSTR MSG_FREE_XY = _UxGT("Libre XY");
LSTR MSG_MOVE_X = _UxGT("Mover X");
LSTR MSG_MOVE_Y = _UxGT("Mover Y");
LSTR MSG_MOVE_Z = _UxGT("Mover Z");
LSTR MSG_MOVE_N = _UxGT("Mover @");
LSTR MSG_MOVE_E = _UxGT("Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend muy frio");
LSTR MSG_MOVE_N_MM = _UxGT("Mover $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidad");
LSTR MSG_BED_Z = _UxGT("Cama Z");
LSTR MSG_NOZZLE = _UxGT("Boquilla");
LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Boquilla Aparcada");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Boquilla en Espera");
LSTR MSG_BED = _UxGT("Cama");
LSTR MSG_CHAMBER = _UxGT("Recinto");
LSTR MSG_FAN_SPEED = _UxGT("Ventilador");
LSTR MSG_FAN_SPEED_N = _UxGT("Ventilador ~");
LSTR MSG_STORED_FAN_N = _UxGT("Vent. almacenado ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Ext. ventil.");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Ext. ventil. ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidad en reposo");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidad Activa");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Periodo de reposo");
LSTR MSG_FLOW = _UxGT("Flujo");
LSTR MSG_FLOW_N = _UxGT("Flujo ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Factor");
LSTR MSG_AUTOTEMP = _UxGT("Temp. Autom.");
LSTR MSG_LCD_ON = _UxGT("Enc");
LSTR MSG_LCD_OFF = _UxGT("Apg");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Auto-ajuste");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Auto-ajuste *");
LSTR MSG_SELECT = _UxGT("Seleccionar");
LSTR MSG_SELECT_E = _UxGT("Seleccionar *");
LSTR MSG_ACC = _UxGT("Aceleración");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk");
LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk");
LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk");
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvi. Unión");
LSTR MSG_MAX_SPEED = _UxGT("Max Velocidad");
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Speed");
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Speed");
LSTR MSG_VMAX_N = _UxGT("Max @ Speed");
LSTR MSG_VMAX_E = _UxGT("Max E Speed");
LSTR MSG_VMAX_EN = _UxGT("Max * Speed");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("Vel. viaje min");
LSTR MSG_ACCELERATION = _UxGT("Acceleración");
LSTR MSG_AMAX_A = _UxGT("Acel. max") STR_A;
LSTR MSG_AMAX_B = _UxGT("Acel. max") STR_B;
LSTR MSG_AMAX_C = _UxGT("Acel. max") STR_C;
LSTR MSG_AMAX_N = _UxGT("Acel. max@");
LSTR MSG_AMAX_E = _UxGT("Acel. maxE");
LSTR MSG_AMAX_EN = _UxGT("Acel. max *");
LSTR MSG_A_RETRACT = _UxGT("Acel. retrac.");
LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje");
LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" pasos/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" pasos/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" pasos/mm");
LSTR MSG_N_STEPS = _UxGT("@ pasos/mm");
LSTR MSG_E_STEPS = _UxGT("E pasos/mm");
LSTR MSG_EN_STEPS = _UxGT("* pasos/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movimiento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Diámetro Fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diámetro Fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Carga mm");
LSTR MSG_ADVANCE_K = _UxGT("Avance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
LSTR MSG_CONTRAST = _UxGT("Contraste LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Guardar EEPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM");
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");
LSTR MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
LSTR MSG_INFO_SCREEN = _UxGT("Pantalla de Inf.");
LSTR MSG_PREPARE = _UxGT("Preparar");
LSTR MSG_TUNE = _UxGT("Ajustar");
LSTR MSG_START_PRINT = _UxGT("Iniciar impresión");
LSTR MSG_BUTTON_NEXT = _UxGT("Siguinte");
LSTR MSG_BUTTON_INIT = _UxGT("Iniciar");
LSTR MSG_BUTTON_STOP = _UxGT("Parar");
LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
LSTR MSG_BUTTON_RESET = _UxGT("Reiniciar");
LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
LSTR MSG_BUTTON_DONE = _UxGT("Listo");
LSTR MSG_BUTTON_BACK = _UxGT("Retroceder");
LSTR MSG_BUTTON_PROCEED = _UxGT("Proceder");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
LSTR MSG_RESUME_PRINT = _UxGT("Reanudar impresión");
LSTR MSG_STOP_PRINT = _UxGT("Detener impresión");
LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimiendo Objeto");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Rec. Fallo electrico");
LSTR MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/FD");
LSTR MSG_NO_MEDIA = _UxGT("SD/FD no presente");
LSTR MSG_DWELL = _UxGT("Reposo...");
LSTR MSG_USERWAIT = _UxGT("Pulsar para Reanudar");
LSTR MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
LSTR MSG_PRINTING = _UxGT("Imprimiendo...");
LSTR MSG_PRINT_ABORTED = _UxGT("Impresión cancelada");
LSTR MSG_PRINT_DONE = _UxGT("Impresión Completada");
LSTR MSG_NO_MOVE = _UxGT("Sin movimiento");
LSTR MSG_KILLED = _UxGT("MUERTA");
LSTR MSG_STOPPED = _UxGT("DETENIDA");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Interc. Retraer mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Levantar mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Interc. DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Retracción Auto.");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Inter. longitud");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purgar longitud");
LSTR MSG_TOOL_CHANGE = _UxGT("Cambiar Herramienta");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Aumentar Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vel. de Cebado");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de retracción");
LSTR MSG_FILAMENTCHANGE = _UxGT("Cambiar filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamento *");
LSTR MSG_FILAMENTLOAD = _UxGT("Cargar filamento");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Cargar filamento *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo");
LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/FD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/FD");
LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/FD");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama");
LSTR MSG_SKEW_FACTOR = _UxGT("Factor de desviación");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Prueba");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
LSTR MSG_BLTOUCH_STOW = _UxGT("Subir pistón");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Bajar pistón");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Modo almacenar");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Poner BLTouch a 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Poner BLTouch a OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Informe de drenaje");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test de desfase Z");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Guardar");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Subir TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Subir Sonda Z");
LSTR MSG_MANUAL_STOW = _UxGT("Bajar Sonda Z");
LSTR MSG_HOME_FIRST = _UxGT("Origen %s%s%s Prim.");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Desf. Sonda");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Desf. Sonda X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Desf. Sonda Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desf. Sonda Z");
LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
LSTR MSG_BABYSTEP_N = _UxGT("Micropaso @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Calent. fallido");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP. REDUN.");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CAMARA");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err:TEMP. MÁX");
LSTR MSG_ERR_MINTEMP = _UxGT("Err:TEMP. MIN");
LSTR MSG_HALTED = _UxGT("IMPRESORA DETENIDA");
LSTR MSG_PLEASE_RESET = _UxGT("Por favor, reinicie");
LSTR MSG_HEATING = _UxGT("Calentando...");
LSTR MSG_COOLING = _UxGT("Enfriando...");
LSTR MSG_BED_HEATING = _UxGT("Calentando Cama...");
LSTR MSG_BED_COOLING = _UxGT("Enfriando Cama...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Calentando Cámara...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Enfriando Cámara...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibración Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
LSTR MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
LSTR MSG_DELTA_RADIUS = _UxGT("Radio");
LSTR MSG_INFO_MENU = _UxGT("Info. Impresora");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. Impresora");
LSTR MSG_3POINT_LEVELING = _UxGT("Nivelando 3puntos");
LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelando Lineal");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelando Bilineal");
LSTR MSG_UBL_LEVELING = _UxGT("Nivelando UBL");
LSTR MSG_MESH_LEVELING = _UxGT("Nivelando en Mallado");
LSTR MSG_INFO_STATS_MENU = _UxGT("Estadísticas Imp.");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. Controlador");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Vig. Fuga Térm.: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Vig. Fuga Térm.: ON");
LSTR MSG_CASE_LIGHT = _UxGT("Luz cabina");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo cabina");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Cont. de impresión");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total de imp.");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresión más larga");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruido");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresiones");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Más larga");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp. Mínima");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp. Máxima");
LSTR MSG_INFO_PSU = _UxGT("F. Aliment.");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Fuerza de empuje");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_ERROR_TMC = _UxGT("ERROR CONEX. TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPC. REINICIO:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar más");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar imp.");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Boquilla: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Sens. filamento");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist. filamento mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Ir a origen Fallado");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondeo Fallado");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ELIJE FILAMENTO");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("¡Actu. MMU Firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Necesita Cuidado");
LSTR MSG_MMU2_RESUME = _UxGT("Continuar imp.");
LSTR MSG_MMU2_RESUMING = _UxGT("Resumiendo...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar hasta boqui.");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil....");
LSTR MSG_MMU2_ALL = _UxGT("Todo");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
LSTR MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retirar, y pulsar");
LSTR MSG_MIX = _UxGT("Mezcla");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente =");
LSTR MSG_MIXER = _UxGT("Miezclador");
LSTR MSG_GRADIENT = _UxGT("Degradado");
LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total");
LSTR MSG_TOGGLE_MIX = _UxGT("Mezcla Conmutada");
LSTR MSG_CYCLE_MIX = _UxGT("Mezcla Cíclica");
LSTR MSG_GRADIENT_MIX = _UxGT("Mezcla de Degradado");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Degradado inverso");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Activar Herr.V");
LSTR MSG_START_VTOOL = _UxGT("Inicio Herr.V");
LSTR MSG_END_VTOOL = _UxGT(" Fin Herr.V");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias Herr.V");
LSTR MSG_RESET_VTOOLS = _UxGT("Reiniciar Herr.V");
LSTR MSG_COMMIT_VTOOL = _UxGT("Cometer mezc. Herr.V");
LSTR MSG_VTOOLS_RESET = _UxGT("Herr.V reiniciados");
LSTR MSG_START_Z = _UxGT("Inicio Z:");
LSTR MSG_END_Z = _UxGT(" Fin Z:");
LSTR MSG_GAMES = _UxGT("Juegos");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Pulsar el botón para", "reanudar impresión"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando para", "iniciar el cambio", "de filamento"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserte el filamento", "y pulse el botón", "para continuar..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pulse el botón para", "calentar la boquilla"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Calentando boquilla", "Espere por favor..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Espere para", "liberar el filamento"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Espere para", "cargar el filamento"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere para", "purgar el filamento"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Pulse para finalizar", "la purga de filamen."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impresora", "para reanudar..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Pulse para continuar"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Por Favor espere..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserte y Pulse"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Pulse para Calentar"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Calentando..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Liberando..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Pulse para finalizar"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reanudando..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Amperaje Controlador");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Límite Hibrido");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Origen sin sensores");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
LSTR MSG_SERVICE_RESET = _UxGT("Reiniciar");
LSTR MSG_SERVICE_IN = _UxGT(" dentro:");
LSTR MSG_BACKLASH = _UxGT("Backlash");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivel Eje X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
LSTR MSG_HEATER_TIMEOUT = _UxGT("T. de esp. Calent.");
LSTR MSG_REHEAT = _UxGT("Recalentar");
LSTR MSG_REHEATING = _UxGT("Recalentando...");
}

View File

@ -0,0 +1,318 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Basque-Euskera
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
namespace Language_eu {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Basque-Euskera");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" prest.");
LSTR MSG_BACK = _UxGT("Atzera");
LSTR MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta");
LSTR MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta");
LSTR MSG_MAIN = _UxGT("Menu nagusia");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto hasiera");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak");
LSTR MSG_DEBUG_MENU = _UxGT("Arazketa Menua");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba");
LSTR MSG_AUTO_HOME = _UxGT("Hasierara joan");
LSTR MSG_AUTO_HOME_X = _UxGT("X jatorrira");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y jatorrira");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z jatorrira");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ hasieraratzen");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik egin hasteko");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Hurrengo Puntua");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Berdintzea eginda");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Etxe. offset eza.");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsetak ezarrita");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Berotu ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Berotu ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Guztia");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ohea");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ezarp.");
LSTR MSG_PREHEAT_M = _UxGT("Berotu $");
LSTR MSG_PREHEAT_M_H = _UxGT("Berotu $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Berotu $ Amaia");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Berotu $ Amaia ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Berotu $ Guztia");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Berotu $ Ohea");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Berotu $ Ezarp.");
#endif
LSTR MSG_COOLDOWN = _UxGT("Hoztu");
LSTR MSG_SWITCH_PS_ON = _UxGT("Energia piztu");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Energia itzali");
LSTR MSG_EXTRUDE = _UxGT("Estruitu");
LSTR MSG_RETRACT = _UxGT("Atzera eragin");
LSTR MSG_MOVE_AXIS = _UxGT("Ardatzak mugitu");
LSTR MSG_BED_LEVELING = _UxGT("Ohe berdinketa");
LSTR MSG_LEVEL_BED = _UxGT("Ohea berdindu");
LSTR MSG_BED_TRAMMING = _UxGT("Ertzak berdindu");
LSTR MSG_NEXT_CORNER = _UxGT("Hurrengo ertza");
LSTR MSG_EDIT_MESH = _UxGT("Sarea editatu");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 exekutatzen");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Tresnak");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Sarea eskuz sortu");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Neurtu");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktibatu");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL desaktibatu");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Ohearen tenperatura");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Mutur beroaren tenp.");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Sarea editatu");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Sarea editatzea eginda");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Sarea sortu");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ sarea sortu");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ sarea balioetsi");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Sare hotza sortu");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Sarearen altuera doitu");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sarea balioetsi");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Ohe sarea balioetsi");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Sare berdinketa");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3 puntuko berdinketa");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Lauki-sare berdinketa");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Sarea berdindu");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Mapa mota");
LSTR MSG_LED_CONTROL = _UxGT("LED ezarpenak");
LSTR MSG_LEDS = _UxGT("Argiak");
LSTR MSG_LED_PRESETS = _UxGT("Argi aurrehautaketak");
LSTR MSG_SET_LEDS_RED = _UxGT("Gorria");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Laranja");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Horia");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Berdea");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Urdina");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Bioleta");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Zuria");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Lehenetsia");
LSTR MSG_CUSTOM_LEDS = _UxGT("Argi pertsonalizatuak");
LSTR MSG_INTENSITY_R = _UxGT("Intentsitate gorria");
LSTR MSG_INTENSITY_G = _UxGT("Intentsitate berdea");
LSTR MSG_INTENSITY_B = _UxGT("Intentsitate urdina");
LSTR MSG_INTENSITY_W = _UxGT("Intentsitate zuria");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Distira");
LSTR MSG_MOVING = _UxGT("Mugitzen...");
LSTR MSG_FREE_XY = _UxGT("Askatu XY");
LSTR MSG_MOVE_X = _UxGT("Mugitu X");
LSTR MSG_MOVE_Y = _UxGT("Mugitu Y");
LSTR MSG_MOVE_Z = _UxGT("Mugitu Z");
LSTR MSG_MOVE_N = _UxGT("Mugitu @");
LSTR MSG_MOVE_E = _UxGT("Estrusorea");
LSTR MSG_MOVE_EN = _UxGT("Estrusorea *");
LSTR MSG_MOVE_N_MM = _UxGT("Mugitu $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mugitu 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mugitu 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mugitu 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mugitu 100mm");
LSTR MSG_SPEED = _UxGT("Abiadura");
LSTR MSG_BED_Z = _UxGT("Z Ohea");
LSTR MSG_NOZZLE = _UxGT("Pita");
LSTR MSG_NOZZLE_N = _UxGT("Pita ~");
LSTR MSG_BED = _UxGT("Ohea");
LSTR MSG_FAN_SPEED = _UxGT("Haizagailu abiadura");
LSTR MSG_FAN_SPEED_N = _UxGT("Haizagailu abiadura ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Haiz.gehig. abiadura");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Haiz.gehig. abiadura ~");
LSTR MSG_FLOW = _UxGT("Fluxua");
LSTR MSG_FLOW_N = _UxGT("Fluxua ~");
LSTR MSG_CONTROL = _UxGT("Kontrola");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
LSTR MSG_AUTOTEMP = _UxGT("Auto tenperatura");
LSTR MSG_SELECT = _UxGT("Aukeratu");
LSTR MSG_SELECT_E = _UxGT("Aukeratu *");
LSTR MSG_ACC = _UxGT("Azelerazioa");
LSTR MSG_JERK = _UxGT("Astindua");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-astindua");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-astindua");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-astindua");
LSTR MSG_VN_JERK = _UxGT("V@-astindua");
LSTR MSG_VE_JERK = _UxGT("Ve-astindua");
LSTR MSG_VTRAV_MIN = _UxGT("VBidaia min");
LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
LSTR MSG_A_TRAVEL = _UxGT("A-bidaia");
LSTR MSG_STEPS_PER_MM = _UxGT("Pausoak/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" pausoak/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" pausoak/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" pausoak/mm");
LSTR MSG_N_STEPS = _UxGT("@ pausoak/mm");
LSTR MSG_E_STEPS = _UxGT("E pausoak/mm");
LSTR MSG_EN_STEPS = _UxGT("* pausoak/mm");
LSTR MSG_TEMPERATURE = _UxGT("Tenperatura");
LSTR MSG_MOTION = _UxGT("Mugimendua");
LSTR MSG_FILAMENT = _UxGT("Harizpia");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E mm3-tan");
LSTR MSG_FILAMENT_DIAM = _UxGT("Hariz. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Hariz. Dia. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Deskargatu mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Kargatu mm");
LSTR MSG_ADVANCE_K = _UxGT("K Aurrerapena");
LSTR MSG_ADVANCE_K_E = _UxGT("K Aurrerapena *");
LSTR MSG_CONTRAST = _UxGT("LCD kontrastea");
LSTR MSG_STORE_EEPROM = _UxGT("Gorde memoria");
LSTR MSG_LOAD_EEPROM = _UxGT("Kargatu memoria");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Larri. berriz.");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu");
LSTR MSG_INFO_SCREEN = _UxGT("Pantaila info");
LSTR MSG_PREPARE = _UxGT("Prestatu");
LSTR MSG_TUNE = _UxGT("Doitu");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausatu inprimak.");
LSTR MSG_RESUME_PRINT = _UxGT("Jarraitu inprima.");
LSTR MSG_STOP_PRINT = _UxGT("Gelditu inprima.");
LSTR MSG_MEDIA_MENU = _UxGT("SD-tik inprimatu");
LSTR MSG_NO_MEDIA = _UxGT("Ez dago SD-rik");
LSTR MSG_DWELL = _UxGT("Lo egin...");
LSTR MSG_USERWAIT = _UxGT("Aginduak zain...");
LSTR MSG_PRINT_PAUSED = _UxGT("Inprim. geldi.");
LSTR MSG_PRINT_ABORTED = _UxGT("Inprim. deusezta.");
LSTR MSG_NO_MOVE = _UxGT("Mugimendu gabe.");
LSTR MSG_KILLED = _UxGT("AKABATUTA. ");
LSTR MSG_STOPPED = _UxGT("GELDITUTA. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Atzera egin mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Atzera mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Atzera egin V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Igo mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Atzera egin mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap Atzera mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Atzera egin V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Atzera egin");
LSTR MSG_FILAMENTCHANGE = _UxGT("Aldatu harizpia");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Aldatu harizpia *");
LSTR MSG_FILAMENTLOAD = _UxGT("Harizpia kargatu");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Harizpia kargatu *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Harizpia deskargatu");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Harizpia deskargatu *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu");
LSTR MSG_ATTACH_MEDIA = _UxGT("Hasieratu SD-a");
LSTR MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela");
LSTR MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora");
LSTR MSG_SKEW_FACTOR = _UxGT("Okertze faktorea");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch AutoProba");
LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch berrabia.");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch jaitsi/luzatu");
LSTR MSG_BLTOUCH_STOW = _UxGT("BLTouch igo/jaso");
LSTR MSG_HOME_FIRST = _UxGT("Etxera %s%s%s lehenengo");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Konpentsatu");
LSTR MSG_BABYSTEP_X = _UxGT("Mikro-urratsa X");
LSTR MSG_BABYSTEP_Y = _UxGT("Mikro-urratsa Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Mikro-urratsa Z");
LSTR MSG_BABYSTEP_N = _UxGT("Mikro-urratsa @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop deusezta.");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err: Beroketa");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: Tenperatura");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TENP. KONTROL EZA");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: Tenp Maximoa");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: Tenp Minimoa");
LSTR MSG_HALTED = _UxGT("INPRIMA. GELDIRIK");
LSTR MSG_PLEASE_RESET = _UxGT("Berrabia. Mesedez");
LSTR MSG_HEATING = _UxGT("Berotzen...");
LSTR MSG_BED_HEATING = _UxGT("Ohea Berotzen...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibraketa");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibratu X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibratu Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibratu Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibratu Zentrua");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta ezarpenak");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibraketa");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra diagonala");
LSTR MSG_DELTA_HEIGHT = _UxGT("Altuera");
LSTR MSG_DELTA_RADIUS = _UxGT("Erradioa");
LSTR MSG_INFO_MENU = _UxGT("Inprimagailu Inf.");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Inprimagailu Inf.");
LSTR MSG_3POINT_LEVELING = _UxGT("3 puntuko berdinketa");
LSTR MSG_LINEAR_LEVELING = _UxGT("Berdinketa lineala");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Berdinketa bilinearra");
LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
LSTR MSG_MESH_LEVELING = _UxGT("Sare berdinketa");
LSTR MSG_INFO_STATS_MENU = _UxGT("Inprima. estatis.");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Txartelaren Info.");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoreak");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Estrusoreak");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baudioak");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoloa");
LSTR MSG_CASE_LIGHT = _UxGT("Kabina Argia");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Argiaren Distira");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Inprim. Zenbaketa");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Inprim. denbora");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Imprimatze luzeena");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estruituta guztira");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Inprimatze");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Guztira");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Luzeena");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estrusio");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Tenp. Minimoa");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Tenp. Maximoa");
LSTR MSG_INFO_PSU = _UxGT("Elikadura-iturria");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Driver-aren potentzia");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Idatzi DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("HARIZPIA ALDATU");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("HARIZPIA KARGATU");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("HARIZPIA DESKARGATU");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ALDAKETA AUKERAK:");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Inprima. jarraitu");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Pita: ");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Hasi. huts egin du");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Neurketak huts egin du");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Inprimagailu okerra");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Mesedez, itxaron..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Deskargatzen..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sartu eta click egin"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Berotzen..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Kargatzen..."));
}

View File

@ -0,0 +1,131 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Finnish
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_fi {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Finnish");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" valmis.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu");
LSTR MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu");
LSTR MSG_MAIN = _UxGT("Palaa");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Automaatti");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit");
LSTR MSG_AUTO_HOME = _UxGT("Aja referenssiin");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Kaikki");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Alusta");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Esilämm. ") PREHEAT_1_LABEL _UxGT(" konf");
LSTR MSG_PREHEAT_M = _UxGT("Esilämmitä $");
LSTR MSG_PREHEAT_M_H = _UxGT("Esilämmitä $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Esilä. $Suutin");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Esilä. $Suutin ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Esilä. $ Kaikki");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Esilä. $ Alusta");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Esilämm. $ konf");
#endif
LSTR MSG_COOLDOWN = _UxGT("Jäähdytä");
LSTR MSG_SWITCH_PS_ON = _UxGT("Virta päälle");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Virta pois");
LSTR MSG_EXTRUDE = _UxGT("Pursota");
LSTR MSG_RETRACT = _UxGT("Vedä takaisin");
LSTR MSG_MOVE_AXIS = _UxGT("Liikuta akseleita");
LSTR MSG_MOVE_X = _UxGT("Liikuta X");
LSTR MSG_MOVE_Y = _UxGT("Liikuta Y");
LSTR MSG_MOVE_Z = _UxGT("Liikuta Z");
LSTR MSG_MOVE_N = _UxGT("Liikuta @");
LSTR MSG_MOVE_E = _UxGT("Extruder");
LSTR MSG_MOVE_EN = _UxGT("Extruder *");
LSTR MSG_MOVE_N_MM = _UxGT("Liikuta $mm");
LSTR MSG_MOVE_01MM = _UxGT("Liikuta 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Liikuta 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Liikuta 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Liikuta 100mm");
LSTR MSG_SPEED = _UxGT("Nopeus");
LSTR MSG_NOZZLE = _UxGT("Suutin");
LSTR MSG_NOZZLE_N = _UxGT("Suutin ~");
LSTR MSG_BED = _UxGT("Alusta");
LSTR MSG_FAN_SPEED = _UxGT("Tuul. nopeus");
LSTR MSG_FAN_SPEED_N = _UxGT("Tuul. nopeus ~");
LSTR MSG_FLOW = _UxGT("Virtaus");
LSTR MSG_FLOW_N = _UxGT("Virtaus ~");
LSTR MSG_CONTROL = _UxGT("Kontrolli");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Kerr");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_ACC = _UxGT("Kiihtyv");
LSTR MSG_VTRAV_MIN = _UxGT("VLiike min");
LSTR MSG_A_RETRACT = _UxGT("A-peruuta");
LSTR MSG_TEMPERATURE = _UxGT("Lämpötila");
LSTR MSG_MOTION = _UxGT("Liike");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_CONTRAST = _UxGT("LCD kontrasti");
LSTR MSG_STORE_EEPROM = _UxGT("Tallenna muistiin");
LSTR MSG_LOAD_EEPROM = _UxGT("Lataa muistista");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Palauta oletus");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä");
LSTR MSG_INFO_SCREEN = _UxGT("Seuraa");
LSTR MSG_PREPARE = _UxGT("Valmistele");
LSTR MSG_TUNE = _UxGT("Säädä");
LSTR MSG_PAUSE_PRINT = _UxGT("Keskeytä tulostus");
LSTR MSG_RESUME_PRINT = _UxGT("Jatka tulostusta");
LSTR MSG_STOP_PRINT = _UxGT("Pysäytä tulostus");
LSTR MSG_MEDIA_MENU = _UxGT("Korttivalikko");
LSTR MSG_NO_MEDIA = _UxGT("Ei korttia");
LSTR MSG_DWELL = _UxGT("Nukkumassa...");
LSTR MSG_USERWAIT = _UxGT("Odotet. valintaa");
LSTR MSG_NO_MOVE = _UxGT("Ei liiketta.");
LSTR MSG_CONTROL_RETRACT = _UxGT("Vedä mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Va. Vedä mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Vedä V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Va. Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_AUTORETRACT = _UxGT("AutoVeto.");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrointi");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibroi X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibroi Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibroi Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibroi Center");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Väärä tulostin");
}

View File

@ -0,0 +1,632 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* French
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_fr {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Français");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" prête.");
LSTR MSG_YES = _UxGT("Oui");
LSTR MSG_NO = _UxGT("Non");
LSTR MSG_BACK = _UxGT("Retour");
LSTR MSG_MEDIA_ABORTING = _UxGT("Annulation...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Média inséré");
LSTR MSG_MEDIA_REMOVED = _UxGT("Média retiré");
LSTR MSG_MEDIA_WAITING = _UxGT("Attente média");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err lecture média");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB débranché");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Erreur média USB");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Butées");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Butées SW");
LSTR MSG_MAIN = _UxGT("Menu principal");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée");
LSTR MSG_CONFIGURATION = _UxGT("Configuration");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Exéc. auto.gcode");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs");
LSTR MSG_DEBUG_MENU = _UxGT("Menu debug");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");
LSTR MSG_HOMING = _UxGT("Origine");
LSTR MSG_AUTO_HOME = _UxGT("Origine auto");
LSTR MSG_AUTO_HOME_A = _UxGT("Origine @ auto");
LSTR MSG_AUTO_HOME_X = _UxGT("Origine X auto");
LSTR MSG_AUTO_HOME_Y = _UxGT("Origine Y auto");
LSTR MSG_AUTO_HOME_Z = _UxGT("Origine Z auto");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Align. Z auto");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origine XYZ...");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Clic pour commencer");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Point suivant");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Mise à niveau OK!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Hauteur lissée");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Régl. décal origine");
LSTR MSG_HOME_OFFSET_X = _UxGT("Décal. origine X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Décal. origine Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Décal. origine Z");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Décalages appliqués");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Assistant Molettes");
LSTR MSG_SELECT_ORIGIN = _UxGT("Molette du lit"); // Not a selection of the origin
LSTR MSG_LAST_VALUE_SP = _UxGT("Ecart origine ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Préchauffage ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" Tout");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" lit");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Régler préch. ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_M = _UxGT("Préchauffage $");
LSTR MSG_PREHEAT_M_H = _UxGT("Préchauffage $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Préch. $ buse");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Préch. $ buse ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Préch. $ Tout");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Préch. $ lit");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Régler préch. $");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Préchauf. perso");
LSTR MSG_COOLDOWN = _UxGT("Refroidir");
LSTR MSG_LASER_MENU = _UxGT("Contrôle Laser");
LSTR MSG_LASER_POWER = _UxGT("Puissance");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverser broches");
LSTR MSG_SWITCH_PS_ON = _UxGT("Allumer alim.");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Eteindre alim.");
LSTR MSG_EXTRUDE = _UxGT("Extrusion");
LSTR MSG_RETRACT = _UxGT("Rétractation");
LSTR MSG_MOVE_AXIS = _UxGT("Déplacer un axe");
LSTR MSG_BED_LEVELING = _UxGT("Régler Niv. lit");
LSTR MSG_LEVEL_BED = _UxGT("Niveau du lit");
LSTR MSG_BED_TRAMMING = _UxGT("Niveau des coins");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Relever le coin jusqu'à la sonde");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolérance. Niveau lit.");
LSTR MSG_NEXT_CORNER = _UxGT("Coin suivant");
LSTR MSG_MESH_EDITOR = _UxGT("Modif. maille"); // 13 car. max
LSTR MSG_EDIT_MESH = _UxGT("Modifier grille");
LSTR MSG_EDITING_STOPPED = _UxGT("Modification arrêtée");
LSTR MSG_PROBING_POINT = _UxGT("Mesure point");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valeur Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Commandes perso");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Mesure point");
LSTR MSG_M48_TEST = _UxGT("Ecart sonde Z M48");
LSTR MSG_M48_DEVIATION = _UxGT("Ecart");
LSTR MSG_M48_POINT = _UxGT("Point M48");
LSTR MSG_IDEX_MENU = _UxGT("Mode IDEX");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copie miroir");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Contrôle complet");
LSTR MSG_OFFSETS_MENU = _UxGT("Offsets Outil");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("Buse 2 Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("Buse 2 @");
LSTR MSG_G26_HEATING_BED = _UxGT("G26: Chauffage du lit");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("Buse en chauffe...");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Amorce manuelle...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Amorce longueur fixe");
LSTR MSG_G26_PRIME_DONE = _UxGT("Amorce terminée");
LSTR MSG_G26_CANCELED = _UxGT("G26 annulé");
LSTR MSG_G26_LEAVING = _UxGT("Sortie G26");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 en cours");
LSTR MSG_UBL_TOOLS = _UxGT("Outils UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Niveau lit unifié");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Maillage manuel");
LSTR MSG_UBL_BC_INSERT = _UxGT("Poser câle & mesurer");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mesure");
LSTR MSG_UBL_BC_REMOVE = _UxGT("ôter et mesurer lit");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Aller au suivant");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activer l'UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Désactiver l'UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Température lit");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Température lit");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Température buse");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Température buse");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Modifier grille");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif. grille perso");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Réglage fin");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Créer la grille");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Créer grille $");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Impr. grille $");
#endif
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Créer grille ...");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Mesure à froid");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajuster haut. couche");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Hauteur (x0.1mm)");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Vérifier grille");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Impr. grille ...");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuer grille");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Niveau par mailles");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Niveau à 3 points");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niveau par grille");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Effectuer mesures");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Points latéraux");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Type de carte");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exporter grille");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export pour hôte");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export en CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Export sauvegarde");
LSTR MSG_UBL_INFO_UBL = _UxGT("Infos debug UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Nombre de points");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Remplissage manuel");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Remplissage auto");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Remplissage grille");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tout effacer");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Effacer le + près");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Réglage fin (tous)");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Réglage fin + près");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Stockage grille");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot mémoire");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Charger la grille");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Stocker la grille");
LSTR MSG_MESH_LOADED = _UxGT("Grille %i chargée");
LSTR MSG_MESH_SAVED = _UxGT("Grille %i enreg.");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Pas de mémoire");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: Enreg. UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ouvrir UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Décal. Z arrêté");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Assistant UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Mesure à froid");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Compléter auto.");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Vérifier grille");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Réglage fin");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Vérifier grille");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Réglage fin");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Stocker grille");
LSTR MSG_LED_CONTROL = _UxGT("Contrôle LED");
LSTR MSG_LEDS = _UxGT("Lumière");
LSTR MSG_LED_PRESETS = _UxGT("Préregl. LED");
LSTR MSG_SET_LEDS_RED = _UxGT("Rouge");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Jaune");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Vert");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Bleu");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Blanc");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Defaut");
LSTR MSG_CUSTOM_LEDS = _UxGT("LEDs perso.");
LSTR MSG_INTENSITY_R = _UxGT("Intensité rouge");
LSTR MSG_INTENSITY_G = _UxGT("Intensité vert");
LSTR MSG_INTENSITY_B = _UxGT("Intensité bleu");
LSTR MSG_INTENSITY_W = _UxGT("Intensité blanc");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Luminosité");
LSTR MSG_MOVING = _UxGT("Déplacement...");
LSTR MSG_FREE_XY = _UxGT("Débloquer XY");
LSTR MSG_MOVE_X = _UxGT("Déplacer X");
LSTR MSG_MOVE_Y = _UxGT("Déplacer Y");
LSTR MSG_MOVE_Z = _UxGT("Déplacer Z");
LSTR MSG_MOVE_N = _UxGT("Déplacer @");
LSTR MSG_MOVE_E = _UxGT("Extruder");
LSTR MSG_MOVE_EN = _UxGT("Extruder *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide");
LSTR MSG_MOVE_N_MM = _UxGT("Déplacer $mm");
LSTR MSG_MOVE_01MM = _UxGT("Déplacer 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Déplacer 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Déplacer 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Déplacer 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Déplacer 0.001\"");
LSTR MSG_MOVE_001IN = _UxGT("Déplacer 0.01\"");
LSTR MSG_MOVE_01IN = _UxGT("Déplacer 0.1\"");
LSTR MSG_MOVE_1IN = _UxGT("Déplacer 1\"");
LSTR MSG_SPEED = _UxGT("Vitesse");
LSTR MSG_BED_Z = _UxGT("Lit Z");
LSTR MSG_NOZZLE = _UxGT("Buse");
LSTR MSG_NOZZLE_N = _UxGT("Buse ~");
LSTR MSG_BED = _UxGT("Lit");
LSTR MSG_CHAMBER = _UxGT("Caisson");
LSTR MSG_FAN_SPEED = _UxGT("Vit. ventil. "); // 15 car. max
LSTR MSG_FAN_SPEED_N = _UxGT("Vit. ventil. ~");
LSTR MSG_STORED_FAN_N = _UxGT("Vit. enreg. ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. ~");
LSTR MSG_FLOW = _UxGT("Flux");
LSTR MSG_FLOW_N = _UxGT("Flux ~");
LSTR MSG_CONTROL = _UxGT("Contrôler");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
LSTR MSG_AUTOTEMP = _UxGT("Temp. Auto.");
LSTR MSG_LCD_ON = _UxGT("Marche");
LSTR MSG_LCD_OFF = _UxGT("Arrêt");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Tuning PID terminé");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Echec Autotune! E incorrect");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute");
LSTR MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Opér. expirée");
LSTR MSG_SELECT = _UxGT("Sélectionner");
LSTR MSG_SELECT_E = _UxGT("Sélectionner *");
LSTR MSG_ACC = _UxGT("Accélération");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT(" jerk");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT(" jerk");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT(" jerk");
LSTR MSG_VN_JERK = _UxGT("V@ jerk");
LSTR MSG_VE_JERK = _UxGT("Ve jerk");
LSTR MSG_MAX_SPEED = _UxGT("Max Vélocité");
LSTR MSG_VMAX_A = _UxGT("Vit. Max ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Vit. Max ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Vit. Max ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Vit. Max @");
LSTR MSG_VMAX_E = _UxGT("Vit. Max E");
LSTR MSG_VMAX_EN = _UxGT("Vit. Max *");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Déviat. jonct.");
LSTR MSG_VMIN = _UxGT("Vit. Min");
LSTR MSG_VTRAV_MIN = _UxGT("Vmin course");
LSTR MSG_ACCELERATION = _UxGT("Accélération");
LSTR MSG_AMAX_A = _UxGT("Max Accél. ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Max Accél. ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Max Accél. ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Max Accél. @");
LSTR MSG_AMAX_E = _UxGT("Max Accél. E");
LSTR MSG_AMAX_EN = _UxGT("Max Accél. *");
LSTR MSG_A_RETRACT = _UxGT("Acc.rétraction");
LSTR MSG_A_TRAVEL = _UxGT("Acc.course");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Fréquence max");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Vitesse min");
LSTR MSG_STEPS_PER_MM = _UxGT("Pas/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" pas/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" pas/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" pas/mm");
LSTR MSG_N_STEPS = _UxGT("@ pas/mm");
LSTR MSG_E_STEPS = _UxGT("E pas/mm");
LSTR MSG_EN_STEPS = _UxGT("* pas/mm");
LSTR MSG_TEMPERATURE = _UxGT("Température");
LSTR MSG_MOTION = _UxGT("Mouvement");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("Limite en mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Diamètre fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diamètre fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Retrait mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Charger mm");
LSTR MSG_ADVANCE_K = _UxGT("Avance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
LSTR MSG_BRIGHTNESS = _UxGT("Luminosité LCD");
LSTR MSG_CONTRAST = _UxGT("Contraste LCD");
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("Veille LCD (s)");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("Éteindre l'écran LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
LSTR MSG_LOAD_EEPROM = _UxGT("Charger config.");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurer défauts");
LSTR MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Config. enregistrée");
LSTR MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
LSTR MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualiser");
LSTR MSG_INFO_SCREEN = _UxGT("Surveiller");
LSTR MSG_PREPARE = _UxGT("Préparer");
LSTR MSG_TUNE = _UxGT("Régler");
LSTR MSG_START_PRINT = _UxGT("Démarrer impression");
LSTR MSG_BUTTON_NEXT = _UxGT("Suivant");
LSTR MSG_BUTTON_INIT = _UxGT("Init.");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Imprimer");
LSTR MSG_BUTTON_RESET = _UxGT("Reset");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorer");
LSTR MSG_BUTTON_CANCEL = _UxGT("Annuler");
LSTR MSG_BUTTON_DONE = _UxGT("Terminé");
LSTR MSG_BUTTON_BACK = _UxGT("Retour");
LSTR MSG_BUTTON_PROCEED = _UxGT("Procéder");
LSTR MSG_BUTTON_SKIP = _UxGT("Passer");
LSTR MSG_PAUSING = _UxGT("Mise en pause...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pause impression");
LSTR MSG_RESUME_PRINT = _UxGT("Reprendre impr.");
LSTR MSG_STOP_PRINT = _UxGT("Arrêter impr.");
LSTR MSG_PRINTING_OBJECT = _UxGT("Impression objet");
LSTR MSG_CANCEL_OBJECT = _UxGT("Annuler objet");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Récup. coup.");
LSTR MSG_MEDIA_MENU = _UxGT("Impression SD");
LSTR MSG_NO_MEDIA = _UxGT("Pas de média");
LSTR MSG_DWELL = _UxGT("Repos...");
LSTR MSG_USERWAIT = _UxGT("Attente utilis.");
LSTR MSG_PRINT_PAUSED = _UxGT("Impr. en pause");
LSTR MSG_PRINTING = _UxGT("Impression");
LSTR MSG_PRINT_ABORTED = _UxGT("Impr. annulée");
LSTR MSG_NO_MOVE = _UxGT("Moteurs bloqués");
LSTR MSG_KILLED = _UxGT("KILLED");
LSTR MSG_STOPPED = _UxGT("STOPPÉ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Rétractation mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. rétr. mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Vit. rétract°");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Rét.reprise mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech.reprise mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("V.rét. reprise");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("V.éch. reprise");
LSTR MSG_AUTORETRACT = _UxGT("Rétraction auto");
LSTR MSG_TOOL_CHANGE = _UxGT("Changement outil");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vit. ventil.");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Temps ventil.");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
LSTR MSG_TOOL_MIGRATION = _UxGT("Migration d'outil");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Migration auto");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Extrudeur Final");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrer vers *");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Attente buse");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Longueur retrait");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Longueur Extra");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Longueur de purge");
LSTR MSG_FILAMENTCHANGE = _UxGT("Changer filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Changer filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Charger filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Charger filament *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Retrait filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout");
LSTR MSG_ATTACH_MEDIA = _UxGT("Charger le média");
LSTR MSG_CHANGE_MEDIA = _UxGT("Actualiser média");
LSTR MSG_RELEASE_MEDIA = _UxGT("Retirer le média");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");
LSTR MSG_SKEW_FACTOR = _UxGT("Facteur écart");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("Ranger");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Déployer");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Mode SW");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Mode 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Mode OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Appliquer Mode");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Mise en 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Mise en OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Afficher Mode");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Init. TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test décalage Z");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Sauvegarde");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Déployer TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Déployer Sonde Z");
LSTR MSG_MANUAL_STOW = _UxGT("Ranger Sonde Z");
LSTR MSG_HOME_FIRST = _UxGT("Origine %s%s%s Premier");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Position sonde Z");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Décalage X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Décalage Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Décalage Z");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Butée abandon");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err TEMP. REDONDANTE");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("Err THERMIQUE");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err TEMP. MAX");
LSTR MSG_ERR_MINTEMP = _UxGT("Err TEMP. MIN");
LSTR MSG_HALTED = _UxGT("IMPR. STOPPÉE");
LSTR MSG_PLEASE_RESET = _UxGT("Redémarrer SVP");
LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
LSTR MSG_HEATING = _UxGT("en chauffe...");
LSTR MSG_COOLING = _UxGT("Refroidissement");
LSTR MSG_BED_HEATING = _UxGT("Lit en chauffe...");
LSTR MSG_BED_COOLING = _UxGT("Refroid. du lit...");
LSTR MSG_PROBE_HEATING = _UxGT("Probe en chauffe...");
LSTR MSG_PROBE_COOLING = _UxGT("Refroid. Probe...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Chauffe caisson...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Refroid. caisson...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibration Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrer X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrer Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrer Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrer centre");
LSTR MSG_DELTA_SETTINGS = _UxGT("Réglages Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Calibration Auto");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diagonale");
LSTR MSG_DELTA_HEIGHT = _UxGT("Hauteur");
LSTR MSG_DELTA_RADIUS = _UxGT("Rayon");
LSTR MSG_INFO_MENU = _UxGT("Infos imprimante");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Infos imprimante");
LSTR MSG_3POINT_LEVELING = _UxGT("Niveau à 3 points");
LSTR MSG_LINEAR_LEVELING = _UxGT("Niveau linéaire");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Niveau bilinéaire");
LSTR MSG_UBL_LEVELING = _UxGT("Niveau lit unifié");
LSTR MSG_MESH_LEVELING = _UxGT("Niveau par grille");
LSTR MSG_MESH_DONE = _UxGT("Niveau terminé");
LSTR MSG_INFO_STATS_MENU = _UxGT("Stats. imprimante");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Infos carte");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistances");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudeurs");
LSTR MSG_INFO_BAUDRATE = _UxGT("Bauds");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocole");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Protection inactive");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Protection active");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
LSTR MSG_CASE_LIGHT = _UxGT("Lumière caisson");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosité");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impr. la + longue");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total filament");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("+ long");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filament");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Min");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Max");
LSTR MSG_INFO_PSU = _UxGT("Alim.");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Puiss. moteur ");
LSTR MSG_DAC_PERCENT_N = _UxGT("Driver @ %");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv.");
LSTR MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CHANGER FILAMENT");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPR. PAUSE");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CHARGER FIL");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DECHARGER FIL");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPTIONS REPRISE:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purger encore");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Reprendre impr.");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Buse: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Capteur fil.");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Echec origine");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Echec sonde");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MAJ firmware MMU!!");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOISIR FILAMENT");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU ne répond plus");
LSTR MSG_MMU2_RESUME = _UxGT("Continuer Imp. MMU");
LSTR MSG_MMU2_RESUMING = _UxGT("Reprise MMU...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Charge dans MMU");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Charger tous dans MMU");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Charger dans buse");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejecter fil. du MMU");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejecter fil. ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Retrait filament");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Chargem. fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejection fil...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Retrait fil....");
LSTR MSG_MMU2_ALL = _UxGT("Tous");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("Réinit. MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Réinit. MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante =");
LSTR MSG_MIXER = _UxGT("Mixeur");
LSTR MSG_GRADIENT = _UxGT("Dégradé");
LSTR MSG_FULL_GRADIENT = _UxGT("Dégradé complet");
LSTR MSG_TOGGLE_MIX = _UxGT("Toggle mix");
LSTR MSG_CYCLE_MIX = _UxGT("Cycle mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Mix dégradé");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Inverser dégradé");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
LSTR MSG_START_VTOOL = _UxGT("Début V-tool");
LSTR MSG_END_VTOOL = _UxGT(" Fin V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("Réinit. V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("Valider Mix V-tool");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools réinit. ok");
LSTR MSG_START_Z = _UxGT("Début Z:");
LSTR MSG_END_Z = _UxGT(" Fin Z:");
LSTR MSG_GAMES = _UxGT("Jeux");
LSTR MSG_BRICKOUT = _UxGT("Casse-briques");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Labyrinthe");
LSTR MSG_BAD_PAGE = _UxGT("Erreur index page");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Erreur vitesse page");
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Attente filament", "pour démarrer"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insérer filament", "et app. bouton", "pour continuer..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clic pour continuer"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Patience..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insérer fil."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Chauffer ?"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Chauffage..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Retrait fil..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Chargement..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purge..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Terminer ?"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprise..."));
#endif // LCD_HEIGHT < 4
LSTR MSG_TMC_CURRENT = _UxGT("Courant driver");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Seuil hybride");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Home sans capteur");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Mode pas à pas");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop activé");
LSTR MSG_SERVICE_RESET = _UxGT("Réinit.");
LSTR MSG_SERVICE_IN = _UxGT(" dans:");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correction");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Lissage");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Niveau axe X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Etalon. auto.");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection, temp. réduite. Ok pour rechauffer et continuer.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection");
#endif
LSTR MSG_REHEAT = _UxGT("Chauffer");
LSTR MSG_REHEATING = _UxGT("Réchauffe...");
LSTR MSG_PROBE_WIZARD = _UxGT("Assistant Sonde Z");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Mesure référence");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Dépl. vers pos");
LSTR MSG_SOUND = _UxGT("Sons");
LSTR MSG_TOP_LEFT = _UxGT("Coin haut gauche");
LSTR MSG_BOTTOM_LEFT = _UxGT("Coin bas gauche");
LSTR MSG_TOP_RIGHT = _UxGT("Coin haut droit");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Coin bas droit");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration terminée");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Échec de l'étalonnage");
LSTR MSG_SD_CARD = _UxGT("Carte SD");
LSTR MSG_USB_DISK = _UxGT("Clé USB");
}

View File

@ -0,0 +1,595 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Galician language (ISO "gl")
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_gl {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Galician");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" lista.");
LSTR MSG_YES = _UxGT("SI");
LSTR MSG_NO = _UxGT("NON");
LSTR MSG_BACK = _UxGT("Atrás");
LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida");
LSTR MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada");
LSTR MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/FD");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/FD");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbord. Subch.");
LSTR MSG_LCD_ENDSTOPS = _UxGT("FinCarro");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("FinCarro SW");
LSTR MSG_MAIN = _UxGT("Menú principal");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados");
LSTR MSG_CONFIGURATION = _UxGT("Configuración");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autoarranque");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
LSTR MSG_DEBUG_MENU = _UxGT("Menú depuración");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso");
LSTR MSG_AUTO_HOME = _UxGT("Ir a orixe");
LSTR MSG_AUTO_HOME_X = _UxGT("Ir orixe X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Ir orixe Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Ir orixe Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Autoaliñar Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Ir orixes XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Prema pulsador");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Seguinte punto");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Fin Nivelación!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Compensación Altura");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Axustar Desfases");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfases aplicados");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Prequentar ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Todo");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Cama");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" conf");
LSTR MSG_PREHEAT_M = _UxGT("Prequentar $");
LSTR MSG_PREHEAT_M_H = _UxGT("Prequentar $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Preque. $ Bico");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preque. $ Bico ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preque. $ Todo");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preque. $ Cama");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preque. $ conf");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preque. Personali.");
LSTR MSG_COOLDOWN = _UxGT("Arrefriar");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
LSTR MSG_LASER_MENU = _UxGT("Control Láser");
LSTR MSG_LASER_POWER = _UxGT("Potencia Láser");
LSTR MSG_SPINDLE_MENU = _UxGT("Control Fuso");
LSTR MSG_SPINDLE_POWER = _UxGT("Potencia Fuso");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverter xiro");
LSTR MSG_SWITCH_PS_ON = _UxGT("Acender");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Apagar");
LSTR MSG_EXTRUDE = _UxGT("Extruír");
LSTR MSG_RETRACT = _UxGT("Retraer");
LSTR MSG_MOVE_AXIS = _UxGT("Mover eixe");
LSTR MSG_BED_LEVELING = _UxGT("Nivelando Cama");
LSTR MSG_LEVEL_BED = _UxGT("Nivelar Cama");
LSTR MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
LSTR MSG_NEXT_CORNER = _UxGT("Seguinte Canto");
LSTR MSG_MESH_EDITOR = _UxGT("Editor Mallado");
LSTR MSG_EDIT_MESH = _UxGT("Editar Mallado");
LSTR MSG_EDITING_STOPPED = _UxGT("Ed. Mallado Detida");
LSTR MSG_PROBING_POINT = _UxGT("Punto de Proba");
LSTR MSG_MESH_X = _UxGT("Índice X");
LSTR MSG_MESH_Y = _UxGT("Índice Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comandos Personaliz.");
LSTR MSG_M48_TEST = _UxGT("M48 Probar Sonda");
LSTR MSG_M48_POINT = _UxGT("M48 Punto");
LSTR MSG_M48_DEVIATION = _UxGT("Desviación");
LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Ferramentas Compens");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicación");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Espello");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2º Bico Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2º Bico @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Executando G29");
LSTR MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Facer Malla Manual");
LSTR MSG_UBL_BC_INSERT = _UxGT("Colocar Calzo e Medir");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Quitar e Medir Cama");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover ao Seguinte");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp Cama");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp Cama");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp Bico");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp Bico");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Malla");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Malla Person.");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Axuste Fino da Malla");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fin Edición da Malla");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Malla Person.");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Malla");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Malla ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validar Malla ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Malla Fría");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Axustar Altura Malla");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altura");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malla");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malla perso.");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Quentando Cama");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Quentando Bico");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Traballo manual...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Traballo Lonxit Fixa");
LSTR MSG_G26_PRIME_DONE = _UxGT("Fin Traballo");
LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
LSTR MSG_G26_LEAVING = _UxGT("Saíndo de G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malla");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelación Malla");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelación 3Puntos");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelación Grid");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malla");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterais");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa ");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Gardar Mapa");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar ao Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Gardar en CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup Externo");
LSTR MSG_UBL_INFO_UBL = _UxGT("Info do UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidade de Recheo");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Recheo Manual");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Recheo Intelixente");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Recheo da Malla");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar cercanos");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Axustar Fino Todo");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Axustar Fino Cerc");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacenamento Malla");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Rañura Memoria");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Cargar Malla Cama");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Gardar Malla Cama");
LSTR MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
LSTR MSG_MESH_SAVED = _UxGT("Malla %i Gardada");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Sen Gardar");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Erro: Gardadado UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Erro: Recuperación UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Detido");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Crear Malla Fría");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Recheo Intelixente");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validar Malla");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Axustar Fino Todo");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validar Malla");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Axustar Fino Todo");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Gardar Malla Cama");
LSTR MSG_LED_CONTROL = _UxGT("Control LED");
LSTR MSG_LEDS = _UxGT("Luces");
LSTR MSG_LED_PRESETS = _UxGT("Axustes Luz");
LSTR MSG_SET_LEDS_RED = _UxGT("Vermello");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Laranxa");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Amarelo");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Azul");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Branco");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
LSTR MSG_CUSTOM_LEDS = _UxGT("Luces personalizadas");
LSTR MSG_INTENSITY_R = _UxGT("Intensidade Vermello");
LSTR MSG_INTENSITY_G = _UxGT("Intensidade Verde");
LSTR MSG_INTENSITY_B = _UxGT("Intensidade Azul");
LSTR MSG_INTENSITY_W = _UxGT("Intensidade Branco");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brillo");
LSTR MSG_MOVING = _UxGT("Movendo...");
LSTR MSG_FREE_XY = _UxGT("Libre XY");
LSTR MSG_MOVE_X = _UxGT("Mover X");
LSTR MSG_MOVE_Y = _UxGT("Mover Y");
LSTR MSG_MOVE_Z = _UxGT("Mover Z");
LSTR MSG_MOVE_N = _UxGT("Mover @");
LSTR MSG_MOVE_E = _UxGT("Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Bico moi frío");
LSTR MSG_MOVE_N_MM = _UxGT("Mover $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
LSTR MSG_BED_Z = _UxGT("Cama Z");
LSTR MSG_NOZZLE = _UxGT("Bico");
LSTR MSG_NOZZLE_N = _UxGT("Bico ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Bico Estacionado");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Bico Standby");
LSTR MSG_BED = _UxGT("Cama");
LSTR MSG_CHAMBER = _UxGT("Cámara");
LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
LSTR MSG_STORED_FAN_N = _UxGT("Ventilador Mem. ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Vent. Extra");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Vent. Extra ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidade Repouso");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidade Activa");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo Repouso");
LSTR MSG_FLOW = _UxGT("Fluxo");
LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
LSTR MSG_LCD_ON = _UxGT("Acender");
LSTR MSG_LCD_OFF = _UxGT("Apagar");
LSTR MSG_PID_AUTOTUNE = _UxGT("Auto-Sint. PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("Auto-Sint. PID *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Fin Auto-Sint PID");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-Sint. fallida! Extrusor danado.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-Sint. fallida! Temperatura moi alta.");
LSTR MSG_PID_TIMEOUT = _UxGT("Auto-Sint. fallida! Tempo excedido.");
LSTR MSG_SELECT = _UxGT("Escolla");
LSTR MSG_SELECT_E = _UxGT("Escolla *");
LSTR MSG_ACC = _UxGT("Acel");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk");
LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk");
LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk");
LSTR MSG_VN_JERK = _UxGT("Max @ Jerk");
LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvío Unión");
LSTR MSG_MAX_SPEED = _UxGT("Max Velocidade");
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Speed");
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Speed");
LSTR MSG_VMAX_N = _UxGT("Max @ Speed");
LSTR MSG_VMAX_E = _UxGT("Max E Speed");
LSTR MSG_VMAX_EN = _UxGT("Max * Speed");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("V-viaxe min");
LSTR MSG_ACCELERATION = _UxGT("Aceleración");
LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Accel");
LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Accel");
LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Accel");
LSTR MSG_AMAX_E = _UxGT("Max E Accel");
LSTR MSG_AMAX_EN = _UxGT("Max * Accel");
LSTR MSG_A_RETRACT = _UxGT("A-retrac.");
LSTR MSG_A_TRAVEL = _UxGT("A-viaxe");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frecuencia max");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Avance min");
LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" pasos/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" pasos/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" pasos/mm");
LSTR MSG_N_STEPS = _UxGT("@ pasos/mm");
LSTR MSG_E_STEPS = _UxGT("E pasos/mm");
LSTR MSG_EN_STEPS = _UxGT("* pasos/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movemento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Carga mm");
LSTR MSG_ADVANCE_K = _UxGT("Avance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
LSTR MSG_CONTRAST = _UxGT("Constraste LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Gardar Configuración");
LSTR MSG_LOAD_EEPROM = _UxGT("Cargar Configuración");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Config Gardada");
LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD");
LSTR MSG_RESET_PRINTER = _UxGT("Reiniciar Impresora");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
LSTR MSG_INFO_SCREEN = _UxGT("Información");
LSTR MSG_PREPARE = _UxGT("Preparar");
LSTR MSG_TUNE = _UxGT("Axustar");
LSTR MSG_START_PRINT = _UxGT("Comezar impresión");
LSTR MSG_BUTTON_NEXT = _UxGT("Seguinte");
LSTR MSG_BUTTON_INIT = _UxGT("Comezar");
LSTR MSG_BUTTON_STOP = _UxGT("Deter");
LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
LSTR MSG_BUTTON_RESET = _UxGT("Reiniciar");
LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
LSTR MSG_BUTTON_DONE = _UxGT("Listo");
LSTR MSG_BUTTON_BACK = _UxGT("Atrás");
LSTR MSG_BUTTON_PROCEED = _UxGT("Proceder");
LSTR MSG_PAUSING = _UxGT("Pausando...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
LSTR MSG_RESUME_PRINT = _UxGT("Retomar impresión");
LSTR MSG_STOP_PRINT = _UxGT("Deter impresión");
LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo Obxecto");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Obxecto");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impresión");
LSTR MSG_MEDIA_MENU = _UxGT("Tarxeta SD");
LSTR MSG_NO_MEDIA = _UxGT("Sen tarxeta SD");
LSTR MSG_DWELL = _UxGT("En repouso...");
LSTR MSG_USERWAIT = _UxGT("Prema para Retomar..");
LSTR MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
LSTR MSG_PRINTING = _UxGT("Imprimindo...");
LSTR MSG_PRINT_ABORTED = _UxGT("Impresión Cancelada");
LSTR MSG_PRINT_DONE = _UxGT("Fin Impresión");
LSTR MSG_NO_MOVE = _UxGT("Sen movemento.");
LSTR MSG_KILLED = _UxGT("MORTO.");
LSTR MSG_STOPPED = _UxGT("DETIDO.");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Cambio retra. mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Alzar Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Recup. retra. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Cambio recup. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Recuperacion V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retracción");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lonxitude Retracción");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Cambio Extra");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lonxitude de Purga");
LSTR MSG_TOOL_CHANGE = _UxGT("Cambiar Ferramenta");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocidade prim.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de Retracción");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Extrusor Est.");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vel. Recuperación");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vel. Ventilador");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo Ventilador");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
LSTR MSG_TOOL_MIGRATION = _UxGT("Cambio Ferramenta");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Cambio Automático");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Último Extrusor");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Cambio a *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Cambiar Filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambiar Filamento *");
LSTR MSG_FILAMENTLOAD = _UxGT("Cargar Filamento");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Cargar Filamento *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar Filamento");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar Filamento *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar Todo");
LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/FD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/FD");
LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/FD");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda-Z fóra Cama");
LSTR MSG_SKEW_FACTOR = _UxGT("Factor de Desviación");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
LSTR MSG_BLTOUCH_STOW = _UxGT("Recoller");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estender");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Modo Almacenar");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Axustar BLTouch a 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Axustar BLTouch a OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Modo de Informe");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERIGO: Unha mala configuración pode producir daños! Proceder igualmente?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test de Desfase Z");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Gardar");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estender TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda Z");
LSTR MSG_MANUAL_STOW = _UxGT("Recoller Sonda Z");
LSTR MSG_HOME_FIRST = _UxGT("Orixe %s%s%s Primeiro");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Desfases Sonda");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Desfase Sonda X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Desfase Sonda Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
LSTR MSG_BABYSTEP_N = _UxGT("Micropaso @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Erro FinCarro");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Fallo Quentando");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CÁMARA");
LSTR MSG_ERR_MAXTEMP = _UxGT("Erro:TEMP MÁX");
LSTR MSG_ERR_MINTEMP = _UxGT("Erro:TEMP MÍN");
LSTR MSG_HALTED = _UxGT("IMPRESORA DETIDA");
LSTR MSG_PLEASE_RESET = _UxGT("Debe reiniciar!");
LSTR MSG_HEATING = _UxGT("Quentando...");
LSTR MSG_COOLING = _UxGT("Arrefriando...");
LSTR MSG_BED_HEATING = _UxGT("Quentando cama...");
LSTR MSG_BED_COOLING = _UxGT("Enfriando Cama...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Quentando Cámara...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Arrefriando Cámara...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
LSTR MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
LSTR MSG_DELTA_RADIUS = _UxGT("Radio");
LSTR MSG_INFO_MENU = _UxGT("Acerca de...");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Información");
LSTR MSG_3POINT_LEVELING = _UxGT("Nivelación 3puntos");
LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelación Lineal");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelación Bilineal");
LSTR MSG_UBL_LEVELING = _UxGT("Nivelación UBL");
LSTR MSG_MESH_LEVELING = _UxGT("Nivelación en Malla");
LSTR MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Placa nai");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Reloxo Traballo: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Reloxo Traballo: ON");
LSTR MSG_CASE_LIGHT = _UxGT("Luz da Caixa");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo Luces");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("IMPRESORA INCORRECTA");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Impresións");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo Total Imp.");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresión máis longa");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruído");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresións");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Máis Longa");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
LSTR MSG_INFO_PSU = _UxGT("Fonte Alimentación");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Forza do Motor");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_ERROR_TMC = _UxGT("ERRO CONEX. TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCIÓN DE RETOMAR:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar máis");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Retomar traballo");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bico: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Sensor Filamento");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm Sensor Fil");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Fallo ao ir á Orixe");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Fallo ao Sondar");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLLE FILAMENTO");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Actualizar FW MMU!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Precisa Atención.");
LSTR MSG_MMU2_RESUME = _UxGT("Retomar impr.");
LSTR MSG_MMU2_RESUMING = _UxGT("Retomando...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar até bico");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil...");
LSTR MSG_MMU2_ALL = _UxGT("Todo");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
LSTR MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Expulsar, premer");
LSTR MSG_MIX = _UxGT("Mestura");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Compoñente =");
LSTR MSG_MIXER = _UxGT("Mesturadora");
LSTR MSG_GRADIENT = _UxGT("Degradado");
LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total");
LSTR MSG_TOGGLE_MIX = _UxGT("Mestura Conmutada");
LSTR MSG_CYCLE_MIX = _UxGT("Mestura Cíclica");
LSTR MSG_GRADIENT_MIX = _UxGT("Mestura de Degradado");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Degradado Inverso");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Activar Ferr-V");
LSTR MSG_START_VTOOL = _UxGT("Inicio Ferr-V");
LSTR MSG_END_VTOOL = _UxGT(" Fin Ferr-V");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias Ferr-V");
LSTR MSG_RESET_VTOOLS = _UxGT("Reiniciar Ferr-V");
LSTR MSG_COMMIT_VTOOL = _UxGT("Commit mest. Ferr-V");
LSTR MSG_VTOOLS_RESET = _UxGT("Ferr-V reiniciadas");
LSTR MSG_START_Z = _UxGT("Inicio Z:");
LSTR MSG_END_Z = _UxGT(" Fin Z:");
LSTR MSG_GAMES = _UxGT("Xogos");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Labirinto");
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Preme o botón para", "continuar impresión"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "comezar cambio", "de filamento"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Prema o botón para", "quentar o bico"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Quentando bico", "Agarde, por favor..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Agarde para", "purgar o filamento"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Prema para finalizar", "a purga do filamen."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde a que", "se retome", "a impresión"));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premer para continuar"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Agarde..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Prema para quentar"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Quentando..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Descargando..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Prema para finalizar"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Retomando..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Controlador Actual");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Limiar Hibrido");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Orixe sen Sensores");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
LSTR MSG_SERVICE_RESET = _UxGT("Reiniciar");
LSTR MSG_SERVICE_IN = _UxGT(" dentro:");
LSTR MSG_BACKLASH = _UxGT("Reacción");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivel Eixe X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
LSTR MSG_HEATER_TIMEOUT = _UxGT("Tempo exc. Quent.");
LSTR MSG_REHEAT = _UxGT("Requentar");
LSTR MSG_REHEATING = _UxGT("Requentando...");
}

View File

@ -0,0 +1,173 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Croatian (Hrvatski)
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
namespace Language_hr {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Croatian");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" spreman.");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD kartica umetnuta");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Main");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto pokretanje");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere");
LSTR MSG_AUTO_HOME = _UxGT("Automatski homing");
LSTR MSG_AUTO_HOME_X = _UxGT("Home-aj X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Home-aj Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Home-aj Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Home-aj XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klikni za početak");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sljedeća točka");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Niveliranje gotovo!");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Postavi home offsete");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets postavljeni");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Predgrij ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Predgrij ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Sve");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Bed");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" conf");
LSTR MSG_PREHEAT_M = _UxGT("Predgrij $");
LSTR MSG_PREHEAT_M_H = _UxGT("Predgrij $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Predgrij $ Dizna");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Predgrij $ Dizna ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Predgrij $ Sve");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Predgrij $ Bed");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Predgrij $ conf");
#endif
LSTR MSG_COOLDOWN = _UxGT("Hlađenje");
LSTR MSG_SWITCH_PS_ON = _UxGT("Uključi napajanje");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Isključi napajanje");
LSTR MSG_MOVE_AXIS = _UxGT("Miči os");
LSTR MSG_BED_LEVELING = _UxGT("Niveliraj bed");
LSTR MSG_LEVEL_BED = _UxGT("Niveliraj bed");
LSTR MSG_MOVE_X = _UxGT("Miči X");
LSTR MSG_MOVE_Y = _UxGT("Miči Y");
LSTR MSG_MOVE_Z = _UxGT("Miči Z");
LSTR MSG_MOVE_N = _UxGT("Miči @");
LSTR MSG_MOVE_E = _UxGT("Miči E");
LSTR MSG_MOVE_EN = _UxGT("Miči *");
LSTR MSG_MOVE_N_MM = _UxGT("Miči $mm");
LSTR MSG_MOVE_01MM = _UxGT("Miči 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Miči 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Miči 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Miči 100mm");
LSTR MSG_SPEED = _UxGT("Brzina");
LSTR MSG_BED_Z = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Dizna");
LSTR MSG_NOZZLE_N = _UxGT("Dizna ~");
LSTR MSG_BED = _UxGT("Bed");
LSTR MSG_FAN_SPEED = _UxGT("Brzina ventilatora");
LSTR MSG_FAN_SPEED_N = _UxGT("Brzina ventilatora ~");
LSTR MSG_SELECT = _UxGT("Odaberi");
LSTR MSG_SELECT_E = _UxGT("Odaberi *");
LSTR MSG_TEMPERATURE = _UxGT("Temperature");
LSTR MSG_MOTION = _UxGT("Gibanje");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_CONTRAST = _UxGT("Kontrast LCD-a");
LSTR MSG_STORE_EEPROM = _UxGT("Pohrani u memoriju");
LSTR MSG_LOAD_EEPROM = _UxGT("Učitaj memoriju");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Učitaj Defaults");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Osvježi");
LSTR MSG_INFO_SCREEN = _UxGT("Info screen");
LSTR MSG_PREPARE = _UxGT("Pripremi");
LSTR MSG_PAUSE_PRINT = _UxGT("Pauziraj print");
LSTR MSG_RESUME_PRINT = _UxGT("Nastavi print");
LSTR MSG_STOP_PRINT = _UxGT("Zaustavi print");
LSTR MSG_MEDIA_MENU = _UxGT("Printaj s SD kartice");
LSTR MSG_NO_MEDIA = _UxGT("Nema SD kartice");
LSTR MSG_USERWAIT = _UxGT("Čekaj korisnika...");
LSTR MSG_PRINT_ABORTED = _UxGT("Print otkazan");
LSTR MSG_STOPPED = _UxGT("ZAUSTAVLJEN. ");
LSTR MSG_FILAMENTCHANGE = _UxGT("Promijeni filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Promijeni filament *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Init. SD karticu");
LSTR MSG_CHANGE_MEDIA = _UxGT("Promijeni SD karticu");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Grijanje neuspješno");
LSTR MSG_HEATING = _UxGT("Grijanje...");
LSTR MSG_BED_HEATING = _UxGT("Grijanje Bed-a...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibracija");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriraj X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriraj Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriraj Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriraj Središte");
LSTR MSG_INFO_MENU = _UxGT("O printeru");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Podaci o printeru");
LSTR MSG_INFO_STATS_MENU = _UxGT("Statistika printera");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Podaci o elektronici");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruderi");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
LSTR MSG_CASE_LIGHT = _UxGT("Osvjetljenje");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Neispravan pisač");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Broj printova");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Ukupno printanja");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najduži print");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano ukupno");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Printovi");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Ukupno");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najduži");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano");
#endif
LSTR MSG_INFO_PSU = _UxGT("Napajanje");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Nastavi print");
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Čekaj", "filament unload"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Pričekaj", "filament load"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Nastavljam..."));
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekaj početak", "filamenta", "promijeni"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Umetni filament", "i pritisni tipku", "za nastavak..."));
#else
// Up to 2 lines allowed
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT("Pričekaj...");
#endif
}

View File

@ -0,0 +1,706 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Hungarian / Magyar
*
* LCD Menu Messages. See also https://marlinfw.org/docs/development/lcd_language.html
* Hungarian translation by AntoszHUN. I am constantly improving and updating the translation.
* Translation last updated: 08/30/2021 - 22:20
*
* LCD Menü Üzenetek. Lásd még https://marlinfw.org/docs/development/lcd_language.html
* A Magyar fordítást készítette: AntoszHUN. A fordítást folyamatosan javítom és frissítem.
* A Fordítás utolsó frissítése: 2021.08.30. - 22:20
*/
namespace Language_hu {
using namespace Language_en; // A fordítás az örökölt Amerikai Angol (English) karakterláncokat használja.
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Magyar");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Kész.");
LSTR MSG_YES = _UxGT("IGEN");
LSTR MSG_NO = _UxGT("NEM");
LSTR MSG_BACK = _UxGT("Vissza");
LSTR MSG_MEDIA_ABORTING = _UxGT("Megszakítás...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Tároló behelyezve");
LSTR MSG_MEDIA_REMOVED = _UxGT("Tároló eltávolítva");
LSTR MSG_MEDIA_WAITING = _UxGT("Várakozás a tárolóra");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Tároló-kártya hiba");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Tároló olvasási hiba");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB eltávolítva");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB eszköz hiba");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Túlfolyás");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Végállás"); // Maximum 8 karakter
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Szoft. végállás");
LSTR MSG_MAIN = _UxGT("<Fömenü>");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("További beállítások");
LSTR MSG_CONFIGURATION = _UxGT("Konfiguráció");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Fájl auto. futtatás");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Motorok kikapcsolása");
LSTR MSG_DEBUG_MENU = _UxGT("Hiba Menü");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt");
LSTR MSG_AUTO_HOME = _UxGT("X-Y-Z auto kezdöpont");
LSTR MSG_AUTO_HOME_A = _UxGT("Kezdö @");
LSTR MSG_AUTO_HOME_X = _UxGT("X kezdöpont");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y kezdöpont");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z kezdöpont");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-igazítás");
LSTR MSG_ITERATION = _UxGT("G34 Ismétlés: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Pontosság csökken!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Pontosság elérve");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("X-Y-Z kezdöpont");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kattints a kezdéshez.");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Következö pont");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Szintezés kész!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Szint csökkentés");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Kezdöpont eltolás");
LSTR MSG_HOME_OFFSET_X = _UxGT("X Kezdö eltol.");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Kezdö eltol.");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Kezdö eltol.");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Eltolás beállítva.");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Elektromos varázsló");
LSTR MSG_SELECT_ORIGIN = _UxGT("Eredeti választása");
LSTR MSG_LAST_VALUE_SP = _UxGT("Utolsó érték ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Fütés ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Fütés ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Mind");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Ágy");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Beáll");
LSTR MSG_PREHEAT_M = _UxGT("Fütés $");
LSTR MSG_PREHEAT_M_H = _UxGT("Fütés $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Fütés $ Fej");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Fütés $ Fej ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Fütés $ Mind");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Fütés $ Ágy");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Fütés $ Beáll");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Egyedi elömelegítés");
LSTR MSG_COOLDOWN = _UxGT("Visszahütés");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
LSTR MSG_LASER_MENU = _UxGT("Lézer vezérlés");
LSTR MSG_SPINDLE_MENU = _UxGT("Orsó vezérlés");
LSTR MSG_LASER_POWER = _UxGT("Lézer telj.");
LSTR MSG_SPINDLE_POWER = _UxGT("Orsó telj.");
LSTR MSG_LASER_TOGGLE = _UxGT("Lézer váltás");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Hütés váltás");
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Levegö segéd");
LSTR MSG_LASER_PULSE_MS = _UxGT("Impulzus teszt ms");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Tüz impulzus");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Áramlási hiba");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Orsóváltás");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vákuum váltás");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Orsó elöre");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Orsó hátra");
LSTR MSG_SWITCH_PS_ON = _UxGT("Bekapcsolás");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Kikapcsolás");
LSTR MSG_EXTRUDE = _UxGT("Adagol");
LSTR MSG_RETRACT = _UxGT("Visszahúz");
LSTR MSG_MOVE_AXIS = _UxGT("Tengelyek mozgatása");
LSTR MSG_BED_LEVELING = _UxGT("Ágy szintezés");
LSTR MSG_LEVEL_BED = _UxGT("Ágy szintezése");
LSTR MSG_BED_TRAMMING = _UxGT("Sarok szint");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Ágy emelése a szonda váltásig");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Minden sarok tolerancián belül. Szint jó.");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Jó pontok: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Utolsó Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Következö sarok");
LSTR MSG_MESH_EDITOR = _UxGT("Háló szerkesztö");
LSTR MSG_EDIT_MESH = _UxGT("Háló szerkesztése");
LSTR MSG_EDITING_STOPPED = _UxGT("Háló szerk. állj");
LSTR MSG_PROBING_POINT = _UxGT("Próbapont");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z érték");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Egyéni parancs");
LSTR MSG_M48_TEST = _UxGT("M48 Szonda teszt");
LSTR MSG_M48_POINT = _UxGT("M48 Pont");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Szonda határon kívül");
LSTR MSG_M48_DEVIATION = _UxGT("Eltérés");
LSTR MSG_IDEX_MENU = _UxGT("IDEX mód");
LSTR MSG_OFFSETS_MENU = _UxGT("Eszköz eltolás");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Automata parkolás");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikálás");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Tükrözött másolás");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Teljes felügyelet");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-hézag másolása");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. fej Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. fej @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Szintezz! G29");
LSTR MSG_UBL_TOOLS = _UxGT("UBL eszköz");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Egységes ágy szint");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Döntési pont");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Kézi háló építés");
LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Háló varázsló");
LSTR MSG_UBL_BC_INSERT = _UxGT("Tégy alátétet és mérj");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mérés");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Üres ágyat mérj");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Továbblépés");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktívál");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktívál");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Ágy höfok");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Egyéni ágy höfok");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Fejhöfok");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Egyéni fejhöfok");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Háló szerkesztés");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Egyéni háló szerkesztés");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Finomított háló");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Háló kész");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Egyéni háló építés");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Háló építés");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Háló építés ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Hideg háló építés");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Háló magasság állítás");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Magasság összege");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Háló elfogadás");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Háló elfogadás ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valódi háló elfogadása");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Ágy fütés");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Fej fütés");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Kézi alapozás...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fix hosszúságú alap");
LSTR MSG_G26_PRIME_DONE = _UxGT("Alapozás kész");
LSTR MSG_G26_CANCELED = _UxGT("G26 Törölve");
LSTR MSG_G26_LEAVING = _UxGT("Kilépö G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Ágy háló folyt.");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Háló szintezés");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Pontos szintezés");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rács szintezés");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Háló szint");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Oldal pontok");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Térkép típus");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Háló térkép kimenet");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host kimenet");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV kimenet");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Nyomtató bizt.mentés");
LSTR MSG_UBL_INFO_UBL = _UxGT("UBL infó kimenet");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Kitöltési költség");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Kézi kitöltés");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Okos kitöltés");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Háló kitöltés");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Minden érvénytelen");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Közelebbi érvénytelen");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Mindet finomhangolja");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Közelebbi finomhangolása");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Háló tárolás");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memória foglalat");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Ágy háló betöltés");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Ágy háló mentés");
LSTR MSG_MESH_LOADED = _UxGT("M117 Háló %i betöltve");
LSTR MSG_MESH_SAVED = _UxGT("M117 Háló %i mentve");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Nincs tároló");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Hiba: UBL mentés");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Hiba: UBL visszaáll.");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-eltolás: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-eltolás leállítva");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Lépésröl lépésre UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Hideg háló készítés");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligens kitöltés");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Háló érvényesítés");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Minden finomítása");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Háló érvényesítés");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Minden finomítása");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Ágy háló mentése");
LSTR MSG_LED_CONTROL = _UxGT("LED vezérlés");
LSTR MSG_LEDS = _UxGT("Világítás");
LSTR MSG_LED_PRESETS = _UxGT("Beállított színek");
LSTR MSG_SET_LEDS_RED = _UxGT("Piros");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Narancs");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Sárga");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Zöld");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Kék");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigó");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Fehér");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Alapérték");
LSTR MSG_LED_CHANNEL_N = _UxGT("Csatorna =");
LSTR MSG_LEDS2 = _UxGT("LED-ek #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Fény #2 megadott");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Fényerö");
LSTR MSG_CUSTOM_LEDS = _UxGT("Egyéni szín");
LSTR MSG_INTENSITY_R = _UxGT("Piros intenzitás");
LSTR MSG_INTENSITY_G = _UxGT("Zöld intenzitás");
LSTR MSG_INTENSITY_B = _UxGT("Kék intenzitás");
LSTR MSG_INTENSITY_W = _UxGT("Fehér intenzitás");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Fényerö");
LSTR MSG_MOVING = _UxGT("Mozgás...");
LSTR MSG_FREE_XY = _UxGT("XY szabad");
LSTR MSG_MOVE_X = _UxGT("X mozgás");
LSTR MSG_MOVE_Y = _UxGT("Y mozgás");
LSTR MSG_MOVE_Z = _UxGT("Z mozgás");
LSTR MSG_MOVE_N = _UxGT("@ mozgás");
LSTR MSG_MOVE_E = _UxGT("Adagoló");
LSTR MSG_MOVE_EN = _UxGT("Adagoló *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("A fej túl hideg");
LSTR MSG_MOVE_N_MM = _UxGT("Mozgás $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mozgás 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mozgás 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mozgás 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mozgás 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Mozgás 0.025mm");
LSTR MSG_MOVE_001IN = _UxGT("Mozgás 0.254mm");
LSTR MSG_MOVE_01IN = _UxGT("Mozgás 2.54mm");
LSTR MSG_MOVE_1IN = _UxGT("Mozgáá 25.4mm");
LSTR MSG_SPEED = _UxGT("Sebesség");
LSTR MSG_BED_Z = _UxGT("Z ágy");
LSTR MSG_NOZZLE = _UxGT("Fej");
LSTR MSG_NOZZLE_N = _UxGT("Fej ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Fej parkolva");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Fej készenlétbe");
LSTR MSG_BED = _UxGT("Ágy");
LSTR MSG_CHAMBER = _UxGT("Burkolat");
LSTR MSG_COOLER = _UxGT("Lézer hütövíz");
LSTR MSG_COOLER_TOGGLE = _UxGT("Hütö kapcsoló");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Áramlásbiztonság");
LSTR MSG_LASER = _UxGT("Lézer");
LSTR MSG_FAN_SPEED = _UxGT("Hütés sebesség");
LSTR MSG_FAN_SPEED_N = _UxGT("Hütés sebesség =");
LSTR MSG_STORED_FAN_N = _UxGT("Tárolt hütés =");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra hütés sebesség");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra hütés sebesség =");
LSTR MSG_CONTROLLER_FAN = _UxGT("Hütésvezérlés");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Alapjárat");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Automatikus mód");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív sebesség");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Készenlét");
LSTR MSG_FLOW = _UxGT("Folyás");
LSTR MSG_FLOW_N = _UxGT("Folyás ~");
LSTR MSG_CONTROL = _UxGT("Konfiguráció");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Minimum");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Maximum");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Tényezö");
LSTR MSG_AUTOTEMP = _UxGT("Automata höfok");
LSTR MSG_LCD_ON = _UxGT("Be");
LSTR MSG_LCD_OFF = _UxGT("Ki");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID hangolás");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID hangolás *");
LSTR MSG_PID_CYCLE = _UxGT("PID ciklus");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID hangolás kész");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Hangolási hiba! Rossz adagoló.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Hangolási hiba! Magas hömérséklet.");
LSTR MSG_PID_TIMEOUT = _UxGT("Hangolási hiba! Idötúllépés.");
LSTR MSG_SELECT = _UxGT("Kiválaszt");
LSTR MSG_SELECT_E = _UxGT("Kiválaszt *");
LSTR MSG_ACC = _UxGT("Gyorsítás");
LSTR MSG_JERK = _UxGT("Rántás");
LSTR MSG_VA_JERK = _UxGT("Seb.") STR_A _UxGT("-Rántás");
LSTR MSG_VB_JERK = _UxGT("Seb.") STR_B _UxGT("-Rántás");
LSTR MSG_VC_JERK = _UxGT("Seb.") STR_C _UxGT("-Rántás");
LSTR MSG_VN_JERK = _UxGT("Seb.@-Rántás");
LSTR MSG_VE_JERK = _UxGT("E ránt. seb.");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Csomopont eltérés");
LSTR MSG_MAX_SPEED = _UxGT("Max Sebesség (mm/s)");
LSTR MSG_VMAX_A = _UxGT("Max Seb. ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Max Seb. ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Max Seb. ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Max Seb. @");
LSTR MSG_VMAX_E = _UxGT("Max Seb. E");
LSTR MSG_VMAX_EN = _UxGT("Max sebesség *");
LSTR MSG_VMIN = _UxGT("Min sebesség");
LSTR MSG_VTRAV_MIN = _UxGT("Min utazó.seb.");
LSTR MSG_ACCELERATION = _UxGT("Gyorsulás");
LSTR MSG_AMAX_A = _UxGT("Max gyors. ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Max gyors. ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Max gyors. ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Max gyors. @");
LSTR MSG_AMAX_E = _UxGT("Max gyors. E");
LSTR MSG_AMAX_EN = _UxGT("Max gyorsulás *");
LSTR MSG_A_RETRACT = _UxGT("Visszahúzás");
LSTR MSG_A_TRAVEL = _UxGT("Utazás");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max frekvencia");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min elötolás");
LSTR MSG_STEPS_PER_MM = _UxGT("Lépés/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" Lépés/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" Lépés/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" Lépés/mm");
LSTR MSG_N_STEPS = _UxGT("@ lépés/mm");
LSTR MSG_E_STEPS = _UxGT("E lépés/mm");
LSTR MSG_EN_STEPS = _UxGT("*Lépés/mm");
LSTR MSG_TEMPERATURE = _UxGT("Höfok");
LSTR MSG_MOTION = _UxGT("Mozgatások");
LSTR MSG_FILAMENT = _UxGT("Nyomtatószál");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E mm³-ben");
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit mm³-ben");
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Szál. átm.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Szál. átm. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Kiadás mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Betöltés mm");
LSTR MSG_ADVANCE_K = _UxGT("Haladó K");
LSTR MSG_ADVANCE_K_E = _UxGT("Haladó K *");
LSTR MSG_CONTRAST = _UxGT("LCD kontraszt");
LSTR MSG_STORE_EEPROM = _UxGT("Mentés EEPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Betöltés EEPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Alapértelmezett");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM inicializálás");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hiba: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hiba: EEPROM index");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hiba: EEPROM verzió");
LSTR MSG_SETTINGS_STORED = _UxGT("Beállítások mentve");
LSTR MSG_MEDIA_UPDATE = _UxGT("Tároló frissítés");
LSTR MSG_RESET_PRINTER = _UxGT("Nyomtató újraindítása");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Frissítés");
LSTR MSG_INFO_SCREEN = _UxGT("<Infó képernyö>");
LSTR MSG_PREPARE = _UxGT("Vezérlés");
LSTR MSG_TUNE = _UxGT("Hangolás");
LSTR MSG_POWER_MONITOR = _UxGT("Teljesítménymonitor");
LSTR MSG_CURRENT = _UxGT("Jelenlegi");
LSTR MSG_VOLTAGE = _UxGT("Feszültség");
LSTR MSG_POWER = _UxGT("Energia");
LSTR MSG_START_PRINT = _UxGT("Nyomtatás indítása");
LSTR MSG_BUTTON_NEXT = _UxGT("Tovább");
LSTR MSG_BUTTON_INIT = _UxGT("Kezdet");
LSTR MSG_BUTTON_STOP = _UxGT("Állj");
LSTR MSG_BUTTON_PRINT = _UxGT("Nyomtatás");
LSTR MSG_BUTTON_RESET = _UxGT("Újraindítás");
LSTR MSG_BUTTON_IGNORE = _UxGT("Mellöz");
LSTR MSG_BUTTON_CANCEL = _UxGT("Mégse");
LSTR MSG_BUTTON_DONE = _UxGT("Kész");
LSTR MSG_BUTTON_BACK = _UxGT("Vissza");
LSTR MSG_BUTTON_PROCEED = _UxGT("Folytatás");
LSTR MSG_BUTTON_SKIP = _UxGT("Kihagy");
LSTR MSG_PAUSING = _UxGT("Szüneteltetve...");
LSTR MSG_PAUSE_PRINT = _UxGT("Nyomtatás szünetelés");
LSTR MSG_RESUME_PRINT = _UxGT("Nyomtatás folytatása");
LSTR MSG_HOST_START_PRINT = _UxGT("Hoszt indítás");
LSTR MSG_STOP_PRINT = _UxGT("Nyomtatás leállítása");
LSTR MSG_END_LOOPS = _UxGT("Hurok ismétlés vége");
LSTR MSG_PRINTING_OBJECT = _UxGT("Objektum nyomtatása");
LSTR MSG_CANCEL_OBJECT = _UxGT("Objektum törlése");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objektum törlése =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kiesés helyreáll.");
LSTR MSG_MEDIA_MENU = _UxGT("Nyomtatás tárolóról");
LSTR MSG_NO_MEDIA = _UxGT("Nincs tároló");
LSTR MSG_DWELL = _UxGT("Alvás...");
LSTR MSG_USERWAIT = _UxGT("Katt a folytatáshoz...");
LSTR MSG_PRINT_PAUSED = _UxGT("Nyomtatás szünetelve");
LSTR MSG_PRINTING = _UxGT("Nyomtatás...");
LSTR MSG_PRINT_ABORTED = _UxGT("Nyomtatás leállítva");
LSTR MSG_PRINT_DONE = _UxGT("Nyomtatás kész");
LSTR MSG_NO_MOVE = _UxGT("Nincs mozgás.");
LSTR MSG_KILLED = _UxGT("HALOTT! ");
LSTR MSG_STOPPED = _UxGT("MEGÁLLT! ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Visszahúzás mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Visszahúzás cs. mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Viszahúzás");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Ugrás mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Visszah.helyre mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Csere.visszah.helyre mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Visszahúzás V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S Vissza.h V");
LSTR MSG_AUTORETRACT = _UxGT("Auto visszah.");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Visszahúzás távolság");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra csere");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tisztítási távolság");
LSTR MSG_TOOL_CHANGE = _UxGT("Szerszámcsere");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z emelés");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Fösebesség");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Visszah. sebesség");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Fej parkolás");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Visszav.visszah. sebesség");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("FAN sebesség");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("FAN idö");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto BE");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto KI");
LSTR MSG_TOOL_MIGRATION = _UxGT("Szerszámcsere");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Automata csere");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Utolsó adagoló");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Csere *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Szálcsere");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Szálcsere *");
LSTR MSG_FILAMENTLOAD = _UxGT("Szál betöltés");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Szál betöltés *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Szál eltávolítás");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Szál eltávolítás *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Mindet eltávolít");
LSTR MSG_ATTACH_MEDIA = _UxGT("Tároló");
LSTR MSG_CHANGE_MEDIA = _UxGT("Tároló csere");
LSTR MSG_RELEASE_MEDIA = _UxGT("Tároló Kiadása");
LSTR MSG_ZPROBE_OUT = _UxGT("Z szonda tálcán kivül");
LSTR MSG_SKEW_FACTOR = _UxGT("Ferdeség faktor");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Önteszt");
LSTR MSG_BLTOUCH_RESET = _UxGT("Visszaállítás");
LSTR MSG_BLTOUCH_STOW = _UxGT("Elhelyez");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Telepít");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mód");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mód");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mód");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Módok");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V mód");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD mód");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Jelentés");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("VESZÉLY: A rossz beállítások kárt okozhatnak! Biztos továbblép?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Kezd TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z eltolás teszt");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Mentés");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI használ");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Szonda telepítés");
LSTR MSG_MANUAL_STOW = _UxGT("Z-Szonda elhelyezés");
LSTR MSG_HOME_FIRST = _UxGT("Elöször %s%s%s kell");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Szonda eltolások");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("X szonda eltolás");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y szonda eltolás");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z szonda eltolás");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Fej az ágyhoz");
LSTR MSG_BABYSTEP_X = _UxGT("Mikrolépés X");
LSTR MSG_BABYSTEP_Y = _UxGT("Mikrolépés Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Mikrolépés Z");
LSTR MSG_BABYSTEP_N = _UxGT("Mikrolépés @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Teljes");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Végállás megszakítva!");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Fütés hiba!");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hiba: SZÜKSÉGTELEN HÖFOK");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("FÜTÉS KIMARADÁS");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ÁGY FÜTÉS KIMARADÁS");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMRA FÜTÉS KIMARADÁS");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Hütés kimaradás");
LSTR MSG_COOLING_FAILED = _UxGT("Hütés sikertelen");
LSTR MSG_ERR_MAXTEMP = _UxGT("Hiba: MAX höfok");
LSTR MSG_ERR_MINTEMP = _UxGT("Hiba: MIN höfok");
LSTR MSG_HALTED = _UxGT("A NYOMTATÓ LEÁLLT");
LSTR MSG_PLEASE_RESET = _UxGT("Indítsd újra!");
LSTR MSG_SHORT_DAY = _UxGT("n"); // Csak egy karakter
LSTR MSG_SHORT_HOUR = _UxGT("ó"); // Csak egy karakter
LSTR MSG_SHORT_MINUTE = _UxGT("p"); // Csak egy karakter
LSTR MSG_HEATING = _UxGT("Fütés...");
LSTR MSG_COOLING = _UxGT("Hütés...");
LSTR MSG_BED_HEATING = _UxGT("Ágy fütés...");
LSTR MSG_BED_COOLING = _UxGT("Ágy hütés...");
LSTR MSG_PROBE_HEATING = _UxGT("Szonda fütése...");
LSTR MSG_PROBE_COOLING = _UxGT("Szonda hütése...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Kamra fütés...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Kamra hütés...");
LSTR MSG_LASER_COOLING = _UxGT("Lézer hütés...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibráció");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("X kalibrálás");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Y kalibrálás");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Z kalibrálás");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Központ kalibrálás");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta beállítások");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibráció");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag rúd");
LSTR MSG_DELTA_HEIGHT = _UxGT("Magasság");
LSTR MSG_DELTA_RADIUS = _UxGT("Sugár");
LSTR MSG_INFO_MENU = _UxGT("A Nyomtatóról");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Nyomtató infó");
LSTR MSG_3POINT_LEVELING = _UxGT("3-Pontos szintezés");
LSTR MSG_LINEAR_LEVELING = _UxGT("Lineáris szintezés");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineáris szintezés");
LSTR MSG_UBL_LEVELING = _UxGT("Egységes ágy szintezés");
LSTR MSG_MESH_LEVELING = _UxGT("Háló szintezés");
LSTR MSG_MESH_DONE = _UxGT("Háló szintezés kész");
LSTR MSG_INFO_STATS_MENU = _UxGT("Statisztikák");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Alaplap infó");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termisztorok");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Adagolók");
LSTR MSG_INFO_BAUDRATE = _UxGT("Átviteli sebesség");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Futáselemzés: KI");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Futáselemzés: BE");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Fej üresjárati idök.");
LSTR MSG_CASE_LIGHT = _UxGT("Munkalámpa");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Fényerösség");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("HELYTELEN NYOMTATÓ");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatás számláló");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Összes nyomtatási idö");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb munkaidö");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Összes anyag");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatások");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Összes");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Kiadott");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min höfok");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max höfok");
LSTR MSG_INFO_PSU = _UxGT("PSU");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Meghajtási erö");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ meghajtó %");
LSTR MSG_ERROR_TMC = _UxGT("TMC CSATLAKOZÁSI HIBA");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM írása");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("NYOMTATÓSZÁL CSERE");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("NYOMTATÁS SZÜNETEL");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("SZÁL BETÖLTÉS");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("SZÁL ELTÁVOLÍTÁS");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FOLYTATÁSI OPCIÓ:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Tisztítsd meg");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Folytatás");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Fej: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Túlfutás szenzor");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Túlfutás táv. mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Tájolási hiba");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Szondázás hiba");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SZÁLVÁLASZTÁS");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU szoftver feltöltése!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU figyelmeztetés.");
LSTR MSG_MMU2_RESUME = _UxGT("Nyomtatás folytatása");
LSTR MSG_MMU2_RESUMING = _UxGT("Folytatás...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Szál betöltése");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Összes betöltése");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Fej betöltése");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Szál kidobás");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Szál kidobás ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Kiadja a szálat");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Szál betölt. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Szál kidobás. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Szál kiadása....");
LSTR MSG_MMU2_ALL = _UxGT("Mind");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Nyomtatószál ~");
LSTR MSG_MMU2_RESET = _UxGT("MMU újraindítás");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU újraindul...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kidob, kattint");
LSTR MSG_MIX = _UxGT("Kever");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Összetevö =");
LSTR MSG_MIXER = _UxGT("Keverö");
LSTR MSG_GRADIENT = _UxGT("Színátm.");
LSTR MSG_FULL_GRADIENT = _UxGT("Teljes színátm.");
LSTR MSG_TOGGLE_MIX = _UxGT("Váltás keverésre");
LSTR MSG_CYCLE_MIX = _UxGT("Ciklikus keverés");
LSTR MSG_GRADIENT_MIX = _UxGT("Színátm. keverés");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Fordított színátm.");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktív V-szerszám");
LSTR MSG_START_VTOOL = _UxGT("Kezdés V-szerszám");
LSTR MSG_END_VTOOL = _UxGT(" Vége V-szerszám");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Ál V-szerszám");
LSTR MSG_RESET_VTOOLS = _UxGT("Újra V-szerszám");
LSTR MSG_COMMIT_VTOOL = _UxGT("Gyors V-szerszám Kev.");
LSTR MSG_VTOOLS_RESET = _UxGT("V-szersz. visszaáll.");
LSTR MSG_START_Z = _UxGT("Kezdés Z:");
LSTR MSG_END_Z = _UxGT(" Vége Z:");
LSTR MSG_GAMES = _UxGT("Játékok");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
LSTR MSG_BAD_PAGE = _UxGT("Rossz oldalindex");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Rossz oldalsebesség");
LSTR MSG_EDIT_PASSWORD = _UxGT("Jelszó szerkesztése");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Belépés szükséges");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Jelszóbeállítások");
LSTR MSG_ENTER_DIGIT = _UxGT("Írja be a számokat");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Jelszó Beáll/Szerk");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Jelszó törlése");
LSTR MSG_PASSWORD_SET = _UxGT("A jelszó ");
LSTR MSG_START_OVER = _UxGT("Újrakezdés");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Mentsd el!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Jelszó törölve");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nyomj gombot", "nyomtatás folytatáshoz"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Várj míg", "szálcsere", "indítás"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Szál behelyezés", "majd nyomj gombot", "a folytatáshoz"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nyomj gombot", "a fej fütéséhez"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Fej fütése", "Kérlek várj..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Várj a", "szál kiadására"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Várj a", "szál betöltésére"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Várj a", "szál tisztításra"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kattints a készre", "szál tiszta"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Várj a nyomtatóra", "majd folytat..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Katt a folytatáshoz"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Kérlek várj..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Behelyez majd katt"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Katt a fütéshez"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Fütés..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Kiadás..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Betöltés..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Tisztítás..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Katt ha kész"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Folytatás..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC meghajtók");
LSTR MSG_TMC_CURRENT = _UxGT("Meghajtó áram");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hibrid küszöbérték");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Motoros kezdöpont");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Léptetö mód");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop mód");
LSTR MSG_SERVICE_RESET = _UxGT("Újraindítás");
LSTR MSG_SERVICE_IN = _UxGT(" be:");
LSTR MSG_BACKLASH = _UxGT("Holtjáték");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrekció");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Simítás");
LSTR MSG_LEVEL_X_AXIS = _UxGT("X tengely szint");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Önkalibrálás");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Tétlenségi idökorlát, a hömérséklet csökkent. Nyomd meg az OK gombot az ismételt felfütéshez, és újra a folytatáshoz.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Fütés idökorlátja");
#endif
LSTR MSG_REHEAT = _UxGT("Újrafüt");
LSTR MSG_REHEATING = _UxGT("Újrafütés...");
LSTR MSG_PROBE_WIZARD = _UxGT("Z szonda varázsló");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Z referencia mérés");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Menj a próba pontra");
LSTR MSG_SOUND = _UxGT("Hang");
LSTR MSG_TOP_LEFT = _UxGT("Bal felsö");
LSTR MSG_BOTTOM_LEFT = _UxGT("Bal alsó");
LSTR MSG_TOP_RIGHT = _UxGT("Jobb felsö");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Jobb alsó");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrálás befejezve");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrálási hiba");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" meghajtók hátra");
LSTR MSG_SD_CARD = _UxGT("SD Kártya");
LSTR MSG_USB_DISK = _UxGT("USB Lemez");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,821 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Italian
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Substitutions are applied for the following characters when used in menu items titles:
*
* $ displays an inserted string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
* @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_it {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Italiano");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
LSTR MSG_YES = _UxGT("Si");
LSTR MSG_NO = _UxGT("No");
LSTR MSG_HIGH = _UxGT("ALTO");
LSTR MSG_LOW = _UxGT("BASSO");
LSTR MSG_BACK = _UxGT("Indietro");
LSTR MSG_ERROR = _UxGT("Errore");
LSTR MSG_MEDIA_ABORTING = _UxGT("Annullando...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Media inserito");
LSTR MSG_MEDIA_REMOVED = _UxGT("Media rimosso");
LSTR MSG_MEDIA_WAITING = _UxGT("Aspettando media");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Iniz.Media fallita");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err.leggendo media");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Dispos.USB rimosso");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Avvio USB fallito");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Overflow subchiamate");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Finecor."); // Max 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Finecorsa Soft");
LSTR MSG_MAIN = _UxGT("Menu principale");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate");
LSTR MSG_TOOLBAR_SETUP = _UxGT("Cnf barra strumenti");
LSTR MSG_OPTION_DISABLED = _UxGT("Opzione disab.");
LSTR MSG_CONFIGURATION = _UxGT("Configurazione");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Esegui files auto");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori");
LSTR MSG_DEBUG_MENU = _UxGT("Menu di debug");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam.");
LSTR MSG_HOMING = _UxGT("Azzeramento");
LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
LSTR MSG_AUTO_HOME_A = _UxGT("Home @");
LSTR MSG_AUTO_HOME_X = _UxGT("Home X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z");
LSTR MSG_FILAMENT_SET = _UxGT("Impostaz.filamento");
LSTR MSG_FILAMENT_MAN = _UxGT("Gestione filamento");
LSTR MSG_MANUAL_LEVELING = _UxGT("Livel.manuale");
LSTR MSG_LEVBED_FL = _UxGT("Davanti Sinistra");
LSTR MSG_LEVBED_FR = _UxGT("Davanti Destra");
LSTR MSG_LEVBED_C = _UxGT("Centro");
LSTR MSG_LEVBED_BL = _UxGT("Dietro Sinistra");
LSTR MSG_LEVBED_BR = _UxGT("Dietro Destra");
LSTR MSG_MANUAL_MESH = _UxGT("Mesh Manuale");
LSTR MSG_AUTO_MESH = _UxGT("Generaz.Autom.Mesh");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");
LSTR MSG_ITERATION = _UxGT("Iterazione G34: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Precisione in calo!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Precisione raggiunta");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Home assi XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Premi per iniziare");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Punto successivo");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Livel. terminato!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Imp. offset home");
LSTR MSG_HOME_OFFSET_X = _UxGT("Offset home X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Offset home Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Offset home Z");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Wizard Tramming");
LSTR MSG_SELECT_ORIGIN = _UxGT("Selez. origine");
LSTR MSG_LAST_VALUE_SP = _UxGT("Ultimo valore ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Preriscalda ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Tutto");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Piatto");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" conf");
#ifdef PREHEAT_2_LABEL
LSTR MSG_PREHEAT_2 = _UxGT("Preris.") PREHEAT_2_LABEL;
LSTR MSG_PREHEAT_2_SETTINGS = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" conf");
#endif
#ifdef PREHEAT_3_LABEL
LSTR MSG_PREHEAT_3 = _UxGT("Preris.") PREHEAT_3_LABEL;
LSTR MSG_PREHEAT_3_SETTINGS = _UxGT("Preris.") PREHEAT_3_LABEL _UxGT(" conf");
#endif
LSTR MSG_PREHEAT_M = _UxGT("Preriscalda $");
LSTR MSG_PREHEAT_M_H = _UxGT("Preriscalda $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Preris.$ Ugello");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preris.$ Ugello ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preris.$ Tutto");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preris.$ Piatto");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preris.$ conf");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Prerisc.personal.");
LSTR MSG_COOLDOWN = _UxGT("Raffredda");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequenza");
LSTR MSG_LASER_MENU = _UxGT("Controllo laser");
LSTR MSG_SPINDLE_MENU = _UxGT("Controllo mandrino");
LSTR MSG_LASER_POWER = _UxGT("Potenza laser");
LSTR MSG_SPINDLE_POWER = _UxGT("Potenza mandrino");
LSTR MSG_LASER_TOGGLE = _UxGT("Alterna Laser");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Alterna soffiatore");
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Alterna aria supp.");
LSTR MSG_LASER_PULSE_MS = _UxGT("ms impulso di test");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Spara impulso");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Err.flusso refrig.");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Alterna mandrino");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Alterna vuoto");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Mandrino in avanti");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverti mandrino");
LSTR MSG_SWITCH_PS_ON = _UxGT("Accendi aliment.");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Spegni aliment.");
LSTR MSG_EXTRUDE = _UxGT("Estrudi");
LSTR MSG_RETRACT = _UxGT("Ritrai");
LSTR MSG_MOVE_AXIS = _UxGT("Muovi Asse");
LSTR MSG_BED_LEVELING = _UxGT("Livella piano");
LSTR MSG_LEVEL_BED = _UxGT("Livella piano");
LSTR MSG_BED_TRAMMING = _UxGT("Tarat.fine piano");
LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Tarat.fine Manuale");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Regola la vite finché la sonda non rileva il piano.");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Tolleranza raggiunta su tutti gli angoli. Piano livellato!");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Punti buoni: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Ultimo Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Prossimo punto");
LSTR MSG_MESH_EDITOR = _UxGT("Editor Mesh");
LSTR MSG_MESH_VIEWER = _UxGT("Visualiz. Mesh");
LSTR MSG_EDIT_MESH = _UxGT("Modifica Mesh");
LSTR MSG_MESH_VIEW = _UxGT("Visualizza Mesh");
LSTR MSG_EDITING_STOPPED = _UxGT("Modif. Mesh Fermata");
LSTR MSG_NO_VALID_MESH = _UxGT("Mesh non valida");
LSTR MSG_ACTIVATE_MESH = _UxGT("Attiva livellamento");
LSTR MSG_PROBING_POINT = _UxGT("Punto sondato");
LSTR MSG_MESH_X = _UxGT("Indice X");
LSTR MSG_MESH_Y = _UxGT("Indice Y");
LSTR MSG_MESH_INSET = _UxGT("Mesh Inset");
LSTR MSG_MESH_MIN_X = _UxGT("Mesh X minimo");
LSTR MSG_MESH_MAX_X = _UxGT("Mesh X massimo");
LSTR MSG_MESH_MIN_Y = _UxGT("Mesh Y minimo");
LSTR MSG_MESH_MAX_Y = _UxGT("Mesh Y massimo");
LSTR MSG_MESH_AMAX = _UxGT("Massimizza area");
LSTR MSG_MESH_CENTER = _UxGT("Area centrale");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valore di Z");
LSTR MSG_MESH_CANCEL = _UxGT("Mesh cancellato");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comandi personaliz.");
LSTR MSG_M48_TEST = _UxGT("Test sonda M48");
LSTR MSG_M48_POINT = _UxGT("Punto M48");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda oltre i limiti");
LSTR MSG_M48_DEVIATION = _UxGT("Deviazione");
LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Strumenti Offsets");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicazione");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia speculare");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pieno controllo");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-Gap-X duplicato");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2° ugello Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2° ugello @");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 in corso");
LSTR MSG_UBL_TOOLS = _UxGT("Strumenti UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Livel.letto unificato");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto inclinaz.");
LSTR MSG_UBL_TILT_MESH = _UxGT("Inclina Mesh");
LSTR MSG_UBL_TILTING_GRID = _UxGT("Dim.griglia inclin.");
LSTR MSG_UBL_MESH_TILTED = _UxGT("Mesh inclinata");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Mesh Manuale");
LSTR MSG_UBL_MESH_WIZARD = _UxGT("Creaz.guid.mesh UBL");
LSTR MSG_UBL_BC_INSERT = _UxGT("Metti spes. e misura");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Misura");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Rimuovi e mis.piatto");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Spostamento succes.");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Attiva UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Disattiva UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Piatto");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Piatto");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Ugello");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Ugello");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Modifica Mesh");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif.Mesh personal.");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ritocca Mesh");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Modif.Mesh fatta");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crea Mesh personal.");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crea Mesh");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crea Mesh ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valida Mesh ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crea Mesh a freddo");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Aggiusta Alt. Mesh");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altezza");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valida Mesh");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 riscald.letto");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 riscald.ugello");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Priming manuale...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Prime a lung.fissa");
LSTR MSG_G26_PRIME_DONE = _UxGT("Priming terminato");
LSTR MSG_G26_CANCELED = _UxGT("G26 Annullato");
LSTR MSG_G26_LEAVING = _UxGT("Uscita da G26");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valida Mesh pers.");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continua Mesh");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Livell. Mesh");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Livell. 3 Punti");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Livell. Griglia Mesh");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Livella Mesh");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Punti laterali");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo di Mappa");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Esporta Mappa");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Esporta per Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Esporta in CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup esterno");
LSTR MSG_UBL_INFO_UBL = _UxGT("Esporta Info UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Riempimento");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Riempimento Manuale");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Riempimento Smart");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Riempimento Mesh");
LSTR MSG_UBL_MESH_FILLED = _UxGT("Pts mancanti riempiti");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalida Tutto");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalid.Punto Vicino");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ritocca Tutto");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ritocca Punto Vicino");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Salvate");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot di memoria");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Carica Mesh Piatto");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Salva Mesh Piatto");
LSTR MSG_UBL_INVALID_SLOT = _UxGT("Prima selez. uno slot Mesh");
LSTR MSG_MESH_LOADED = _UxGT("Mesh %i caricata");
LSTR MSG_MESH_SAVED = _UxGT("Mesh %i salvata");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Nessuna memoria");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: Salvataggio UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ripristino UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Fermato");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo passo");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crea Mesh a freddo");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Riempimento Smart");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valida Mesh");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ritocca All");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valida Mesh");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ritocca All");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Salva Mesh Piatto");
LSTR MSG_LED_CONTROL = _UxGT("Controllo LED");
LSTR MSG_LEDS = _UxGT("Luci");
LSTR MSG_LED_PRESETS = _UxGT("Presets luce");
LSTR MSG_SET_LEDS_RED = _UxGT("Rosso");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Arancione");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Giallo");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Blu");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indaco");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Bianco");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Predefinito");
LSTR MSG_LED_CHANNEL_N = _UxGT("Canale =");
LSTR MSG_LEDS2 = _UxGT("Luci #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Presets luce #2");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Luminosità");
LSTR MSG_CUSTOM_LEDS = _UxGT("Luci personalizzate");
LSTR MSG_INTENSITY_R = _UxGT("Intensità rosso");
LSTR MSG_INTENSITY_G = _UxGT("Intensità verde");
LSTR MSG_INTENSITY_B = _UxGT("Intensità blu");
LSTR MSG_INTENSITY_W = _UxGT("Intensità bianco");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Luminosità");
LSTR MSG_MOVING = _UxGT("In movimento...");
LSTR MSG_FREE_XY = _UxGT("XY liberi");
LSTR MSG_MOVE_X = _UxGT("Muovi X");
LSTR MSG_MOVE_Y = _UxGT("Muovi Y");
LSTR MSG_MOVE_Z = _UxGT("Muovi Z");
LSTR MSG_MOVE_N = _UxGT("Muovi @");
LSTR MSG_MOVE_E = _UxGT("Estrusore");
LSTR MSG_MOVE_EN = _UxGT("Estrusore *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo");
LSTR MSG_MOVE_N_MM = _UxGT("Muovi di $mm");
LSTR MSG_MOVE_01MM = _UxGT("Muovi di 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Muovi di 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Muovi di 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Muovi di 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Muovi di 0.001\"");
LSTR MSG_MOVE_001IN = _UxGT("Muovi di 0.01\"");
LSTR MSG_MOVE_01IN = _UxGT("Muovi di 0.1\"");
LSTR MSG_MOVE_1IN = _UxGT("Muovi di 1\"");
LSTR MSG_SPEED = _UxGT("Velocità");
LSTR MSG_BED_Z = _UxGT("Piatto Z");
LSTR MSG_NOZZLE = _UxGT("Ugello");
LSTR MSG_NOZZLE_N = _UxGT("Ugello ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Ugello parcheggiato");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Ugello in pausa");
LSTR MSG_BED = _UxGT("Piatto");
LSTR MSG_CHAMBER = _UxGT("Camera");
LSTR MSG_COOLER = _UxGT("Raffreddam. laser");
LSTR MSG_COOLER_TOGGLE = _UxGT("Alterna raffreddam.");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Sicurezza flusso");
LSTR MSG_LASER = _UxGT("Laser");
LSTR MSG_FAN_SPEED = _UxGT("Vel. ventola"); // Max 15 characters
LSTR MSG_FAN_SPEED_N = _UxGT("Vel. ventola ~"); // Max 15 characters
LSTR MSG_STORED_FAN_N = _UxGT("Ventola mem. ~"); // Max 15 characters
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra vel.vent."); // Max 15 characters
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra v.vent. ~"); // Max 15 characters
LSTR MSG_CONTROLLER_FAN = _UxGT("Controller vent.");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Vel. inattivo");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo autom.");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Vel. attivo");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo inattivo");
LSTR MSG_FLOW = _UxGT("Flusso");
LSTR MSG_FLOW_N = _UxGT("Flusso ~");
LSTR MSG_CONTROL = _UxGT("Controllo");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("On");
LSTR MSG_LCD_OFF = _UxGT("Off");
LSTR MSG_PID_AUTOTUNE = _UxGT("Calibrazione PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("Calib.PID *");
LSTR MSG_PID_CYCLE = _UxGT("Ciclo PID");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Calibr.PID eseguita");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Calibr.PID fallito!");
LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Estrusore invalido.");
LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temp.troppo alta.");
LSTR MSG_TIMEOUT = _UxGT("Tempo scaduto.");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Calibrazione fallita! Estrusore errato.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Calibrazione fallita! Temperatura troppo alta.");
LSTR MSG_PID_TIMEOUT = _UxGT("Calibrazione fallita! Tempo scaduto.");
LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss");
LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Autotune");
LSTR MSG_MPC_EDIT = _UxGT("Modif.MPC *");
LSTR MSG_MPC_POWER_E = _UxGT("Potenza *");
LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("C blocco *");
LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Reattiv.Sens. *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("H ambiente *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("H Amb. vent. *");
LSTR MSG_SELECT = _UxGT("Seleziona");
LSTR MSG_SELECT_E = _UxGT("Seleziona *");
LSTR MSG_ACC = _UxGT("Accel");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("Max Jerk ") STR_A;
LSTR MSG_VB_JERK = _UxGT("Max Jerk ") STR_B;
LSTR MSG_VC_JERK = _UxGT("Max Jerk ") STR_C;
LSTR MSG_VN_JERK = _UxGT("Max Jerk @");
LSTR MSG_VE_JERK = _UxGT("Max Jerk E");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni");
LSTR MSG_MAX_SPEED = _UxGT("Vel.massima (mm/s)");
LSTR MSG_VMAX_A = _UxGT("Vel.Massima ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Vel.Massima ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Vel.Massima ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Vel.Massima @");
LSTR MSG_VMAX_E = _UxGT("Vel.Massima E");
LSTR MSG_VMAX_EN = _UxGT("Vel.Massima *");
LSTR MSG_VMIN = _UxGT("Vel.Minima");
LSTR MSG_VTRAV_MIN = _UxGT("Vel.Min spostam.");
LSTR MSG_ACCELERATION = _UxGT("Accelerazione");
LSTR MSG_AMAX_A = _UxGT("Acc.Massima ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Acc.Massima ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Acc.Massima ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Acc.Massima @");
LSTR MSG_AMAX_E = _UxGT("Acc.Massima E");
LSTR MSG_AMAX_EN = _UxGT("Acc.Massima *");
LSTR MSG_A_RETRACT = _UxGT("A-Ritrazione");
LSTR MSG_A_TRAVEL = _UxGT("A-Spostamento");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequenza max");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
LSTR MSG_STEPS_PER_MM = _UxGT("Passi/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" passi/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" passi/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" passi/mm");
LSTR MSG_N_STEPS = _UxGT("@ passi/mm");
LSTR MSG_E_STEPS = _UxGT("E passi/mm");
LSTR MSG_EN_STEPS = _UxGT("* passi/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movimento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("Limite E in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite E *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. filo");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. filo *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Rimuovi mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Carica mm");
LSTR MSG_ADVANCE_K = _UxGT("K Avanzamento");
LSTR MSG_ADVANCE_K_E = _UxGT("K Avanzamento *");
LSTR MSG_CONTRAST = _UxGT("Contrasto LCD");
LSTR MSG_BRIGHTNESS = _UxGT("Luminosità LCD");
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("Timeout LCD (s)");
LSTR MSG_SCREEN_TIMEOUT = _UxGT("Timeout LCD (m)");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("Spegni Retroillum.");
LSTR MSG_STORE_EEPROM = _UxGT("Salva impostazioni");
LSTR MSG_LOAD_EEPROM = _UxGT("Carica impostazioni");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ripristina imp.");
LSTR MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: CRC EEPROM");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Indice EEPROM");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versione EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Impostazioni mem.");
LSTR MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");
LSTR MSG_RESET_PRINTER = _UxGT("Resetta stampante");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aggiorna");
LSTR MSG_INFO_SCREEN = _UxGT("Schermata info");
LSTR MSG_INFO_MACHINENAME = _UxGT("Nome macchina");
LSTR MSG_INFO_SIZE = _UxGT("Dimens.");
LSTR MSG_INFO_FWVERSION = _UxGT("Versione firmware");
LSTR MSG_INFO_BUILD = _UxGT("Dataora compilaz.");
LSTR MSG_PREPARE = _UxGT("Prepara");
LSTR MSG_TUNE = _UxGT("Regola");
LSTR MSG_POWER_MONITOR = _UxGT("Controllo aliment.");
LSTR MSG_CURRENT = _UxGT("Corrente");
LSTR MSG_VOLTAGE = _UxGT("Tensione");
LSTR MSG_POWER = _UxGT("Potenza");
LSTR MSG_START_PRINT = _UxGT("Avvia stampa");
LSTR MSG_BUTTON_NEXT = _UxGT("Prossimo");
LSTR MSG_BUTTON_INIT = _UxGT("Inizializza");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Stampa");
LSTR MSG_BUTTON_RESET = _UxGT("Resetta");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignora");
LSTR MSG_BUTTON_CANCEL = _UxGT("Annulla");
LSTR MSG_BUTTON_CONFIRM = _UxGT("Conferma");
LSTR MSG_BUTTON_CONTINUE = _UxGT("Continua");
LSTR MSG_BUTTON_DONE = _UxGT("Fatto");
LSTR MSG_BUTTON_BACK = _UxGT("Indietro");
LSTR MSG_BUTTON_PROCEED = _UxGT("Procedi");
LSTR MSG_BUTTON_SKIP = _UxGT("Salta");
LSTR MSG_BUTTON_INFO = _UxGT("Info");
LSTR MSG_BUTTON_LEVEL = _UxGT("Livello");
LSTR MSG_BUTTON_PAUSE = _UxGT("Pausa");
LSTR MSG_BUTTON_RESUME = _UxGT("Riprendi");
LSTR MSG_BUTTON_ADVANCED = _UxGT("Avanzato");
LSTR MSG_BUTTON_SAVE = _UxGT("Memorizza");
LSTR MSG_BUTTON_PURGE = _UxGT("Spurga");
LSTR MSG_PAUSING = _UxGT("Messa in pausa...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausa stampa");
LSTR MSG_ADVANCED_PAUSE = _UxGT("Pausa Avanzata");
LSTR MSG_RESUME_PRINT = _UxGT("Riprendi stampa");
LSTR MSG_HOST_START_PRINT = _UxGT("Host Avvio");
LSTR MSG_STOP_PRINT = _UxGT("Arresta stampa");
LSTR MSG_END_LOOPS = _UxGT("Fine cicli di rip.");
LSTR MSG_PRINTING_OBJECT = _UxGT("Stampa Oggetto");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancella Oggetto");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Canc. Oggetto =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ripresa da PowerLoss");
LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Cont.proc.stampa");
LSTR MSG_MEDIA_MENU = _UxGT("Stampa da media");
LSTR MSG_NO_MEDIA = _UxGT("Media non presente");
LSTR MSG_DWELL = _UxGT("Sospensione...");
LSTR MSG_USERWAIT = _UxGT("Premi tasto..");
LSTR MSG_PRINT_PAUSED = _UxGT("Stampa sospesa");
LSTR MSG_PRINTING = _UxGT("Stampa...");
LSTR MSG_STOPPING = _UxGT("Fermata...");
LSTR MSG_REMAINING_TIME = _UxGT("Rimanente");
LSTR MSG_PRINT_ABORTED = _UxGT("Stampa Annullata");
LSTR MSG_PRINT_DONE = _UxGT("Stampa Eseguita");
LSTR MSG_PRINTER_KILLED = _UxGT("Stampante uccisa!");
LSTR MSG_TURN_OFF = _UxGT("Spegni stampante");
LSTR MSG_NO_MOVE = _UxGT("Nessun Movimento");
LSTR MSG_KILLED = _UxGT("UCCISO. ");
LSTR MSG_STOPPED = _UxGT("ARRESTATO. ");
LSTR MSG_FWRETRACT = _UxGT("Ritraz.da firmware");
LSTR MSG_CONTROL_RETRACT = _UxGT("Ritrai mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Scamb. Ritrai mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Ritrai V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Salta mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Avanza mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Scamb. Avanza mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Avanza V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Scamb. Avanza V");
LSTR MSG_AUTORETRACT = _UxGT("AutoRitrai");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lunghezza scambio");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra scambio");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lunghezza spurgo");
LSTR MSG_TOOL_CHANGE = _UxGT("Cambio utensile");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Risalita Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocità innesco");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Velocità ritrazione");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parcheggia testa");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Velocità ventola");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo ventola");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
LSTR MSG_TOOL_MIGRATION = _UxGT("Migrazione utensile");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrazione");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Ultimo estrusore");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migra a *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Cambia filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambia filam. *");
LSTR MSG_FILAMENTLOAD = _UxGT("Carica filamento");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Carica filamento *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Rimuovi filamento");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Rimuovi filam. *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Rimuovi tutto");
LSTR MSG_ATTACH_MEDIA = _UxGT("Collega media");
LSTR MSG_CHANGE_MEDIA = _UxGT("Cambia media");
LSTR MSG_RELEASE_MEDIA = _UxGT("Rilascia media");
LSTR MSG_ZPROBE_OUT = _UxGT("Z probe fuori piatto");
LSTR MSG_SKEW_FACTOR = _UxGT("Fattore distorsione");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Autotest BLTouch");
LSTR MSG_BLTOUCH_RESET = _UxGT("Resetta BLTouch");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estendi BLTouch");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("BLTouch modo SW");
LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("Alta Velocità");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch modo 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch modo OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("BLTouch modo mem.");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Metti BLTouch a 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Metti BLTouch a OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Segnala modo");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERICOLO: impostazioni errate possono cause danni! Procedo comunque?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Inizializ.TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z offset");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Memorizzare");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estendi TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Estendi Sonda-Z");
LSTR MSG_BLTOUCH_STOW = _UxGT("Ritrai BLTouch");
LSTR MSG_MANUAL_STOW = _UxGT("Ritrai Sonda-Z");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s prima");
LSTR MSG_ZPROBE_SETTINGS = _UxGT("Impostazioni sonda");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Offsets sonda");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Offset X sonda");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Offset Y sonda");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z sonda");
LSTR MSG_ZPROBE_MARGIN = _UxGT("Margine sonda");
LSTR MSG_Z_FEED_RATE = _UxGT("Velocità Z");
LSTR MSG_ENABLE_HS_MODE = _UxGT("Abilita modo HS");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Muovi ugel.su letto");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Totali");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Interrompi se FC");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Risc.Fallito"); // Max 12 characters
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP RIDONDANTE");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEMP FUORI CONTROLLO");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("MALFUNZIONAMENTO TEMP");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEMP PIAT.FUORI CTRL");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("T.CAMERA FUORI CTRL");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("RAFFREDAM.FUORI CTRL");
LSTR MSG_COOLING_FAILED = _UxGT("Raffreddam. fallito");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MASSIMA");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
LSTR MSG_HALTED = _UxGT("STAMPANTE FERMATA");
LSTR MSG_PLEASE_WAIT = _UxGT("Attendere prego...");
LSTR MSG_PLEASE_RESET = _UxGT("Riavviare prego");
LSTR MSG_PREHEATING = _UxGT("Preriscaldam...");
LSTR MSG_HEATING = _UxGT("Riscaldamento...");
LSTR MSG_COOLING = _UxGT("Raffreddamento..");
LSTR MSG_BED_HEATING = _UxGT("Risc. piatto...");
LSTR MSG_BED_COOLING = _UxGT("Raffr. piatto...");
LSTR MSG_PROBE_HEATING = _UxGT("Risc. sonda...");
LSTR MSG_PROBE_COOLING = _UxGT("Raffr. sonda...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Risc. camera...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Raffr. camera...");
LSTR MSG_LASER_COOLING = _UxGT("Raffr. laser...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibraz. Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra centro");
LSTR MSG_DELTA_SETTINGS = _UxGT("Impostaz. Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto calibrazione");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonale");
LSTR MSG_DELTA_HEIGHT = _UxGT("Altezza");
LSTR MSG_DELTA_RADIUS = _UxGT("Raggio");
LSTR MSG_INFO_MENU = _UxGT("Info su stampante");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. stampante");
LSTR MSG_3POINT_LEVELING = _UxGT("Livel. a 3 punti");
LSTR MSG_LINEAR_LEVELING = _UxGT("Livel. Lineare");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Livel. Bilineare");
LSTR MSG_UBL_LEVELING = _UxGT("Livel.piatto unific.");
LSTR MSG_MESH_LEVELING = _UxGT("Livel. Mesh");
LSTR MSG_MESH_DONE = _UxGT("Sond.mesh eseguito");
LSTR MSG_INFO_STATS_MENU = _UxGT("Statistiche");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. scheda");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Estrusori");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocollo");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Controllo fuga: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Controllo fuga: ON");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Timeout inatt.ugello");
LSTR MSG_FAN_SPEED_FAULT = _UxGT("Err.vel.della ventola");
LSTR MSG_CASE_LIGHT = _UxGT("Luci Case");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("STAMPANTE ERRATA");
LSTR MSG_COLORS_GET = _UxGT("Ottieni colori");
LSTR MSG_COLORS_SELECT = _UxGT("Selez.colori");
LSTR MSG_COLORS_APPLIED = _UxGT("Colori applicati");
LSTR MSG_COLORS_RED = _UxGT("Rosso");
LSTR MSG_COLORS_GREEN = _UxGT("Verde");
LSTR MSG_COLORS_BLUE = _UxGT("Blu");
LSTR MSG_COLORS_WHITE = _UxGT("Bianco");
LSTR MSG_UI_LANGUAGE = _UxGT("Lingua UI");
LSTR MSG_SOUND_ENABLE = _UxGT("Abilita suono");
LSTR MSG_LOCKSCREEN = _UxGT("Blocca Schermo");
LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Stamp. bloccata,");
LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("Scroll x sbloccare.");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Attendere fino al riavvio.");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Nessun supporto inserito.");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Si prega di preriscaldare l'hot end.");
LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Azzera contatori stampa");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Contatori stampa");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo totale");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Lavoro più lungo");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Totale estruso");
#else
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No Supporto");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Prerisc. hot end.");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Stampe");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Durata");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Più lungo");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estruso");
#endif
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completate");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp min");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp max");
LSTR MSG_INFO_PSU = _UxGT("Alimentatore");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive");
LSTR MSG_DAC_PERCENT_N = _UxGT("Driver @ %");
LSTR MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIO FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("STAMPA IN PAUSA");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARICA FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("RIMUOVI FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPZIONI RIPRESA:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Spurga di più");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Riprendi stampa");
LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Spurga o continua?");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Ugello: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Sens.filo termin."); // Max 17 characters
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm filo term.");
LSTR MSG_RUNOUT_ENABLE = _UxGT("Abil.filo termin.");
LSTR MSG_RUNOUT_ACTIVE = _UxGT("Filo termin. attivo");
LSTR MSG_INVERT_EXTRUDER = _UxGT("Inverti estrusore");
LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Temp.min estrusore");
LSTR MSG_FANCHECK = _UxGT("Verif.tacho vent."); // Max 17 characters
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Home fallito");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondaggio fallito");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SCELTA FILAMENTO");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Agg.firmware MMU!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU chiede attenz.");
LSTR MSG_MMU2_RESUME = _UxGT("MMU riprendi");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU ripresa...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU carica");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU carica tutto");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carica fino ugello");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU espelli");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU espelli ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU scarica");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Caric.fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Esplus.filam. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Scaric.filam. ...");
LSTR MSG_MMU2_ALL = _UxGT("Tutto");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
LSTR MSG_MMU2_RESET = _UxGT("Azzera MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Azzeramento MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Rimuovi, click");
LSTR MSG_MIX = _UxGT("Miscela");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente =");
LSTR MSG_MIXER = _UxGT("Miscelatore");
LSTR MSG_GRADIENT = _UxGT("Gradiente");
LSTR MSG_FULL_GRADIENT = _UxGT("Gradiente pieno");
LSTR MSG_TOGGLE_MIX = _UxGT("Alterna miscela");
LSTR MSG_CYCLE_MIX = _UxGT("Ciclo miscela");
LSTR MSG_GRADIENT_MIX = _UxGT("Miscela gradiente");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Inverti gradiente");
LSTR MSG_ACTIVE_VTOOL = _UxGT("V-tool attivo");
LSTR MSG_START_VTOOL = _UxGT("V-tool iniziale");
LSTR MSG_END_VTOOL = _UxGT("V-tool finale");
LSTR MSG_GRADIENT_ALIAS = _UxGT("V-tool alias");
LSTR MSG_RESET_VTOOLS = _UxGT("Ripristina V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("Commit mix V-tool");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools ripristin.");
LSTR MSG_START_Z = _UxGT("Z inizio:");
LSTR MSG_END_Z = _UxGT("Z fine:");
LSTR MSG_GAMES = _UxGT("Giochi");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
LSTR MSG_BAD_PAGE = _UxGT("Indice pag. errato");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Vel. pag. errata");
LSTR MSG_EDIT_PASSWORD = _UxGT("Modif.password");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Login richiesto");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Impostaz.password");
LSTR MSG_ENTER_DIGIT = _UxGT("Inserisci cifra");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Imp./Modif.password");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Elimina password");
LSTR MSG_PASSWORD_SET = _UxGT("La password è ");
LSTR MSG_START_OVER = _UxGT("Ricominciare");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Ricordati di mem.!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Password eliminata");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Premi per", "riprendere", "la stampa"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcheggiando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Attendere avvio", "del cambio", "di filamento"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserisci il", "filamento e premi", "per continuare"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premi per", "riscaldare ugello"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Riscaldam. ugello", "Attendere prego..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Attendere", "l'espulsione", "del filamento"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Attendere", "il caricamento", "del filamento"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Attendere", "lo spurgo", "del filamento"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Premi x terminare", "lo spurgo", "del filamento"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Attendere", "la ripresa", "della stampa..."));
#else // LCD_HEIGHT < 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premi x continuare"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Attendere..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserisci e premi"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Riscalda ugello"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Riscaldamento..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Espulsione..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Caricamento..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spurgo filamento"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Premi x terminare"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Ripresa..."));
#endif // LCD_HEIGHT < 4
LSTR MSG_TMC_DRIVERS = _UxGT("Driver TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Correnti driver");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Soglia modo ibrido");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless homing");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stealthchop");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Stealthchop");
LSTR MSG_SERVICE_RESET = _UxGT("Resetta");
LSTR MSG_SERVICE_IN = _UxGT(" tra:");
LSTR MSG_BACKLASH = _UxGT("Gioco");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correzione");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Appianamento");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Livello asse X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibra");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout inattività, temperatura diminuita. Premere OK per riscaldare e riprendere di nuovo.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout riscaldatore");
#endif
LSTR MSG_REHEAT = _UxGT("Riscalda");
LSTR MSG_REHEATING = _UxGT("Riscaldando...");
LSTR MSG_REHEATDONE = _UxGT("Riscaldato");
LSTR MSG_PROBE_WIZARD = _UxGT("Wizard Z offset");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Altezza di riferimento sonda");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Spostati in posizione di rilevazione");
LSTR MSG_XATC = _UxGT("Proc.guid.X-Twist");
LSTR MSG_XATC_DONE = _UxGT("Proc.guid.X-Twist eseg.!");
LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Agg.Offset-Z sonda a ");
LSTR MSG_SOUND = _UxGT("Suoni");
LSTR MSG_TOP_LEFT = _UxGT("Alto sinistra");
LSTR MSG_BOTTOM_LEFT = _UxGT("Basso sinistra");
LSTR MSG_TOP_RIGHT = _UxGT("Alto destra");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Basso destra");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibrazione completata");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibrazione fallita");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver invertito");
LSTR MSG_SD_CARD = _UxGT("Scheda SD");
LSTR MSG_USB_DISK = _UxGT("Disco USB");
LSTR MSG_HOST_SHUTDOWN = _UxGT("Arresta host");
}

View File

@ -0,0 +1,249 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Japanese (Kana)
* UTF-8 for Graphical Display
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
//#define DISPLAY_CHARSET_ISO10646_KANA
namespace Language_jp_kana {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 3;
LSTR LANGUAGE = _UxGT("Japanese");
// This is just to show the potential benefit of Unicode.
// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
// 片仮名表示定義
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" ジュンビカンリョウ");
LSTR MSG_MEDIA_INSERTED = _UxGT("メディアガソウニュウサレマシタ"); // "Card inserted"
LSTR MSG_MEDIA_REMOVED = _UxGT("メディアガアリマセン"); // "Card removed"
LSTR MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ");
LSTR MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters
LSTR MSG_MAIN = _UxGT("メイン"); // "Main"
LSTR MSG_RUN_AUTO_FILES = _UxGT("ジドウカイシ"); // "Autostart"
LSTR MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers"
LSTR MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu"
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test"
LSTR MSG_AUTO_HOME = _UxGT("ゲンテンフッキ"); // "Auto home"
LSTR MSG_AUTO_HOME_X = _UxGT("Xジク ゲンテンフッキ"); // "Home X"
LSTR MSG_AUTO_HOME_Y = _UxGT("Yジク ゲンテンフッキ"); // "Home Y"
LSTR MSG_AUTO_HOME_Z = _UxGT("Zジク ゲンテンフッキ"); // "Home Z"
LSTR MSG_LEVEL_BED_HOMING = _UxGT("ゲンテンフッキチュウ"); // "Homing XYZ"
LSTR MSG_LEVEL_BED_WAITING = _UxGT("レベリングカイシ"); // "Click to Begin"
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("ツギノソクテイテンヘ"); // "Next Point"
LSTR MSG_LEVEL_BED_DONE = _UxGT("レベリングカンリョウ"); // "Leveling Done!"
LSTR MSG_SET_HOME_OFFSETS = _UxGT("キジュンオフセットセッテイ"); // "Set home offsets"
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("オフセットガテキヨウサレマシタ"); // "Offsets applied"
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL
LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" ヨネツノズル"); // " Nozzle"
LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ~"); // " Nozzle"
LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" スベテヨネツ"); // " All"
LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" ベッドヨネツ"); // " Bed"
LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" ヨネツセッテイ"); // " conf"
LSTR MSG_PREHEAT_M = _UxGT("$ ヨネツ"); // "Preheat " PREHEAT_1_LABEL
LSTR MSG_PREHEAT_M_H = _UxGT("$ ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
LSTR MSG_PREHEAT_M_END = _UxGT("$ ヨネツノズル"); // " Nozzle"
LSTR MSG_PREHEAT_M_END_E = _UxGT("$ ヨネツノズル ~"); // " Nozzle"
LSTR MSG_PREHEAT_M_ALL = _UxGT("$ スベテヨネツ"); // " All"
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ ベッドヨネツ"); // " Bed"
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ ヨネツセッテイ"); // " conf"
#endif
LSTR MSG_COOLDOWN = _UxGT("カネツテイシ"); // "Cooldown"
LSTR MSG_SWITCH_PS_ON = _UxGT("デンゲン オン"); // "Switch power on"
LSTR MSG_SWITCH_PS_OFF = _UxGT("デンゲン オフ"); // "Switch power off"
LSTR MSG_EXTRUDE = _UxGT("オシダシ"); // "Extrude"
LSTR MSG_RETRACT = _UxGT("ヒキコミセッテイ"); // "Retract"
LSTR MSG_MOVE_AXIS = _UxGT("ジクイドウ"); // "Move axis"
LSTR MSG_BED_LEVELING = _UxGT("ベッドレベリング"); // "Bed leveling"
LSTR MSG_LEVEL_BED = _UxGT("ベッドレベリング"); // "Level bed"
LSTR MSG_MOVING = _UxGT("イドウチュウ"); // "Moving..."
LSTR MSG_FREE_XY = _UxGT("XYジク カイホウ"); // "Free XY"
LSTR MSG_MOVE_X = _UxGT("Xジク イドウ"); // "Move X"
LSTR MSG_MOVE_Y = _UxGT("Yジク イドウ"); // "Move Y"
LSTR MSG_MOVE_Z = _UxGT("Zジク イドウ"); // "Move Z"
LSTR MSG_MOVE_N = _UxGT("@ジク イドウ"); // "Move @"
LSTR MSG_MOVE_E = _UxGT("エクストルーダー"); // "Extruder"
LSTR MSG_MOVE_EN = _UxGT("* エクストルーダー"); // "En"
LSTR MSG_MOVE_N_MM = _UxGT("$mm イドウ"); // "Move 0.025mm"
LSTR MSG_MOVE_01MM = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
LSTR MSG_MOVE_1MM = _UxGT(" 1mm イドウ"); // "Move 1mm"
LSTR MSG_MOVE_10MM = _UxGT(" 10mm イドウ"); // "Move 10mm"
LSTR MSG_MOVE_100MM = _UxGT(" 100mm イドウ"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("ソクド"); // "Speed"
LSTR MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
LSTR MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
LSTR MSG_BED = _UxGT("ベッド"); // "Bed"
LSTR MSG_FAN_SPEED = _UxGT("ファンソクド"); // "Fan speed"
LSTR MSG_FLOW = _UxGT("トシュツリョウ"); // "Flow"
LSTR MSG_CONTROL = _UxGT("セイギョ"); // "Control"
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" サイテイ"); // " Min"
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" サイコウ"); // " Max"
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" ファクター"); // " Fact"
LSTR MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp"
LSTR MSG_LCD_ON = _UxGT("オン"); // "On"
LSTR MSG_LCD_OFF = _UxGT("オフ"); // "Off"
LSTR MSG_SELECT = _UxGT("センタク"); // "Select"
LSTR MSG_SELECT_E = _UxGT("センタク *");
LSTR MSG_ACC = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
LSTR MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk"
LSTR MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") STR_A; // "Va-jerk"
LSTR MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") STR_B; // "Vb-jerk"
LSTR MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") STR_C; // "Vc-jerk"
LSTR MSG_VN_JERK = _UxGT("ジク ヤクドウ mm/s@"); // "V@-jerk"
LSTR MSG_A_STEPS = STR_A _UxGT("ステップ/mm");
LSTR MSG_B_STEPS = STR_B _UxGT("ステップ/mm");
LSTR MSG_C_STEPS = STR_C _UxGT("ステップ/mm");
LSTR MSG_N_STEPS = _UxGT("@ステップ/mm");
LSTR MSG_VE_JERK = _UxGT("エクストルーダー ヤクド"); // "Ve-jerk"
LSTR MSG_VMAX_A = _UxGT("サイダイオクリソクド ") STR_A; // "Vmax A"
LSTR MSG_VMAX_B = _UxGT("サイダイオクリソクド ") STR_B; // "Vmax B"
LSTR MSG_VMAX_C = _UxGT("サイダイオクリソクド ") STR_C; // "Vmax C"
LSTR MSG_VMAX_E = _UxGT("サイダイオクリソクド E"); // "Vmax E"
LSTR MSG_VMAX_EN = _UxGT("サイダイオクリソクド *"); // "Vmax E1"
LSTR MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin"
LSTR MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min"
LSTR MSG_ACCELERATION = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
LSTR MSG_A_RETRACT = _UxGT("ヒキコミカソクド"); // "A-retract"
LSTR MSG_A_TRAVEL = _UxGT("イドウカソクド"); // "A-travel"
LSTR MSG_TEMPERATURE = _UxGT("オンド"); // "Temperature"
LSTR MSG_MOTION = _UxGT("ウゴキセッテイ"); // "Motion"
LSTR MSG_FILAMENT = _UxGT("フィラメント"); // "Filament"
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("フィラメントチョッケイ"); // "Fil. Dia."
LSTR MSG_FILAMENT_DIAM_E = _UxGT("フィラメントチョッケイ *");
LSTR MSG_CONTRAST = _UxGT("LCDコントラスト"); // "LCD contrast"
LSTR MSG_STORE_EEPROM = _UxGT("EEPROMヘホゾン"); // "Store memory"
LSTR MSG_LOAD_EEPROM = _UxGT("EEPROMカラヨミコミ"); // "Load memory"
LSTR MSG_RESTORE_DEFAULTS = _UxGT("セッテイリセット"); // "Restore Defaults"
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("リフレッシュ"); // "Refresh"
LSTR MSG_INFO_SCREEN = _UxGT("ジョウホウガメン"); // "Info screen"
LSTR MSG_PREPARE = _UxGT("ジュンビセッテイ"); // "Prepare"
LSTR MSG_TUNE = _UxGT("チョウセイ"); // "Tune"
LSTR MSG_PAUSE_PRINT = _UxGT("イチジテイシ"); // "Pause print"
LSTR MSG_RESUME_PRINT = _UxGT("プリントサイカイ"); // "Resume print"
LSTR MSG_STOP_PRINT = _UxGT("プリントテイシ"); // "Stop print"
LSTR MSG_MEDIA_MENU = _UxGT("メディアカラプリント"); // "Print from SD"
LSTR MSG_NO_MEDIA = _UxGT("メディアガアリマセン"); // "Card removed"
LSTR MSG_DWELL = _UxGT("キュウシ"); // "Sleep..."
LSTR MSG_USERWAIT = _UxGT("ツヅケルニハクリックシテクダサイ"); // "Wait for user..."
LSTR MSG_PRINT_ABORTED = _UxGT("プリントガチュウシサレマシタ"); // "Print aborted"
LSTR MSG_NO_MOVE = _UxGT("ウゴキマセン"); // "No move."
LSTR MSG_KILLED = _UxGT("ヒジョウテイシ"); // "KILLED. "
LSTR MSG_STOPPED = _UxGT("テイシシマシタ"); // "STOPPED. "
LSTR MSG_CONTROL_RETRACT = _UxGT("ヒキコミリョウ mm"); // "Retract mm"
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("ヒキコミリョウS mm"); // "Swap Re.mm"
LSTR MSG_CONTROL_RETRACTF = _UxGT("ヒキコミソクド mm/s"); // "Retract V"
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("ノズルタイヒ mm"); // "Hop mm"
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("ホショウリョウ mm"); // "Unretr. mm"
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("ホショウリョウS mm"); // "S Unretr. mm"
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("ホショウソクド mm/s"); // "Unretract V"
LSTR MSG_AUTORETRACT = _UxGT("ジドウヒキコミ"); // "Auto-Retract"
LSTR MSG_FILAMENTCHANGE = _UxGT("フィラメントコウカン"); // "Change filament"
LSTR MSG_ATTACH_MEDIA = _UxGT("メディアサイヨミコミ"); // "Init. SD card"
LSTR MSG_CHANGE_MEDIA = _UxGT("メディアコウカン"); // "Change SD card"
LSTR MSG_ZPROBE_OUT = _UxGT("Zプローブ ベッドガイ"); // "Z probe out. bed"
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch ジコシンダン"); // "BLTouch Self-Test"
LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch リセット"); // "Reset BLTouch"
LSTR MSG_HOME_FIRST = _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ"); // "Home ... first"
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Zオフセット"); // "Z Offset"
LSTR MSG_BABYSTEP_X = _UxGT("Xジク ビドウ"); // "Babystep X"
LSTR MSG_BABYSTEP_Y = _UxGT("Yジク ビドウ"); // "Babystep Y"
LSTR MSG_BABYSTEP_Z = _UxGT("Zジク ビドウ"); // "Babystep Z"
LSTR MSG_ENDSTOP_ABORT = _UxGT("イドウゲンカイケンチキノウ"); // "Endstop abort"
LSTR MSG_HEATING_FAILED_LCD = _UxGT("カネツシッパイ"); // "Heating failed"
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("エラー:ジョウチョウサーミスターキノウ"); // "Err: REDUNDANT TEMP"
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ネツボウソウ"); // "THERMAL RUNAWAY"
LSTR MSG_ERR_MAXTEMP = _UxGT("エラー:サイコウオンチョウカ"); // "Err: MAXTEMP"
LSTR MSG_ERR_MINTEMP = _UxGT("エラー:サイテイオンミマン"); // "Err: MINTEMP"
LSTR MSG_HALTED = _UxGT("プリンターハテイシシマシタ"); // "PRINTER HALTED"
LSTR MSG_PLEASE_RESET = _UxGT("リセットシテクダサイ"); // "Please reset"
LSTR MSG_HEATING = _UxGT("カネツチュウ"); // "Heating..."
LSTR MSG_BED_HEATING = _UxGT("ベッド カネツチュウ"); // "Bed Heating..."
LSTR MSG_DELTA_CALIBRATE = _UxGT("デルタ コウセイ"); // "Delta Calibration"
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Xジク コウセイ"); // "Calibrate X"
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Yジク コウセイ"); // "Calibrate Y"
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Zジク コウセイ"); // "Calibrate Z"
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("チュウシン コウセイ"); // "Calibrate Center"
LSTR MSG_INFO_MENU = _UxGT("コノプリンターニツイテ"); // "About Printer"
LSTR MSG_INFO_PRINTER_MENU = _UxGT("プリンタージョウホウ"); // "Printer Info"
LSTR MSG_INFO_STATS_MENU = _UxGT("プリントジョウキョウ"); // "Printer Stats"
LSTR MSG_INFO_BOARD_MENU = _UxGT("セイギョケイジョウホウ"); // "Board Info"
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("サーミスター"); // "Thermistors"
LSTR MSG_INFO_EXTRUDERS = _UxGT("エクストルーダースウ"); // "Extruders"
LSTR MSG_INFO_BAUDRATE = _UxGT("ボーレート"); // "Baud"
LSTR MSG_INFO_PROTOCOL = _UxGT("プロトコル"); // "Protocol"
LSTR MSG_CASE_LIGHT = _UxGT("キョウタイナイショウメイ"); // "Case light"
LSTR MSG_INFO_PRINT_COUNT = _UxGT("プリントスウ "); // "Print Count"
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("カンリョウスウ"); // "Completed"
LSTR MSG_INFO_PRINT_TIME = _UxGT("プリントジカンルイケイ"); // "Total print time"
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("サイチョウプリントジカン"); // "Longest job time"
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("フィラメントシヨウリョウルイケイ"); // "Extruded total"
LSTR MSG_INFO_MIN_TEMP = _UxGT("セッテイサイテイオン"); // "Min Temp"
LSTR MSG_INFO_MAX_TEMP = _UxGT("セッテイサイコウオン"); // "Max Temp"
LSTR MSG_INFO_PSU = _UxGT("デンゲンシュベツ"); // "Power Supply"
LSTR MSG_DRIVE_STRENGTH = _UxGT("モータークドウリョク"); // "Drive Strength"
LSTR MSG_DAC_PERCENT_N = _UxGT("@ DACシュツリョク %"); // "@ Driver %"
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("EEPROMヘホゾン"); // "Store memory"
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("イチジテイシ");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("プリントサイカイ"); // "Resume print"
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("コウカンヲカイシシマス", "シバラクオマチクダサイ")); // "Wait for start of the filament"
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("フィラメントヌキダシチュウ", "シバラクオマチクダサイ")); // "Wait for filament unload"
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("フィラメントヲソウニュウシ,", "クリックスルトゾッコウシマス")); // "Insert filament and press button"
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("フィラメントソウテンチュウ", "シバラクオマチクダサイ")); // "Wait for filament load"
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("プリントヲサイカイシマス", "シバラクオマチクダサイ")); // "Wait for print to resume"
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("マチガッタプリンター"); // "Wrong printer"
LSTR MSG_CONFIGURATION = _UxGT("セッテイカンリ");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("ショウサイセッテイ");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("コショカイフク");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROMショキカ");
LSTR MSG_BUTTON_NEXT = _UxGT("ツギヘ");
LSTR MSG_BUTTON_INIT = _UxGT("ショキカ");
LSTR MSG_BUTTON_STOP = _UxGT("ストップ");
LSTR MSG_BUTTON_PRINT = _UxGT("プリント");
LSTR MSG_BUTTON_RESET = _UxGT("リセット");
LSTR MSG_BUTTON_CANCEL = _UxGT("キャンセル");
LSTR MSG_BUTTON_DONE = _UxGT("カンリョウ");
LSTR MSG_YES = _UxGT("ハイ");
LSTR MSG_NO = _UxGT("イイエ");
LSTR MSG_BACK = _UxGT("モドリ");
LSTR MSG_MAX_SPEED = _UxGT("ソクド");
LSTR MSG_STEPS_PER_MM = _UxGT("ステップ/mm");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("ユーザーコマンド");
LSTR MSG_PRINT_PAUSED = _UxGT("プリントガイチジテイシサレマシタ");
LSTR MSG_PRINTING = _UxGT("プリントチュウ...");
}

View File

@ -0,0 +1,106 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Korean
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_ko_KR {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Korean");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" 준비.");
LSTR MSG_BACK = _UxGT("뒤로");
LSTR MSG_MEDIA_INSERTED = _UxGT("카드 삽입됨");
LSTR MSG_MEDIA_REMOVED = _UxGT("카드 제거됨");
LSTR MSG_LCD_ENDSTOPS = _UxGT("엔드스탑");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("소프트 엔드스탑");
LSTR MSG_MAIN = _UxGT("뒤로");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("고급 설정");
LSTR MSG_CONFIGURATION = _UxGT("설정");
LSTR MSG_RUN_AUTO_FILES = _UxGT("자동 시작");
LSTR MSG_DISABLE_STEPPERS = _UxGT("모터 정지");
LSTR MSG_DEBUG_MENU = _UxGT("디버깅 메뉴");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트");
LSTR MSG_AUTO_HOME = _UxGT("오토홈");
LSTR MSG_AUTO_HOME_X = _UxGT("X 홈으로");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y 홈으로");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z 홈으로");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ 홈으로");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("누르면 시작합니다");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("다음 Point");
LSTR MSG_LEVEL_BED_DONE = _UxGT("레벨링 완료!");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("예열하기 - ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐");
LSTR MSG_PREHEAT_1_END_E = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ~");
LSTR MSG_PREHEAT_M = _UxGT("예열하기 - $");
LSTR MSG_PREHEAT_M_H = _UxGT("예열하기 - $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("예열하기 - $ 노즐");
LSTR MSG_PREHEAT_M_END_E = _UxGT("예열하기 - $ 노즐 ~");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Custom 예열");
LSTR MSG_COOLDOWN = _UxGT("식히기");
LSTR MSG_SWITCH_PS_ON = _UxGT("스위치 전원 켜기");
LSTR MSG_SWITCH_PS_OFF = _UxGT("스위치 전원 끄기");
LSTR MSG_EXTRUDE = _UxGT("밀어내기");
LSTR MSG_RETRACT = _UxGT("당기기");
LSTR MSG_MOVE_AXIS = _UxGT("축 이동");
LSTR MSG_BED_LEVELING = _UxGT("베드 레벨링");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("미러 사본");
LSTR MSG_UBL_DOING_G29 = _UxGT("오토레벨링 하기");
LSTR MSG_NOZZLE = _UxGT("노즐");
LSTR MSG_NOZZLE_N = _UxGT("노즐 ~");
LSTR MSG_BED = _UxGT("베드");
LSTR MSG_FAN_SPEED = _UxGT("펜 속도");
LSTR MSG_FAN_SPEED_N = _UxGT("펜 속도 ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("엑스트라 펜 속도");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("엑스트라 펜 속도 ~");
LSTR MSG_TEMPERATURE = _UxGT("온도");
LSTR MSG_MOTION = _UxGT("동작");
LSTR MSG_STORE_EEPROM = _UxGT("설정 저장하기");
LSTR MSG_LOAD_EEPROM = _UxGT("설정 읽어오기");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("설정 되돌리기");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM 초기화");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("새로고침");
LSTR MSG_INFO_SCREEN = _UxGT("처음으로");
LSTR MSG_PREPARE = _UxGT("준비하기");
LSTR MSG_PAUSE_PRINT = _UxGT("일시정지");
LSTR MSG_RESUME_PRINT = _UxGT("재시작");
LSTR MSG_STOP_PRINT = _UxGT("출력중지");
LSTR MSG_MEDIA_MENU = _UxGT("SD 카드출력");
LSTR MSG_NO_MEDIA = _UxGT("SD 카드없음");
LSTR MSG_DWELL = _UxGT("슬립모드...");
LSTR MSG_PRINT_PAUSED = _UxGT("일시 정지됨");
LSTR MSG_PRINTING = _UxGT("출력중...");
LSTR MSG_PRINT_ABORTED = _UxGT("취소됨");
LSTR MSG_KILLED = _UxGT("죽음. ");
LSTR MSG_STOPPED = _UxGT("멈춤. ");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("잘못된 프린터");
}

View File

@ -0,0 +1,230 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Dutch
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
namespace Language_nl {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
LSTR LANGUAGE = _UxGT("Dutch");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" gereed.");
LSTR MSG_BACK = _UxGT("Terug");
LSTR MSG_MEDIA_INSERTED = _UxGT("Kaart ingestoken");
LSTR MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Hoofdmenu");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Motoren uit");
LSTR MSG_DEBUG_MENU = _UxGT("Debug Menu"); // accepted English terms
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik voor begin");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Volgende Plaats");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Bed level kompl.");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Zet home offsets");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("H offset toegep.");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" voorverwarmen");
LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" voorverw. ~");
LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" voorverw. Einde");
LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ~");
LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" voorverw. aan");
LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" voorverw. Bed");
LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" verw. conf");
LSTR MSG_PREHEAT_M = _UxGT("$ voorverwarmen");
LSTR MSG_PREHEAT_M_H = _UxGT("$ voorverw. ~");
LSTR MSG_PREHEAT_M_END = _UxGT("$ voorverw. Einde");
LSTR MSG_PREHEAT_M_END_E = _UxGT("$ voorverw. Einde ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("$ voorverw. aan");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ voorverw. Bed");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ verw. conf");
#endif
LSTR MSG_COOLDOWN = _UxGT("Afkoelen");
LSTR MSG_SWITCH_PS_ON = _UxGT("Stroom aan");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Stroom uit");
LSTR MSG_EXTRUDE = _UxGT("Extrude");
LSTR MSG_RETRACT = _UxGT("Retract");
LSTR MSG_MOVE_AXIS = _UxGT("As verplaatsen");
LSTR MSG_BED_LEVELING = _UxGT("Bed Leveling");
LSTR MSG_LEVEL_BED = _UxGT("Level bed");
LSTR MSG_MOVING = _UxGT("Verplaatsen...");
LSTR MSG_FREE_XY = _UxGT("Vrij XY");
LSTR MSG_MOVE_X = _UxGT("Verplaats X");
LSTR MSG_MOVE_Y = _UxGT("Verplaats Y");
LSTR MSG_MOVE_Z = _UxGT("Verplaats Z");
LSTR MSG_MOVE_N = _UxGT("Verplaats @");
LSTR MSG_MOVE_E = _UxGT("Extruder");
LSTR MSG_MOVE_EN = _UxGT("Extruder *");
LSTR MSG_MOVE_N_MM = _UxGT("Verplaats $mm");
LSTR MSG_MOVE_01MM = _UxGT("Verplaats 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Verplaats 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Verplaats 100mm");
LSTR MSG_SPEED = _UxGT("Snelheid");
LSTR MSG_BED_Z = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_BED = _UxGT("Bed");
LSTR MSG_FAN_SPEED = _UxGT("Fan snelheid");
LSTR MSG_FAN_SPEED_N = _UxGT("Fan snelheid ~");
LSTR MSG_FLOW = _UxGT("Flow");
LSTR MSG_FLOW_N = _UxGT("Flow ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("Aan");
LSTR MSG_LCD_OFF = _UxGT("Uit");
LSTR MSG_SELECT = _UxGT("Selecteer");
LSTR MSG_SELECT_E = _UxGT("Selecteer *");
LSTR MSG_ACC = _UxGT("Versn");
LSTR MSG_TEMPERATURE = _UxGT("Temperatuur");
LSTR MSG_MOTION = _UxGT("Beweging");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_ADVANCE_K = _UxGT("Advance K"); // accepted english dutch
LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *"); // accepted english dutch
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_CONTRAST = _UxGT("LCD contrast");
LSTR MSG_STORE_EEPROM = _UxGT("Geheugen opslaan");
LSTR MSG_LOAD_EEPROM = _UxGT("Geheugen laden");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Noodstop reset");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ververs");
LSTR MSG_INFO_SCREEN = _UxGT("Info scherm");
LSTR MSG_PREPARE = _UxGT("Voorbereiden");
LSTR MSG_TUNE = _UxGT("Afstellen");
LSTR MSG_PAUSE_PRINT = _UxGT("Print pauzeren");
LSTR MSG_RESUME_PRINT = _UxGT("Print hervatten");
LSTR MSG_STOP_PRINT = _UxGT("Print stoppen");
LSTR MSG_MEDIA_MENU = _UxGT("Print van SD");
LSTR MSG_NO_MEDIA = _UxGT("Geen SD kaart");
LSTR MSG_DWELL = _UxGT("Slapen...");
LSTR MSG_USERWAIT = _UxGT("Wachten...");
LSTR MSG_PRINT_ABORTED = _UxGT("Print afgebroken");
LSTR MSG_NO_MOVE = _UxGT("Geen beweging.");
LSTR MSG_KILLED = _UxGT("Afgebroken. ");
LSTR MSG_STOPPED = _UxGT("Gestopt. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm"); // accepted English term in Dutch
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ruil Retract mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract F");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ruil Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretr. FR");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENTCHANGE = _UxGT("Verv. Filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Verv. Filament *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Init. SD kaart");
LSTR MSG_CHANGE_MEDIA = _UxGT("Verv. SD Kaart");
LSTR MSG_ZPROBE_OUT = _UxGT("Z probe uit. bed");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Zelf-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s Eerst");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Offset"); // accepted English term in Dutch
LSTR MSG_BABYSTEP_X = _UxGT("Babystap X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystap Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystap Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystap @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop afbr.");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Voorverw. fout");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Redun. temp fout");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("Therm. wegloop");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: Max. temp");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: Min. temp");
LSTR MSG_HALTED = _UxGT("PRINTER GESTOPT");
LSTR MSG_PLEASE_RESET = _UxGT("Reset A.U.B.");
LSTR MSG_HEATING = _UxGT("Voorwarmen...");
LSTR MSG_BED_HEATING = _UxGT("Bed voorverw...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibratie");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibreer X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibreer Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibreer Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibreer Midden");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta conf");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibratie");
LSTR MSG_CASE_LIGHT = _UxGT("Case licht");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Onjuiste printer");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Printed Aantal");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Totaal Voltooid");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Totale Printtijd");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Langste Printtijd");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Totaal Extrudeert");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Aantal");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Voltooid");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Printtijd ");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Langste");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
LSTR MSG_INFO_PSU = _UxGT("PSU"); // accepted English term in Dutch
LSTR MSG_DRIVE_STRENGTH = _UxGT("Motorstroom");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC Opslaan");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Hervat print");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: "); // accepted English term
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
// Up to 3 lines
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wacht voor start", "filament te", "verwisselen"));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament uit", "te laden"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle verw.", "Wacht a.u.b."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Laad filament", "en druk knop", "om verder..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament te", "laden"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Wacht voor print", "om verder", "te gaan"));
#else
// Up to 2 lines
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Wacht voor", "start..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wacht voor", "uitladen..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Verwarmen..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Laad filament", "en druk knop"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wacht voor", "inladen..."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wacht voor", "printing..."));
#endif
}

View File

@ -0,0 +1,549 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Polish - includes accented characters
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Substitutions are applied for the following characters when used in menu items titles:
*
* $ displays an inserted string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
* @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_PL
namespace Language_pl {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Polski");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" gotowy.");
LSTR MSG_YES = _UxGT("TAK");
LSTR MSG_NO = _UxGT("NIE");
LSTR MSG_BACK = _UxGT("Wstecz");
LSTR MSG_MEDIA_ABORTING = _UxGT("Przerywanie...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Karta włożona");
LSTR MSG_MEDIA_REMOVED = _UxGT("Karta usunięta");
LSTR MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Błąd inicializacji karty");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Krańców."); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Progr. Krańcówki");
LSTR MSG_MAIN = _UxGT("Menu główne");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane");
LSTR MSG_CONFIGURATION = _UxGT("Konfiguracja");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki");
LSTR MSG_DEBUG_MENU = _UxGT("Menu Debugowania");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu");
LSTR MSG_AUTO_HOME = _UxGT("Pozycja zerowa");
LSTR MSG_AUTO_HOME_X = _UxGT("Zeruj X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Zeruj Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Zeruj Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Autowyrównanie Z");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Spadek dokładności!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Osiągnięto dokładność");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Pozycja zerowa");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknij by rozp.");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Następny punkt");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Wypoziomowano!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Wys. zanikania");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ust. poz. zer.");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Poz. zerowa ust.");
LSTR MSG_SELECT_ORIGIN = _UxGT("Wybierz punkt zero");
LSTR MSG_LAST_VALUE_SP = _UxGT("Poprzednia wartość ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" wsz.");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" stół");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" ustaw.");
LSTR MSG_PREHEAT_M = _UxGT("Rozgrzej $");
LSTR MSG_PREHEAT_M_H = _UxGT("Rozgrzej $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Rozgrzej $ Dysza");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Rozgrzej $ Dysza ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Rozgrzej $ wsz.");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Rozgrzej $ stół");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Rozgrzej $ ustaw.");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Rozgrzej własne ust.");
LSTR MSG_COOLDOWN = _UxGT("Chłodzenie");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Częstotliwość");
LSTR MSG_LASER_MENU = _UxGT("Sterowanie Lasera");
LSTR MSG_SPINDLE_MENU = _UxGT("Sterowanie wrzeciona");
LSTR MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
LSTR MSG_SPINDLE_POWER = _UxGT("Zasilanie wrzeciona");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Rewers wrzeciona");
LSTR MSG_SWITCH_PS_ON = _UxGT("Włącz zasilacz");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Wyłącz zasilacz");
LSTR MSG_EXTRUDE = _UxGT("Ekstruzja");
LSTR MSG_RETRACT = _UxGT("Wycofanie");
LSTR MSG_MOVE_AXIS = _UxGT("Ruch osi");
LSTR MSG_BED_LEVELING = _UxGT("Poziomowanie stołu");
LSTR MSG_LEVEL_BED = _UxGT("Wypoziomuj stół");
LSTR MSG_BED_TRAMMING = _UxGT("Narożniki poziomowania");
LSTR MSG_NEXT_CORNER = _UxGT("Nastepny narożnik");
LSTR MSG_MESH_EDITOR = _UxGT("Edytor siatki");
LSTR MSG_EDIT_MESH = _UxGT("Edycja siatki");
LSTR MSG_EDITING_STOPPED = _UxGT("Edycja siatki zatrzymana");
LSTR MSG_PROBING_POINT = _UxGT("Punkt pomiarowy");
LSTR MSG_MESH_X = _UxGT("Indeks X");
LSTR MSG_MESH_Y = _UxGT("Indeks Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Wartość Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Własne Polecenia");
LSTR MSG_M48_TEST = _UxGT("M48 Test sondy");
LSTR MSG_M48_POINT = _UxGT("M48 Punky");
LSTR MSG_M48_DEVIATION = _UxGT("Odchylenie");
LSTR MSG_IDEX_MENU = _UxGT("Tryb IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Przesunięcie narzędzia");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkowanie");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikowanie");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Kopia lustrzana");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pełne sterowanie");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2ga dysza Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2ga dysza @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Wykonywanie G29");
LSTR MSG_UBL_TOOLS = _UxGT("Narzędzia UBL");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Punkt pochylenia");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ręczne Budowanie Siatki");
LSTR MSG_UBL_BC_INSERT = _UxGT("Umieść podkładkę i zmierz");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Zmierz");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Usuń & Zmierz Stół");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Przesuwanie do następnego");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktywacja UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Dezaktywacja UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temperatura stołu");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temperatura stołu");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temperatura dyszy");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temperatura dyszy");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Edycja siatki");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edycja własnej siatki");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Dostrajanie siatki");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec edycji siati");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Buduj własna siatkę");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Buduj siatkę");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Buduj siatkę ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Buduj siatkę na zimno");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Dostrojenie wysokości siatki");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Wartość wysokości");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sprawdzenie siatki");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Sprawdzenie siatki ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Sprawdzenie własnej siatki");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Nagrzewanie stołu");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Nagrzewanie dyszy");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Napełnianie ręczne...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Napełnij kreśloną długością");
LSTR MSG_G26_PRIME_DONE = _UxGT("Napełnianie zakończone");
LSTR MSG_G26_CANCELED = _UxGT("G26 Przewane");
LSTR MSG_G26_LEAVING = _UxGT("Opuszczanie G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Kontynuuj tworzenie siatki");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Poziomowanie siatką");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Poziomowaie 3-punktowe");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Poziomowaie według siatki");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Poziomuj siatkę");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Punkty boczne");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Rodzaj mapy");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Wyslij mapę siatki");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Wyslij do Hosta");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Wyslij do CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Kopia poza drukarką");
LSTR MSG_UBL_INFO_UBL = _UxGT("Wyslij info UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Stopień wypełnienia");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ręczne wypełnienie");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Inteligentne wypełnienie");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Wypełnienie siatki");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Unieważnij wszystko");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Unieważnij najbliższy");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Dostrajaj wszystko");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Dostrajaj najbliższy");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Przechowywanie siatki");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot Pamięci");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Załaduj siatkę stołu");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Zapisz siatkę stołu");
LSTR MSG_MESH_LOADED = _UxGT("Siatka %i załadowana");
LSTR MSG_MESH_SAVED = _UxGT("Siatka %i zapisana");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Brak magazynu");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Błąd: Zapis UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Bład: Odczyt UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Przesunięcie Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Przesunięcie Z zatrzymane");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Krok po kroku");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Tworzenie zimnej siatki");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligentne wypełnienie");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Sprawdzenie siatki");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Dostrojenie wszystkiego");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Sprawdzenie siatki");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Dostrojenie wszystkiego");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Zapis siatki stołu");
LSTR MSG_LED_CONTROL = _UxGT("Sterowanie LED");
LSTR MSG_LEDS = _UxGT("Światła");
LSTR MSG_LED_PRESETS = _UxGT("Ustawienia świateł");
LSTR MSG_SET_LEDS_RED = _UxGT("Czerwony");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Pomarańczowy");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Zółty");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Zielony");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Niebieski");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indygo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Biały");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny");
LSTR MSG_LED_CHANNEL_N = _UxGT("Kanał =");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jasność");
LSTR MSG_CUSTOM_LEDS = _UxGT("Własne światła");
LSTR MSG_INTENSITY_R = _UxGT("Czerwony");
LSTR MSG_INTENSITY_G = _UxGT("Zielony");
LSTR MSG_INTENSITY_B = _UxGT("Niebieski");
LSTR MSG_INTENSITY_W = _UxGT("Biały");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Jasność");
LSTR MSG_MOVING = _UxGT("Ruch...");
LSTR MSG_FREE_XY = _UxGT("Swobodne XY");
LSTR MSG_MOVE_X = _UxGT("Przesuń w X");
LSTR MSG_MOVE_Y = _UxGT("Przesuń w Y");
LSTR MSG_MOVE_Z = _UxGT("Przesuń w Z");
LSTR MSG_MOVE_N = _UxGT("Przesuń w @");
LSTR MSG_MOVE_E = _UxGT("Ekstruzja (os E)");
LSTR MSG_MOVE_EN = _UxGT("Ekstruzja (os E) *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Dysza za zimna");
LSTR MSG_MOVE_N_MM = _UxGT("Przesuń co $ mm");
LSTR MSG_MOVE_01MM = _UxGT("Przesuń co .1 mm");
LSTR MSG_MOVE_1MM = _UxGT("Przesuń co 1 mm");
LSTR MSG_MOVE_10MM = _UxGT("Przesuń co 10 mm");
LSTR MSG_MOVE_100MM = _UxGT("Przesuń co 100 mm");
LSTR MSG_MOVE_0001IN = _UxGT("Przesuń co 0.001 cala");
LSTR MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
LSTR MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
LSTR MSG_SPEED = _UxGT("Predkość");
LSTR MSG_BED_Z = _UxGT("Stół Z");
LSTR MSG_NOZZLE = _UxGT("Dysza");
LSTR MSG_NOZZLE_N = _UxGT("Dysza ~");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
LSTR MSG_BED = _UxGT("Stół");
LSTR MSG_CHAMBER = _UxGT("Obudowa");
LSTR MSG_FAN_SPEED = _UxGT("Obroty wentylatora");
LSTR MSG_FAN_SPEED_N = _UxGT("Obroty wentylatora ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wentylatora");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wentylatora ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Wentylator kontrolera");
LSTR MSG_FLOW = _UxGT("Przepływ");
LSTR MSG_FLOW_N = _UxGT("Przepływ ~");
LSTR MSG_CONTROL = _UxGT("Ustawienia");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
LSTR MSG_AUTOTEMP = _UxGT("Auto. temperatura");
LSTR MSG_LCD_ON = _UxGT("Wł.");
LSTR MSG_LCD_OFF = _UxGT("Wył.");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Strojenie PID zakończone");
LSTR MSG_SELECT = _UxGT("Wybierz");
LSTR MSG_SELECT_E = _UxGT("Wybierz *");
LSTR MSG_ACC = _UxGT("Przyspieszenie");
LSTR MSG_JERK = _UxGT("Zryw");
LSTR MSG_VA_JERK = _UxGT("Zryw V") STR_A;
LSTR MSG_VB_JERK = _UxGT("Zryw V") STR_B;
LSTR MSG_VC_JERK = _UxGT("Zryw V") STR_C;
LSTR MSG_VN_JERK = _UxGT("Zryw V@");
LSTR MSG_VE_JERK = _UxGT("Zryw Ve");
LSTR MSG_MAX_SPEED = _UxGT("Prędkość (V)");
LSTR MSG_VTRAV_MIN = _UxGT("Vskok min");
LSTR MSG_ACCELERATION = _UxGT("Przyspieszenie (A)");
LSTR MSG_A_RETRACT = _UxGT("A-wycofanie");
LSTR MSG_A_TRAVEL = _UxGT("A-przesuń.");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Częstotliwość max");
LSTR MSG_STEPS_PER_MM = _UxGT("kroki/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" kroki/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" kroki/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" kroki/mm");
LSTR MSG_N_STEPS = _UxGT("@ kroki/mm");
LSTR MSG_E_STEPS = _UxGT("E kroki/mm");
LSTR MSG_EN_STEPS = _UxGT("* kroki/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Ruch");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E w mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Śr. fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Śr. fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Wysuń mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Wsuń mm");
LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
LSTR MSG_STORE_EEPROM = _UxGT("Zapisz w pamięci");
LSTR MSG_LOAD_EEPROM = _UxGT("Wczytaj z pamięci");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ustaw. fabryczne");
LSTR MSG_INIT_EEPROM = _UxGT("Initializuj EEPROM");
LSTR MSG_MEDIA_UPDATE = _UxGT("Uaktualnij kartę");
LSTR MSG_RESET_PRINTER = _UxGT("Resetuj drukarkę");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Odswież");
LSTR MSG_INFO_SCREEN = _UxGT("Ekran główny");
LSTR MSG_PREPARE = _UxGT("Przygotuj");
LSTR MSG_TUNE = _UxGT("Strojenie");
LSTR MSG_CURRENT = _UxGT("Natężenie");
LSTR MSG_VOLTAGE = _UxGT("Napięcie");
LSTR MSG_POWER = _UxGT("Moc");
LSTR MSG_START_PRINT = _UxGT("Start wydruku");
LSTR MSG_BUTTON_NEXT = _UxGT("Następny");
LSTR MSG_BUTTON_INIT = _UxGT("Inic.");
LSTR MSG_BUTTON_PRINT = _UxGT("Drukuj");
LSTR MSG_BUTTON_RESET = _UxGT("Resetuj");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignoruj");
LSTR MSG_BUTTON_CANCEL = _UxGT("Przerwij");
LSTR MSG_BUTTON_DONE = _UxGT("Gotowe");
LSTR MSG_BUTTON_BACK = _UxGT("Wstecz");
LSTR MSG_BUTTON_PROCEED = _UxGT("Kontynuuj");
LSTR MSG_BUTTON_SKIP = _UxGT("Pomiń");
LSTR MSG_PAUSING = _UxGT("Wstrzymywanie...");
LSTR MSG_PAUSE_PRINT = _UxGT("Wstrzymaj druk");
LSTR MSG_RESUME_PRINT = _UxGT("Wznowienie");
LSTR MSG_STOP_PRINT = _UxGT("Stop");
LSTR MSG_PRINTING_OBJECT = _UxGT("Drukowanie obiektu");
LSTR MSG_CANCEL_OBJECT = _UxGT("Anunuj obiekt");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii");
LSTR MSG_MEDIA_MENU = _UxGT("Karta SD");
LSTR MSG_NO_MEDIA = _UxGT("Brak karty");
LSTR MSG_DWELL = _UxGT("Uśpij...");
LSTR MSG_USERWAIT = _UxGT("Oczekiwanie...");
LSTR MSG_PRINT_PAUSED = _UxGT("Druk wstrzymany");
LSTR MSG_PRINTING = _UxGT("Drukowanie...");
LSTR MSG_PRINT_ABORTED = _UxGT("Druk przerwany");
LSTR MSG_PRINT_DONE = _UxGT("Druk zakończony");
LSTR MSG_NO_MOVE = _UxGT("Brak ruchu");
LSTR MSG_KILLED = _UxGT("Ubity. ");
LSTR MSG_STOPPED = _UxGT("Zatrzymany. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Wycofaj mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Z Wycof. mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Wycofaj V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Skok Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Cof. wycof. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Z Cof. wyc. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Cof. wycof. V");
LSTR MSG_AUTORETRACT = _UxGT("Auto. wycofanie");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Długość zmiany");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Długość oczyszczania");
LSTR MSG_TOOL_CHANGE = _UxGT("Zmiana narzędzia");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Podniesienie Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prędkość napełniania");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Prędkość wycofania");
LSTR MSG_FILAMENTCHANGE = _UxGT("Zmień filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Zmień filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Wsuń Filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Wsuń Filament *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Wysuń Filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Wysuń Filament *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Wysuń wszystkie");
LSTR MSG_ATTACH_MEDIA = _UxGT("Inicjal. karty SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Zmiana karty SD");
LSTR MSG_RELEASE_MEDIA = _UxGT("Zwolnienie karty");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z za stołem");
LSTR MSG_SKEW_FACTOR = _UxGT("Współczynik skrzywienia");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("UWAGA: Złe ustawienia mogą uszkodzić drukarkę. Kontynuować?");
LSTR MSG_HOME_FIRST = _UxGT("Najpierw Home %s%s%s");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Przesuń dyszę do stołu");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Łącznie");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Błąd krańcówki");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Rozgrz. nieudane");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Błąd temperatury");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ZANIK TEMPERATURY");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ZANIK TEMP. STOŁU");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ZANIK TEMP.KOMORY");
LSTR MSG_ERR_MAXTEMP = _UxGT("Błąd: MAXTEMP");
LSTR MSG_ERR_MINTEMP = _UxGT("Błąd: MINTEMP");
LSTR MSG_HALTED = _UxGT("Drukarka zatrzym.");
LSTR MSG_PLEASE_RESET = _UxGT("Proszę zresetować");
LSTR MSG_SHORT_HOUR = _UxGT("g"); // One character only
LSTR MSG_HEATING = _UxGT("Rozgrzewanie...");
LSTR MSG_COOLING = _UxGT("Chłodzenie...");
LSTR MSG_BED_HEATING = _UxGT("Rozgrzewanie stołu...");
LSTR MSG_BED_COOLING = _UxGT("Chłodzenie stołu...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Rozgrzewanie komory...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Chłodzenie komory...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Kalibrowanie Delty");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibruj X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibruj Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibruj Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibruj środek");
LSTR MSG_DELTA_SETTINGS = _UxGT("Ustawienia delty");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibrowanie");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Ukośne ramię");
LSTR MSG_DELTA_HEIGHT = _UxGT("Wysokość");
LSTR MSG_DELTA_RADIUS = _UxGT("Promień");
LSTR MSG_INFO_MENU = _UxGT("O drukarce");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info drukarki");
LSTR MSG_3POINT_LEVELING = _UxGT("Poziomowanie 3-punktowe");
LSTR MSG_LINEAR_LEVELING = _UxGT("Poziomowanie liniowe");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Poziomowanie biliniowe");
LSTR MSG_MESH_LEVELING = _UxGT("Poziomowanie siatką");
LSTR MSG_INFO_STATS_MENU = _UxGT("Statystyki");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info płyty");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Ekstrudery");
LSTR MSG_INFO_BAUDRATE = _UxGT("Predkość USB");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokół");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Zegar pracy: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Zegar pracy: ON");
LSTR MSG_CASE_LIGHT = _UxGT("Oświetlenie obudowy");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Niepoprawna drukarka");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Czas druku");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Razem");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
#endif
LSTR MSG_INFO_PSU = _UxGT("Zasilacz");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Siła silnika");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Siła %");
LSTR MSG_ERROR_TMC = _UxGT("TMC BŁĄD POŁĄCZENIA");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Zapisz DAC EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ZMIEŃ FILAMENT");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("WYDRUK WSTRZYMANY");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("WSUŃ FILAMENT");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("WYSUŃ FILAMENT");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCJE WZNOWIENIA:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Oczyść więcej");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Kontynuuj");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Dysza: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Czujnik filamentu");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dystans do czujnika mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Zerowanie nieudane");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondowanie nieudane");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("WYBIERZ FILAMENT");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Uaktualnij firmware MMU!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU wymaga uwagi.");
LSTR MSG_MMU2_RESUME = _UxGT("Wznów wydruk");
LSTR MSG_MMU2_RESUMING = _UxGT("Wznawianie...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Wsuń filament");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Wsuń wszystko");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Wsuń do dyszy");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Wysuń filament");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Wysuń filament ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Wysuń filament");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Wsuwanie fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Wysuwanie fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Wysuwanie fil....");
LSTR MSG_MMU2_ALL = _UxGT("Wszystko");
LSTR MSG_MMU2_RESET = _UxGT("Resetuj MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Resetowanie MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij");
LSTR MSG_MIX = _UxGT("Miks");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
LSTR MSG_MIXER = _UxGT("Mikser");
LSTR MSG_FULL_GRADIENT = _UxGT("Pełny gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Przełacz miks");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Odwrotny gradient");
LSTR MSG_GAMES = _UxGT("Gry");
LSTR MSG_EDIT_PASSWORD = _UxGT("Zmień hasło");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Wymagane zalogowanie");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Ustawienia hasła");
LSTR MSG_ENTER_DIGIT = _UxGT("Wprowadź cyfrę");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Ustaw/zmień hasło");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Usuń hasło");
LSTR MSG_PASSWORD_SET = _UxGT("Hasło to ");
LSTR MSG_START_OVER = _UxGT("Od nowa");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Pamiętaj by zapisać!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Hasło usunięte");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nacisnik przycisk", "by wznowić drukowanie"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Czekam na", "zmianę filamentu", "by wystartować"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Włóż filament", "i naciśnij przycisk", "by kontynuować"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Naciśnij przycisk", "by nagrzać dyszę"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nagrzewanie dyszy", "Proszę czekać..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Czekam na", "wyjęcie filamentu"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Czekam na", "włożenie filamentu"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Czekam na", "oczyszczenie filamentu"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kliknij by zakończyć", "oczyszczanie filamentu"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Czekam na", "wznowienie wydruku..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknij by kontynuować"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Proszę czekać..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Włóż i kliknij"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknij by nagrzać"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nagrzewanie..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Wysuwanie..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Wsuwanie..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Oczyszczanie..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Kliknij by zakończyć"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Wznawianie..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Sterowniki TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Prąd sterownika");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Zerowanie bezczujnikowe");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekcja");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Wygładzanie");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Wypoziomuj oś X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Autokalibracja");
LSTR MSG_SOUND = _UxGT("Dźwięk");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibracja zakończona");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibracja nie powiodła się");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,172 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Portuguese
* UTF-8 for Graphical Display
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_pt {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Portuguese");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
LSTR MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
LSTR MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
LSTR MSG_MAIN = _UxGT("Menu principal");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Desactivar motores");
LSTR MSG_AUTO_HOME = _UxGT("Ir para origem");
LSTR MSG_AUTO_HOME_X = _UxGT("Ir para origem X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Ir para origem Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Ir para origem Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click para iniciar");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo ponto");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Pronto !");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Definir desvio");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets aplicados");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" Tudo");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Definições ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
LSTR MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Pre-aquecer $ Bico");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Pre-aquecer $ Bico ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Pre-aq. $ Tudo");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq. $ ") LCD_STR_THERMOMETER _UxGT("Base");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Definições $");
#endif
LSTR MSG_COOLDOWN = _UxGT("Arrefecer");
LSTR MSG_SWITCH_PS_ON = _UxGT("Ligar");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Desligar");
LSTR MSG_EXTRUDE = _UxGT("Extrudir");
LSTR MSG_RETRACT = _UxGT("Retrair");
LSTR MSG_MOVE_AXIS = _UxGT("Mover eixo");
LSTR MSG_MOVE_X = _UxGT("Mover X");
LSTR MSG_MOVE_Y = _UxGT("Mover Y");
LSTR MSG_MOVE_Z = _UxGT("Mover Z");
LSTR MSG_MOVE_N = _UxGT("Mover @");
LSTR MSG_MOVE_E = _UxGT("Mover Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Mover Extrusor *");
LSTR MSG_MOVE_N_MM = _UxGT("Mover $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
LSTR MSG_BED_Z = _UxGT("Base Z");
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
LSTR MSG_FAN_SPEED = _UxGT("Vel. ventoinha");
LSTR MSG_FAN_SPEED_N = _UxGT("Vel. ventoinha ~");
LSTR MSG_FLOW = _UxGT("Fluxo");
LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
LSTR MSG_CONTROL = _UxGT("Controlo");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_A_RETRACT = _UxGT("A-retracção");
LSTR MSG_A_TRAVEL = _UxGT("A-movimento");
LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" passo/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" passo/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" passo/mm");
LSTR MSG_N_STEPS = _UxGT("@ passo/mm");
LSTR MSG_E_STEPS = _UxGT("E passo/mm");
LSTR MSG_EN_STEPS = _UxGT("* passo/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movimento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E em mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Diam.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Diam. *");
LSTR MSG_CONTRAST = _UxGT("Contraste");
LSTR MSG_STORE_EEPROM = _UxGT("Guardar na memoria");
LSTR MSG_LOAD_EEPROM = _UxGT("Carregar da memoria");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. de emergen.");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Recarregar");
LSTR MSG_INFO_SCREEN = _UxGT("Monitorizar");
LSTR MSG_PREPARE = _UxGT("Preparar");
LSTR MSG_TUNE = _UxGT("Afinar");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
LSTR MSG_RESUME_PRINT = _UxGT("Retomar impressão");
LSTR MSG_STOP_PRINT = _UxGT("Parar impressão");
LSTR MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
LSTR MSG_NO_MEDIA = _UxGT("Sem cartão SD");
LSTR MSG_DWELL = _UxGT("Em espera...");
LSTR MSG_USERWAIT = _UxGT("Á espera de ordem");
LSTR MSG_PRINT_ABORTED = _UxGT("Impressão cancelada");
LSTR MSG_NO_MOVE = _UxGT("Sem movimento");
LSTR MSG_KILLED = _UxGT("EMERGÊNCIA. ");
LSTR MSG_STOPPED = _UxGT("PARADO. ");
LSTR MSG_CONTROL_RETRACT = _UxGT(" Retrair mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Troca Retrair mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT(" Retrair V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT(" Levantar mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT(" DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Troca DesRet mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT(" DesRet V");
LSTR MSG_AUTORETRACT = _UxGT(" Auto-Retract");
LSTR MSG_FILAMENTCHANGE = _UxGT("Trocar filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Trocar filamento *");
LSTR MSG_ATTACH_MEDIA = _UxGT("Inici. cartão SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Trocar cartão SD");
LSTR MSG_ZPROBE_OUT = _UxGT("Sensor fora/base");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desvio Z");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Fim de curso");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: T Máxima");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: T Mínima");
LSTR MSG_HEATING = _UxGT("Aquecendo...");
LSTR MSG_BED_HEATING = _UxGT("Aquecendo base...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibração Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Fim de curso");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
LSTR MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
LSTR MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
LSTR MSG_TOP_RIGHT = _UxGT("Superior Direto");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
}

View File

@ -0,0 +1,486 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Portuguese (Brazil)
* UTF-8 for Graphical Display
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_pt_br {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Portuguese (BR)");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronto.");
LSTR MSG_YES = _UxGT("SIM");
LSTR MSG_NO = _UxGT("NÃO");
LSTR MSG_BACK = _UxGT("Voltar");
LSTR MSG_MEDIA_ABORTING = _UxGT("Abortando...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
LSTR MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
LSTR MSG_MEDIA_RELEASED = _UxGT("Cartão liberado");
LSTR MSG_MEDIA_WAITING = _UxGT("Aguardando cartão");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro de leitura");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB removido");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB falhou");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Fins de curso");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Fins curso");
LSTR MSG_MAIN = _UxGT("Menu principal");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada");
LSTR MSG_CONFIGURATION = _UxGT("Configuração");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Início automático");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores");
LSTR MSG_DEBUG_MENU = _UxGT("Menu Debug");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres");
LSTR MSG_AUTO_HOME = _UxGT("Ir a origem XYZ");
LSTR MSG_AUTO_HOME_X = _UxGT("Ir na origem X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Ir na origem Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Ir na origem Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto alinhar Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Clique para Iniciar");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo Ponto");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Fim nivelação!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Suavizar altura");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Compensar origem");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Alteração aplicada");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Extrusora ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_END_E = _UxGT("Extrusora ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_ALL = _UxGT("Pre-aq.Todo ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq.Mesa ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Ajustar ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
LSTR MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Extrusora $");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Extrusora $ ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Pre-aq.Todo $");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq.Mesa $");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Ajustar $");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Customizar Pre-aq.");
LSTR MSG_COOLDOWN = _UxGT("Esfriar");
LSTR MSG_SWITCH_PS_ON = _UxGT("Ligar");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Desligar");
LSTR MSG_EXTRUDE = _UxGT("Extrusar");
LSTR MSG_RETRACT = _UxGT("Retrair");
LSTR MSG_MOVE_AXIS = _UxGT("Mover eixo");
LSTR MSG_BED_LEVELING = _UxGT("Nivelação Mesa");
LSTR MSG_LEVEL_BED = _UxGT("Nivelar Mesa");
LSTR MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
LSTR MSG_NEXT_CORNER = _UxGT("Próximo Canto");
LSTR MSG_MESH_EDITOR = _UxGT("Editor de Malha");
LSTR MSG_EDIT_MESH = _UxGT("Editar Malha");
LSTR MSG_EDITING_STOPPED = _UxGT("Fim da Edição");
LSTR MSG_PROBING_POINT = _UxGT("Sondando ponto");
LSTR MSG_MESH_X = _UxGT("Índice X");
LSTR MSG_MESH_Y = _UxGT("Índice Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comando customizado");
LSTR MSG_M48_TEST = _UxGT("M48 Teste de sonda");
LSTR MSG_M48_POINT = _UxGT("M48 Ponto");
LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicação");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Cópia espelhada");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Controle Total");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2o bico Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2o bico @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Executando G29");
LSTR MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Nivel. Mesa Unif.");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Fazer malha manual");
LSTR MSG_UBL_BC_INSERT = _UxGT("Calçar e calibrar");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Remover e calibrar");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Movendo para Próximo");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Ativar UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desativar UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Mesa");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Mesa");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Extrusora");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Extrusora");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Malha");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Editar Malha Custom");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste Fino da Malha");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fim da Edição");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Montar Malha Custom");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Montar ");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Montar $");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Checar $");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Montar Malha fria");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar Altura");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Quant. de Altura");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malha");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malha Custom");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Aquecendo Mesa");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Aquecendo Ext.");
LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
LSTR MSG_G26_LEAVING = _UxGT("G26 Saindo");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malha");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelação da Malha");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelação 3 pontos");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelação Grid");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malha");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Cantos");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Salvar Mapa da Malha");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar Para Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salvar Malha CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Salvar Backup");
LSTR MSG_UBL_INFO_UBL = _UxGT("Informação do UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Qtd de Enchimento");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Enchimento Manual");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Enchimento Smart");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Preencher malha");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar tudo");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar próximo");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajuste Fino de Todos");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Mais Próximo");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Armazenamento Malha");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot de Memória");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Ler Malha");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Salvar Malha");
LSTR MSG_MESH_LOADED = _UxGT("Malha %i carregada");
LSTR MSG_MESH_SAVED = _UxGT("Malha %i salva");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Sem armazenamento");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Erro ao salvar UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Erro no restauro UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Compensação Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Compensação Z parou");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo a passo");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Montar Malha fria");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Enchimento Smart");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Validar Malha");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajuste Fino de Todos");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Validar Malha");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajuste Fino de Todos");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Salvar Malha");
LSTR MSG_LED_CONTROL = _UxGT("Controle do LED");
LSTR MSG_LEDS = _UxGT("Luz");
LSTR MSG_LED_PRESETS = _UxGT("Configuração da Luz");
LSTR MSG_SET_LEDS_RED = _UxGT("Luz Vermelha");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Luz Laranja");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Luz Amarela");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Luz Verde");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Luz Azul");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Luz Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Luz Violeta");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Luz Branca");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Luz Padrão");
LSTR MSG_CUSTOM_LEDS = _UxGT("Luz Customizada");
LSTR MSG_INTENSITY_R = _UxGT("Intensidade Vermelho");
LSTR MSG_INTENSITY_G = _UxGT("Intensidade Verde");
LSTR MSG_INTENSITY_B = _UxGT("Intensidade Azul");
LSTR MSG_INTENSITY_W = _UxGT("Intensidade Branco");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brilho");
LSTR MSG_MOVING = _UxGT("Movendo...");
LSTR MSG_FREE_XY = _UxGT("Liberar XY");
LSTR MSG_MOVE_X = _UxGT("Mover X");
LSTR MSG_MOVE_Y = _UxGT("Mover Y");
LSTR MSG_MOVE_Z = _UxGT("Mover Z");
LSTR MSG_MOVE_N = _UxGT("Mover @");
LSTR MSG_MOVE_E = _UxGT("Mover Extrusor");
LSTR MSG_MOVE_EN = _UxGT("Mover Extrusor *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Extrus. mto fria");
LSTR MSG_MOVE_N_MM = _UxGT("Mover $mm");
LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
LSTR MSG_BED_Z = _UxGT("Base Z");
LSTR MSG_NOZZLE = _UxGT("Bocal");
LSTR MSG_NOZZLE_N = _UxGT("Bocal ~");
LSTR MSG_BED = _UxGT("Mesa");
LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventoinha");
LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventoinha ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("+Vel. Ventoinha");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("+Vel. Ventoinha ~");
LSTR MSG_FLOW = _UxGT("Vazão");
LSTR MSG_FLOW_N = _UxGT("Vazão ~");
LSTR MSG_CONTROL = _UxGT("Controle");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Máx");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fator");
LSTR MSG_AUTOTEMP = _UxGT("Temp. Automática");
LSTR MSG_LCD_ON = _UxGT("Ligado");
LSTR MSG_LCD_OFF = _UxGT("Desligado");
LSTR MSG_SELECT = _UxGT("Selecionar");
LSTR MSG_SELECT_E = _UxGT("Selecionar *");
LSTR MSG_ACC = _UxGT("Acel.");
LSTR MSG_JERK = _UxGT("Arrancada");
LSTR MSG_VA_JERK = _UxGT("arrancada V") STR_A;
LSTR MSG_VB_JERK = _UxGT("arrancada V") STR_B;
LSTR MSG_VC_JERK = _UxGT("arrancada V") STR_C;
LSTR MSG_VN_JERK = _UxGT("arrancada V@");
LSTR MSG_VE_JERK = _UxGT("arrancada VE");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desv. Junção");
LSTR MSG_MAX_SPEED = _UxGT("Velocidade");
LSTR MSG_VTRAV_MIN = _UxGT("VDeslocamento min");
LSTR MSG_ACCELERATION = _UxGT("Aceleração");
LSTR MSG_A_RETRACT = _UxGT("Retrair A");
LSTR MSG_A_TRAVEL = _UxGT("Movimento A");
LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm");
LSTR MSG_A_STEPS = _UxGT("Passo ") STR_A _UxGT("/mm");
LSTR MSG_B_STEPS = _UxGT("Passo ") STR_B _UxGT("/mm");
LSTR MSG_C_STEPS = _UxGT("Passo ") STR_C _UxGT("/mm");
LSTR MSG_N_STEPS = _UxGT("Passo @/mm");
LSTR MSG_E_STEPS = _UxGT("E/mm");
LSTR MSG_EN_STEPS = _UxGT("*/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
LSTR MSG_MOTION = _UxGT("Movimento");
LSTR MSG_FILAMENT = _UxGT("Filamento");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Extrusão em mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Diâmetro Fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diâmetro Fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarr. mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Carregar mm");
LSTR MSG_ADVANCE_K = _UxGT("Avanço K");
LSTR MSG_ADVANCE_K_E = _UxGT("Avanço K *");
LSTR MSG_CONTRAST = _UxGT("Contraste");
LSTR MSG_STORE_EEPROM = _UxGT("Salvar Configuração");
LSTR MSG_LOAD_EEPROM = _UxGT("Ler Configuração");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restauro seguro");
LSTR MSG_INIT_EEPROM = _UxGT("Iniciar EEPROM");
LSTR MSG_MEDIA_UPDATE = _UxGT("Atualiz. SD");
LSTR MSG_RESET_PRINTER = _UxGT("Resetar Impressora");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Atualização");
LSTR MSG_INFO_SCREEN = _UxGT("Informações");
LSTR MSG_PREPARE = _UxGT("Preparar");
LSTR MSG_TUNE = _UxGT("Ajustar");
LSTR MSG_START_PRINT = _UxGT("Iniciar Impressão");
LSTR MSG_BUTTON_NEXT = _UxGT("Prox.");
LSTR MSG_BUTTON_INIT = _UxGT("Iniciar");
LSTR MSG_BUTTON_STOP = _UxGT("Parar");
LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
LSTR MSG_BUTTON_RESET = _UxGT("Resetar");
LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
LSTR MSG_BUTTON_DONE = _UxGT("Pronto");
LSTR MSG_BUTTON_BACK = _UxGT("Voltar");
LSTR MSG_BUTTON_PROCEED = _UxGT("Continuar");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
LSTR MSG_RESUME_PRINT = _UxGT("Continuar impressão");
LSTR MSG_STOP_PRINT = _UxGT("Parar impressão");
LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo objeto");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impressão");
LSTR MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
LSTR MSG_NO_MEDIA = _UxGT("Sem cartão SD");
LSTR MSG_DWELL = _UxGT("Dormindo...");
LSTR MSG_USERWAIT = _UxGT("Clique para retomar");
LSTR MSG_PRINT_PAUSED = _UxGT("Impressão Pausada");
LSTR MSG_PRINTING = _UxGT("Imprimindo...");
LSTR MSG_PRINT_ABORTED = _UxGT("Impressão Abortada");
LSTR MSG_NO_MOVE = _UxGT("Sem movimento");
LSTR MSG_KILLED = _UxGT("PARADA DE EMERGÊNCIA");
LSTR MSG_STOPPED = _UxGT("PAROU. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retrair mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Retrair Troca mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retrair V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saltar mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Des-Retrair mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Des-RetTroca mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Des-Retrair V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Des-RetTroca V");
LSTR MSG_AUTORETRACT = _UxGT("Retração Automática");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Distancia Retração");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Distancia Purga");
LSTR MSG_TOOL_CHANGE = _UxGT("Mudar Ferramenta");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Preparar Veloc.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Veloc. Retração");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Standby bico");
LSTR MSG_FILAMENTCHANGE = _UxGT("Trocar Filamento");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Trocar Filamento *");
LSTR MSG_FILAMENTLOAD = _UxGT("Carregar Filamento");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Carregar Filamento *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Descarreg. Filamento");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descarreg. Filamento *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descarregar Todos");
LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD");
LSTR MSG_CHANGE_MEDIA = _UxGT("Trocar SD");
LSTR MSG_RELEASE_MEDIA = _UxGT("Liberar SD");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda fora da mesa");
LSTR MSG_SKEW_FACTOR = _UxGT("Fator de Cisalho");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Testar BLTouch");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar BLTouch");
LSTR MSG_BLTOUCH_STOW = _UxGT("Recolher BLTouch");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estender BLTouch");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda-Z");
LSTR MSG_MANUAL_STOW = _UxGT("Recolher Sonda-Z");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s Primeiro");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Compensar Sonda");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Compensar Sonda em X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Compensar Sonda em Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Compensar Sonda em Z");
LSTR MSG_BABYSTEP_X = _UxGT("Passinho X");
LSTR MSG_BABYSTEP_Y = _UxGT("Passinho Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Passinho Z");
LSTR MSG_BABYSTEP_N = _UxGT("Passinho @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Abortar Fim de Curso");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ESCAPE TÉRMICO");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ESCAPE TÉRMICO MESA");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ESCAPE TÉRMICO CAMARA");
LSTR MSG_ERR_MAXTEMP = _UxGT("Erro:Temp Máxima");
LSTR MSG_ERR_MINTEMP = _UxGT("Erro:Temp Mínima");
LSTR MSG_HALTED = _UxGT("IMPRESSORA PAROU");
LSTR MSG_PLEASE_RESET = _UxGT("Favor resetar");
LSTR MSG_HEATING = _UxGT("Aquecendo...");
LSTR MSG_COOLING = _UxGT("Resfriando...");
LSTR MSG_BED_HEATING = _UxGT("Aquecendo mesa...");
LSTR MSG_BED_COOLING = _UxGT("Esfriando mesa...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Aquecendo Câmara...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Esfriando Câmara...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibrar Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
LSTR MSG_DELTA_SETTINGS = _UxGT("Configuração Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-Calibração");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Haste Diagonal");
LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
LSTR MSG_DELTA_RADIUS = _UxGT("Raio");
LSTR MSG_INFO_MENU = _UxGT("Sobre");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Impressora");
LSTR MSG_3POINT_LEVELING = _UxGT("Nivelamento 3 pontos");
LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelamento Linear");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelamento Bilinear");
LSTR MSG_UBL_LEVELING = _UxGT("Nivelamento UBL");
LSTR MSG_MESH_LEVELING = _UxGT("Nivelamento da Malha");
LSTR MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. da Placa");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusoras");
LSTR MSG_INFO_BAUDRATE = _UxGT("Taxa de Transmissão");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
LSTR MSG_CASE_LIGHT = _UxGT("Luz da Impressora");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Intensidade Brilho");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total de Impressões");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Trabalho Mais longo");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total de Extrusão");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Qtd de Impressões");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Maior trabalho");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("T. Extrusão");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
LSTR MSG_INFO_PSU = _UxGT("PSU");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Força do Motor");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escrever EEPROM DAC");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("TROCA DE FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESSÃO PAUSADA");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARREGAR FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARREG. FILAMENTO");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Config. de Retomada");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar mais");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar Impressão");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bocal: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Sensor filamento");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Falha ao ir à origem");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Falha ao sondar");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLHER FILAMENTO");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_MMU2_RESUME = _UxGT("Continuar Impressão");
LSTR MSG_MMU2_RESUMING = _UxGT("Continuando...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Carregar Filamento");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Carregar Todos");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carregar para bocal");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejetar Filamento");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejetar Filamento ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Liberar Filamento");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Carregando Fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejetando Fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Carregando Fil....");
LSTR MSG_MMU2_ALL = _UxGT("Todos");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
LSTR MSG_MMU2_RESET = _UxGT("Resetar MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Resetando MMU...");
LSTR MSG_GAMES = _UxGT("Jogos");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Labirinto");
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Aperte o botão para", "continuar impressão"));
LSTR MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando o", "inicio da", "troca de filamento"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Coloque filamento", "pressione o botão", "para continuar..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pressione o botão", "p/ aquecer o bocal"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Aquecendo o bocal", "Aguarde..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperando", "remoção de filamento"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperando", "filamento"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere pela", "purga de filamento"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Clique para finaliz.", "purga de filamento"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impressão", "continuar"));
#else // LCD_HEIGHT < 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clique p. continuar"));
LSTR MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Aguarde..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insira e Clique"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Clique para Aquecer"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Aquecendo..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejetando..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregando..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Clique p. finalizar"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Continuando..."));
#endif
LSTR MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
LSTR MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
LSTR MSG_TOP_RIGHT = _UxGT("Superior Direto");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
}

View File

@ -0,0 +1,617 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Romanian
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Translation by cristyanul
*/
namespace Language_ro {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Romanian");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Pregatit.");
LSTR MSG_YES = _UxGT("DA");
LSTR MSG_NO = _UxGT("NU");
LSTR MSG_BACK = _UxGT("Inapoi");
LSTR MSG_MEDIA_ABORTING = _UxGT("Abandon...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Media Introdus");
LSTR MSG_MEDIA_REMOVED = _UxGT("Media Inlaturat");
LSTR MSG_MEDIA_WAITING = _UxGT("Astept Media");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Eroare Citire Media");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Dispozitiv USB Inlaturat");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Pornire USB Esuata");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Eroare:Subcall Overflow");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
LSTR MSG_MAIN = _UxGT("Principal");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Setari Avansate");
LSTR MSG_CONFIGURATION = _UxGT("Configurare");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Dezactivare Motoare");
LSTR MSG_DEBUG_MENU = _UxGT("Meniu Debug");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test Bara Progres");
LSTR MSG_AUTO_HOME = _UxGT("Auto Acasa");
LSTR MSG_AUTO_HOME_X = _UxGT("Acasa X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Acasa Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Acasa Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Aliniere-Z");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Acasa XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click pentru a incepe");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Urmatorul Punct");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivelare Terminata!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Inaltime");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Seteaza Offseturile Acasa");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offseturi Aplicate");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Preincalzeste ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Preincalzeste ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Tot");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Patul");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Conf");
LSTR MSG_PREHEAT_M = _UxGT("Preincalzeste $");
LSTR MSG_PREHEAT_M_H = _UxGT("Preincalzeste $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Preincalzeste $ Capatul");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preincalzeste $ Capatul ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preincalzeste $ Tot");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preincalzeste $ Patul");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preincalzeste $ Conf");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preincalzeste Personalizat");
LSTR MSG_COOLDOWN = _UxGT("Racire");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecventa");
LSTR MSG_LASER_MENU = _UxGT("Control Laser");
LSTR MSG_LASER_POWER = _UxGT("Puterea Laserului");
LSTR MSG_SPINDLE_MENU = _UxGT("Controlul Spindle");
LSTR MSG_SPINDLE_POWER = _UxGT("Puterea Spindle");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Invers");
LSTR MSG_SWITCH_PS_ON = _UxGT("Porneste");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Opreste");
LSTR MSG_EXTRUDE = _UxGT("Extrudeaza");
LSTR MSG_RETRACT = _UxGT("Retracteaza");
LSTR MSG_MOVE_AXIS = _UxGT("Muta Axa");
LSTR MSG_BED_LEVELING = _UxGT("Nivelarea Patului");
LSTR MSG_LEVEL_BED = _UxGT("Niveleaza Patul");
LSTR MSG_BED_TRAMMING = _UxGT("Niveleaza Colturile");
LSTR MSG_NEXT_CORNER = _UxGT("Urmatorul Colt");
LSTR MSG_MESH_EDITOR = _UxGT("Editor Mesh");
LSTR MSG_EDIT_MESH = _UxGT("Editeaza Mesh");
LSTR MSG_EDITING_STOPPED = _UxGT("Editarea Meshului Oprita");
LSTR MSG_PROBING_POINT = _UxGT("Punctul de Probare");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Valoare Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comenzi Personalizate");
LSTR MSG_M48_TEST = _UxGT("M48 Probe Test");
LSTR MSG_M48_POINT = _UxGT("M48 Point");
LSTR MSG_M48_DEVIATION = _UxGT("Deviation");
LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Doing G29");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Tools");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
LSTR MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Measure");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Map Type");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Imprimanta Backup");
LSTR MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
LSTR MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
LSTR MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
LSTR MSG_UBL_NO_STORAGE = _UxGT("No Storage");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
LSTR MSG_LED_CONTROL = _UxGT("LED Control");
LSTR MSG_LEDS = _UxGT("Lights");
LSTR MSG_LED_PRESETS = _UxGT("Light Presets");
LSTR MSG_SET_LEDS_RED = _UxGT("Red");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Green");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Blue");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
LSTR MSG_SET_LEDS_WHITE = _UxGT("White");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Default");
LSTR MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
LSTR MSG_INTENSITY_R = _UxGT("Red Intensity");
LSTR MSG_INTENSITY_G = _UxGT("Green Intensity");
LSTR MSG_INTENSITY_B = _UxGT("Blue Intensity");
LSTR MSG_INTENSITY_W = _UxGT("White Intensity");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
LSTR MSG_MOVING = _UxGT("Moving...");
LSTR MSG_FREE_XY = _UxGT("Free XY");
LSTR MSG_MOVE_X = _UxGT("Move X");
LSTR MSG_MOVE_Y = _UxGT("Move Y");
LSTR MSG_MOVE_Z = _UxGT("Move Z");
LSTR MSG_MOVE_N = _UxGT("Move @");
LSTR MSG_MOVE_E = _UxGT("Extruder");
LSTR MSG_MOVE_EN = _UxGT("Extruder *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Capat Prea Rece");
LSTR MSG_MOVE_N_MM = _UxGT("Move $mm");
LSTR MSG_MOVE_01MM = _UxGT("Move 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Move 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Move 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Move 100mm");
LSTR MSG_SPEED = _UxGT("Speed");
LSTR MSG_BED_Z = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
LSTR MSG_BED = _UxGT("Bed");
LSTR MSG_CHAMBER = _UxGT("Enclosure");
LSTR MSG_FAN_SPEED = _UxGT("Fan Speed");
LSTR MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
LSTR MSG_FLOW = _UxGT("Flow");
LSTR MSG_FLOW_N = _UxGT("Flow ~");
LSTR MSG_CONTROL = _UxGT("Control");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("On");
LSTR MSG_LCD_OFF = _UxGT("Off");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed! Bad extruder.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high.");
LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
LSTR MSG_SELECT = _UxGT("Select");
LSTR MSG_SELECT_E = _UxGT("Select *");
LSTR MSG_ACC = _UxGT("Accel");
LSTR MSG_JERK = _UxGT("Jerk");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-Jerk");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-Jerk");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-Jerk");
LSTR MSG_VN_JERK = _UxGT("V@-Jerk");
LSTR MSG_VE_JERK = _UxGT("Ve-Jerk");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
LSTR MSG_MAX_SPEED = _UxGT("Max Speed");
LSTR MSG_VMAX_A = _UxGT("Max Speed ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Max Speed ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Max Speed ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Max Speed @");
LSTR MSG_VMAX_E = _UxGT("Max Speed E");
LSTR MSG_VMAX_EN = _UxGT("Max Speed *");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
LSTR MSG_ACCELERATION = _UxGT("Acceleration");
LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Amax @");
LSTR MSG_AMAX_E = _UxGT("Amax E");
LSTR MSG_AMAX_EN = _UxGT("Amax *");
LSTR MSG_A_RETRACT = _UxGT("A-Retract");
LSTR MSG_A_TRAVEL = _UxGT("A-Travel");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequency max");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" steps/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" steps/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" steps/mm");
LSTR MSG_N_STEPS = _UxGT("@ steps/mm");
LSTR MSG_E_STEPS = _UxGT("E steps/mm");
LSTR MSG_EN_STEPS = _UxGT("* steps/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperature");
LSTR MSG_MOTION = _UxGT("Motion");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Load mm");
LSTR MSG_ADVANCE_K = _UxGT("Advance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
LSTR MSG_CONTRAST = _UxGT("LCD Contrast");
LSTR MSG_STORE_EEPROM = _UxGT("Store Settings");
LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Update");
LSTR MSG_RESET_PRINTER = _UxGT("Reset Imprimanta");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
LSTR MSG_INFO_SCREEN = _UxGT("Info Screen");
LSTR MSG_PREPARE = _UxGT("Prepare");
LSTR MSG_TUNE = _UxGT("Tune");
LSTR MSG_POWER_MONITOR = _UxGT("Power monitor");
LSTR MSG_CURRENT = _UxGT("Intensitate");
LSTR MSG_VOLTAGE = _UxGT("Voltaj");
LSTR MSG_POWER = _UxGT("Putere");
LSTR MSG_START_PRINT = _UxGT("Start Imprimare");
LSTR MSG_BUTTON_NEXT = _UxGT("Urmatorul");
LSTR MSG_BUTTON_INIT = _UxGT("Initiere");
LSTR MSG_BUTTON_STOP = _UxGT("Stop");
LSTR MSG_BUTTON_PRINT = _UxGT("Imprimeaza");
LSTR MSG_BUTTON_RESET = _UxGT("Reseteaza");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignora");
LSTR MSG_BUTTON_CANCEL = _UxGT("Anuleaza");
LSTR MSG_BUTTON_DONE = _UxGT("OK");
LSTR MSG_BUTTON_BACK = _UxGT("Inapoi");
LSTR MSG_BUTTON_PROCEED = _UxGT("Proceed");
LSTR MSG_PAUSING = _UxGT("Pausing...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print");
LSTR MSG_RESUME_PRINT = _UxGT("Resume Print");
LSTR MSG_STOP_PRINT = _UxGT("Stop Print");
LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object");
LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Outage Recovery");
LSTR MSG_MEDIA_MENU = _UxGT("Print from Media");
LSTR MSG_NO_MEDIA = _UxGT("No Media");
LSTR MSG_DWELL = _UxGT("Sleep...");
LSTR MSG_USERWAIT = _UxGT("Click to Resume...");
LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused");
LSTR MSG_PRINTING = _UxGT("Printing...");
LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted");
LSTR MSG_PRINT_DONE = _UxGT("Print Done");
LSTR MSG_NO_MOVE = _UxGT("No Move.");
LSTR MSG_KILLED = _UxGT("KILLED. ");
LSTR MSG_STOPPED = _UxGT("STOPPED. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
LSTR MSG_TOOL_CHANGE = _UxGT("Tool Inlocuire");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto Pornit");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto Oprit");
LSTR MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrare");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Inlocuire Filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Inlocuire Filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Incarcare Filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Incarcare Filament *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Scoatere Filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Scoatere Filament *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Scoate Tot");
LSTR MSG_ATTACH_MEDIA = _UxGT("Atasare Media");
LSTR MSG_CHANGE_MEDIA = _UxGT("Inlocuire Media");
LSTR MSG_RELEASE_MEDIA = _UxGT("Eliberare Media");
LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
LSTR MSG_SKEW_FACTOR = _UxGT("Skew Factor");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("Stow");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Save");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
LSTR MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
LSTR MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
LSTR MSG_HALTED = _UxGT("PRINTER HALTED");
LSTR MSG_PLEASE_RESET = _UxGT("Please Reset");
LSTR MSG_HEATING = _UxGT("Heating...");
LSTR MSG_COOLING = _UxGT("Cooling...");
LSTR MSG_BED_HEATING = _UxGT("Bed Heating...");
LSTR MSG_BED_COOLING = _UxGT("Bed Cooling...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
LSTR MSG_DELTA_HEIGHT = _UxGT("Inaltime");
LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
LSTR MSG_INFO_MENU = _UxGT("Despre Imprimanta");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info Imprimanta");
LSTR MSG_3POINT_LEVELING = _UxGT("Nivelare in 3 puncte");
LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelare Lineara");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelare Bilineara");
LSTR MSG_UBL_LEVELING = _UxGT("Nivelarea Patului Unificata");
LSTR MSG_MESH_LEVELING = _UxGT("Nivelare Mesh");
LSTR MSG_INFO_STATS_MENU = _UxGT("Status Imprimanta");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Informatii Placa");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoare");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudere");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
LSTR MSG_CASE_LIGHT = _UxGT("Case Light");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Printuri");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completat");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Timp Imprimare Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extrudat");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Temperatura Minima");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Temperatura Maxima");
LSTR MSG_INFO_PSU = _UxGT("PSU");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
LSTR MSG_MMU2_RESUME = _UxGT("MMU Resume");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
LSTR MSG_MMU2_ALL = _UxGT("All");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("Reset MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
LSTR MSG_MIX = _UxGT("Mix");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Component =");
LSTR MSG_MIXER = _UxGT("Mixer");
LSTR MSG_GRADIENT = _UxGT("Gradient");
LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
LSTR MSG_CYCLE_MIX = _UxGT("Cycle Mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
LSTR MSG_START_VTOOL = _UxGT("Start V-tool");
LSTR MSG_END_VTOOL = _UxGT(" End V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
LSTR MSG_START_Z = _UxGT("Start Z:");
LSTR MSG_END_Z = _UxGT(" End Z:");
LSTR MSG_GAMES = _UxGT("Jocuri");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
LSTR MSG_BAD_PAGE = _UxGT("Bad page index");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
//
// Filament Inlocuire screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Apasa Butonul", "pentru a reveni la print"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Astept ca", "inlocuirea filamentului", "sa inceapa"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Va rog asteptati..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click pentru incalzire"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Incalzire..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejectare..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Incarcare..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Curatare..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click pentru a termina"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Se Reia..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
LSTR MSG_TMC_CURRENT = _UxGT("Driver Current");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
LSTR MSG_SERVICE_RESET = _UxGT("Reset");
LSTR MSG_SERVICE_IN = _UxGT(" in:");
LSTR MSG_BACKLASH = _UxGT("Backlash");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corectare");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivelare Axa X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrare");
LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout Incalzitor");
LSTR MSG_REHEAT = _UxGT("Reincalzire");
LSTR MSG_REHEATING = _UxGT("Reincalzire...");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,883 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Russian
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_5
namespace Language_ru {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Russian");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
LSTR MSG_YES = _UxGT("Да");
LSTR MSG_NO = _UxGT("Нет");
LSTR MSG_BACK = _UxGT("Назад");
LSTR MSG_MEDIA_ABORTING = _UxGT("Прерывание...");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD карта вставлена");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD карта извлечена");
LSTR MSG_MEDIA_WAITING = _UxGT("Вставьте SD карту");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализации SD");
#else
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализ. SD");
#endif
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова");
#else
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова");
#endif
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Основное меню");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
LSTR MSG_CONFIGURATION = _UxGT("Конфигурация");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели");
LSTR MSG_DEBUG_MENU = _UxGT("Меню отладки");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора");
LSTR MSG_AUTO_HOME = _UxGT("Парковка XYZ");
LSTR MSG_AUTO_HOME_A = _UxGT("Парковка @");
LSTR MSG_AUTO_HOME_X = _UxGT("Парковка X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание");
LSTR MSG_ITERATION = _UxGT("G34 Итерация: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Точность достигнута");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Нулевое положение");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Нажмите чтобы начать");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома");
LSTR MSG_HOME_OFFSET_X = _UxGT("Смещение дома X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещение дома Z");
#else
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома");
LSTR MSG_HOME_OFFSET_X = _UxGT("Смещ. дома X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещ. дома Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещ. дома Z");
#endif
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены");
LSTR MSG_SELECT_ORIGIN = _UxGT("Выберите ноль");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_LAST_VALUE_SP = _UxGT("Последнее знач. ");
#else
LSTR MSG_LAST_VALUE_SP = _UxGT("Послед. знач. ");
#endif
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Нагрев ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" всё");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" стол");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" правка");
LSTR MSG_PREHEAT_M = _UxGT("Преднагрев $");
LSTR MSG_PREHEAT_M_H = _UxGT("Нагрев $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Нагрев $ сопло");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагрев $ сопло ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагрев $ всё");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрев $ стол");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрев $ правка");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Нагрев Свой");
LSTR MSG_COOLDOWN = _UxGT("Охлаждение");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота");
LSTR MSG_LASER_MENU = _UxGT("Управление лазером");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SPINDLE_MENU = _UxGT("Управление шпинделем");
LSTR MSG_LASER_TOGGLE = _UxGT("Переключить лазер");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпиндель");
LSTR MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя");
LSTR MSG_LASER_POWER = _UxGT("Мощность лазера");
LSTR MSG_LASER_PULSE_MS = _UxGT("Тестовый импульс мс");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Переключить обдув");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключить вакуум");
#else
LSTR MSG_SPINDLE_MENU = _UxGT("Управление шпинд.");
LSTR MSG_LASER_TOGGLE = _UxGT("Переключ.лазер");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпинд");
LSTR MSG_SPINDLE_POWER = _UxGT("Мощн.шпинделя");
LSTR MSG_LASER_POWER = _UxGT("Мощн. лазера");
LSTR MSG_LASER_PULSE_MS = _UxGT("Тест. имп. мс");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Переключ. обдув");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключ. вакуум");
#endif
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Управление обдувом");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Ошибка обдува");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Импульс лазера");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Шпиндель вперёд");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Инверсия шпинделя");
LSTR MSG_SWITCH_PS_ON = _UxGT("Включить питание");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Выключить питание");
LSTR MSG_EXTRUDE = _UxGT("Экструзия");
LSTR MSG_RETRACT = _UxGT("Втягивание");
LSTR MSG_MOVE_AXIS = _UxGT("Движение по осям");
LSTR MSG_BED_LEVELING = _UxGT("Выравнивание стола");
LSTR MSG_LEVEL_BED = _UxGT("Выровнять стол");
LSTR MSG_BED_TRAMMING = _UxGT("Выровнять углы");
LSTR MSG_NEXT_CORNER = _UxGT("Следующий угол");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до срабатыв. зонда");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.стола");
#else
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до сраб. зонда");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.");
#endif
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хорошие точки: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Последняя Z: ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MESH_EDITOR = _UxGT("Смещение по Z");
LSTR MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена");
#else
LSTR MSG_MESH_EDITOR = _UxGT("Смещение Z");
LSTR MSG_EDITING_STOPPED = _UxGT("Правка окончена");
#endif
LSTR MSG_EDIT_MESH = _UxGT("Редактировать сетку");
LSTR MSG_PROBING_POINT = _UxGT("Точка сетки");
LSTR MSG_MESH_X = _UxGT("Индекс X");
LSTR MSG_MESH_Y = _UxGT("Индекс Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Значение Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Свои команды");
LSTR MSG_M48_TEST = _UxGT("M48 тест Z-зонда");
LSTR MSG_M48_DEVIATION = _UxGT("Отклонение");
LSTR MSG_M48_POINT = _UxGT("M48 точка");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за пределами");
LSTR MSG_IDEX_MENU = _UxGT("Меню IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Размещение сопел");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто парковка");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Размножение");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Зеркальная копия");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Полный контроль");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("Дублировать X-зазор");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2-е сопло Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2-е сопло @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Выполняем G29");
LSTR MSG_UBL_TOOLS = _UxGT("Инструменты UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Настройка UBL");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка разворота");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручной ввод сетки");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу,измерить");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол");
#else
LSTR MSG_UBL_BC_INSERT = _UxGT("Разм.шайбу, измерить");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Убрать, измер. стол");
#endif
LSTR MSG_UBL_MESH_WIZARD = _UxGT("Мастер сеток UBL");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Измерение");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Двигаемся дальше");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Активировать UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивировать UBL");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Редактор сеток");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Править свою сетку");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Температура стола");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Температура стола");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Температура сопла");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена");
#else
LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE "C";
LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка завершена");
#endif
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Построить сетку $");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку");
#else
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Строить холод.сетку");
#endif
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Правка высоты сетки");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Проверить сетку $");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку");
#else
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Провер. сетку $");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Провер. свою сетку");
#endif
LSTR MSG_G26_HEATING_BED = _UxGT("G26 нагрев стола");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрев сопла");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручная грунтовка");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Грунт фикс. длины");
LSTR MSG_G26_PRIME_DONE = _UxGT("Грунтовка сделана");
LSTR MSG_G26_CANCELED = _UxGT("G26 завершена");
LSTR MSG_G26_LEAVING = _UxGT("Выйти из G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Выравнивание сетки");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-х точечное выравнивание");
#else
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точечное выравн.");
#endif
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Калибровка растера");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Выровнять сетку");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Крайние точки");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Тип карты");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Вывести карту сетки");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вывести на хост");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вывести в CSV");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи");
LSTR MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
#else
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить снаружи");
LSTR MSG_UBL_INFO_UBL = _UxGT("Информация UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполн.");
#endif
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ручное заполнение");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Умное заполнение");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Заполнить сетку");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Аннулировать всё");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Аннулир. ближайшую");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно править всё");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Настр. ближ. точку");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Хранилище сеток");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Слот памяти");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Загрузить сетку");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Сохранить сетку");
LSTR MSG_MESH_LOADED = _UxGT("Сетка %i загружена");
LSTR MSG_MESH_SAVED = _UxGT("Сетка %i сохранена");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Нет хранилища");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Ошибка: Сохран. UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Ошибка: Восстан.UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Смещение Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Смещение Z останов.");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL пошагово");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Строить холодную");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Умное заполнение");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Проверить сетку");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно настр. всё");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Проверить сетку");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно настр. всё");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Сохранить сетку");
LSTR MSG_LED_CONTROL = _UxGT("Настройка подсветки");
LSTR MSG_LEDS = _UxGT("Подсветка");
LSTR MSG_LED_PRESETS = _UxGT("Предустановки света");
LSTR MSG_SET_LEDS_RED = _UxGT("Красный");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Оранжевый");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Жёлтый");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Зелёный");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Синий");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Индиго");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фиолетовый");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Белый");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию");
LSTR MSG_LED_CHANNEL_N = _UxGT("Канал =");
LSTR MSG_LEDS2 = _UxGT("Свет #2");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустановки");
#else
LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустан.");
#endif
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Яркость");
LSTR MSG_CUSTOM_LEDS = _UxGT("Свой цвет подсветки");
LSTR MSG_INTENSITY_R = _UxGT("Уровень красного");
LSTR MSG_INTENSITY_G = _UxGT("Уровень зелёного");
LSTR MSG_INTENSITY_B = _UxGT("Уровень синего");
LSTR MSG_INTENSITY_W = _UxGT("Уровень белого");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Яркость");
LSTR MSG_MOVING = _UxGT("Движемся...");
LSTR MSG_FREE_XY = _UxGT("Освободить XY");
LSTR MSG_MOVE_X = _UxGT("Движение по X");
LSTR MSG_MOVE_Y = _UxGT("Движение по Y");
LSTR MSG_MOVE_Z = _UxGT("Движение по Z");
LSTR MSG_MOVE_N = _UxGT("Движение по @");
LSTR MSG_MOVE_E = _UxGT("Экструдер");
LSTR MSG_MOVE_EN = _UxGT("Экструдер *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло не нагрето");
LSTR MSG_MOVE_N_MM = _UxGT("Движение %sмм");
LSTR MSG_MOVE_01MM = _UxGT("Движение 0.1мм");
LSTR MSG_MOVE_1MM = _UxGT("Движение 1мм");
LSTR MSG_MOVE_10MM = _UxGT("Движение 10мм");
LSTR MSG_MOVE_100MM = _UxGT("Движение 100mm");
LSTR MSG_SPEED = _UxGT("Скорость");
LSTR MSG_BED_Z = _UxGT("Z стола");
LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковано");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает");
LSTR MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C";
LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_COOLER = _UxGT("Охлаждение лазера");
LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охлажд.");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безопасн. потока");
#else
LSTR MSG_COOLER = _UxGT("Охлажд. лазера");
LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охл.");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безопас.потока");
#endif
LSTR MSG_LASER = _UxGT("Лазер");
LSTR MSG_FAN_SPEED = _UxGT("Кулер");
LSTR MSG_FAN_SPEED_N = _UxGT("Кулер ~");
LSTR MSG_STORED_FAN_N = _UxGT("Сохранённый кулер ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Дополн. кулер");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дополн. кулер ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Контроллер кулера");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холостые обороты");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Автовключение");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Рабочие обороты");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Период простоя");
LSTR MSG_FLOW = _UxGT("Поток");
LSTR MSG_FLOW_N = _UxGT("Поток ~");
LSTR MSG_CONTROL = _UxGT("Настройки");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мин");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
LSTR MSG_AUTOTEMP = _UxGT("Автотемпер.");
LSTR MSG_LCD_ON = _UxGT("Вкл");
LSTR MSG_LCD_OFF = _UxGT("Выкл");
LSTR MSG_PID_AUTOTUNE = _UxGT("Автоподбор PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автоподбор PID *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Подбор PID выполнен");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Сбой автоподбора! Плохой экструдер.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора! Температура повышена.");
LSTR MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени.");
LSTR MSG_SELECT = _UxGT("Выбор");
LSTR MSG_SELECT_E = _UxGT("Выбор *");
LSTR MSG_ACC = _UxGT("Ускорение");
LSTR MSG_JERK = _UxGT("Рывок");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-рывок");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-рывок");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-рывок");
LSTR MSG_VN_JERK = _UxGT("V@-рывок");
LSTR MSG_VE_JERK = _UxGT("Ve-рывок");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла");
#else
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла");
#endif
LSTR MSG_MAX_SPEED = _UxGT("Скорость, мм/с");
LSTR MSG_VMAX_A = _UxGT("Скор.макс ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Скор.макс ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Скор.макс ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Скор.макс @");
LSTR MSG_VMAX_E = _UxGT("Скор.макс E");
LSTR MSG_VMAX_EN = _UxGT("Скор.макс *");
LSTR MSG_VMIN = _UxGT("Скор.мин");
LSTR MSG_VTRAV_MIN = _UxGT("Перемещение мин");
LSTR MSG_ACCELERATION = _UxGT("Ускорение, мм/с2");
LSTR MSG_AMAX_A = _UxGT("Ускор.макс ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Ускор.макс ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Ускор.макс ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Ускор.макс @");
LSTR MSG_AMAX_E = _UxGT("Ускор.макс E");
LSTR MSG_AMAX_EN = _UxGT("Ускор.макс *");
LSTR MSG_A_RETRACT = _UxGT("Ускор.втягив.");
LSTR MSG_A_TRAVEL = _UxGT("Ускор.путеш.");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мин.");
LSTR MSG_STEPS_PER_MM = _UxGT("Шагов/мм");
LSTR MSG_A_STEPS = STR_A _UxGT(" шаг/мм");
LSTR MSG_B_STEPS = STR_B _UxGT(" шаг/мм");
LSTR MSG_C_STEPS = STR_C _UxGT(" шаг/мм");
LSTR MSG_N_STEPS = _UxGT("@ шаг/мм");
LSTR MSG_E_STEPS = _UxGT("E шаг/мм");
LSTR MSG_EN_STEPS = _UxGT("* шаг/мм");
LSTR MSG_TEMPERATURE = _UxGT("Температура");
LSTR MSG_MOTION = _UxGT("Движение");
LSTR MSG_FILAMENT = _UxGT("Филамент");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E огран.,мм") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E огран. *");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. филамента");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. филамента *");
#else
LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. филам.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. филам. *");
#endif
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Загрузка, мм");
LSTR MSG_FILAMENT_LOAD = _UxGT("Выгрузка, мм");
LSTR MSG_ADVANCE_K = _UxGT("Kоэф. продвиж.");
LSTR MSG_ADVANCE_K_E = _UxGT("Kоэф. продвиж. *");
LSTR MSG_CONTRAST = _UxGT("Контраст экрана");
LSTR MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
LSTR MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры");
LSTR MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM");
#else
LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базовые парам.");
LSTR MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
#endif
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
LSTR MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
LSTR MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");
LSTR MSG_RESET_PRINTER = _UxGT("Сброс принтера");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Обновить");
LSTR MSG_INFO_SCREEN = _UxGT("Главный экран");
LSTR MSG_PREPARE = _UxGT("Подготовить");
LSTR MSG_TUNE = _UxGT("Настроить");
LSTR MSG_POWER_MONITOR = _UxGT("Монитор питания");
LSTR MSG_CURRENT = _UxGT("Ток");
LSTR MSG_VOLTAGE = _UxGT("Напряжение");
LSTR MSG_POWER = _UxGT("Мощность");
LSTR MSG_START_PRINT = _UxGT("Начало печати");
LSTR MSG_BUTTON_NEXT = _UxGT("Дальше"); //short text for buttons
LSTR MSG_BUTTON_INIT = _UxGT("Иниц-я");
LSTR MSG_BUTTON_STOP = _UxGT("Стоп");
LSTR MSG_BUTTON_PRINT = _UxGT("Печать");
LSTR MSG_BUTTON_RESET = _UxGT("Сброс");
LSTR MSG_BUTTON_IGNORE = _UxGT("Игнорир.");
LSTR MSG_BUTTON_CANCEL = _UxGT("Отмена");
LSTR MSG_BUTTON_DONE = _UxGT("Готово");
LSTR MSG_BUTTON_BACK = _UxGT("Назад");
LSTR MSG_BUTTON_PROCEED = _UxGT("Продолжить");
LSTR MSG_BUTTON_SKIP = _UxGT("Пропустить");
LSTR MSG_PAUSE_PRINT = _UxGT("Пауза печати");
LSTR MSG_RESUME_PRINT = _UxGT("Продолжить печать");
LSTR MSG_HOST_START_PRINT = _UxGT("Старт с хоста");
LSTR MSG_STOP_PRINT = _UxGT("Остановить печать");
LSTR MSG_PRINTING_OBJECT = _UxGT("Печать объекта");
LSTR MSG_CANCEL_OBJECT = _UxGT("Завершить объект");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершить объект =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Восстановение сбоя");
LSTR MSG_MEDIA_MENU = _UxGT("Печать с SD карты");
LSTR MSG_NO_MEDIA = _UxGT("Нет SD карты");
LSTR MSG_DWELL = _UxGT("Сон...");
LSTR MSG_USERWAIT = _UxGT("Продолжить...");
LSTR MSG_PRINT_PAUSED = _UxGT("Печать на паузе");
LSTR MSG_PRINTING = _UxGT("Печать...");
LSTR MSG_PRINT_ABORTED = _UxGT("Печать отменена");
LSTR MSG_PRINT_DONE = _UxGT("Печать завершена");
LSTR MSG_NO_MOVE = _UxGT("Нет движения.");
LSTR MSG_KILLED = _UxGT("УБИТО. ");
LSTR MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_CONTROL_RETRACT = _UxGT("Втягивание, мм");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втягив., мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены, мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены, V");
LSTR MSG_AUTORETRACT = _UxGT("Автовтягивание");
#else
LSTR MSG_CONTROL_RETRACT = _UxGT("Втягив., мм");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втяг.,мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возвр.смены,мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возвр.смены V");
LSTR MSG_AUTORETRACT = _UxGT("Автовтягив.");
#endif
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Подскок, мм");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Втягивание V");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат, мм");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно");
#else
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит.");
#endif
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистить длину");
LSTR MSG_TOOL_CHANGE = _UxGT("Смена сопел");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив.");
#else
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Началь.скор.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скор.втягив.");
#endif
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Парковать голову");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Вернуть скорость");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Обороти кулера");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Время кулера");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Авто Вкл.");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Выкл.");
LSTR MSG_TOOL_MIGRATION = _UxGT("Замена инструмента");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто замена");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Последний экструдер");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Замена на *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Смена филамента");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Смена филамента *");
LSTR MSG_FILAMENTLOAD = _UxGT("Загрузить филамент");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_FILAMENTLOAD_E = _UxGT("Загрузить филамент *");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузить филамент *");
#else
LSTR MSG_FILAMENTLOAD_E = _UxGT("Подать филамент *");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Убрать филамент *");
#endif
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Выгрузить всё");
LSTR MSG_ATTACH_MEDIA = _UxGT("Установить SD карту");
LSTR MSG_CHANGE_MEDIA = _UxGT("Сменить SD карту");
LSTR MSG_RELEASE_MEDIA = _UxGT("Освободить SD карту");
LSTR MSG_ZPROBE_OUT = _UxGT("Z-зонд вне стола");
LSTR MSG_SKEW_FACTOR = _UxGT("Фактор наклона");
LSTR MSG_BLTOUCH = _UxGT("Z-зонд BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch");
LSTR MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch");
LSTR MSG_BLTOUCH_STOW = _UxGT("Поднять BLTouch");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Опустить BLTouch");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Режим сохранения");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Установить на 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Установить на OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Слив отчёта");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("ОПАСНОСТЬ: Неправильные параметры приводят к повреждениям! Продолжить?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Инициализация");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-смещения");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Сохранить");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установить TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Установить зонд");
LSTR MSG_MANUAL_STOW = _UxGT("Загрузить зонд");
LSTR MSG_HOME_FIRST = _UxGT("Сначала паркуй %s%s%s");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Смещения Z-зонда");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Смещение X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двигать сопло к столу");
#else
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двиг. сопло к столу");
#endif
LSTR MSG_BABYSTEP_X = _UxGT("Микрошаг X");
LSTR MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
LSTR MSG_BABYSTEP_N = _UxGT("Микрошаг @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка:Избыточная Т");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕПЛА");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕПЛА СТОЛА");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕПЛА КАМЕРЫ");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ОХЛАЖДЕНИЯ");
LSTR MSG_COOLING_FAILED = _UxGT("ОХЛАДИТЬ НЕ УДАЛОСЬ");
LSTR MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
LSTR MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
LSTR MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
LSTR MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("ч"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("м"); // One character only
LSTR MSG_HEATING = _UxGT("Нагрев...");
LSTR MSG_COOLING = _UxGT("Охлаждение...");
LSTR MSG_BED_HEATING = _UxGT("Нагрев стола...");
LSTR MSG_BED_COOLING = _UxGT("Охлаждение стола...");
LSTR MSG_PROBE_HEATING = _UxGT("Нагрев зонда...");
LSTR MSG_PROBE_COOLING = _UxGT("Охлаждение зонда...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Охладжение камеры...");
LSTR MSG_LASER_COOLING = _UxGT("Охлаждение лазера...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровать Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровать центр");
LSTR MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
LSTR MSG_DELTA_HEIGHT = _UxGT("Высота");
LSTR MSG_DELTA_RADIUS = _UxGT("Радиус");
LSTR MSG_INFO_MENU = _UxGT("О принтере");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Данные принтера");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_3POINT_LEVELING = _UxGT("3-точечное выравнивание");
LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравнивание");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Билинейное выравнивание");
#else
LSTR MSG_3POINT_LEVELING = _UxGT("3-точ. выравнив.");
LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравн.");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Билин. выравнив.");
#endif
LSTR MSG_UBL_LEVELING = _UxGT("Управление UBL");
LSTR MSG_MESH_LEVELING = _UxGT("Выравнивание сетки");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MESH_DONE = _UxGT("Зондирование выполнено");
#else
LSTR MSG_MESH_DONE = _UxGT("Зондиров. выполнено");
#endif
LSTR MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Данные платы");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Термисторы");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Экструдеры");
LSTR MSG_INFO_BAUDRATE = _UxGT("Скорость,БОД");
LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль утечки Т: Выкл");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль утечки Т: Вкл");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время простоя хотенда");
#else
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.утечки Т:Выкл");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контр.утечки Т:Вкл");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время прост.хот-а");
#endif
LSTR MSG_CASE_LIGHT = _UxGT("Подсветка корпуса");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Общее время печати");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Длина филамента");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Напечатано");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Общее время");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Выдавлено");
#endif
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Мин. ") LCD_STR_THERMOMETER;
LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
LSTR MSG_INFO_PSU = _UxGT("БП");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила привода");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Привод, %");
LSTR MSG_ERROR_TMC = _UxGT("СБОЙ СВЯЗИ С TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC в EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМЕНА ФИЛАМЕНТА");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ПЕЧАТЬ НА ПАУЗЕ");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАГРУЗКА ФИЛАМЕНТА");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВЫГРУЗКА ФИЛАМЕНТА");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ОПЦИИ ПРОДОЛЖЕНИЯ:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Выдавить ещё");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Возобновить печать");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопла: ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч. филамента");
#else
LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч.филам.");
#endif
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("До конца, мм");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Ошибка парковки");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Ошибка зондирования");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ВЫБИРЕТЕ ФИЛАМЕНТ");
LSTR MSG_MMU2_MENU = _UxGT("Настройки MMU");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обновить прошивку MMU!");
#else
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обнови прошивку MMU");
#endif
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU требует внимания");
LSTR MSG_MMU2_RESUME = _UxGT("Продолжить печать");
LSTR MSG_MMU2_RESUMING = _UxGT("Продолжение...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Загрузить филамент");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Загрузить всё");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Загрузить в сопло");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Извлечь филамент");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Извлечь филамент ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Выгрузить филамент");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Загрузка %i...");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлечение филамента...");
#else
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлеч.филамента...");
#endif
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Выгрузка....");
LSTR MSG_MMU2_ALL = _UxGT("Всё");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Филамент ~");
LSTR MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Перезапуск MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Удалите и нажмите");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MIX = _UxGT("Смешивание");
#else
LSTR MSG_MIX = _UxGT("Смешив.");
#endif
LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
LSTR MSG_MIXER = _UxGT("Смеситель");
LSTR MSG_GRADIENT = _UxGT("Градиент");
LSTR MSG_FULL_GRADIENT = _UxGT("Полный градиент");
LSTR MSG_CYCLE_MIX = _UxGT("Цикличное смешивание");
LSTR MSG_GRADIENT_MIX = _UxGT("Градиент смешивания");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Сменить градиент");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_TOGGLE_MIX = _UxGT("Переключить смешивание");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Активация В-инструм.");
LSTR MSG_START_VTOOL = _UxGT("Начало В-инструмента");
LSTR MSG_END_VTOOL = _UxGT("Конец В-инструмента");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инструмента");
LSTR MSG_RESET_VTOOLS = _UxGT("Сброс В-инструментов");
LSTR MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструменты");
LSTR MSG_VTOOLS_RESET = _UxGT("В-инструменты сброшены");
#else
LSTR MSG_TOGGLE_MIX = _UxGT("Перекл. смешивание");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Актив.В-инструм.");
LSTR MSG_START_VTOOL = _UxGT("В-инструм.нач.");
LSTR MSG_END_VTOOL = _UxGT("В-инструм.кон.");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инстр.");
LSTR MSG_RESET_VTOOLS = _UxGT("Сброс В-инструм.");
LSTR MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструм.");
LSTR MSG_VTOOLS_RESET = _UxGT("В-инструм. сброшены");
#endif
LSTR MSG_START_Z = _UxGT("Начало Z");
LSTR MSG_END_Z = _UxGT(" Конец Z");
LSTR MSG_GAMES = _UxGT("Игры");
LSTR MSG_BRICKOUT = _UxGT("Кирпичи");
LSTR MSG_INVADERS = _UxGT("Вторжение");
LSTR MSG_SNAKE = _UxGT("Змейка");
LSTR MSG_MAZE = _UxGT("Лабиринт");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_BAD_PAGE = _UxGT("Плохой индекс страницы");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Плохая скорость страницы");
#else
LSTR MSG_BAD_PAGE = _UxGT("Плохая страница");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Плохая скор.стран.");
#endif
LSTR MSG_EDIT_PASSWORD = _UxGT("Редактировать пароль");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Нужен логин");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Настройки пароля");
LSTR MSG_ENTER_DIGIT = _UxGT("Введите цифру");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Смените пароль");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Удалить пароль");
LSTR MSG_PASSWORD_SET = _UxGT("Пароль это ");
LSTR MSG_START_OVER = _UxGT("Старт через");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни для сохранения!");
#else
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни, сохрани!");
#endif
LSTR MSG_PASSWORD_REMOVED = _UxGT("Пароль удалён");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка..."));
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Нажмите кнопку", "для продолжения", "печати"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Ожидайте начала", "смены филамента"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставьте филамент", "и нажмите кнопку", "для продолжения"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_3_LINE("Нажмите кнопку", "для нагрева", "сопла..."));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Нагрев сопла", "Ждите..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Ожидайте", "загрузки", "филамента"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Нажмите кнопку", "для завершения", "очистки филамента"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продолжить печать"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Ожидайте..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставь и нажми"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагреть сопло"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрев..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Выгрузка..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Загрузка..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Выдавливание..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершить очистку"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Возобновление..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Драйвера TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Ток двигателей");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Гибридный режим");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Режим без эндстопов");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Режим драйвера");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл");
LSTR MSG_SERVICE_RESET = _UxGT("Сброс");
LSTR MSG_SERVICE_IN = _UxGT(" в:");
LSTR MSG_BACKLASH = _UxGT("Люфт");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Исправление");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Сглаживание");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло");
#endif
LSTR MSG_REHEAT = _UxGT("Возобновить нагрев");
LSTR MSG_REHEATING = _UxGT("Нагрев...");
LSTR MSG_PROBE_WIZARD = _UxGT("Мастер Z-зонда");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контр. точки Z");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондиров.");
#else
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондир.контр.точки Z");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Движ. к точке зондир.");
#endif
LSTR MSG_SOUND = _UxGT("Звук");
LSTR MSG_TOP_LEFT = _UxGT("Верхний левый");
LSTR MSG_BOTTOM_LEFT = _UxGT("Нижний левый");
LSTR MSG_TOP_RIGHT = _UxGT("Верхний правый");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Нижний правый");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Калибровка успешна");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Ошибка калибровки");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
LSTR MSG_SD_CARD = _UxGT("SD Карта");
LSTR MSG_USB_DISK = _UxGT("USB Диск");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,820 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Slovak
* UTF-8 for Graphical Display
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Translated by Michal Holeš, Farma MaM
* https://www.facebook.com/farmamam
*
* Substitutions are applied for the following characters when used in menu items titles:
*
* $ displays an inserted string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
* @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_SK
namespace Language_sk {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Slovenčina");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pripravená.");
LSTR MSG_YES = _UxGT("ÁNO");
LSTR MSG_NO = _UxGT("NIE");
LSTR MSG_HIGH = _UxGT("VYSOKÁ");
LSTR MSG_LOW = _UxGT("NÍZKA");
LSTR MSG_BACK = _UxGT("Naspäť");
LSTR MSG_ERROR = _UxGT("Chyba");
LSTR MSG_MEDIA_ABORTING = _UxGT("Ruším...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Karta vložená");
LSTR MSG_MEDIA_REMOVED = _UxGT("Karta vybraná");
LSTR MSG_MEDIA_WAITING = _UxGT("Čakám na kartu");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Inicial. SD zlyhala");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Chyba čítania karty");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB zaria. odstrán.");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Chyba spúšťania USB");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Preteč. podprogramu");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znakov
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft. endstopy");
LSTR MSG_MAIN = _UxGT("Hlavná ponuka");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav.");
LSTR MSG_TOOLBAR_SETUP = _UxGT("Panel nástrojov");
LSTR MSG_OPTION_DISABLED = _UxGT("Možnosť vypnutá");
LSTR MSG_CONFIGURATION = _UxGT("Konfigurácia");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto-štart");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory");
LSTR MSG_DEBUG_MENU = _UxGT("Ponuka ladenia");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu");
LSTR MSG_HOMING = _UxGT("Parkovanie");
LSTR MSG_AUTO_HOME = _UxGT("Domovská pozícia");
LSTR MSG_AUTO_HOME_A = _UxGT("Domov os @");
LSTR MSG_AUTO_HOME_X = _UxGT("Domov os X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Domov os Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Domov os Z");
LSTR MSG_FILAMENT_SET = _UxGT("Nastav. filamentu");
LSTR MSG_FILAMENT_MAN = _UxGT("Správa filamentu");
LSTR MSG_MANUAL_LEVELING = _UxGT("Ručné rovnanie");
LSTR MSG_LEVBED_FL = _UxGT("Ľavý predný");
LSTR MSG_LEVBED_FR = _UxGT("Pravý predný");
LSTR MSG_LEVBED_C = _UxGT("Stred");
LSTR MSG_LEVBED_BL = _UxGT("Ľavý zadný");
LSTR MSG_LEVBED_BR = _UxGT("Pravý zadný");
LSTR MSG_MANUAL_MESH = _UxGT("Ručná mriežka");
LSTR MSG_AUTO_MESH = _UxGT("Automat. mriežka");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z");
LSTR MSG_ITERATION = _UxGT("Iterácia G34: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Klesajúca presnosť!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Dosiahnutá presnosť");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Parkovanie XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím začnete");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Ďalší bod");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Vyrovnanie hotové!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Výška rovnania");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Nastav. dom. ofsety");
LSTR MSG_HOME_OFFSET_X = _UxGT("X Ofset");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Ofset");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Ofset");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastavené");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Spriev. vyrovn.");
LSTR MSG_SELECT_ORIGIN = _UxGT("Vyberte začiatok");
LSTR MSG_LAST_VALUE_SP = _UxGT("Posl. hodnota ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Zahriať ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Zahriať ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" všetko");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" podlož");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" nast.");
#ifdef PREHEAT_2_LABEL
LSTR MSG_PREHEAT_2 = _UxGT("Zahriať ") PREHEAT_2_LABEL;
LSTR MSG_PREHEAT_2_SETTINGS = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" nast.");
#endif
#ifdef PREHEAT_3_LABEL
LSTR MSG_PREHEAT_3 = _UxGT("Zahriať ") PREHEAT_3_LABEL;
LSTR MSG_PREHEAT_3_SETTINGS = _UxGT("Zahriať ") PREHEAT_3_LABEL _UxGT(" nast.");
#endif
LSTR MSG_PREHEAT_M = _UxGT("Zahriať $");
LSTR MSG_PREHEAT_M_H = _UxGT("Zahriať $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Zahriať $ hotend");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Zahriať $ hotend ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Zahriať $ všetko");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Zahriať $ podlož");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Zahriať $ nast.");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Vlastná teplota");
LSTR MSG_COOLDOWN = _UxGT("Schladiť");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
LSTR MSG_LASER_MENU = _UxGT("Nastavenie lasera");
LSTR MSG_SPINDLE_MENU = _UxGT("Nastavenie vretena");
LSTR MSG_LASER_POWER = _UxGT("Výkon lasera");
LSTR MSG_SPINDLE_POWER = _UxGT("Výkon vretena");
LSTR MSG_LASER_TOGGLE = _UxGT("Prepnúť laser");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Prepnúť ofuk");
LSTR MSG_LASER_PULSE_MS = _UxGT("Test. impulz ms");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Vystreliť impulz");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Chyba chladenia");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Prepnúť vreteno");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Dopredný chod");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spätný chod");
LSTR MSG_SWITCH_PS_ON = _UxGT("Zapnúť napájanie");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Vypnúť napájanie");
LSTR MSG_EXTRUDE = _UxGT("Vytlačiť (extr.)");
LSTR MSG_RETRACT = _UxGT("Vytiahnuť (retr.)");
LSTR MSG_MOVE_AXIS = _UxGT("Posunúť osy");
LSTR MSG_BED_LEVELING = _UxGT("Vyrovnanie podložky");
LSTR MSG_LEVEL_BED = _UxGT("Vyrovnať podložku");
LSTR MSG_BED_TRAMMING = _UxGT("Vyrovnať rohy");
LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Ručné vyrovnanie");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Zdvihnite podl., kým sa nezopne sonda");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Rohy sú vrámci odchyl. Vyrovnajte podl.");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Dobré body: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Posl. Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Ďalší roh");
LSTR MSG_MESH_EDITOR = _UxGT("Editor sieťe bodov");
LSTR MSG_MESH_VIEWER = _UxGT("Zobraz. sieťe bodov");
LSTR MSG_EDIT_MESH = _UxGT("Upraviť sieť bodov");
LSTR MSG_MESH_VIEW = _UxGT("Zobraz. sieť bodov");
LSTR MSG_EDITING_STOPPED = _UxGT("Koniec úprav siete");
LSTR MSG_NO_VALID_MESH = _UxGT("Neplatná sieť bodov");
LSTR MSG_ACTIVATE_MESH = _UxGT("Zapnúť vyrovnanie");
LSTR MSG_PROBING_POINT = _UxGT("Skúšam bod");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_INSET = _UxGT("Vložiť sieť");
LSTR MSG_MESH_MIN_X = _UxGT("Min. X sieťe");
LSTR MSG_MESH_MAX_X = _UxGT("Max. X sieťe");
LSTR MSG_MESH_MIN_Y = _UxGT("Min. Y sieťe");
LSTR MSG_MESH_MAX_Y = _UxGT("Max. Y sieťe");
LSTR MSG_MESH_AMAX = _UxGT("Maximál. oblasť");
LSTR MSG_MESH_CENTER = _UxGT("Stredová oblasť");
LSTR MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
LSTR MSG_MESH_CANCEL = _UxGT("Mriežka zrušená");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Vlastné príkazy");
LSTR MSG_M48_TEST = _UxGT("M48 Test sondy");
LSTR MSG_M48_POINT = _UxGT("M48 Bod");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda mimo hraníc");
LSTR MSG_M48_DEVIATION = _UxGT("Odchýlka");
LSTR MSG_IDEX_MENU = _UxGT("IDEX režim");
LSTR MSG_OFFSETS_MENU = _UxGT("Ofset nástrojov");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-parkovanie");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikácia");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrkadlená kópia");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplik. medz.-X");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. tryska @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Vykonávam G29");
LSTR MSG_UBL_TOOLS = _UxGT("Nástroje UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL rovnanie");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Vyrovnávam bod");
LSTR MSG_UBL_TILT_MESH = _UxGT("Nakloniť sieť");
LSTR MSG_UBL_TILTING_GRID = _UxGT("Veľkosť nakl. siete");
LSTR MSG_UBL_MESH_TILTED = _UxGT("Sieť naklonená");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuálna sieť bodov");
LSTR MSG_UBL_MESH_WIZARD = _UxGT("Spriev. UBL rovnan.");
LSTR MSG_UBL_BC_INSERT = _UxGT("Položte a zmerajte");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Zmerajte");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Odstráňte a zmerajte");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Presun na ďalší");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovať UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovať UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Úprava siete bodov");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upraviť vlastnú sieť");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladiť sieť bodov");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec úprav siete");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastná sieť");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvoriť sieť");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Sieť bodov ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená sieť bodov");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upraviť výšku siete");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Skontrolovať sieť");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola siete ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast.siete");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 ohrev podlž.");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 ohrev trysky");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ručné čistenie...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Čistenie pevn. dĺž.");
LSTR MSG_G26_PRIME_DONE = _UxGT("Čistenie dokončené");
LSTR MSG_G26_CANCELED = _UxGT("G26 zrušený");
LSTR MSG_G26_LEAVING = _UxGT("Opúšťam G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovať v sieti");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Sieťové rovnanie");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnanie");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Vyrovnať podložku");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Postranné body");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Typ siete bodov");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exportovať sieť");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export do hosta");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export do CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externá záloha");
LSTR MSG_UBL_INFO_UBL = _UxGT("Info. o výst. UBL");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mriežky");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ručné vyplnenie");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Chytré vyplnenie");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Vyplniť mriežku");
LSTR MSG_UBL_MESH_FILLED = _UxGT("Doplnené chýb. body");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušiť všetko");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušiť najbližší");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Upraviť všetky");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upraviť najbližší");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Úložisko sietí");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Pamäťový slot");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Načítať sieť bodov");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Uložiť sieť bodov");
LSTR MSG_UBL_INVALID_SLOT = _UxGT("Najskôr zvol. slot siete");
LSTR MSG_MESH_LOADED = _UxGT("Sieť %i načítaná");
LSTR MSG_MESH_SAVED = _UxGT("Sieť %i uložená");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Nedostatok miesta");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Chyba: Ukladanie UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Chyba: Obnovenie UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Koniec kompenz. Z");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Postupné UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Studená sieť bodov");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Chytré vyplnenie");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Skontrolovať sieť");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Upraviť všetky");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Skontrolovať sieť");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Upraviť všetky");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Uložiť sieť bodov");
LSTR MSG_LED_CONTROL = _UxGT("Nastavenie LED");
LSTR MSG_LEDS = _UxGT("Svetlo");
LSTR MSG_LED_PRESETS = _UxGT("Predvolby svetla");
LSTR MSG_SET_LEDS_RED = _UxGT("Červená");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Žltá");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Zelená");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Modrá");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Biela");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Obnoviť nastavenie");
LSTR MSG_LED_CHANNEL_N = _UxGT("Kanál =");
LSTR MSG_LEDS2 = _UxGT("Svetlo #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Predvolby svetla #2");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jas");
LSTR MSG_CUSTOM_LEDS = _UxGT("Vlastná farba");
LSTR MSG_INTENSITY_R = _UxGT("Inten. červenej");
LSTR MSG_INTENSITY_G = _UxGT("Inten. zelenej");
LSTR MSG_INTENSITY_B = _UxGT("Inten. modrej");
LSTR MSG_INTENSITY_W = _UxGT("Inten. bielej");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Jas");
LSTR MSG_MOVING = _UxGT("Posúvam...");
LSTR MSG_FREE_XY = _UxGT("Uvolniť XY");
LSTR MSG_MOVE_X = _UxGT("Posunúť X");
LSTR MSG_MOVE_Y = _UxGT("Posunúť Y");
LSTR MSG_MOVE_Z = _UxGT("Posunúť Z");
LSTR MSG_MOVE_N = _UxGT("Posunúť @");
LSTR MSG_MOVE_E = _UxGT("Extrudér");
LSTR MSG_MOVE_EN = _UxGT("Extrudér *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
LSTR MSG_MOVE_N_MM = _UxGT("Posunúť o $mm");
LSTR MSG_MOVE_01MM = _UxGT("Posunúť o 0,1mm");
LSTR MSG_MOVE_1MM = _UxGT("Posunúť o 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Posunúť o 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Posunúť o 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Posunúť o 0,001in");
LSTR MSG_MOVE_001IN = _UxGT("Posunúť o 0,01in");
LSTR MSG_MOVE_01IN = _UxGT("Posunúť o 0,1in");
LSTR MSG_MOVE_1IN = _UxGT("Posunúť o 1,0in");
LSTR MSG_SPEED = _UxGT("Rýchlosť");
LSTR MSG_BED_Z = _UxGT("Výška podl.");
LSTR MSG_NOZZLE = _UxGT("Tryska");
LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Tryska zaparkovaná");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Záložná tryska");
LSTR MSG_BED = _UxGT("Podložka");
LSTR MSG_CHAMBER = _UxGT("Komora");
LSTR MSG_COOLER = _UxGT("Chladen. lasera");
LSTR MSG_COOLER_TOGGLE = _UxGT("Prepnúť chladenie");
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Bezpeč. prietok");
LSTR MSG_LASER = _UxGT("Laser");
LSTR MSG_FAN_SPEED = _UxGT("Rýchlosť vent.");
LSTR MSG_FAN_SPEED_N = _UxGT("Rýchlosť vent. ~");
LSTR MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Rýchlosť ex. vent.");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Rýchlosť ex. vent. ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Vent. riad. jedn.");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Voľno. rýchl.");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto-režim");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív. rýchl.");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Doba nečinnosti");
LSTR MSG_FLOW = _UxGT("Prietok");
LSTR MSG_FLOW_N = _UxGT("Prietok ~");
LSTR MSG_CONTROL = _UxGT("Ovládanie");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
LSTR MSG_AUTOTEMP = _UxGT("Auto-teplota");
LSTR MSG_LCD_ON = _UxGT("Zap");
LSTR MSG_LCD_OFF = _UxGT("Vyp");
LSTR MSG_PID_AUTOTUNE = _UxGT("Kalibrácia PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("Kalibrácia PID *");
LSTR MSG_PID_CYCLE = _UxGT("Cykly PID");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Kal. PID dokončená");
LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Kal. PID zlyhala!");
LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Zlý extrudér");
LSTR MSG_TEMP_TOO_HIGH = _UxGT("Príliš vysoká tepl.");
LSTR MSG_TIMEOUT = _UxGT("Čas vypršal.");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-kal. zlyhala! Zlý extrúder.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-kal. zlyhala! Príliš vysoká tepl.");
LSTR MSG_PID_TIMEOUT = _UxGT("Auto-kal. zlyhala! Čas vypršal.");
LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Test. tepl. straty");
LSTR MSG_MPC_AUTOTUNE = _UxGT("Auto-kal. MPC");
LSTR MSG_MPC_EDIT = _UxGT("Upraviť * MPC");
LSTR MSG_MPC_POWER_E = _UxGT("Výkon *");
LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Blokovať C *");
LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Rozliš. senz. *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("H okolia *");
LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("H vent. okolia *");
LSTR MSG_SELECT = _UxGT("Vybrať");
LSTR MSG_SELECT_E = _UxGT("Vybrať *");
LSTR MSG_ACC = _UxGT("Zrýchlenie");
LSTR MSG_JERK = _UxGT("Skok");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-skok");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-skok");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-skok");
LSTR MSG_VN_JERK = _UxGT("V@-skok");
LSTR MSG_VE_JERK = _UxGT("Ve-skok");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
LSTR MSG_MAX_SPEED = _UxGT("Max rýchl. (mm/s)");
LSTR MSG_VMAX_A = _UxGT("Max rýchl. ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Max rýchl. ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Max rýchl. ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Max rýchl. @");
LSTR MSG_VMAX_E = _UxGT("Max rýchl. E");
LSTR MSG_VMAX_EN = _UxGT("Max rýchl. *");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("VPrej Min");
LSTR MSG_ACCELERATION = _UxGT("Akcelerácia");
LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Amax @");
LSTR MSG_AMAX_E = _UxGT("Amax E");
LSTR MSG_AMAX_EN = _UxGT("Amax *");
LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
LSTR MSG_A_TRAVEL = _UxGT("A-prejazd");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max. frekvencia");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min. posun");
LSTR MSG_STEPS_PER_MM = _UxGT("Kroky/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" krokov/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" krokov/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" krokov/mm");
LSTR MSG_N_STEPS = _UxGT("@ krokov/mm");
LSTR MSG_E_STEPS = _UxGT("E krokov/mm");
LSTR MSG_EN_STEPS = _UxGT("* krokov/mm");
LSTR MSG_TEMPERATURE = _UxGT("Teplota");
LSTR MSG_MOTION = _UxGT("Pohyb");
LSTR MSG_FILAMENT = _UxGT("Filament");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E v mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit v mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Priem. fil.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Priem. fil. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Vysunúť mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Zaviesť mm");
LSTR MSG_ADVANCE_K = _UxGT("K pre posun");
LSTR MSG_ADVANCE_K_E = _UxGT("K pre posun *");
LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
LSTR MSG_BRIGHTNESS = _UxGT("Jas LCD");
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("Čas. limit LCD (s)");
LSTR MSG_SCREEN_TIMEOUT = _UxGT("Čas. limit LCD (m)");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("Podsviet. vyp.");
LSTR MSG_STORE_EEPROM = _UxGT("Uložiť nastavenie");
LSTR MSG_LOAD_EEPROM = _UxGT("Načítať nastavenie");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie");
LSTR MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Chyba: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Chyba: EEPROM Index");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Chyba: Verzia EEPROM");
LSTR MSG_SETTINGS_STORED = _UxGT("Nastavenie uložené");
LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualizovať z SD");
LSTR MSG_RESET_PRINTER = _UxGT("Reštart. tlačiar.");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnoviť");
LSTR MSG_INFO_SCREEN = _UxGT("Info. obrazovka");
LSTR MSG_INFO_MACHINENAME = _UxGT("Názov stroja");
LSTR MSG_INFO_SIZE = _UxGT("Rozmer");
LSTR MSG_INFO_FWVERSION = _UxGT("Verzia firmvéru");
LSTR MSG_INFO_BUILD = _UxGT("Čas zostavenia");
LSTR MSG_PREPARE = _UxGT("Príprava tlače");
LSTR MSG_TUNE = _UxGT("Doladenie tlače");
LSTR MSG_POWER_MONITOR = _UxGT("Monitor napájania");
LSTR MSG_CURRENT = _UxGT("Prúd");
LSTR MSG_VOLTAGE = _UxGT("Napätie");
LSTR MSG_POWER = _UxGT("Výkon");
LSTR MSG_START_PRINT = _UxGT("Spustiť tlač");
LSTR MSG_BUTTON_NEXT = _UxGT("Ďalší");
LSTR MSG_BUTTON_INIT = _UxGT("Inicial.");
LSTR MSG_BUTTON_STOP = _UxGT("Zastaviť");
LSTR MSG_BUTTON_PRINT = _UxGT("Tlačiť");
LSTR MSG_BUTTON_RESET = _UxGT("Vynulovať");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorovať");
LSTR MSG_BUTTON_CANCEL = _UxGT("Zrušiť");
LSTR MSG_BUTTON_CONFIRM = _UxGT("Potvrdiť");
LSTR MSG_BUTTON_CONTINUE = _UxGT("Pokračovať");
LSTR MSG_BUTTON_DONE = _UxGT("Hotovo");
LSTR MSG_BUTTON_BACK = _UxGT("Naspäť");
LSTR MSG_BUTTON_PROCEED = _UxGT("Pokračovať");
LSTR MSG_BUTTON_SKIP = _UxGT("Preskočiť");
LSTR MSG_BUTTON_INFO = _UxGT("Informácie");
LSTR MSG_BUTTON_LEVEL = _UxGT("Vyrovnať");
LSTR MSG_BUTTON_PAUSE = _UxGT("Pauza");
LSTR MSG_BUTTON_RESUME = _UxGT("Obnoviť");
LSTR MSG_BUTTON_ADVANCED = _UxGT("Pokročilé");
LSTR MSG_BUTTON_SAVE = _UxGT("Uložiť");
LSTR MSG_BUTTON_PURGE = _UxGT("Vytlačiť");
LSTR MSG_PAUSING = _UxGT("Pozastavujem...");
LSTR MSG_PAUSE_PRINT = _UxGT("Pozastaviť tlač");
LSTR MSG_ADVANCED_PAUSE = _UxGT("Pokročil. pauza");
LSTR MSG_RESUME_PRINT = _UxGT("Obnoviť tlač");
LSTR MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta");
LSTR MSG_STOP_PRINT = _UxGT("Zastaviť tlač");
LSTR MSG_END_LOOPS = _UxGT("Koniec opak. sluč.");
LSTR MSG_PRINTING_OBJECT = _UxGT("Tlačím objekt");
LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušiť objekt");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova po výp. nap.");
LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Pokračovať v úlohe");
LSTR MSG_MEDIA_MENU = _UxGT("Tlačiť z SD");
LSTR MSG_NO_MEDIA = _UxGT("Žiadna SD karta");
LSTR MSG_DWELL = _UxGT("Spím...");
LSTR MSG_USERWAIT = _UxGT("Pokrač. kliknutím...");
LSTR MSG_PRINT_PAUSED = _UxGT("Tlač pozastavená");
LSTR MSG_PRINTING = _UxGT("Tlačím...");
LSTR MSG_STOPPING = _UxGT("Zastavujem...");
LSTR MSG_REMAINING_TIME = _UxGT("Zostávajúci");
LSTR MSG_PRINT_ABORTED = _UxGT("Tlač zrušená");
LSTR MSG_PRINT_DONE = _UxGT("Tlač dokončená");
LSTR MSG_PRINTER_KILLED = _UxGT("Tlačiareň zastavená!");
LSTR MSG_TURN_OFF = _UxGT("Vypnite tlačiareň");
LSTR MSG_NO_MOVE = _UxGT("Žiadny pohyb.");
LSTR MSG_KILLED = _UxGT("PRERUŠENÉ. ");
LSTR MSG_STOPPED = _UxGT("ZASTAVENÉ. ");
LSTR MSG_FWRETRACT = _UxGT("Firmv. retrakcia");
LSTR MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Výmena Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraktovať V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zdvih Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Dĺžka výmeny");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Vymeniť naviac");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Dĺžka vytlačenia");
LSTR MSG_TOOL_CHANGE = _UxGT("Výmena nástroja");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvihnúť Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Primárna rýchl.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rýchl. retrakcie");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkovať hlavu");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rýchl. obnovenia");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Rýchlosť vent.");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Doba fúkania");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto-Zap");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto-Vyp");
LSTR MSG_TOOL_MIGRATION = _UxGT("Výmena nástroja");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-výmena");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Posl. extruder");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Vymeniť za *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Vymeniť filament");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Vymeniť filament *");
LSTR MSG_FILAMENTLOAD = _UxGT("Zaviesť filament");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Zaviesť filament *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Vysunúť filament");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Vysunúť filament *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunúť všetko");
LSTR MSG_ATTACH_MEDIA = _UxGT("Načítať SD kartu");
LSTR MSG_CHANGE_MEDIA = _UxGT("Vymeniť SD kartu");
LSTR MSG_RELEASE_MEDIA = _UxGT("Odpojiť SD kartu");
LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl.");
LSTR MSG_SKEW_FACTOR = _UxGT("Faktor skosenia");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("Zasunúť");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Vysunúť");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Režim SW");
LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("Vysoká rýchl.");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Režim 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Režim OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Ulož. režim");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Prepnúť do 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Prepnúť do OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Zobraziť režim");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Inicializ. TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z ofsetu");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Uložiť");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Zasunúť TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Zasunúť sondu Z");
LSTR MSG_MANUAL_STOW = _UxGT("Vysunúť sondu Z");
LSTR MSG_HOME_FIRST = _UxGT("Najskôr os %s%s%s domov");
LSTR MSG_ZPROBE_SETTINGS = _UxGT("Nastav. sondy");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Ofsety sondy Z");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("X ofset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y ofset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
LSTR MSG_ZPROBE_MARGIN = _UxGT("Hranica sondy");
LSTR MSG_Z_FEED_RATE = _UxGT("Rýchl. posunu Z");
LSTR MSG_ENABLE_HS_MODE = _UxGT("Povoliť rež. HS");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Pos. trysku k podl.");
LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Celkom");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Zastavenie Endstop");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Chyba: REDUND. TEP.");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÝ SKOK");
LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEPLOTNÁ PORUCHA");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPLOTNÝ SKOK PODL.");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPLOTNÝ SKOK KOMO.");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("TEPLOTNÝ SKOK CHLAD.");
LSTR MSG_COOLING_FAILED = _UxGT("Ochladz. zlyhalo");
LSTR MSG_ERR_MAXTEMP = _UxGT("Chyba: MAXTEMP");
LSTR MSG_ERR_MINTEMP = _UxGT("Chyba: MINTEMP");
LSTR MSG_HALTED = _UxGT("TLAČIAREŇ ZASTAVENÁ");
LSTR MSG_PLEASE_WAIT = _UxGT("Čakajte prosím...");
LSTR MSG_PLEASE_RESET = _UxGT("Reštartuje ju");
LSTR MSG_PREHEATING = _UxGT("Zahrievanie...");
LSTR MSG_HEATING = _UxGT("Ohrev...");
LSTR MSG_COOLING = _UxGT("Ochladzovanie...");
LSTR MSG_BED_HEATING = _UxGT("Ohrev podložky...");
LSTR MSG_BED_COOLING = _UxGT("Ochladz. podložky...");
LSTR MSG_PROBE_HEATING = _UxGT("Ohrev sondy...");
LSTR MSG_PROBE_COOLING = _UxGT("Ochladz. sondy...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Ohrev komory...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Ochladz. komory...");
LSTR MSG_LASER_COOLING = _UxGT("Ochladz. lasera...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrácia");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovať X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovať Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovať Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovať stred");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta nastavenia");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-kalibrácia");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag. rameno");
LSTR MSG_DELTA_HEIGHT = _UxGT("Výška");
LSTR MSG_DELTA_RADIUS = _UxGT("Polomer");
LSTR MSG_INFO_MENU = _UxGT("O tlačiarni");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. o tlačiarni");
LSTR MSG_3POINT_LEVELING = _UxGT("3-bodové rovnanie");
LSTR MSG_LINEAR_LEVELING = _UxGT("Lineárne rovnanie");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineárne rovnanie");
LSTR MSG_UBL_LEVELING = _UxGT("UBL rovnanie");
LSTR MSG_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
LSTR MSG_MESH_DONE = _UxGT("Mriežka dokončená");
LSTR MSG_INFO_STATS_MENU = _UxGT("Štatistika");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. o doske");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
LSTR MSG_INFO_BAUDRATE = _UxGT("Rýchlosť");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Tepl. ochrana: VYP");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Tepl. ochrana: ZAP");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Vypr.čas nečinnosti");
LSTR MSG_FAN_SPEED_FAULT = _UxGT("Chyba rýchl. vent.");
LSTR MSG_CASE_LIGHT = _UxGT("Osvetlenie");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň");
LSTR MSG_COLORS_GET = _UxGT("Zvoliť farbu");
LSTR MSG_COLORS_SELECT = _UxGT("Zvoliť farby");
LSTR MSG_COLORS_APPLIED = _UxGT("Farby aplikované");
LSTR MSG_COLORS_RED = _UxGT("Červená");
LSTR MSG_COLORS_GREEN = _UxGT("Zelená");
LSTR MSG_COLORS_BLUE = _UxGT("Modrá");
LSTR MSG_COLORS_WHITE = _UxGT("Biela");
LSTR MSG_UI_LANGUAGE = _UxGT("Jazyk rozhrania");
LSTR MSG_SOUND_ENABLE = _UxGT("Povoliť zvuky");
LSTR MSG_LOCKSCREEN = _UxGT("Uzamknúť obrazovku");
LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Tlačiareň je uzamknutá,");
LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("potiahnite pre odomknutie.");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Prosím čakajte do reštartu.");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Nie je vložená karta.");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Prosím zahrejte hotend.");
LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Vynulovať počítadlo");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia tlač");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Celkom vytlačené");
#else
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Žiadna karta");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Prosím zahrejte");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Tlače");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Čas");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačené");
#endif
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Budenie motorov");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Motor %");
LSTR MSG_ERROR_TMC = _UxGT("CHYBA KOMUNIKÁ. TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Uložiť do EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMENA FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PAUZA TLAČE");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENIE FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTIE FILAMENTU");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI POKRAČ.:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačiť viacej");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnoviť tlač");
LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Vytlač. alebo pokrač.?");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Vzd. mm fil. senz.");
LSTR MSG_RUNOUT_ENABLE = _UxGT("Zapnúť senzor");
LSTR MSG_RUNOUT_ACTIVE = _UxGT("Senz. fil. zapn.");
LSTR MSG_INVERT_EXTRUDER = _UxGT("Invert. extrudér");
LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Min. tepl. extrud.");
LSTR MSG_FANCHECK = _UxGT("Kontrola rýchl.");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Parkovanie zlyhalo");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Kalibrácia zlyhala");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
LSTR MSG_MMU2_MENU = _UxGT("MMU2");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktualizujte FW MMU!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potrebuje zásah.");
LSTR MSG_MMU2_RESUME = _UxGT("Obnoviť tlač");
LSTR MSG_MMU2_RESUMING = _UxGT("Obnovovanie...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Zaviesť filament");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Zaviesť všetky");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zaviesť po trysku");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunúť filament");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysunúť filament ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vyňať filament");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádzanie fil. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vysúvanie fil. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysúvanie fil. ...");
LSTR MSG_MMU2_ALL = _UxGT("Všetky");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
LSTR MSG_MMU2_RESET = _UxGT("Reštartovať MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("Reštart MMU...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Odstráňte, kliknite");
LSTR MSG_MIX = _UxGT("Mix");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Zložka ~");
LSTR MSG_MIXER = _UxGT("Mixér");
LSTR MSG_GRADIENT = _UxGT("Gradient");
LSTR MSG_FULL_GRADIENT = _UxGT("Plný gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Prepnúť mix");
LSTR MSG_CYCLE_MIX = _UxGT("Cyklický mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradientný mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Otočiť gradient");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktívny V-tool");
LSTR MSG_START_VTOOL = _UxGT("Počiat. V-tool");
LSTR MSG_END_VTOOL = _UxGT("Konečn. V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("Vynulovať V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("Uložiť V-tool Mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools vynulované");
LSTR MSG_START_Z = _UxGT("Počiat.Z:");
LSTR MSG_END_Z = _UxGT("Konečn.Z:");
LSTR MSG_GAMES = _UxGT("Hry");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Nájazdníci");
LSTR MSG_SNAKE = _UxGT("Had");
LSTR MSG_MAZE = _UxGT("Bludisko");
LSTR MSG_BAD_PAGE = _UxGT("Chyb. index stránky");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Chyb. rých. stránky");
LSTR MSG_EDIT_PASSWORD = _UxGT("Zmeniť heslo");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Vyžad. sa prihl.");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Nastavenie hesla");
LSTR MSG_ENTER_DIGIT = _UxGT("Zvoľte číslo");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Zmeniť heslo");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Odstrániť heslo");
LSTR MSG_PASSWORD_SET = _UxGT("Heslo je ");
LSTR MSG_START_OVER = _UxGT("Začať odznova");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Nezabudnite uložiť!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Heslo odstránené");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre obnovu tlače"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čakajte prosím", "na spustenie", "výmeny filamentu"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stlačte tlačidlo", "pre pokračovanie"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre ohrev trysky"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Ohrev trysky", "Čakajte prosím..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na vysunutie", "filamentu"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na zavedenie", "filamentu"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Čakajte prosím", "na vytlačenie", "filamentu"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Stlačte tlačidlo", "pre dokončenie", "vytláčania filam."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Čakajte prosím na", "obnovenie tlače..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknite pre pokr."));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čakajte prosím..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte a kliknite"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknite pre ohrev"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Ohrev..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysúvanie..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádzanie..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačovanie..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klik. pre dokonč."));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračovanie..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Ovládače TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Prúd ovládača");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybridný prah");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Bezsenzor. domov");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Režim krokovania");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop zapnutý");
LSTR MSG_SERVICE_RESET = _UxGT("Vynulovať");
LSTR MSG_SERVICE_IN = _UxGT("za:");
LSTR MSG_BACKLASH = _UxGT("Kompenz. vôle");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekcia");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Vyhladzovanie");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Vyrovnať os X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto-kalibrovať");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu, znížená teplota. Stlačte OK pre ohrev a ešte raz pre obnovu.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu");
#endif
LSTR MSG_REHEAT = _UxGT("Zohriať");
LSTR MSG_REHEATING = _UxGT("Zohrievanie...");
LSTR MSG_REHEATDONE = _UxGT("Zohrievanie dokonč.");
LSTR MSG_PROBE_WIZARD = _UxGT("Sprievodca sondy Z");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Referencia Z");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Presúvam na pozíciu");
LSTR MSG_XATC = _UxGT("Sprievodca X-Twist");
LSTR MSG_XATC_DONE = _UxGT("Spriev. X-Twist dokonč.!");
LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Aktual. ofset sondy Z na ");
LSTR MSG_SOUND = _UxGT("Zvuk");
LSTR MSG_TOP_LEFT = _UxGT("Ľavý horný");
LSTR MSG_BOTTOM_LEFT = _UxGT("Ľavý dolný");
LSTR MSG_TOP_RIGHT = _UxGT("Pravý horný");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Pravý dolný");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrácia dokončená");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrácia zlyhala");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" spätný chod ovl.");
LSTR MSG_SD_CARD = _UxGT("SD karta");
LSTR MSG_USB_DISK = _UxGT("USB disk");
LSTR MSG_HOST_SHUTDOWN = _UxGT("Vypnúť hosta");
}

View File

@ -0,0 +1,674 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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 för more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Swedish
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_1
namespace Language_sv {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Swedish");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Redo.");
LSTR MSG_YES = _UxGT("JA");
LSTR MSG_NO = _UxGT("NEJ");
LSTR MSG_BACK = _UxGT("Bakåt");
LSTR MSG_MEDIA_ABORTING = _UxGT("Avbryter...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Media Instatt");
LSTR MSG_MEDIA_REMOVED = _UxGT("Media Borttaget");
LSTR MSG_MEDIA_WAITING = _UxGT("Väntar på media");
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Media init misslyckades");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Media läsningsfel");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB enhet borttagen");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start misslyckad");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Underanrop överskriden");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Slutstop"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Mjuk slutstopp");
LSTR MSG_MAIN = _UxGT("Huvud");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Advancerade inställningar");
LSTR MSG_CONFIGURATION = _UxGT("Konfiguration");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostarta Filer");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Inaktivera Stegare");
LSTR MSG_DEBUG_MENU = _UxGT("Debug Meny");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Framstegsindikator Test");
LSTR MSG_AUTO_HOME = _UxGT("Auto Hem");
LSTR MSG_AUTO_HOME_X = _UxGT("Hem X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Hem Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Hem Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Justering");
LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Noggrannhet Minskar!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Noggrannhet uppnådd");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Hemning XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klicka för att börja");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nästa Punkt");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivellering Färdig!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Falna Höjd");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Sätt Hem Offset");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset Tillämpad");
LSTR MSG_TRAMMING_WIZARD = _UxGT("Justerings Wizard");
LSTR MSG_SELECT_ORIGIN = _UxGT("Välj Origo");
LSTR MSG_LAST_VALUE_SP = _UxGT("Senaste värde ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Förvärmning ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Förvärmning ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Alla");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Bädd");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Konf");
LSTR MSG_PREHEAT_M = _UxGT("Förvärmning $");
LSTR MSG_PREHEAT_M_H = _UxGT("Förvärmning $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Förvärmning $ Stoppa");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Förvärmning $ Stoppa ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Förvärmning $ Alla");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Förvärmning $ Bädd");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Förvärmning $ Donf");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Förvärmning Anpassad");
LSTR MSG_COOLDOWN = _UxGT("Nedkylning");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvens");
LSTR MSG_LASER_MENU = _UxGT("Laser kontroll");
LSTR MSG_SPINDLE_MENU = _UxGT("Spindel Kontroll");
LSTR MSG_LASER_POWER = _UxGT("Laser Styrka");
LSTR MSG_SPINDLE_POWER = _UxGT("Spindel Styrka");
LSTR MSG_LASER_TOGGLE = _UxGT("Växla Laser");
LSTR MSG_LASER_PULSE_MS = _UxGT("Test Puls ms");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Avfyra Puls");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Växla Spindel");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindel Framåt");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindel Bakåt");
LSTR MSG_LASER_OFF = _UxGT("Laser Av");
LSTR MSG_LASER_ON = _UxGT("Laser På");
LSTR MSG_SPINDLE_OFF = _UxGT("Spindel Av");
LSTR MSG_SPINDLE_ON = _UxGT("Spindel På");
LSTR MSG_SWITCH_PS_ON = _UxGT("Sätt på ström");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Stäng av ström");
LSTR MSG_EXTRUDE = _UxGT("Extrudera");
LSTR MSG_RETRACT = _UxGT("Dra tillbaka");
LSTR MSG_MOVE_AXIS = _UxGT("Flytta Axel");
LSTR MSG_BED_LEVELING = _UxGT("Bädd Nivellering");
LSTR MSG_LEVEL_BED = _UxGT("Nivellera Bädd");
LSTR MSG_BED_TRAMMING = _UxGT("Bädd Justering");
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Höj Bädd tills nästa Sond Triggad");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Alla Hörn inom Tolerans. Nivellering Bädd");
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Bra Punkter: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Senaste Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Nästa Hörn");
LSTR MSG_MESH_EDITOR = _UxGT("Nät Redigerare");
LSTR MSG_EDIT_MESH = _UxGT("Redigera Nät");
LSTR MSG_EDITING_STOPPED = _UxGT("Nätredigering Stoppad");
LSTR MSG_PROBING_POINT = _UxGT("Sonderingspunkt");
LSTR MSG_MESH_X = _UxGT("Index X");
LSTR MSG_MESH_Y = _UxGT("Index Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z Värde");
LSTR MSG_USER_MENU = _UxGT("Anpassade Kommandon");
LSTR MSG_M48_TEST = _UxGT("M48 Sond Test");
LSTR MSG_M48_POINT = _UxGT("M48 Punkt");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sond utan för gränser");
LSTR MSG_M48_DEVIATION = _UxGT("Avvikelse");
LSTR MSG_IDEX_MENU = _UxGT("IDEX Läge");
LSTR MSG_OFFSETS_MENU = _UxGT("Verktygsoffset");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkera");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicering");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Speglad Kopia");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Kontroll");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplicera X-Avstånd");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2:a Munstycke Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2:a Munstycke @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Utför G29");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Verktyg");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Enad Bädd Nivellering (UBL)");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Lutningspunkt");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuellt skapa nät");
LSTR MSG_UBL_BC_INSERT = _UxGT("Placera Shim & Mät");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mät");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Ta bort & Mät bädd");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Flyttar till nästa");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivera UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Avaktivera UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bädd Temp");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bädd Temp");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hetände Temp");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hetände Temp");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Nät Redigera");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Redigera Anpassat Nät");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Finjustera Nät");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Färdig Redigera Nät");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Bygg Anpassat Nät");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Bygg Nät");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Bygg Nät ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Bygg Kallt Nät");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Justera Nät Höjd");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höjd Antal");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validera Nät");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validera Nät ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validera Anpassat Nät");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Värma Bädd");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Värma Munstycke");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuel grundning...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fastlängd Grundning");
LSTR MSG_G26_PRIME_DONE = _UxGT("Färdig Grundning");
LSTR MSG_G26_CANCELED = _UxGT("G26 Avbruten");
LSTR MSG_G26_LEAVING = _UxGT("Nivellera G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Fortsätt Bädd Nät");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nät Nivellering");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkts Nivellering");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rutnät Nivellering");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivellera Nät");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Sidopunkter");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Kart Typ");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Utmatning Nät Map");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Utmatning för Värd");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Utmatning för CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Utanför skrivare Backup");
LSTR MSG_UBL_INFO_UBL = _UxGT("Utmatning UBL Info");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Ifyllnad Mängd");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuell Ifyllnad");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Ifyllnad");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Ifyllnad Nät");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Ogiltigförklara Alla");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Ogiltigförklara Närmast");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Finjustera Alla");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Finjustera Närmast");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Nät Lagra");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Minnesöppning");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Ladda Bädd Nät");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Spara Bädd Nät");
LSTR MSG_MESH_LOADED = _UxGT("Nät %i Ladda");
LSTR MSG_MESH_SAVED = _UxGT("Nät %i Sparad");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Ingen Lagring");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Fel: UBL Sparad");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Fel: UBL Återställd");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stoppad");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Steg-för-Steg UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Bygg Kallt Nät");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Ifyllnad");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validera Nät");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Finjustera Alla");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validera Nät");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Finjustera Alla");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Spara Bädd Nät");
LSTR MSG_LED_CONTROL = _UxGT("LED Kontroll");
LSTR MSG_LEDS = _UxGT("Ljus");
LSTR MSG_LED_PRESETS = _UxGT("Ljus Förinställd");
LSTR MSG_SET_LEDS_RED = _UxGT("Röd");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Gul");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Grön");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Blå");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Vitt");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal =");
LSTR MSG_LEDS2 = _UxGT("Ljus #2");
LSTR MSG_NEO2_PRESETS = _UxGT("Ljus #2 Förinställd");
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Ljusstyrka");
LSTR MSG_CUSTOM_LEDS = _UxGT("Anpassat Ljus");
LSTR MSG_INTENSITY_R = _UxGT("Rör Intensitet");
LSTR MSG_INTENSITY_G = _UxGT("Grön Intensitet");
LSTR MSG_INTENSITY_B = _UxGT("Blå Intensitet");
LSTR MSG_INTENSITY_W = _UxGT("Vit Intensitet");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
LSTR MSG_MOVING = _UxGT("Flyttar...");
LSTR MSG_FREE_XY = _UxGT("Fri XY");
LSTR MSG_MOVE_X = _UxGT("Flytta X");
LSTR MSG_MOVE_Y = _UxGT("Flytta Y");
LSTR MSG_MOVE_Z = _UxGT("Flytta Z");
LSTR MSG_MOVE_N = _UxGT("Flytta @");
LSTR MSG_MOVE_E = _UxGT("Extruder");
LSTR MSG_MOVE_EN = _UxGT("Extruder *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hetände för kall");
LSTR MSG_MOVE_N_MM = _UxGT("Flytta $mm");
LSTR MSG_MOVE_01MM = _UxGT("Flytta 0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("Flytta 1mm");
LSTR MSG_MOVE_10MM = _UxGT("Flytta 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Flytta 100mm");
LSTR MSG_MOVE_0001IN = _UxGT("Flytta 0.001tum");
LSTR MSG_MOVE_001IN = _UxGT("Flytta 0.01tum");
LSTR MSG_MOVE_01IN = _UxGT("Flytta 0.1tum");
LSTR MSG_SPEED = _UxGT("Hastighet");
LSTR MSG_BED_Z = _UxGT("Bädd Z");
LSTR MSG_NOZZLE = _UxGT("Munstycke");
LSTR MSG_NOZZLE_N = _UxGT("Munstycke ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Munstycke Parkerad");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Munstycke Standby");
LSTR MSG_BED = _UxGT("Bädd");
LSTR MSG_CHAMBER = _UxGT("Inkapsling");
LSTR MSG_FAN_SPEED = _UxGT("Fläkt Hastighet");
LSTR MSG_FAN_SPEED_N = _UxGT("Fläkt Hastighet ~");
LSTR MSG_STORED_FAN_N = _UxGT("Lagrad Fläkt ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fläkt Hastighet");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fläkt Hastighet ~");
LSTR MSG_CONTROLLER_FAN = _UxGT("Kontroller Fläkt");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Overksam Hastighet");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto läga");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktive Hastighet");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Overksam Period");
LSTR MSG_FLOW = _UxGT("Flöde");
LSTR MSG_FLOW_N = _UxGT("Flöde ~");
LSTR MSG_CONTROL = _UxGT("Kontroll");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
LSTR MSG_LCD_ON = _UxGT("");
LSTR MSG_LCD_OFF = _UxGT("Av");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autojustera");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autojustera *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autojustera misslyckad! Dålig extruder.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autojustera misslyckad! Temperatur för hög.");
LSTR MSG_PID_TIMEOUT = _UxGT("Autojustera misslyckad! Tidsgräns.");
LSTR MSG_SELECT = _UxGT("Välj");
LSTR MSG_SELECT_E = _UxGT("Välj *");
LSTR MSG_ACC = _UxGT("Accel");
LSTR MSG_JERK = _UxGT("Ryck");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-Ryck");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-Ryck");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-Ryck");
LSTR MSG_VN_JERK = _UxGT("V@-Ryck");
LSTR MSG_VE_JERK = _UxGT("Ve-Ryck");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Knutpunkt Avv");
LSTR MSG_MAX_SPEED = _UxGT("Hastighet");
LSTR MSG_VMAX_A = _UxGT("Vmax ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Vmax ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Vmax ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Vmax @");
LSTR MSG_VMAX_E = _UxGT("Vmax E");
LSTR MSG_VMAX_EN = _UxGT("Vmax *");
LSTR MSG_VMIN = _UxGT("Vmin");
LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
LSTR MSG_ACCELERATION = _UxGT("Acceleration");
LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Amax @");
LSTR MSG_AMAX_E = _UxGT("Amax E");
LSTR MSG_AMAX_EN = _UxGT("Amax *");
LSTR MSG_A_RETRACT = _UxGT("A-Dra tillbaka");
LSTR MSG_A_TRAVEL = _UxGT("A-Färdas");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frekvens max");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Flöde min");
LSTR MSG_STEPS_PER_MM = _UxGT("Steg/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" Steg/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" Steg/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" Steg/mm");
LSTR MSG_N_STEPS = _UxGT("@ Steg/mm");
LSTR MSG_E_STEPS = _UxGT("E Steg/mm");
LSTR MSG_EN_STEPS = _UxGT("* Steg/mm");
LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
LSTR MSG_MOTION = _UxGT("Rörelse");
LSTR MSG_FILAMENT = _UxGT("Tråd");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm³");
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Gräns i mm³");
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Gräns *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Tråd Dia.");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Tråd Dia. *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Lossa mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Ladda mm");
LSTR MSG_ADVANCE_K = _UxGT("Advancera K");
LSTR MSG_ADVANCE_K_E = _UxGT("Advancera K *");
LSTR MSG_CONTRAST = _UxGT("LCD Kontrast");
LSTR MSG_STORE_EEPROM = _UxGT("Spara Inställningar");
LSTR MSG_LOAD_EEPROM = _UxGT("Ladda Inställningar");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Återställ Standard");
LSTR MSG_INIT_EEPROM = _UxGT("Initiera EEPROM");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fel");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fel");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fel");
LSTR MSG_SETTINGS_STORED = _UxGT("Inställningar Lagrad");
LSTR MSG_MEDIA_UPDATE = _UxGT("Media Uppdatera");
LSTR MSG_RESET_PRINTER = _UxGT("Återställ Skrivare");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Uppdatera");
LSTR MSG_INFO_SCREEN = _UxGT("Info Skärm");
LSTR MSG_PREPARE = _UxGT("Förbered");
LSTR MSG_TUNE = _UxGT("Justera");
LSTR MSG_POWER_MONITOR = _UxGT("Ström övervakning");
LSTR MSG_CURRENT = _UxGT("Ström");
LSTR MSG_VOLTAGE = _UxGT("Spänning");
LSTR MSG_POWER = _UxGT("Ström");
LSTR MSG_START_PRINT = _UxGT("Start Utskrift");
LSTR MSG_BUTTON_NEXT = _UxGT("Nästa");
LSTR MSG_BUTTON_INIT = _UxGT("Initiera");
LSTR MSG_BUTTON_STOP = _UxGT("Stoppa");
LSTR MSG_BUTTON_PRINT = _UxGT("Skriv");
LSTR MSG_BUTTON_RESET = _UxGT("Återställa");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorera");
LSTR MSG_BUTTON_CANCEL = _UxGT("Avbryt");
LSTR MSG_BUTTON_DONE = _UxGT("Färdig");
LSTR MSG_BUTTON_BACK = _UxGT("Bakåt");
LSTR MSG_BUTTON_PROCEED = _UxGT("Fortsätt");
LSTR MSG_BUTTON_SKIP = _UxGT("Hoppa över");
LSTR MSG_PAUSING = _UxGT("Paus..");
LSTR MSG_PAUSE_PRINT = _UxGT("Pausera Utskrift");
LSTR MSG_RESUME_PRINT = _UxGT("Återuppta Utskrift");
LSTR MSG_HOST_START_PRINT = _UxGT("Värd Start");
LSTR MSG_STOP_PRINT = _UxGT("Stoppa Utskrift");
LSTR MSG_END_LOOPS = _UxGT("Slut Upprepningsloop");
LSTR MSG_PRINTING_OBJECT = _UxGT("Skriver Objekt");
LSTR MSG_CANCEL_OBJECT = _UxGT("Avbryt Objekt");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Avbryt Objekt =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ström Avbrott");
LSTR MSG_MEDIA_MENU = _UxGT("Skriv fråm Media");
LSTR MSG_NO_MEDIA = _UxGT("Inget Media");
LSTR MSG_DWELL = _UxGT("Sov...");
LSTR MSG_USERWAIT = _UxGT("Klick för att återuppta...");
LSTR MSG_PRINT_PAUSED = _UxGT("Utskrift Pausad");
LSTR MSG_PRINTING = _UxGT("Skriver...");
LSTR MSG_PRINT_ABORTED = _UxGT("Utskrift Avbruten");
LSTR MSG_PRINT_DONE = _UxGT("Utskrift Färdig");
LSTR MSG_NO_MOVE = _UxGT("Ingen Flytt.");
LSTR MSG_KILLED = _UxGT("DÖDAD. ");
LSTR MSG_STOPPED = _UxGT("STOPPAD. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Dra tillbaka mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Byt Dra.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Dra tillbaka V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hoppa mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Åter dra tillbaka. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Byt åter dra t. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Återdrat. V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Byt åter dra. V");
LSTR MSG_AUTORETRACT = _UxGT("Auto-Dra-tillbka");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Byt Längd");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Byt Extra");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Rensa Längd");
LSTR MSG_TOOL_CHANGE = _UxGT("Byt verktyg");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Höj");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Grund Hastighet");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Återgå Hastighet");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkera Huvud");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Återgår Hastighet");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fläkt Hastighet");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fläkt Tid");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto PÅ");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AV");
LSTR MSG_TOOL_MIGRATION = _UxGT("Verktyg Migration");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Senast Extruder");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrera till *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Byt Tråd");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Byt Tråd *");
LSTR MSG_FILAMENTLOAD = _UxGT("Ladda Tråd");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Ladda *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Lossa Tråd");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Lossa *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Lossa All");
LSTR MSG_ATTACH_MEDIA = _UxGT("Bifoga Media");
LSTR MSG_CHANGE_MEDIA = _UxGT("Byt Media");
LSTR MSG_RELEASE_MEDIA = _UxGT("Släpp Media");
LSTR MSG_ZPROBE_OUT = _UxGT("Z Sond Utanför Bädd");
LSTR MSG_SKEW_FACTOR = _UxGT("Skev Faktor");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Själv-Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Återställ");
LSTR MSG_BLTOUCH_STOW = _UxGT("Stuva undan");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Fällut");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Läge");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Läge");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Läge");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Läge-Lägring");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Sätt BLTouch to 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Sätt BLTouch to OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Reportera Dränering");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("FARA: Dålig inställningar kan orsaka skada! Fortsätt ändå?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Initiera TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Spara");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Fällut TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Fällut Z-Sond");
LSTR MSG_MANUAL_STOW = _UxGT("Stuva undan Z-Sond");
LSTR MSG_HOME_FIRST = _UxGT("Hem %s%s%s Först");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Sond Offsets");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Sond X Offset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Sond Y Offset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Sond Z Offset");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Flytta Munstycke till Bädd");
LSTR MSG_BABYSTEP_X = _UxGT("Småsteg X");
LSTR MSG_BABYSTEP_Y = _UxGT("Småsteg Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Småsteg Z");
LSTR MSG_BABYSTEP_N = _UxGT("Småsteg @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Slutstopp Avbrott");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Värma Misslyckad");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Fel: REDUNDANT TEMP");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TERMISK ÖVERDRIFT");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BÄDD TERMISK ÖVERDRIFT");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMMARE T. ÖVERDRIFT");
LSTR MSG_ERR_MAXTEMP = _UxGT("Fel: MAXTEMP");
LSTR MSG_ERR_MINTEMP = _UxGT("Fel: MINTEMP");
LSTR MSG_HALTED = _UxGT("Utskrift stoppad");
LSTR MSG_PLEASE_RESET = _UxGT("Snälla Återställ");
LSTR MSG_SHORT_HOUR = _UxGT("t"); // One character only
LSTR MSG_HEATING = _UxGT("Värmer...");
LSTR MSG_COOLING = _UxGT("Kyler...");
LSTR MSG_BED_HEATING = _UxGT("Bädd Värmer...");
LSTR MSG_BED_COOLING = _UxGT("Bädd Kyler...");
LSTR MSG_PROBE_HEATING = _UxGT("Sond Värmer...");
LSTR MSG_PROBE_COOLING = _UxGT("Sond Kyler...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Kammare Värmer...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Kammare Kyler...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrera X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrera Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrera Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrera Center");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Inställningar");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibrering");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
LSTR MSG_DELTA_HEIGHT = _UxGT("Höjd");
LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
LSTR MSG_INFO_MENU = _UxGT("Om Skrivaren");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Skrivare Info");
LSTR MSG_3POINT_LEVELING = _UxGT("3-Punkt Nivellering");
LSTR MSG_LINEAR_LEVELING = _UxGT("Linjär Nivellering");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilinjär Nivellering");
LSTR MSG_UBL_LEVELING = _UxGT("Enhetlig Bädd Nivellering (UBL)");
LSTR MSG_MESH_LEVELING = _UxGT("Nät Nivellering");
LSTR MSG_INFO_STATS_MENU = _UxGT("Skrivar Stats");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistor");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruderare");
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoll");
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Överdrift Övervakning: AV");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Överdrift Övervakning: PÅ");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hetände Overksam Tidsgräns");
LSTR MSG_CASE_LIGHT = _UxGT("Lådljus");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Ljus ljusstyrka");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INKORREKT SKRIVARE");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Utskriftsantal");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdiga");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Utskriftstid");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längsta Jobbtid");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderade Totalt");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Utskrift");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdig");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längsta");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderad");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
LSTR MSG_INFO_PSU = _UxGT("PSU");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrka");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Driver %");
LSTR MSG_ERROR_TMC = _UxGT("TMC KOPPLNINGSFEL");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("TRÅDBYTE");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("UTSKRIFTSPAUSERAD");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LADDA TRÅD");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("LOSSA TRÅD");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ÅTERGÅ VAÖ:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Rensa mer");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Fortsätt");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Munstycke: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Utskjut Sensor");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Utskjut Dist mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Hemning Misslyckad");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondering Misslyckad");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VÄLJ TRÅD");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Uppdatera MMU Firmware!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Behöver uppmärksamhet.");
LSTR MSG_MMU2_RESUME = _UxGT("MMU Återuppta");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU Återupptas...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Ladda");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Ladda Alla");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Ladda till Munstycke");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Mata ut");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Mata ut ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Lossa");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Ladda Tråd %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Mata ut Tråd ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Lossa Tråd...");
LSTR MSG_MMU2_ALL = _UxGT("Alla");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Tråd ~");
LSTR MSG_MMU2_RESET = _UxGT("Återställ MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU Återställer...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Ta bort, Klicka");
LSTR MSG_MIX = _UxGT("Mixa");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
LSTR MSG_MIXER = _UxGT("Mixer");
LSTR MSG_GRADIENT = _UxGT("Gradient");
LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
LSTR MSG_TOGGLE_MIX = _UxGT("Växla Mix");
LSTR MSG_CYCLE_MIX = _UxGT("Totera Mix");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Omvänd Gradient");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktive V-verktyg");
LSTR MSG_START_VTOOL = _UxGT("Start V-verktyg");
LSTR MSG_END_VTOOL = _UxGT(" Slut V-verktyg");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-verktyg");
LSTR MSG_RESET_VTOOLS = _UxGT("Återställ V-verktyg");
LSTR MSG_COMMIT_VTOOL = _UxGT("Kommitta V-verktyg Mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-verktyg blev Återställda");
LSTR MSG_START_Z = _UxGT("Start Z:");
LSTR MSG_END_Z = _UxGT(" Slut Z:");
LSTR MSG_GAMES = _UxGT("Spel");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Labyrint");
LSTR MSG_BAD_PAGE = _UxGT("Dålig sida index");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Dålig sida hastighet");
LSTR MSG_EDIT_PASSWORD = _UxGT("Redigera Lösenord");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Login Krävs");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Lösenordsinställningar");
LSTR MSG_ENTER_DIGIT = _UxGT("Ange Siffra");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Sätt/Redigera Lösenord");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Ta bort Lösenord");
LSTR MSG_PASSWORD_SET = _UxGT("Lösenord är ");
LSTR MSG_START_OVER = _UxGT("Börja om");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Kom ihåg att Spara!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Lösenord Bort taget");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Tryck på knappen", "för att fortsätta utskrift"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vänta på", "trådbyte", "att börja"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Sätt in tråd", "och tryck på knappen", "för att fortsätta"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Tryck på knappen", "för att värma munstycke"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Munstycke värms", "Var snäll och vänta..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Väntar på", "trådlossning"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Väntar på", "trådladdning"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Väntar på", "tråd utrensning"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klicka för att slutföra", "tråd utrensning"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Väntar på utskrift", "att återstarta..."));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick för att fortsätta"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vänta..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sätt in och klicka"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klicka för att värma"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Värmer..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Lossar..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laddar..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Rensar..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klicka för att slutföra"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Återgår..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
LSTR MSG_TMC_CURRENT = _UxGT("Driver Ström");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Tröskelvärde");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorlös Hemning");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stegningsläge");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Smyghack Aktiverad");
LSTR MSG_SERVICE_RESET = _UxGT("Återställ");
LSTR MSG_SERVICE_IN = _UxGT(" in:");
LSTR MSG_BACKLASH = _UxGT("Backlash");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrigering");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Glättning");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivå X Axel");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Kalibrera");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Overksam tidsgräns, temperatur minskning. Tryck ok för att återvärma och igen för att fortsätta.");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Värmare Tidsgräns");
#endif
LSTR MSG_REHEAT = _UxGT("Återvärm");
LSTR MSG_REHEATING = _UxGT("Återvärmning...");
LSTR MSG_PROBE_WIZARD = _UxGT("Z Sond Wizard");
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Sondering Z Referens");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Flyttar till Sonderings Pos");
LSTR MSG_SOUND = _UxGT("Ljud");
LSTR MSG_TOP_LEFT = _UxGT("Uppe Vänster");
LSTR MSG_BOTTOM_LEFT = _UxGT("Nere Vänster");
LSTR MSG_TOP_RIGHT = _UxGT("Uppe Höger");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Nere Höger");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrering Färdig");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrering Misslyckad");
}

View File

@ -0,0 +1,236 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* TEST
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
// Select ONE of the following Mappers.
// They decide what to do with a symbol in the area of [0x80:0xFF]. They take a symbol of this language file and make them point
// into an array with 128 cells, where they'll find the place of the symbol of the font in use.
//
// a.)For ASCII coded Language_xx.h files like (en) there are no occurrences of symbols above 0x7F so no mapper is needed.
// If such a symbol appears it is mapped directly into the font. This is the case for the language files we used until now, with all the STR_XX or
// "\xxx" symbols. All Symbols are only one byte long.
// b.) For Unicoded Language_xx.h files (currently ru, de and kana_utf8 ) the non ASCII [0x00-0x7F] symbols are represented by more than one byte.
// In the case of two bytes the first is pointing to a 'codepage' and the second to a place in the codepage. These codepages contain 64 symbols.
// So two of them can be mapped. For most of the European languages the necessary symbols are contained in the pages C2 and C3. Cyrillic uses D0
// and D1.
// c.) For katakana (one of the Japanese symbol sets) Unicode uses 3 bytes. Here the second byte also points to a codepage and byte 3 to the symbol.
// I hope the pages E282 and E283 are sufficient to write katakana.
// Kanji (an other Japanese symbol set) uses far more than two codepages. So currently I don't see a chance to map the Unicodes. Its not
// impossible to have a close to direct mapping but will need giant conversion tables and fonts (we don't want to have in a embedded system).
// Select the better font for full graphic displays.
//#define DISPLAY_CHARSET_ISO10646_1
//#define DISPLAY_CHARSET_ISO10646_5
//#define DISPLAY_CHARSET_ISO10646_GREEK
//#define DISPLAY_CHARSET_ISO10646_KANA
// next 5 lines select variants in this file only
#define DISPLAYTEST
//#define WEST
//#define CYRIL
//#define KANA
// TESTSTRINGS
#define STRG_ASCII_2 _UxGT(" !\"#$%&'()*+,-./")
#define STRG_ASCII_3 _UxGT("0123456789:;<=>?")
#define STRG_ASCII_4 _UxGT("@ABCDEFGHIJKLMNO")
#define STRG_ASCII_5 _UxGT("PQRSTUVWXYZ[\\]^_")
#define STRG_ASCII_6 _UxGT("`abcdefghijklmno")
#define STRG_ASCII_7 _UxGT("pqrstuvwxyz{|}~")
#define STRG_C2_8 _UxGT("")
#define STRG_C2_9 _UxGT("")
#define STRG_C2_a _UxGT(" ¡¢£¤¥¦§¨©ª«¬­®¯")
#define STRG_C2_b _UxGT("°±²³´µ¶·¸¹º»¼½¾¿")
#define STRG_C3_8 _UxGT("ÈÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ")
#define STRG_C3_9 _UxGT("ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß")
#define STRG_C3_a _UxGT("àáâãäåæçèéêëìíîï")
#define STRG_C3_b _UxGT("ðñòóôõö÷øùúûüýþÿ")
#define STRG_D0_8 _UxGT("ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ")
#define STRG_D0_9 _UxGT("АБВГДЕЖЗИЙКЛМНОП")
#define STRG_D0_a _UxGT("РСТУФХЦЧШЩЪЫЬЭЮЯ")
#define STRG_D0_b _UxGT("абвгдежзийклмноп")
#define STRG_D1_8 _UxGT("рстуфхцчшщъыьэюя")
#define STRG_D1_9 _UxGT("ѐёђѓєѕіїјљњћќѝўџ")
#define STRG_D1_a _UxGT("ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯ")
#define STRG_D1_b _UxGT("ѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ")
#define STRG_E382_8 _UxGT("よめもゃやゅゆょよらりるれろゎわ")
#define STRG_E382_9 _UxGT("ゐゑをんゔゕゖ゗゘゙゚゛ ゜ゝゞゟ")
#define STRG_E382_a _UxGT("゠ァアィイゥウェエォオカガキギク")
#define STRG_E382_b _UxGT("グケゲコゴサザシジスズセゼソゾタ")
#define STRG_E383_8 _UxGT("トチヂッツヅテデトドナニヌネノハ")
#define STRG_E383_9 _UxGT("バパヒビピフブプヘベペホボポマミ")
#define STRG_E383_a _UxGT("ムメモャヤュユョヨラリルレロヮワ")
#define STRG_E383_b _UxGT("ヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ")
#define STRG_OKTAL_0 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017"
#define STRG_OKTAL_1 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
#define STRG_OKTAL_2 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
#define STRG_OKTAL_3 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
#define STRG_OKTAL_4 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
#define STRG_OKTAL_5 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
#define STRG_OKTAL_6 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
#define STRG_OKTAL_7 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
#define STRG_OKTAL_8 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217"
#define STRG_OKTAL_9 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237"
#define STRG_OKTAL_a "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257"
#define STRG_OKTAL_b "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277"
#define STRG_OKTAL_c "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317"
#define STRG_OKTAL_d "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337"
#define STRG_OKTAL_e "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
#define STRG_OKTAL_f "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
namespace Language_test {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 1;
#if ENABLED(DISPLAYTEST)
LSTR WELCOME_MSG = _UxGT("Language TEST");
LSTR MSG_INFO_SCREEN = _UxGT("Display test");
LSTR MSG_PREPARE = STRG_OKTAL_b;
LSTR MSG_CONTROL = STRG_OKTAL_c;
#endif
#if ENABLED(WEST)
LSTR WELCOME_MSG = _UxGT("Language TEST");
LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
LSTR MSG_PREPARE = _UxGT("UTF8");
LSTR MSG_CONTROL = _UxGT("ASCII");
LSTR MSG_MAIN = _UxGT("..");
LSTR MSG_DISABLE_STEPPERS = STRG_C2_8;
LSTR MSG_AUTO_HOME = STRG_C2_9;
LSTR MSG_SET_HOME_OFFSETS = STRG_C2_a;
LSTR MSG_PREHEAT_1 = STRG_C2_b;
LSTR MSG_PREHEAT_2 = STRG_C3_8;
LSTR MSG_COOLDOWN = STRG_C3_9;
LSTR MSG_SWITCH_PS_OFF = STRG_C3_a;
LSTR MSG_MOVE_AXIS = STRG_C3_b;
LSTR MSG_MAIN = STRG_OKTAL_2;
LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
LSTR MSG_MOTION = STRG_OKTAL_4;
LSTR MSG_FILAMENT = STRG_OKTAL_5;
LSTR MSG_CONTRAST = STRG_OKTAL_6;
LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
LSTR MSG_NOZZLE = STRG_OKTAL_8;
LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
LSTR MSG_FAN_SPEED = STRG_OKTAL_9;
LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
LSTR MSG_MIN = STRG_OKTAL_b;
LSTR MSG_MAX = STRG_OKTAL_c;
LSTR MSG_FACTOR = STRG_OKTAL_d;
LSTR MSG_PID_P = STRG_OKTAL_e;
LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
#if ENABLED(CYRIL)
LSTR WELCOME_MSG = _UxGT("Language TEST");
LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
LSTR MSG_PREPARE = _UxGT("UTF8");
LSTR MSG_CONTROL = _UxGT("ASCII");
LSTR MSG_MAIN = _UxGT("..");
LSTR MSG_DISABLE_STEPPERS = STRG_D0_8;
LSTR MSG_AUTO_HOME = STRG_D0_9;
LSTR MSG_SET_HOME_OFFSETS = STRG_D0_a;
LSTR MSG_PREHEAT_1 = STRG_D0_b;
LSTR MSG_PREHEAT_2 = STRG_D1_8;
LSTR MSG_COOLDOWN = STRG_D1_9;
LSTR MSG_SWITCH_PS_OFF = STRG_D1_a;
LSTR MSG_MOVE_AXIS = STRG_D1_b;
LSTR MSG_MAIN = STRG_OKTAL_2;
LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
LSTR MSG_MOTION = STRG_OKTAL_4;
LSTR MSG_FILAMENT = STRG_OKTAL_5;
LSTR MSG_CONTRAST = STRG_OKTAL_6;
LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
LSTR MSG_NOZZLE = STRG_OKTAL_8;
LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
LSTR MSG_MIN = STRG_OKTAL_b;
LSTR MSG_MAX = STRG_OKTAL_c;
LSTR MSG_FACTOR = STRG_OKTAL_d;
LSTR MSG_PID_P = STRG_OKTAL_e;
LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
#if ENABLED(KANA)
LSTR WELCOME_MSG = _UxGT("Language TEST");
LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
LSTR MSG_PREPARE = _UxGT("UTF8");
LSTR MSG_CONTROL = _UxGT("ASCII");
LSTR MSG_MAIN = _UxGT("..");
LSTR MSG_DISABLE_STEPPERS = STRG_E382_8;
LSTR MSG_AUTO_HOME = STRG_E382_9;
LSTR MSG_SET_HOME_OFFSETS = STRG_E382_a;
LSTR MSG_PREHEAT_1 = STRG_E382_b;
LSTR MSG_PREHEAT_2 = STRG_E383_8;
LSTR MSG_COOLDOWN = STRG_E383_9;
LSTR MSG_SWITCH_PS_OFF = STRG_E383_a;
LSTR MSG_MOVE_AXIS = STRG_E383_b;
LSTR MSG_MAIN = STRG_OKTAL_2;
LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
LSTR MSG_MOTION = STRG_OKTAL_4;
LSTR MSG_FILAMENT = STRG_OKTAL_5;
LSTR MSG_CONTRAST = STRG_OKTAL_6;
LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
LSTR MSG_NOZZLE = STRG_OKTAL_8;
LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
LSTR MSG_MIN = STRG_OKTAL_b;
LSTR MSG_MAX = STRG_OKTAL_c;
LSTR MSG_FACTOR = STRG_OKTAL_d;
LSTR MSG_PID_P = STRG_OKTAL_e;
LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
}

View File

@ -0,0 +1,579 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Turkish
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*
* Bu çeviri dosyasındaki sorunlar ve düzeltmeler için iletişim;
* Contact for issues and corrections in this translation file;
* Yücel Temel - (info@elektromanyetix.com) - https://elektromanyetix.com/
*/
#define DISPLAY_CHARSET_ISO10646_TR
namespace Language_tr {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Turkish");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" hazır.");
LSTR MSG_YES = _UxGT("EVET");
LSTR MSG_NO = _UxGT("HAYIR");
LSTR MSG_BACK = _UxGT("Geri");
LSTR MSG_MEDIA_ABORTING = _UxGT("Durduruluyor...");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD K. Yerleştirildi.");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD Kart Çıkarıldı.");
LSTR MSG_MEDIA_WAITING = _UxGT("SD Kart Bekleniyor");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Kart Okuma Hatası");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Çıkarıldı");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Başlat. Hatası");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Enstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Yazılımsal Endstops");
LSTR MSG_MAIN = _UxGT("Ana");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
LSTR MSG_CONFIGURATION = _UxGT("Yapılandırma");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Oto. Başlat");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
LSTR MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");
LSTR MSG_AUTO_HOME = _UxGT("Eksenleri Sıfırla");
LSTR MSG_AUTO_HOME_X = _UxGT("X Sıfırla");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y Sıfırla");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z Sıfırla");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ Sıfırlanıyor");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Başlatmak için tıkla");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sonraki Nokta");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Hizalama Tamam!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Kaçınma Yüksekliği");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ofset Ayarla");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofset Tamam");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
LSTR MSG_PREHEAT_M = _UxGT("Ön Isınma $");
LSTR MSG_PREHEAT_M_H = _UxGT("Ön Isınma $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Ön Isınma $ Nozul");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Ön Isınma $ Nozul ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Ön Isınma $ Tüm");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Ön Isınma $ Tabla");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Ön Isınma $ Ayarlar");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Özel Ön Isınma");
LSTR MSG_COOLDOWN = _UxGT("Soğut/(Durdur)");
LSTR MSG_LASER_MENU = _UxGT("Lazer Kontrolü");
LSTR MSG_LASER_POWER = _UxGT("Lazer Gücü");
LSTR MSG_SPINDLE_MENU = _UxGT("Spindle Kontrolü");
LSTR MSG_SPINDLE_POWER = _UxGT("Spindle Gücü");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Ters Yön");
LSTR MSG_SWITCH_PS_ON = _UxGT("Gücü Aç");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Gücü Kapat");
LSTR MSG_EXTRUDE = _UxGT("Ekstrüzyon");
LSTR MSG_RETRACT = _UxGT("Geri Çek");
LSTR MSG_MOVE_AXIS = _UxGT("Eksen Hareketleri");
LSTR MSG_BED_LEVELING = _UxGT("Tabla Hizalama");
LSTR MSG_LEVEL_BED = _UxGT("Tabla Hizası");
LSTR MSG_BED_TRAMMING = _UxGT("Hizalama Köşeleri");
LSTR MSG_NEXT_CORNER = _UxGT("Sonraki Köşe");
LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editörü");
LSTR MSG_EDIT_MESH = _UxGT("Mesh Düzenle");
LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Düzenleme Durdu");
LSTR MSG_PROBING_POINT = _UxGT("Prop Noktası");
LSTR MSG_MESH_X = _UxGT("İndeks X");
LSTR MSG_MESH_Y = _UxGT("İndeks Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z Değeri");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Özel Komutlar");
LSTR MSG_M48_TEST = _UxGT("M48 Prob Testi");
LSTR MSG_M48_POINT = _UxGT("M48 Nokta");
LSTR MSG_M48_DEVIATION = _UxGT("Sapma");
LSTR MSG_IDEX_MENU = _UxGT("IDEX Modu");
LSTR MSG_OFFSETS_MENU = _UxGT("Takım Ofsetleri");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Oto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Kopyala");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Yansıtılmış kopya");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Tam Kontrol");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. nozul Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. nozul @");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 Çalışıyor");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Araçları");
LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL Yatak Hizalama");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Eğim Noktası");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Elle Mesh Oluştur");
LSTR MSG_UBL_BC_INSERT = _UxGT("Altlık & Ölçü Ver");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Ölçü");
LSTR MSG_UBL_BC_REMOVE = _UxGT("Yataktan Ölçü Kaldır");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Sonrakine Git");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL'yi Etkinleştir");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL'yi Etkisizleştir");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Yatak Sıcaklığı");
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Yatak Sıcaklığı");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nozul Sıcaklığı");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Nozul Sıcaklığı");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Düzenleme");
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Özel Mesh Düzenleme");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("İnce Ayar Mesh");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Mesh Düzenleme Tamam");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Özel Mesh Oluştur");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Mesh Oluştur");
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Soğuk Mesh Oluştur");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Mesh Yükseklik Ayarı");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Yükseklik miktarı");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Doğrulama Mesh");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Özel Mesh Doğrulama");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Isıtma Tablası");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Isıtma Memesi");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuel çalışma...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Birincil Sabit Uzunluk");
LSTR MSG_G26_PRIME_DONE = _UxGT("Çalışma Tamamlandı");
LSTR MSG_G26_CANCELED = _UxGT("G26 İptal edildi");
LSTR MSG_G26_LEAVING = _UxGT("Çıkış G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Tabla Mesh Devam et");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Hizalama");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Hizalama");
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Hizalama");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Mesh Seviyesi");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Yan Noktalar");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Haritalama Türü");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Mesh Çıkış Haritası");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host için Çıktı");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV için Çıktı");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yazıcıda Yedek Kpalı");
LSTR MSG_UBL_INFO_UBL = _UxGT("UBL Çıkış Bilgisi");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Dolgu Miktarı");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuel Dolgu");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Akıllı Dogu");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Mesh Dolgu");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tümünü Geçersiz Kıl");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Yakını Geçersiz Kıl");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Tümünü İnce Ayarla");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Yakını İnce Ayarla");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Depolama");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Bellek Yuvası");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Yatak Mesh Yükle");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Yatak Mesh Kayıt Et");
LSTR MSG_MESH_LOADED = _UxGT("Mesh %i yüklendi");
LSTR MSG_MESH_SAVED = _UxGT("Mesh %i kayıtlandı");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Depolama Yok");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Hata: UBL Kayıt");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Hata: UBL Yenileme");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Ofset Durduruldu");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Adım Adım UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Soğuk Mesh Oluştur");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Akıllı Dogu");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Doğrulama Mesh");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Tümünü İnce Ayarla");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Doğrulama Mesh");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Tümünü İnce Ayarla");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Yatak Mesh Kayıt Et");
LSTR MSG_LED_CONTROL = _UxGT("LED Kontrolü");
LSTR MSG_LEDS = _UxGT("LEDler");
LSTR MSG_LED_PRESETS = _UxGT("LED Hazır Ayarları");
LSTR MSG_SET_LEDS_RED = _UxGT("Kırmızı");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Turuncu");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Sarı");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Yeşil");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Mavi");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Lacivert");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Menekşe");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Beyaz");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Varsayılan");
LSTR MSG_CUSTOM_LEDS = _UxGT("Özel Işıklar");
LSTR MSG_INTENSITY_R = _UxGT("Kırmızı Şiddeti");
LSTR MSG_INTENSITY_G = _UxGT("Yeşil Şiddeti");
LSTR MSG_INTENSITY_B = _UxGT("Mavi Şiddeti");
LSTR MSG_INTENSITY_W = _UxGT("Beyaz Şiddeti");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Parlaklık");
LSTR MSG_MOVING = _UxGT("Hareket Ediyor..");
LSTR MSG_FREE_XY = _UxGT("Durdur XY");
LSTR MSG_MOVE_X = _UxGT("X Hareketi");
LSTR MSG_MOVE_Y = _UxGT("Y Hareketi");
LSTR MSG_MOVE_Z = _UxGT("Z Hareketi");
LSTR MSG_MOVE_N = _UxGT("@ Hareketi");
LSTR MSG_MOVE_E = _UxGT("Ekstruder");
LSTR MSG_MOVE_EN = _UxGT("Ekstruder *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Nozul Çok Soğuk");
LSTR MSG_MOVE_N_MM = _UxGT("$mm");
LSTR MSG_MOVE_01MM = _UxGT("0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("1mm");
LSTR MSG_MOVE_10MM = _UxGT("10mm");
LSTR MSG_MOVE_100MM = _UxGT("100mm");
LSTR MSG_SPEED = _UxGT("Hız");
LSTR MSG_BED_Z = _UxGT("Z Mesafesi");
LSTR MSG_NOZZLE = _UxGT("Nozul");
LSTR MSG_NOZZLE_N = _UxGT("Nozul ~");
LSTR MSG_BED = _UxGT("Tabla");
LSTR MSG_CHAMBER = _UxGT("Çevirme");
LSTR MSG_FAN_SPEED = _UxGT("Fan Hızı");
LSTR MSG_FAN_SPEED_N = _UxGT("Fan Hızı ~");
LSTR MSG_STORED_FAN_N = _UxGT("Depolanan Fan ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı ~");
LSTR MSG_FLOW = _UxGT("Akış");
LSTR MSG_FLOW_N = _UxGT("Akış ~");
LSTR MSG_CONTROL = _UxGT("Kontrol");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Çarpan");
LSTR MSG_AUTOTEMP = _UxGT("Oto. Sıcaklık");
LSTR MSG_LCD_ON = _UxGT("ık");
LSTR MSG_LCD_OFF = _UxGT("Kapalı");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Kalibrasyon");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Kalibrasyon *");
LSTR MSG_SELECT = _UxGT("Seç");
LSTR MSG_SELECT_E = _UxGT("Seç *");
LSTR MSG_ACC = _UxGT("İvme");
LSTR MSG_JERK = _UxGT("Sarsım");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-Sarsım");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-Sarsım");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-Sarsım");
LSTR MSG_VN_JERK = _UxGT("V@-Sarsım");
LSTR MSG_VE_JERK = _UxGT("Ve-Sarsım");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması");
LSTR MSG_MAX_SPEED = _UxGT("Hız Vektörü");
LSTR MSG_VMAX_A = _UxGT("HızVektör.max ") STR_A;
LSTR MSG_VMAX_B = _UxGT("HızVektör.max ") STR_B;
LSTR MSG_VMAX_C = _UxGT("HızVektör.max ") STR_C;
LSTR MSG_VMAX_N = _UxGT("HızVektör.max @");
LSTR MSG_VMAX_E = _UxGT("HızVektör.max E");
LSTR MSG_VMAX_EN = _UxGT("HızVektör.max *");
LSTR MSG_VMIN = _UxGT("HızVektör.min");
LSTR MSG_VTRAV_MIN = _UxGT("HV.gezinme min");
LSTR MSG_ACCELERATION = _UxGT("Ivme");
LSTR MSG_AMAX_A = _UxGT("Max. ivme ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Max. ivme ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Max. ivme ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Max. ivme @");
LSTR MSG_AMAX_E = _UxGT("Max. ivme E");
LSTR MSG_AMAX_EN = _UxGT("Max. ivme *");
LSTR MSG_A_RETRACT = _UxGT("Ivme-geri çekme");
LSTR MSG_A_TRAVEL = _UxGT("Ivme-gezinme");
LSTR MSG_STEPS_PER_MM = _UxGT("Adım/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" adım/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" adım/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" adım/mm");
LSTR MSG_N_STEPS = _UxGT("@ adım/mm");
LSTR MSG_E_STEPS = _UxGT("E adım/mm");
LSTR MSG_EN_STEPS = _UxGT("* adım/mm");
LSTR MSG_TEMPERATURE = _UxGT("Sıcaklık");
LSTR MSG_MOTION = _UxGT("Hareket");
LSTR MSG_FILAMENT = _UxGT("Filaman");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ekstrüzyon/mm") SUPERSCRIPT_THREE;
LSTR MSG_FILAMENT_DIAM = _UxGT("Filaman Çapı");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Filaman Çapı *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Çıkart mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Yükle mm");
LSTR MSG_ADVANCE_K = _UxGT("K İlerlet");
LSTR MSG_ADVANCE_K_E = _UxGT("K İlerlet *");
LSTR MSG_CONTRAST = _UxGT("LCD Kontrast");
LSTR MSG_STORE_EEPROM = _UxGT("Hafızaya Al");
LSTR MSG_LOAD_EEPROM = _UxGT("Hafızadan Yükle");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Versiyonu");
LSTR MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
LSTR MSG_RESET_PRINTER = _UxGT("Yazıcıyı Resetle");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Yenile");
LSTR MSG_INFO_SCREEN = _UxGT("Bilgi Ekranı");
LSTR MSG_PREPARE = _UxGT("Hazırlık");
LSTR MSG_TUNE = _UxGT("Ayar");
LSTR MSG_START_PRINT = _UxGT("Yaz. Başlat");
LSTR MSG_BUTTON_NEXT = _UxGT("İleri");
LSTR MSG_BUTTON_INIT = _UxGT("İçinde");
LSTR MSG_BUTTON_STOP = _UxGT("Durdur");
LSTR MSG_BUTTON_PRINT = _UxGT("Yazdır");
LSTR MSG_BUTTON_RESET = _UxGT("Resetle");
LSTR MSG_BUTTON_CANCEL = _UxGT("İptal");
LSTR MSG_BUTTON_DONE = _UxGT("Tamamlandı");
LSTR MSG_BUTTON_BACK = _UxGT("Geri");
LSTR MSG_BUTTON_PROCEED = _UxGT("Devam ediyor");
LSTR MSG_PAUSE_PRINT = _UxGT("Duraklat");
LSTR MSG_RESUME_PRINT = _UxGT("Sürdür");
LSTR MSG_STOP_PRINT = _UxGT("Durdur");
LSTR MSG_PRINTING_OBJECT = _UxGT("Yazdırma Nesnesi");
LSTR MSG_CANCEL_OBJECT = _UxGT("Nesneyi İptal Et");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kesinti Kurtarma");
LSTR MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır");
LSTR MSG_NO_MEDIA = _UxGT("SD Kart Yok!");
LSTR MSG_DWELL = _UxGT("Uyku...");
LSTR MSG_USERWAIT = _UxGT("Operatör bekleniyor.");
LSTR MSG_PRINT_PAUSED = _UxGT("Baskı Duraklatıldı");
LSTR MSG_PRINTING = _UxGT("Baskı Yapılıyor...");
LSTR MSG_PRINT_ABORTED = _UxGT("Baskı Durduruldu!");
LSTR MSG_NO_MOVE = _UxGT("İşlem yok.");
LSTR MSG_KILLED = _UxGT("Kilitlendi. ");
LSTR MSG_STOPPED = _UxGT("Durdu. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Geri Çek mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Geri Çekme V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Atlama mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Oto. Geri Çekme");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("G.Çekme Boyu");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tasfiye uzunluğu");
LSTR MSG_TOOL_CHANGE = _UxGT("Takım Değişimi");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Yükselt");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Birincil Hız");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Geri Çekme Hızı");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozul Beklemede");
LSTR MSG_FILAMENTCHANGE = _UxGT("Filaman Değiştir");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Filaman Değiştir *");
LSTR MSG_FILAMENTLOAD = _UxGT("Filaman Yükle");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Filaman Yükle *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Filaman Çıkart");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Filaman Çıkart *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Tümünü Çıkart");
LSTR MSG_ATTACH_MEDIA = _UxGT("SD Kart Başlatılıyor");
LSTR MSG_CHANGE_MEDIA = _UxGT("SD Kart Değiştir");
LSTR MSG_RELEASE_MEDIA = _UxGT("SD Kart Çıkart");
LSTR MSG_ZPROBE_OUT = _UxGT("Z Prob Açık. Tabla");
LSTR MSG_SKEW_FACTOR = _UxGT("Çarpıklık Faktörü");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch K. Test");
LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
LSTR MSG_BLTOUCH_STOW = _UxGT("Kapat");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modu");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modu");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modu");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V Ayarla");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD Ayarla");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Drenaj Raporu");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("TEHLIKE: Kötü ayarlar hasara neden olabilir! Yine de devam edilsin mi?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Ofset Testi");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Kaydet");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI Aç");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Probe Aç");
LSTR MSG_MANUAL_STOW = _UxGT("Z-Probe Kapat");
LSTR MSG_HOME_FIRST = _UxGT("Önce %s%s%s Sıfırla");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Prob Ofsetleri");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("X Prob Ofset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y Prob Ofset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Prob Ofset");
LSTR MSG_BABYSTEP_X = _UxGT("Miniadım X");
LSTR MSG_BABYSTEP_Y = _UxGT("Miniadım Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Miniadım Z");
LSTR MSG_BABYSTEP_N = _UxGT("Miniadım @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Toplam");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop iptal");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Isınma başarısız");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: Sıcaklık Aşımı");
LSTR MSG_THERMAL_RUNAWAY = _UxGT("TERMAL PROBLEM");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA TERMAL PROBLEM");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ODA TERMAL PROBLEM");
LSTR MSG_ERR_MAXTEMP = _UxGT("Hata: MAX.SICAKLIK");
LSTR MSG_ERR_MINTEMP = _UxGT("Hata: MIN.SICAKLIK");
LSTR MSG_HALTED = _UxGT("YAZICI DURDURULDU");
LSTR MSG_PLEASE_RESET = _UxGT("Lütfen Resetleyin");
LSTR MSG_SHORT_DAY = _UxGT("G"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("S"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("D"); // One character only
LSTR MSG_HEATING = _UxGT("Isınıyor...");
LSTR MSG_COOLING = _UxGT("Soğuyor...");
LSTR MSG_BED_HEATING = _UxGT("Tabla Isınıyor...");
LSTR MSG_BED_COOLING = _UxGT("Tabla Soğuyor...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Oda Isınıyor...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Oda Soğuyor...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrasyonu");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Ayarla X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Ayarla Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Ayarla Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Ayarla Merkez");
LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Ayarları");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Oto Kalibrasyon");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Çapral Mil");
LSTR MSG_DELTA_HEIGHT = _UxGT("Yükseklik");
LSTR MSG_DELTA_RADIUS = _UxGT("Yarıçap");
LSTR MSG_INFO_MENU = _UxGT("Yazıcı Hakkında");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Yazıcı Bilgisi");
LSTR MSG_3POINT_LEVELING = _UxGT("3-Nokta Hizalama");
LSTR MSG_LINEAR_LEVELING = _UxGT("Doğrusal Hizalama");
LSTR MSG_BILINEAR_LEVELING = _UxGT("İki Yönlü Doğ. Hiza.");
LSTR MSG_UBL_LEVELING = _UxGT("Birleşik Tabla Hiza.");
LSTR MSG_MESH_LEVELING = _UxGT("Mesh Hizalama");
LSTR MSG_INFO_STATS_MENU = _UxGT("İstatistikler");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Kontrolcü Bilgisi");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistörler");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Ekstruderler");
LSTR MSG_INFO_BAUDRATE = _UxGT("İletişim Hızı");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
LSTR MSG_CASE_LIGHT = _UxGT("Aydınlatmayı");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı Sayısı");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Toplam Baskı Süresi");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun Baskı Süresi");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Toplam Filaman");
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Süre");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filaman");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Sıc.");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Sıc.");
LSTR MSG_INFO_PSU = _UxGT("Güç Kaynağı");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Sürücü Gücü");
LSTR MSG_DAC_PERCENT_N = _UxGT("@ Sürücü %");
LSTR MSG_ERROR_TMC = _UxGT("TMC BAĞLANTI HATASI");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Yaz");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMAN DEGISTIR");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("BASKI DURAKLATILDI");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMAN YüKLE");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMAN ÇIKART");
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Seçenekler:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Daha Fazla Tasviye");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Baskıyı sürdür");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozul: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensörü");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("ınma Farkı mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Sıfırlama Başarısız");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Başarısız");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMAN SEÇ");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU Yaz. Güncelle!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Dikkat Gerektirir.");
LSTR MSG_MMU2_RESUME = _UxGT("Yaz. Devam Et");
LSTR MSG_MMU2_RESUMING = _UxGT("Sürdürülüyor...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Filaman Yükle");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("Tümünü Yükle");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Nozula Yükle");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Filaman Çıkart");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filaman Çıkart ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filamenti Boşalt");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Fil. Yükleniyor %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fil Çıkartılıyor. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fil. Boşaltılıyor....");
LSTR MSG_MMU2_ALL = _UxGT("Tümü");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filaman ~");
LSTR MSG_MMU2_RESET = _UxGT("MMU Resetle");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetleniyot...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kaldır, tıkla");
LSTR MSG_MIX = _UxGT("Karışım");
LSTR MSG_MIX_COMPONENT_N = _UxGT("Bileşen =");
LSTR MSG_MIXER = _UxGT("Karıştırıcı");
LSTR MSG_GRADIENT = _UxGT("Gradyan");
LSTR MSG_FULL_GRADIENT = _UxGT("Tam Gradyan");
LSTR MSG_TOGGLE_MIX = _UxGT("Karışım Geçişi");
LSTR MSG_CYCLE_MIX = _UxGT("Döngü Karışımı");
LSTR MSG_GRADIENT_MIX = _UxGT("Gradyan Karışımı");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Ters Gradyan");
LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktif V-tool");
LSTR MSG_START_VTOOL = _UxGT("Başlat V-tool");
LSTR MSG_END_VTOOL = _UxGT(" Bitir V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("V-tool Karışıö Yap");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Resetlendi");
LSTR MSG_START_Z = _UxGT("Başlat Z:");
LSTR MSG_END_Z = _UxGT(" Bitir Z:");
LSTR MSG_GAMES = _UxGT("Oyunlar");
LSTR MSG_BRICKOUT = _UxGT("Brickout");
LSTR MSG_INVADERS = _UxGT("Invaders");
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
//
// Filament Değişim ekranları 4 satırlı ekranda 3 satıra kadar gösterilir
// ...veya 3 satırlı ekranda 2 satıra kadar
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Baskıya devam etmek", "için Butona bas"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Filaman değişimi", "için başlama", "bekleniyor"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filamanı yükle", "ve devam için", "tuşa bas..."));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nozulü Isıtmak için", "Butona Bas."));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozul Isınıyor", "Lütfen Bekleyin..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Filamanın çıkması", "bekleniyor"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Filamanın yüklenmesi", "bekleniyor.."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "için bekle"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "bitirmek için tıkla"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Baskının devam ", "etmesi için bekle"));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Sürdürmek İçin Tıkla"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Lütfen bekleyiniz..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Yükle ve bas"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Isıtmak için Tıkla"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Isınıyor..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Çıkartılıyor..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Yüklüyor..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Temizleniyor..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Bitirmek için Tıkla"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Sürdürülüyor..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC Sürücüleri");
LSTR MSG_TMC_CURRENT = _UxGT("Sürücü Akımı");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hibrit Eşiği");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensörsüz Sıfırlama");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Adım Modu");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Aktif");
LSTR MSG_SERVICE_RESET = _UxGT("Resetle");
LSTR MSG_SERVICE_IN = _UxGT(" içinde:");
LSTR MSG_BACKLASH = _UxGT("Ters Tepki");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Düzeltme");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Yumuşatma");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,925 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Ukrainian
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
#define DISPLAY_CHARSET_ISO10646_5
namespace Language_uk {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Ukrainian");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готовий.");
LSTR MSG_YES = _UxGT("ТАК");
LSTR MSG_NO = _UxGT("НІ");
LSTR MSG_BACK = _UxGT("Назад");
LSTR MSG_MEDIA_ABORTING = _UxGT("Переривання...");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD-картка вставлена");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD-картка видалена");
LSTR MSG_MEDIA_WAITING = _UxGT("Вставте SD-картку");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціалізації SD");
#else
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціаліз. SD");
#endif
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Помилка зчитування");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск видалений");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("Помилка USB диску");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповнення виклику");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Програмні кінцевики");
#else
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповн. виклику");
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр.кінцевики");
#endif
LSTR MSG_LCD_ENDSTOPS = _UxGT("Кінцевик"); // Max length 8 characters
LSTR MSG_MAIN = _UxGT("Основне меню");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування");
LSTR MSG_CONFIGURATION = _UxGT("Конфігурація");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни");
LSTR MSG_DEBUG_MENU = _UxGT("Меню Debug");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест лінії прогр.");
LSTR MSG_AUTO_HOME = _UxGT("Авто паркування");
LSTR MSG_AUTO_HOME_A = _UxGT("Паркування @");
LSTR MSG_AUTO_HOME_X = _UxGT("Паркування X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Паркування Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Паркування Z");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-вирівнювання");
LSTR MSG_ITERATION = _UxGT("G34 Ітерація: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Зменьшення точності!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Точність досягнута");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Паркування XYZ");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Почати");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Наступна точка");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Завершено!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому");
LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщення дому Z");
#else
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встан. зміщ. дому");
LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщ. дому X");
LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщ. дому Y");
LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщ. дому Z");
#endif
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті");
LSTR MSG_SELECT_ORIGIN = _UxGT("Оберіть нуль");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє значення ");
#else
LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє знач. ");
#endif
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Нагрів ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Нагрів ") PREHEAT_1_LABEL " ~";
LSTR MSG_PREHEAT_1_END = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" все");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" стіл");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" налашт");
LSTR MSG_PREHEAT_M = _UxGT("Нагрів $");
LSTR MSG_PREHEAT_M_H = _UxGT("Нагрів $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Нагрів $ сопло");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагрів $ сопло ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагрів $ все");
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрів $ стіл");
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрів $ налашт");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Нагрів свого");
LSTR MSG_COOLDOWN = _UxGT("Вимкнути нагрів");
LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота");
LSTR MSG_LASER_MENU = _UxGT("Керування лазером");
LSTR MSG_SPINDLE_MENU = _UxGT("Керування шпінделем");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_LASER_POWER = _UxGT("Потужність лазера");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Перемкн. шпіндель");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемкнути вакуум");
LSTR MSG_LASER_TOGGLE = _UxGT("Перемкнути лазер");
LSTR MSG_SPINDLE_POWER = _UxGT("Потужн. шпінделя");
LSTR MSG_LASER_PULSE_MS = _UxGT("Тестовий імпульс мс");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкнути обдув");
#else
LSTR MSG_LASER_POWER = _UxGT("Потужн. лазера");
LSTR MSG_SPINDLE_TOGGLE = _UxGT("Перемк. шпінд.");
LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемк. вакуум");
LSTR MSG_LASER_TOGGLE = _UxGT("Перемкн. лазер");
LSTR MSG_SPINDLE_POWER = _UxGT("Потужн. шпінд.");
LSTR MSG_LASER_PULSE_MS = _UxGT("Тест. імп., мс");
LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкн. обдув");
#endif
LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Керування обдувом");
LSTR MSG_FLOWMETER_FAULT = _UxGT("Помилка обдуву");
LSTR MSG_LASER_FIRE_PULSE = _UxGT("Імпульс лазеру");
LSTR MSG_SPINDLE_FORWARD = _UxGT("Шпіндель вперед");
LSTR MSG_SPINDLE_REVERSE = _UxGT("Шпіндель назад");
LSTR MSG_SWITCH_PS_ON = _UxGT("Увімкнути живлення");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Вимкнути живлення");
LSTR MSG_EXTRUDE = _UxGT("Екструзія");
LSTR MSG_RETRACT = _UxGT("Втягування");
LSTR MSG_MOVE_AXIS = _UxGT("Рух по осям");
LSTR MSG_BED_LEVELING = _UxGT("Вирівнювання столу");
LSTR MSG_LEVEL_BED = _UxGT("Вирівняти стіл");
LSTR MSG_BED_TRAMMING = _UxGT("Вирівняти кути");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрацюв. зонду");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирів.столу");
#else
LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрац.зонду");
LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирівн");
#endif
LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хороші точки: ");
LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Остання Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Наступний кут");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MESH_EDITOR = _UxGT("Зміщення по Z");
#else
LSTR MSG_MESH_EDITOR = _UxGT("Зміщення Z");
#endif
LSTR MSG_EDIT_MESH = _UxGT("Редагувати сітку");
LSTR MSG_EDITING_STOPPED = _UxGT("Редагув. зупинено");
LSTR MSG_PROBING_POINT = _UxGT("Точка сітки");
LSTR MSG_MESH_X = _UxGT("Індекс X");
LSTR MSG_MESH_Y = _UxGT("Індекс Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Значення Z");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Власні команди");
LSTR MSG_M48_TEST = _UxGT("M48 тест зонду");
LSTR MSG_M48_POINT = _UxGT("M48 точка");
LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за межами");
LSTR MSG_M48_DEVIATION = _UxGT("Відхилення");
LSTR MSG_IDEX_MENU = _UxGT("Режим IDEX");
LSTR MSG_OFFSETS_MENU = _UxGT("Зміщення сопел");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто паркування");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Дуплікація");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Дзеркальна копія");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Повний контроль");
LSTR MSG_IDEX_DUPE_GAP = _UxGT("Дублюв. X-проміжок");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("Друге сопло Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("Друге сопло @");
LSTR MSG_UBL_DOING_G29 = _UxGT("Виконується G29");
LSTR MSG_UBL_TOOLS = _UxGT("Інструменти UBL");
LSTR MSG_UBL_LEVEL_BED = _UxGT("Налаштування UBL");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка нахилу");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручне введення сітки");
LSTR MSG_UBL_BC_INSERT = _UxGT("Розмістити шайбу і вимір.");
#else
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручне введ. сітки");
LSTR MSG_UBL_BC_INSERT = _UxGT("Розм. шайбу і вимір.");
#endif
LSTR MSG_UBL_MESH_WIZARD = _UxGT("Майстер сіток UBL");
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_BC_REMOVE = _UxGT("Видалити і виміряти стіл");
#else
LSTR MSG_UBL_BC_REMOVE = _UxGT("Видали і вимір. стіл");
#endif
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Рух до наступної");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Активувати UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивувати UBL");
LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE "C";
LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою сітку");
#else
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редаг. сітки");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою");
#endif
LSTR MSG_UBL_MESH_EDIT = _UxGT("Редагування сітки");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Сітка побудована");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Будувати сітку");
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Будувати сітку ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Підтвердити ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Буд. холодну сітку");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Встан.висоту сітки");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Висота");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Підтвердити сітку");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Підтвердити свою");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 нагрів столу");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрів сопла");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручне грунтування");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("Фікс. довж. грунт.");
LSTR MSG_G26_PRIME_DONE = _UxGT("Грунтув. виконане");
LSTR MSG_G26_CANCELED = _UxGT("G26 скасовано");
LSTR MSG_G26_LEAVING = _UxGT("Вийти з G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продовжити сітку");
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Вирівнювання сітки");
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точкове вирівн.");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнювання растру");
#else
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнюв. растру");
#endif
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Вирівняти сітку");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Крайні точки");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Тип мапи сітки");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Вивести мапу сітки");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вивести на хост");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вивести в CSV");
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Зберегти зовні");
LSTR MSG_UBL_INFO_UBL = _UxGT("Інформація по UBL");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнюв.");
#else
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповн.");
#endif
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ручне заповнення");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Розумне заповнення");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Заповнити сітку");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Анулювати все");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Анулювати найближчу");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налаштувати все");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу");
#else
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налашт. все");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно найближчу");
#endif
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Збереження сітки");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Слот пам'яті");
LSTR MSG_UBL_LOAD_MESH = _UxGT("Завантажити сітку");
LSTR MSG_UBL_SAVE_MESH = _UxGT("Зберегти сітку");
LSTR MSG_MESH_LOADED = _UxGT("Сітка %i завантажена");
LSTR MSG_MESH_SAVED = _UxGT("Сітка %i збережена");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Немає носія");
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Збій: збереж. UBL");
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Збій: відновл. UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Зміщення Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Зміщення Z зупинено");
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL покроково");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Збудувати холодну");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Розумне заповн-я");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Затвердити сітку");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно налашт.все");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Затвердити сітку");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно налашт.все");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Зберегти сітку");
LSTR MSG_LED_CONTROL = _UxGT("Керування світлом");
LSTR MSG_LEDS = _UxGT("Підсвітка");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_LED_PRESETS = _UxGT("Передустановки світла");
#else
LSTR MSG_LED_PRESETS = _UxGT("Передустан. світла");
#endif
LSTR MSG_SET_LEDS_RED = _UxGT("Червоний");
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Помаранчевий");
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Жовтий");
LSTR MSG_SET_LEDS_GREEN = _UxGT("Зелений");
LSTR MSG_SET_LEDS_BLUE = _UxGT("Синій");
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Індіго");
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фіолетовий");
LSTR MSG_SET_LEDS_WHITE = _UxGT("Білий");
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("За умовчанням");
LSTR MSG_LED_CHANNEL_N = _UxGT("Канал =");
LSTR MSG_LEDS2 = _UxGT("Світло #2");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2");
#else
LSTR MSG_NEO2_PRESETS = _UxGT("Передуст. світла #2");
#endif
LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Яскравість");
LSTR MSG_CUSTOM_LEDS = _UxGT("Своє світло");
LSTR MSG_INTENSITY_R = _UxGT("Рівень червоного");
LSTR MSG_INTENSITY_G = _UxGT("Рівень зеленого");
LSTR MSG_INTENSITY_B = _UxGT("Рівень синього");
LSTR MSG_INTENSITY_W = _UxGT("Рівень білого");
LSTR MSG_LED_BRIGHTNESS = _UxGT("Яскравість");
LSTR MSG_MOVING = _UxGT("Рух...");
LSTR MSG_FREE_XY = _UxGT("Звільнити XY");
LSTR MSG_MOVE_X = _UxGT("Рух по X");
LSTR MSG_MOVE_Y = _UxGT("Рух по Y");
LSTR MSG_MOVE_Z = _UxGT("Рух по Z");
LSTR MSG_MOVE_N = _UxGT("Рух по @");
LSTR MSG_MOVE_E = _UxGT("Екструдер");
LSTR MSG_MOVE_EN = _UxGT("Екструдер *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне");
LSTR MSG_MOVE_N_MM = _UxGT("Рух %sмм");
LSTR MSG_MOVE_01MM = _UxGT("Рух 0.1мм");
LSTR MSG_MOVE_1MM = _UxGT("Рух 1мм");
LSTR MSG_MOVE_10MM = _UxGT("Рух 10мм");
LSTR MSG_MOVE_100MM = _UxGT("Рух 100mm");
LSTR MSG_SPEED = _UxGT("Швидкість");
LSTR MSG_BED_Z = _UxGT("Z Столу");
LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковане");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує");
LSTR MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C";
LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_COOLER = _UxGT("Охолодження лазеру");
LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк. охолодж.");
#else
LSTR MSG_COOLER = _UxGT("Охолодж. лазеру");
LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк.охолод");
#endif
LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безпека потоку");
LSTR MSG_LASER = _UxGT("Лазер");
LSTR MSG_FAN_SPEED = _UxGT("Швидк. вент.");
LSTR MSG_FAN_SPEED_N = _UxGT("Швидк. вент. ~");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_STORED_FAN_N = _UxGT("Збереж.швидк.вент. ~");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дод. швидк. вент. ~");
#else
LSTR MSG_STORED_FAN_N = _UxGT("Збереж. вент. ~");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Додат.вент. ~");
#endif
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Дод. швидк. вент.");
LSTR MSG_CONTROLLER_FAN = _UxGT("Вент. контролера");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холості оберти");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Авто-режим");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Робочі оберти");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Період простою");
LSTR MSG_FLOW = _UxGT("Потік");
LSTR MSG_FLOW_N = _UxGT("Потік ~");
LSTR MSG_CONTROL = _UxGT("Налаштування");
LSTR MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мін");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
LSTR MSG_AUTOTEMP = _UxGT("Автотемпер.");
LSTR MSG_LCD_ON = _UxGT("Увім");
LSTR MSG_LCD_OFF = _UxGT("Вимк");
LSTR MSG_PID_AUTOTUNE = _UxGT("Автопідбір PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автопідбір PID *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Підбір PID виконано");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Збій автопідбору! Поганий екструдер.");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Збій автопідбору! Температура завищена.");
LSTR MSG_PID_TIMEOUT = _UxGT("Збій автопідбору! Вичерпан час.");
LSTR MSG_SELECT = _UxGT("Вибрати");
LSTR MSG_SELECT_E = _UxGT("Вибрати *");
LSTR MSG_ACC = _UxGT("Прискорорення");
LSTR MSG_JERK = _UxGT("Ривок");
LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-ривок");
LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-ривок");
LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-ривок");
LSTR MSG_VN_JERK = _UxGT("V@-ривок");
LSTR MSG_VE_JERK = _UxGT("Ve-ривок");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла");
#else
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхил.вузла");
#endif
LSTR MSG_MAX_SPEED = _UxGT("Швидкість, мм/с");
LSTR MSG_VMAX_A = _UxGT("Швидк.макс ") STR_A;
LSTR MSG_VMAX_B = _UxGT("Швидк.макс ") STR_B;
LSTR MSG_VMAX_C = _UxGT("Швидк.макс ") STR_C;
LSTR MSG_VMAX_N = _UxGT("Швидк.макс @");
LSTR MSG_VMAX_E = _UxGT("Швидк.макс E");
LSTR MSG_VMAX_EN = _UxGT("Швидк.макс *");
LSTR MSG_VMIN = _UxGT("Швидк. мін");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_VTRAV_MIN = _UxGT("Переміщення мін");
#else
LSTR MSG_VTRAV_MIN = _UxGT("Переміщ. мін");
#endif
LSTR MSG_ACCELERATION = _UxGT("Прискорення, мм/с2");
LSTR MSG_AMAX_A = _UxGT("Приск.макс ") STR_A;
LSTR MSG_AMAX_B = _UxGT("Приск.макс ") STR_B;
LSTR MSG_AMAX_C = _UxGT("Приск.макс ") STR_C;
LSTR MSG_AMAX_N = _UxGT("Приск.макс @");
LSTR MSG_AMAX_E = _UxGT("Приск.макс E");
LSTR MSG_AMAX_EN = _UxGT("Приск.макс *");
LSTR MSG_A_RETRACT = _UxGT("Приск.втягув.");
LSTR MSG_A_TRAVEL = _UxGT("Приск.переміщ.");
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мін.");
LSTR MSG_STEPS_PER_MM = _UxGT("Кроків на мм");
LSTR MSG_A_STEPS = STR_A _UxGT(" кроків/мм");
LSTR MSG_B_STEPS = STR_B _UxGT(" кроків/мм");
LSTR MSG_C_STEPS = STR_C _UxGT(" кроків/мм");
LSTR MSG_N_STEPS = _UxGT("@ кроків/мм");
LSTR MSG_E_STEPS = _UxGT("E кроків/мм");
LSTR MSG_EN_STEPS = _UxGT("* кроків/мм");
LSTR MSG_TEMPERATURE = _UxGT("Температура");
LSTR MSG_MOTION = _UxGT("Рух");
LSTR MSG_FILAMENT = _UxGT("Пруток");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E, мм") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E обмеж.,мм") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E обмеж. *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Діам. прутка");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Діам. прутка *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Вивантаж., мм");
LSTR MSG_FILAMENT_LOAD = _UxGT("Завантаж., мм");
LSTR MSG_ADVANCE_K = _UxGT("Kоеф. просув.");
LSTR MSG_ADVANCE_K_E = _UxGT("Kоеф. просув. *");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_CONTRAST = _UxGT("Контраст екрану");
LSTR MSG_BRIGHTNESS = _UxGT("Яскравість LCD");
#else
LSTR MSG_CONTRAST = _UxGT("Контраст");
LSTR MSG_BRIGHTNESS = _UxGT("Яскравість");
#endif
LSTR MSG_LCD_TIMEOUT_SEC = _UxGT("LCD Таймаут, с");
LSTR MSG_BRIGHTNESS_OFF = _UxGT("Підсвітка вимк.");
LSTR MSG_STORE_EEPROM = _UxGT("Зберегти в EEPROM");
LSTR MSG_LOAD_EEPROM = _UxGT("Зчитати з EEPROM");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базові параметри");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_INIT_EEPROM = _UxGT("Ініціалізація EEPROM");
#else
LSTR MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM");
#endif
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Збій EEPROM: CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Збій EEPROM: індекс");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Збій EEPROM: версія");
LSTR MSG_SETTINGS_STORED = _UxGT("Параметри збережені");
LSTR MSG_MEDIA_UPDATE = _UxGT("Оновити SD-картку");
LSTR MSG_RESET_PRINTER = _UxGT("Зкинути принтер");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Поновити");
LSTR MSG_INFO_SCREEN = _UxGT("Головний екран");
LSTR MSG_PREPARE = _UxGT("Підготувати");
LSTR MSG_TUNE = _UxGT("Підлаштування");
LSTR MSG_POWER_MONITOR = _UxGT("Монітор живлення");
LSTR MSG_CURRENT = _UxGT("Струм");
LSTR MSG_VOLTAGE = _UxGT("Напруга");
LSTR MSG_POWER = _UxGT("Потужність");
LSTR MSG_START_PRINT = _UxGT("Почати друк");
LSTR MSG_BUTTON_NEXT = _UxGT("Далі"); //short text for buttons
LSTR MSG_BUTTON_INIT = _UxGT("Ініц-я");
LSTR MSG_BUTTON_STOP = _UxGT("Зупинка");
LSTR MSG_BUTTON_PRINT = _UxGT("Друк");
LSTR MSG_BUTTON_RESET = _UxGT("Зкинути");
LSTR MSG_BUTTON_IGNORE = _UxGT("Ігнорув.");
LSTR MSG_BUTTON_CANCEL = _UxGT("Відміна");
LSTR MSG_BUTTON_CONFIRM = _UxGT("Підтвер.");
LSTR MSG_BUTTON_CONTINUE = _UxGT("Продовж.");
LSTR MSG_BUTTON_DONE = _UxGT("Готово");
LSTR MSG_BUTTON_BACK = _UxGT("Назад");
LSTR MSG_BUTTON_PROCEED = _UxGT("Продовж.");
LSTR MSG_BUTTON_SKIP = _UxGT("Пропуск");
LSTR MSG_BUTTON_INFO = _UxGT("Інфо");
LSTR MSG_BUTTON_LEVEL = _UxGT("Рівень");
LSTR MSG_BUTTON_PAUSE = _UxGT("Пауза");
LSTR MSG_BUTTON_RESUME = _UxGT("Звіт");
LSTR MSG_BUTTON_SAVE = _UxGT("Зберегти");
LSTR MSG_PAUSING = _UxGT("Призупинення...");
LSTR MSG_PAUSE_PRINT = _UxGT("Призупинити друк");
LSTR MSG_RESUME_PRINT = _UxGT("Відновити друк");
LSTR MSG_HOST_START_PRINT = _UxGT("Старт з хосту");
LSTR MSG_STOP_PRINT = _UxGT("Скасувати друк");
LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops"); // needs translation
LSTR MSG_PRINTING_OBJECT = _UxGT("Друк об'єкта");
LSTR MSG_CANCEL_OBJECT = _UxGT("Завершити об'єкт");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершити об'єкт =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Віднов. після збою");
LSTR MSG_MEDIA_MENU = _UxGT("Друкувати з SD");
LSTR MSG_NO_MEDIA = _UxGT("SD-картки немає");
LSTR MSG_DWELL = _UxGT("Сон...");
LSTR MSG_USERWAIT = _UxGT("Продовжити...");
LSTR MSG_PRINT_PAUSED = _UxGT("Друк призупинено");
LSTR MSG_PRINTING = _UxGT("Друк...");
LSTR MSG_STOPPING = _UxGT("Зупинка...");
LSTR MSG_REMAINING_TIME = _UxGT("Залишилось");
LSTR MSG_PRINT_ABORTED = _UxGT("Друк скасовано");
LSTR MSG_PRINT_DONE = _UxGT("Друк завершено");
LSTR MSG_NO_MOVE = _UxGT("Немає руху.");
LSTR MSG_KILLED = _UxGT("ПЕРЕРВАНО. ");
LSTR MSG_STOPPED = _UxGT("ЗУПИНЕНО. ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_CONTROL_RETRACT = _UxGT("Втягування, мм");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втягув.,мм");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Повернення, мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Поверн.зміни, мм");
LSTR MSG_AUTORETRACT = _UxGT("Автовтягування");
#else
LSTR MSG_CONTROL_RETRACT = _UxGT("Втягув., мм");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втяг.мм");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Поверн., мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Повер.зміни,мм");
LSTR MSG_AUTORETRACT = _UxGT("Автовтягув.");
#endif
LSTR MSG_CONTROL_RETRACTF = _UxGT("Втягування V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Підскок, мм");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Повернення V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Поверн.зміни V");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Змінити довжини");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Змінити додатково");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистити довжину");
LSTR MSG_TOOL_CHANGE = _UxGT("Зміна сопла");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Підняти по Z");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидкість");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидкість втягув.");
#else
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидк.");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидк.втягув.");
#endif
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Паркувати голову");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Відновити швидкість");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вентилятора");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вентилятора");
#else
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вент.");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вент.");
#endif
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Авто Увімк.");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Вимкн.");
LSTR MSG_TOOL_MIGRATION = _UxGT("Заміна інструменту");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто заміна");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Останній екструдер");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Заміна на *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Заміна прутка");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Заміна прутка *");
LSTR MSG_FILAMENTLOAD = _UxGT("Подати пруток");
LSTR MSG_FILAMENTLOAD_E = _UxGT("Подати пруток *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("Видалити пруток");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Видалити пруток *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Видалити все");
LSTR MSG_ATTACH_MEDIA = _UxGT("Вставити SD-картку");
LSTR MSG_CHANGE_MEDIA = _UxGT("Заміна SD-картки");
LSTR MSG_RELEASE_MEDIA = _UxGT("Видаліть SD-картку");
LSTR MSG_ZPROBE_OUT = _UxGT("Z-Зонд поза столом");
LSTR MSG_SKEW_FACTOR = _UxGT("Фактор нахилу");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Само-тест");
LSTR MSG_BLTOUCH_RESET = _UxGT("Зкинути зонд");
LSTR MSG_BLTOUCH_STOW = _UxGT("Підняти зонд");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Опустити зонд");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Режим збереження");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Встановити BLT на 5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Встановити BLT на OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Звітувати злив");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("НЕБЕЗПЕКА: Неправильні параметри приводять до пошкоджень! Продовжити?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Ініц. TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-зміщення");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Зберегти");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установити TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Установити Z-зонд");
LSTR MSG_MANUAL_STOW = _UxGT("Завантажити Z-зонд");
LSTR MSG_HOME_FIRST = _UxGT("Спочатку дім %s%s%s");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Зміщення зонду");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Зміщення по X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Зміщення по Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Зміщення по Z");
LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Рухати сопло до столу");
LSTR MSG_BABYSTEP_X = _UxGT("Мікрокрок X");
LSTR MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z");
LSTR MSG_BABYSTEP_N = _UxGT("Мікрокрок @");
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Кінцевик спрацював");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Збій нагріву");
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ЗАВИЩЕНА Т") LCD_STR_DEGREE;
LSTR MSG_THERMAL_RUNAWAY = _UxGT("ВИТІК ТЕПЛА");
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ВИТІК ТЕПЛА СТОЛУ");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ВИТІК ТЕПЛА КАМЕРИ");
LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("ВИТІК ОХОЛОДЖЕННЯ");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖЕННЯ НЕ ВДАЛОСЬ");
#else
LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖ. НЕ ВДАЛОСЬ");
#endif
LSTR MSG_ERR_MAXTEMP = _UxGT("МАКСИМАЛЬНА Т") LCD_STR_DEGREE;
LSTR MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE;
LSTR MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
LSTR MSG_PLEASE_RESET = _UxGT("Перезавантажте");
LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("г"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("х"); // One character only
LSTR MSG_HEATING = _UxGT("Нагрівання...");
LSTR MSG_COOLING = _UxGT("Охолодження...");
LSTR MSG_BED_HEATING = _UxGT("Нагрів столу...");
LSTR MSG_PROBE_HEATING = _UxGT("Нагрів зонду...");
LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрів камери...");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_BED_COOLING = _UxGT("Охолодження столу...");
LSTR MSG_PROBE_COOLING = _UxGT("Охолодження зонду...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Охолодження камери...");
LSTR MSG_LASER_COOLING = _UxGT("Охолодження лазеру...");
#else
LSTR MSG_BED_COOLING = _UxGT("Охолодж. столу...");
LSTR MSG_PROBE_COOLING = _UxGT("Охолодж. зонду...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Охолодж. камери...");
LSTR MSG_LASER_COOLING = _UxGT("Охолодж. лазеру...");
#endif
LSTR MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калібрувати X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калібрувати Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калібрувати Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калібр. центр");
LSTR MSG_DELTA_SETTINGS = _UxGT("Параметри Delta");
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Автокалібрування");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Діагональ стрижня");
LSTR MSG_DELTA_HEIGHT = _UxGT("Висота");
LSTR MSG_DELTA_RADIUS = _UxGT("Радіус");
LSTR MSG_INFO_MENU = _UxGT("Про принтер");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Дані принтера");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_3POINT_LEVELING = _UxGT("3-точкове вирівнювання");
LSTR MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівнювання");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівнювання");
#else
LSTR MSG_3POINT_LEVELING = _UxGT("3-точкове вирівн.");
LSTR MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівн.");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівн.");
#endif
LSTR MSG_UBL_LEVELING = _UxGT("UBL");
LSTR MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MESH_DONE = _UxGT("Зондування сітки виконано");
#else
LSTR MSG_MESH_DONE = _UxGT("Зондування виконано");
#endif
LSTR MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Про плату");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Термістори");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Екструдери");
LSTR MSG_INFO_BAUDRATE = _UxGT("Бод");
LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час простою хотенду");
#else
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час прост. хот-у");
#endif
LSTR MSG_CASE_LIGHT = _UxGT("Підсвітка");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яскравість світла");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("НЕ ТОЙ ПРИНТЕР");
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано");
LSTR MSG_PLEASE_PREHEAT = _UxGT("Нагрійте хотенд");
LSTR MSG_COLORS_GET = _UxGT("Отримати колір");
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Носій не вставлений");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Перезавантаження...");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Кількість друків");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Час друку");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший час");
LSTR MSG_COLORS_SELECT = _UxGT("Обрати кольори");
LSTR MSG_COLORS_APPLIED = _UxGT("Кольори застосовані");
#else
LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Немає носія");
LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Перезавантаж...");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Друків");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Загалом");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Найдовше");
LSTR MSG_COLORS_SELECT = _UxGT("Кольори");
LSTR MSG_COLORS_APPLIED = _UxGT("Кольори застос.");
#endif
LSTR MSG_COLORS_RED = _UxGT("Червоний");
LSTR MSG_COLORS_GREEN = _UxGT("Зелений");
LSTR MSG_COLORS_BLUE = _UxGT("Синій");
LSTR MSG_COLORS_WHITE = _UxGT("Білий");
LSTR MSG_UI_LANGUAGE = _UxGT("Мова");
LSTR MSG_SOUND_ENABLE = _UxGT("Дозволити звук");
LSTR MSG_LOCKSCREEN = _UxGT("Блокувати екран");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Мін. ") LCD_STR_THERMOMETER;
LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
LSTR MSG_INFO_PSU = _UxGT("Блок жив-ня");
LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила мотору");
LSTR MSG_DAC_PERCENT_N = _UxGT("Драйвер @, %");
LSTR MSG_ERROR_TMC = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП у EEPROM");
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМІНА ПРУТКА");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ЗУПИНКА ДРУКУ");
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАВАНТАЖИТИ ПРУТОК");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВИВАНТАЖИТИ ПРУТОК");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМЕТРИ ПРОДОВЖЕННЯ:");
#else
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМ.ПРОДОВЖЕННЯ:");
#endif
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Видавити ще");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Відновити друк");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопло: ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик закінчення прутка");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Відстань закінч.,мм");
#else
LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик закінч.прутка");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("До закінч.,мм");
#endif
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Помилка паркування");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Помилка зондування");
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ОБЕРІТЬ ПРУТОК");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Онови прошивку MMU!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU потребує уваги");
LSTR MSG_MMU2_RESUME = _UxGT("MMU Продовжити");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU Продовження...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Завантажити");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Завантажити все");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантажити в сопло");
#else
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завант. в сопло");
#endif
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Звільнити");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Звільнити ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Вивантажити");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Завантаж. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Викидання прутка...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Вивантаження...");
LSTR MSG_MMU2_ALL = _UxGT("Все");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("Пруток ~");
LSTR MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU Перезапуск...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Видаліть, натисніть");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MIX = _UxGT("Змішування");
#else
LSTR MSG_MIX = _UxGT("Змішув.");
#endif
LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
LSTR MSG_MIXER = _UxGT("Змішувач");
LSTR MSG_GRADIENT = _UxGT("Градієнт");
LSTR MSG_FULL_GRADIENT = _UxGT("Повний градієнт");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_TOGGLE_MIX = _UxGT("Переключити змішування");
#else
LSTR MSG_TOGGLE_MIX = _UxGT("Переключ.змішування");
#endif
LSTR MSG_CYCLE_MIX = _UxGT("Циклічне змішування");
LSTR MSG_GRADIENT_MIX = _UxGT("Градієнт змішування");
LSTR MSG_REVERSE_GRADIENT = _UxGT("Змінити градієнт");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_ACTIVE_VTOOL = _UxGT("Активація В-інструменту");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструменту");
LSTR MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструментів");
#else
LSTR MSG_ACTIVE_VTOOL = _UxGT("Актив. В-інструм.");
LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструм");
LSTR MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструм.");
#endif
LSTR MSG_START_VTOOL = _UxGT("Початок В-інструменту");
LSTR MSG_END_VTOOL = _UxGT("Кінець В-інструменту");
LSTR MSG_COMMIT_VTOOL = _UxGT("Змішати В-інструменти");
LSTR MSG_VTOOLS_RESET = _UxGT("В-інструменти зкинуті");
LSTR MSG_START_Z = _UxGT("Початок Z:");
LSTR MSG_END_Z = _UxGT(" Кінець Z:");
LSTR MSG_GAMES = _UxGT("Ігри");
LSTR MSG_BRICKOUT = _UxGT("Цеглини");
LSTR MSG_INVADERS = _UxGT("Вторгнення");
LSTR MSG_SNAKE = _UxGT("Zм!йк@");
LSTR MSG_MAZE = _UxGT("Лабіринт");
LSTR MSG_BAD_PAGE = _UxGT("Погана сторінка");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидкість стор.");
#else
LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидк. стор.");
#endif
LSTR MSG_EDIT_PASSWORD = _UxGT("Редагувати пароль");
LSTR MSG_LOGIN_REQUIRED = _UxGT("Потрібен логін");
LSTR MSG_PASSWORD_SETTINGS = _UxGT("Параметри паролю");
LSTR MSG_ENTER_DIGIT = _UxGT("Введіть цифру");
LSTR MSG_CHANGE_PASSWORD = _UxGT("Змінити пароль");
LSTR MSG_REMOVE_PASSWORD = _UxGT("Видалити пароль");
LSTR MSG_PASSWORD_SET = _UxGT("Пароль: ");
LSTR MSG_START_OVER = _UxGT("Старт через");
LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь зберегти!");
LSTR MSG_PASSWORD_REMOVED = _UxGT("Пароль видалений");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування..."));
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Натисніть кнопку", "для продовження", "друку"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Зачекайте", "на початок", "заміни прутка"));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставте пруток", "та натисніть", "для продовження"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Натисніть кнопку", "для нагріву сопла"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Сопло нагрівається", "зачекайте..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Зачекайте", "на вивід прутка"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Зачекайте", "на ввід прутка"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Дочекайтесь", "очищення прутка"));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Натисніть кнопку", "для завершення", "очищення прутка"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Зачекайте", "на відновлення", "друку"));
#else
// Up to 2 lines allowed
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продовжити друк"));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Зачекайте..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставте і натисніть"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагріти сопло"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрів сопла..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Вивід прутка..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ввід прутка..."));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Очищення прутка..."));
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершити очищення"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Поновлення друку..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Драйвери TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Струм драйвера");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Гібридний поріг");
LSTR MSG_TMC_HOMING_THRS = _UxGT("Дім без кінцевиків");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Режим мікрокроку");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим увімк.");
LSTR MSG_SERVICE_RESET = _UxGT("Зкидання");
LSTR MSG_SERVICE_IN = _UxGT(" в:");
LSTR MSG_BACKLASH = _UxGT("Люфт");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Виправлення");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Зглажування");
LSTR MSG_LEVEL_X_AXIS = _UxGT("Рівень вісі X");
LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калібрування");
#if ENABLED(TOUCH_UI_FTDI_EVE)
LSTR MSG_HEATER_TIMEOUT = _UxGT("Час простою збіг, температура впала. Натисніть ОК, щоби знову нагріти та продовжити");
#else
LSTR MSG_HEATER_TIMEOUT = _UxGT("Час нагрівача збіг");
#endif
LSTR MSG_REHEAT = _UxGT("Поновити нагрів");
LSTR MSG_REHEATING = _UxGT("Нагрівання...");
LSTR MSG_PROBE_WIZARD = _UxGT("Майстер Z-зонда");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув. контрольної точки Z");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондування");
#else
LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув.контр.точки Z");
LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондув.");
#endif
LSTR MSG_SOUND = _UxGT("Звук");
LSTR MSG_TOP_LEFT = _UxGT("Верхній лівий");
LSTR MSG_BOTTOM_LEFT = _UxGT("Нижній лівий");
LSTR MSG_TOP_RIGHT = _UxGT("Верхній правий");
LSTR MSG_BOTTOM_RIGHT = _UxGT("Нижній правий");
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Калібрування успішне");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Збій калібрування");
LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
LSTR MSG_SD_CARD = _UxGT("SD Картка");
LSTR MSG_USB_DISK = _UxGT("USB Диск");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,441 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Vietnamese
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_vi {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Vietnamese");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Sẵn sàng."); // Ready
LSTR MSG_BACK = _UxGT("Trở lại"); // Back
LSTR MSG_MEDIA_ABORTING = _UxGT("Đang hủy bỏ...");
LSTR MSG_MEDIA_INSERTED = _UxGT("Phương tiện được cắm vào"); // Media inserted
LSTR MSG_MEDIA_REMOVED = _UxGT("Phương tiện được rút ra");
LSTR MSG_MEDIA_WAITING = _UxGT("Chờ đợi phương tiện");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Lỗi đọc phương tiện");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB được rút ra");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB khởi thất bại");
LSTR MSG_LCD_ENDSTOPS = _UxGT("Công tắc"); // Endstops - công tắc hành trình
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Công tắc mềm"); // soft Endstops
LSTR MSG_MAIN = _UxGT("Chính"); // Main
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings
LSTR MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration
LSTR MSG_RUN_AUTO_FILES = _UxGT("Khởi chạy tự động"); // Autostart
LSTR MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers
LSTR MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test
LSTR MSG_AUTO_HOME = _UxGT("Về nhà tự động"); // Auto home
LSTR MSG_AUTO_HOME_X = _UxGT("Về nhà X"); // home X
LSTR MSG_AUTO_HOME_Y = _UxGT("Về nhà Y"); // home Y
LSTR MSG_AUTO_HOME_Z = _UxGT("Về nhà Z"); // home Z
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Chỉnh canh Z tự động");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("Đang về nhà XYZ"); // Homing XYZ
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Nhấn để bắt đầu"); // Click to Begin
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Điểm tiếp theo"); // Next Point
LSTR MSG_LEVEL_BED_DONE = _UxGT("San lấp được hoàn thành"); // Leveling Done!
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Chiều cao mờ dần"); // Fade Height
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Đặt bù đắp nhà"); // Set home offsets
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Bù đắp được áp dụng"); // Offsets applied
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước"); // Preheat
LSTR MSG_PREHEAT_1_H = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ~"); // Preheat
LSTR MSG_PREHEAT_1_END = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu");
LSTR MSG_PREHEAT_1_END_E = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ~");
LSTR MSG_PREHEAT_1_ALL = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Tất cả"); // all
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Bàn"); // bed -- using vietnamese term for 'table' instead
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Cấu hình"); // conf
LSTR MSG_PREHEAT_M = _UxGT("Làm nóng $ trước"); // Preheat
LSTR MSG_PREHEAT_M_H = _UxGT("Làm nóng $ trước ~"); // Preheat
LSTR MSG_PREHEAT_M_END = _UxGT("Làm nóng $ Đầu");
LSTR MSG_PREHEAT_M_END_E = _UxGT("Làm nóng $ Đầu ~");
LSTR MSG_PREHEAT_M_ALL = _UxGT("Làm nóng $ Tất cả"); // all
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Làm nóng $ Bàn"); // bed -- using vietnamese term for 'table' instead
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Làm nóng $ Cấu hình"); // conf
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Sự nóng trước tự chọn"); // Preheat Custom
LSTR MSG_COOLDOWN = _UxGT("Nguội xuống"); // Cooldown
LSTR MSG_SWITCH_PS_ON = _UxGT("Bật nguồn"); // Switch power on
LSTR MSG_SWITCH_PS_OFF = _UxGT("Tắt nguồn"); // Switch power off
LSTR MSG_EXTRUDE = _UxGT("Ép đùn"); // Extrude
LSTR MSG_RETRACT = _UxGT("Rút lại"); // Retract
LSTR MSG_MOVE_AXIS = _UxGT("Di chuyển trục"); // Move axis
LSTR MSG_BED_LEVELING = _UxGT("San Lấp Bàn"); // Bed Leveling
LSTR MSG_LEVEL_BED = _UxGT("Làm bằng mặt bàn"); // Level bed
LSTR MSG_BED_TRAMMING = _UxGT("Làm bằng góc bàn"); // Level corners
LSTR MSG_NEXT_CORNER = _UxGT("Góc tiếp theo"); // Next corner
LSTR MSG_EDITING_STOPPED = _UxGT("Chỉnh lưới đã dừng"); // Mesh Editing Stopped
LSTR MSG_MESH_X = _UxGT("Mục lục X"); // Index X
LSTR MSG_MESH_Y = _UxGT("Mục lục Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Giá trị Z"); // Z Value
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Các lệnh tự chọn"); // Custom Commands
LSTR MSG_UBL_DOING_G29 = _UxGT("Đang chạy G29"); // Doing G29
LSTR MSG_UBL_TOOLS = _UxGT("Công cụ UBL"); // UBL tools
LSTR MSG_UBL_LEVEL_BED = _UxGT("San Lấp Bàn Thống Nhất (UBL)"); // Unified Bed Leveling
LSTR MSG_IDEX_MENU = _UxGT("chế độ IDEX"); // IDEX Mode
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Đậu tự động"); // Auto-Park
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Sự gấp đôi"); // Duplication
LSTR MSG_IDEX_MODE_SCALED_COPY = _UxGT("Bản sao thu nhỏ");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Toàn quyền điều khiển"); // Full control
LSTR MSG_IDEX_X_OFFSET = _UxGT("Đầu phun X nhì"); // 2nd nozzle X
LSTR MSG_IDEX_Y_OFFSET = _UxGT("Đầu phun Y nhì");
LSTR MSG_IDEX_Z_OFFSET = _UxGT("Đầu phun Z nhì");
LSTR MSG_IDEX_SAVE_OFFSETS = _UxGT("Lưu bù đắp"); // Save offsets
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Tự xây dựng lưới"); // Manually Build Mesh
LSTR MSG_UBL_BC_INSERT = _UxGT("Đặt chêm và đo"); // Place shim & measure
LSTR MSG_UBL_BC_INSERT2 = _UxGT("Đo"); // Measure
LSTR MSG_UBL_BC_REMOVE = _UxGT("Tháo và đo bàn"); // Remove & measure bed
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Chuyển sang tiếp theo"); // moving to next
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Bật UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Tắt UBL");
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Nhiệt độ bàn"); // Bed Temp
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nhiệt độ đầu phun"); // Hotend Temp
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Chỉnh sửa lưới"); // Mesh Edit
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Chỉnh sửa lưới tự chọn"); // Edit Custom Mesh
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Chỉnh lưới chính xác"); // Fine tuning mesh
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Chỉnh sửa xong lưới"); // Done Editing Mesh
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Xây dựng lưới tự chọn"); // Build Custom Mesh
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Xây dựng lưới"); // Build Mesh
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Xây dựng lưới ($)");
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Thẩm tra lưới ($)");
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Xây dựng lưới lạnh"); // Build cold mesh
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Điều chỉnh chiều cao lưới"); // Adjust Mesh Height
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Số lượng chiều cao"); // Height Amount
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Thẩm tra lưới"); // Validate Mesh
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Thẩm tra lưới tự chọn"); // validate custom mesh
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Tiếp tục xây lưới bàn"); // Continue Bed Mesh
LSTR MSG_UBL_MESH_LEVELING = _UxGT("Đang san lấp lưới"); // Mesh Leveling
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Đang san lấp 3-điểm"); // 3-Point Leveling
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Đang san lấp lưới phẳng"); // Grid (planar) Mesh Leveling
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Làm bằng lưới"); // Level Mesh
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Điểm bên cạnh"); // Side Points
LSTR MSG_UBL_MAP_TYPE = _UxGT("Loại bản đồ"); // Map Type
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Đầu ra bản đồ lưới"); // Output Mesh Map
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Đầu ra cho máy chủ"); // Output for Host
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Đầu ra cho CSV"); // Output for CSV
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Hỗ trợ lưới"); // Off Printer Backup | backup mesh
LSTR MSG_UBL_INFO_UBL = _UxGT("Đầu ra thông tin UBL"); // Output UBL Info
LSTR MSG_EDIT_MESH = _UxGT("Chỉnh sửa lưới"); // Edit mesh
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Số lượng lấp đầy"); // Fill-in Amount
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Tự lấp đầy"); // Manual Fill-in
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Lấp đầy thông minh"); // Smart Fill-in
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Lưới lấp đầy"); // Fill-in Mesh
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Bác bỏ tất cả"); // Invalidate All
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Bác bỏ gần nhất"); // Invalidate Closest
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Chỉnh chính xác tất cả"); // Fine Tune ALl
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Chỉnh chính xác gần nhất"); // Fine Tune Closest
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Lưu trữ lưới"); // Mesh Storage
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Khe nhớ"); // Memory Slot
LSTR MSG_UBL_LOAD_MESH = _UxGT("Tải lưới bàn"); // Load Bed Mesh
LSTR MSG_UBL_SAVE_MESH = _UxGT("Lưu lưới bàn"); // Save Bed Mesh
LSTR MSG_MESH_LOADED = _UxGT("%i lưới được nạp"); // Mesh %i loaded
LSTR MSG_MESH_SAVED = _UxGT("%i lưới đã lưu");
LSTR MSG_NO_STORAGE = _UxGT("Không lưu trữ"); // No Storage
LSTR MSG_UBL_SAVE_ERROR = _UxGT("Điều sai: Lưu UBL"); // Err: UBL Save
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Điều Sai: Khôi Phục UBL"); // Err: UBL Restore
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Đầu Dò-Z Đã Ngừng"); // Z-Offset Stopped
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Bước-Từng-Bước UBL"); // Step-By-Step UBL
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Xây dựng lưới lạnh");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Lấp đầy thông minh");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Thẩm tra lưới");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Chỉnh chính xác tất cả");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Thẩm tra lưới");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Chỉnh chính xác tất cả");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Lưu lưới bàn");
LSTR MSG_LED_CONTROL = _UxGT("Điều khiển LED"); // LED Control
LSTR MSG_LEDS = _UxGT("Đèn"); // Lights
LSTR MSG_LED_PRESETS = _UxGT("Đèn định sẵn"); // Light Presets
LSTR MSG_SET_LEDS_RED = _UxGT("Đỏ"); // Red
LSTR MSG_SET_LEDS_ORANGE = _UxGT("Cam"); // Orange
LSTR MSG_SET_LEDS_YELLOW = _UxGT("Vàng"); // Yellow
LSTR MSG_SET_LEDS_GREEN = _UxGT("Xanh Lá"); // Green
LSTR MSG_SET_LEDS_BLUE = _UxGT("Xanh"); // Blue
LSTR MSG_SET_LEDS_INDIGO = _UxGT("Xanh Đậm"); // Indigo
LSTR MSG_SET_LEDS_VIOLET = _UxGT("Tím"); // Violet
LSTR MSG_SET_LEDS_WHITE = _UxGT("Trắng"); // White
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Mặc định"); // Default
LSTR MSG_CUSTOM_LEDS = _UxGT("Đèn Tự Chọn"); // Custom Lights
LSTR MSG_INTENSITY_R = _UxGT("Cường Độ Đỏ"); // Red Intensity
LSTR MSG_INTENSITY_G = _UxGT("Cường Độ Xanh Lá"); // Green Intensity
LSTR MSG_INTENSITY_B = _UxGT("Cường Độ Xanh"); // Blue Intensity
LSTR MSG_INTENSITY_W = _UxGT("Cường Độ Trắng"); // White Intensity
LSTR MSG_LED_BRIGHTNESS = _UxGT("độ sáng"); // Brightness
LSTR MSG_MOVING = _UxGT("Di chuyển..."); // Moving
LSTR MSG_FREE_XY = _UxGT("Giải phóng XY"); // Free XY
LSTR MSG_MOVE_X = _UxGT("Di chuyển X"); // Move X
LSTR MSG_MOVE_Y = _UxGT("Di chuyển Y");
LSTR MSG_MOVE_Z = _UxGT("Di chuyển Z");
LSTR MSG_MOVE_N = _UxGT("Di chuyển @");
LSTR MSG_MOVE_E = _UxGT("Máy đùn"); // Extruder
LSTR MSG_MOVE_EN = _UxGT("Máy đùn *");
LSTR MSG_HOTEND_TOO_COLD = _UxGT("Đầu nóng quá lạnh"); // Hotend too cold
LSTR MSG_MOVE_01MM = _UxGT("Di chuyển 0.1mm"); // Move 0.1mm
LSTR MSG_MOVE_1MM = _UxGT("Di chuyển 1mm"); // Move 1mm
LSTR MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
LSTR MSG_MOVE_100MM = _UxGT("Di chuyển 100mm"); // Move 100mm
LSTR MSG_SPEED = _UxGT("Tốc độ"); // Speed
LSTR MSG_BED_Z = _UxGT("Z Bàn");
LSTR MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
LSTR MSG_NOZZLE_N = _UxGT("Đầu phun ~");
LSTR MSG_BED = _UxGT("Bàn"); // bed
LSTR MSG_FAN_SPEED = _UxGT("Tốc độ quạt"); // fan speed
LSTR MSG_FAN_SPEED_N = _UxGT("Tốc độ quạt ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Tốc độ quạt phụ"); // Extra fan speed
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Tốc độ quạt phụ ~");
LSTR MSG_FLOW = _UxGT("Lưu Lượng");
LSTR MSG_FLOW_N = _UxGT("Lưu Lượng ~");
LSTR MSG_CONTROL = _UxGT("Điều khiển"); // Control
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Đa"); // min
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Thiểu");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Hệ Số"); // factor
LSTR MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp
LSTR MSG_LCD_ON = _UxGT("Bật"); // on
LSTR MSG_LCD_OFF = _UxGT("Tắt"); // off
LSTR MSG_SELECT = _UxGT("Lựa"); // Select
LSTR MSG_SELECT_E = _UxGT("Lựa *");
LSTR MSG_ACC = _UxGT("Tăng Tốc");
LSTR MSG_JERK = _UxGT("Giật");
LSTR MSG_VA_JERK = _UxGT("Giật-V") STR_A;
LSTR MSG_VB_JERK = _UxGT("Giật-V") STR_B;
LSTR MSG_VC_JERK = _UxGT("Giật-V") STR_C;
LSTR MSG_VN_JERK = _UxGT("Giật-V@");
LSTR MSG_VE_JERK = _UxGT("Giật-Ve");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Độ Lệch Chỗ Giao"); // Junction Dev
LSTR MSG_MAX_SPEED = _UxGT("Vận tốc"); // velocity
LSTR MSG_VMAX_A = _UxGT("Vđa") STR_A; // Vmax
LSTR MSG_VMAX_B = _UxGT("Vđa") STR_B;
LSTR MSG_VMAX_C = _UxGT("Vđa") STR_C;
LSTR MSG_VMAX_N = _UxGT("Vđa@");
LSTR MSG_VMAX_E = _UxGT("VđaE");
LSTR MSG_VMAX_EN = _UxGT("Vđa *");
LSTR MSG_VMIN = _UxGT("Vthiểu"); // Vmin
LSTR MSG_VTRAV_MIN = _UxGT("Vchuyển thiểu"); // VTrav min
LSTR MSG_ACCELERATION = _UxGT("Sự tăng tốc"); // Acceleration
LSTR MSG_AMAX_A = _UxGT("Tăng tốc ca") STR_A; // Amax
LSTR MSG_AMAX_B = _UxGT("Tăng tốc ca") STR_B;
LSTR MSG_AMAX_C = _UxGT("Tăng tốc ca") STR_C;
LSTR MSG_AMAX_N = _UxGT("Tăng tốc ca@");
LSTR MSG_AMAX_E = _UxGT("Tăng tốc caE");
LSTR MSG_AMAX_EN = _UxGT("Tăng tốc ca *");
LSTR MSG_A_RETRACT = _UxGT("TT-Rút"); // A-retract
LSTR MSG_A_TRAVEL = _UxGT("TT-Chuyển"); // A-travel
LSTR MSG_STEPS_PER_MM = _UxGT("Bước/mm"); // Steps
LSTR MSG_A_STEPS = _UxGT("Bước") STR_A _UxGT("/mm"); // Steps/mm
LSTR MSG_B_STEPS = _UxGT("Bước") STR_B _UxGT("/mm");
LSTR MSG_C_STEPS = _UxGT("Bước") STR_C _UxGT("/mm");
LSTR MSG_N_STEPS = _UxGT("Bước@/mm");
LSTR MSG_E_STEPS = _UxGT("BướcE/mm");
LSTR MSG_EN_STEPS = _UxGT("Bước */mm");
LSTR MSG_TEMPERATURE = _UxGT("Nhiệt độ"); // Temperature
LSTR MSG_MOTION = _UxGT("Chuyển động"); // Motion
LSTR MSG_FILAMENT = _UxGT("Vật liệu in"); // dây nhựa
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E bằng mm") SUPERSCRIPT_THREE; // E in mm
LSTR MSG_FILAMENT_DIAM = _UxGT("Đường kính nhựa"); // Fil. Dai.
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Đường kính nhựa *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Dỡ mm"); // unload mm
LSTR MSG_FILAMENT_LOAD = _UxGT("Nạp mm");
LSTR MSG_ADVANCE_K = _UxGT("K Cấp Cao"); // Advance K
LSTR MSG_ADVANCE_K_E = _UxGT("K Cấp Cao *"); // Advance K
LSTR MSG_CONTRAST = _UxGT("Độ tương phản LCD"); // LCD contrast
LSTR MSG_STORE_EEPROM = _UxGT("Lưu các thiết lập"); // Store settings
LSTR MSG_LOAD_EEPROM = _UxGT("Tải các cài đặt"); // Load settings
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Khôi phục phòng hư"); // Restore Defaults
LSTR MSG_INIT_EEPROM = _UxGT("Khởi Tạo EEPROM"); // Initialize EEPROM
LSTR MSG_MEDIA_UPDATE = _UxGT("Cập Nhật phương tiện"); // Update media
LSTR MSG_RESET_PRINTER = _UxGT("Bặt Lại Máy In");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Cập Nhật"); // Refresh
LSTR MSG_INFO_SCREEN = _UxGT("Màn Hình Thông Tin"); // Info screen
LSTR MSG_PREPARE = _UxGT("Chuẩn bị"); // Prepare
LSTR MSG_TUNE = _UxGT("Điều Chỉnh"); // Tune
LSTR MSG_PAUSE_PRINT = _UxGT("Tạm dừng in"); // Pause print
LSTR MSG_RESUME_PRINT = _UxGT("Tiếp tục in"); // Resume print
LSTR MSG_STOP_PRINT = _UxGT("Ngừng in"); // Stop print
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Phục Hồi Mất Điện"); // Outage Recovery
LSTR MSG_MEDIA_MENU = _UxGT("In từ phương tiện"); // Print from media
LSTR MSG_NO_MEDIA = _UxGT("Không có phương tiện"); // No media
LSTR MSG_DWELL = _UxGT("Ngủ..."); // Sleep
LSTR MSG_USERWAIT = _UxGT("Nhấn để tiếp tục..."); // Click to resume (same as 'continue')
LSTR MSG_PRINT_PAUSED = _UxGT("In tạm dừng"); // print paused
LSTR MSG_PRINTING = _UxGT("Đang in..."); // printing
LSTR MSG_PRINT_ABORTED = _UxGT("In đã hủy bỏ"); // Print aborted
LSTR MSG_NO_MOVE = _UxGT("Không di chuyển."); // No move.
LSTR MSG_KILLED = _UxGT("ĐÃ CHẾT. ");
LSTR MSG_STOPPED = _UxGT("ĐÃ NGỪNG. ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Rút mm"); // Retract mm
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Rút Trao.mm"); // Swap Re.mm
LSTR MSG_CONTROL_RETRACTF = _UxGT("Rút V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Nhảy mm"); // hop
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("BỏRút mm"); // Unretr. mm
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("BỏRút T mm"); // S Unretr. mm
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("BỏRút V"); // UnRet V
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("BỏRút T V"); // S UnRet V
LSTR MSG_AUTORETRACT = _UxGT("RútTựĐộng"); // Auto-Retract
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Khoảng Cách Rút"); // Retract Distance
LSTR MSG_TOOL_CHANGE = _UxGT("Thay Đổi Công Cụ"); // Tool Change
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Đưa Lên Z"); // Z Raise
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Tốc Độ Tuôn Ra"); // Prime Speed
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Tốc Độ Rút Lại"); // Retract Speed
LSTR MSG_FILAMENTCHANGE = _UxGT("Thay dây nhựa"); // change filament
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Thay dây nhựa *"); // change filament
LSTR MSG_FILAMENTLOAD = _UxGT("Nạp dây nhựa"); // load filament
LSTR MSG_FILAMENTLOAD_E = _UxGT("Nạp dây nhựa *"); // load filament
LSTR MSG_FILAMENTUNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Dỡ dây nhựa *"); // unload filament
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Dỡ tất cả"); // Unload All
LSTR MSG_ATTACH_MEDIA = _UxGT("Khởi tạo phương tiện"); // Attach media
LSTR MSG_CHANGE_MEDIA = _UxGT("Thay phương tiện"); // Change midea
LSTR MSG_RELEASE_MEDIA = _UxGT("Phát hành phương tiện");
LSTR MSG_ZPROBE_OUT = _UxGT("Đầu Dò Z qua bàn"); // Z Probe past bed
LSTR MSG_SKEW_FACTOR = _UxGT("Hệ số nghiêng"); // Skew Factor
LSTR MSG_BLTOUCH = _UxGT("BLTOUCH"); // BLTouch
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Tự kiểm tra BLTOUCH "); // BLTouch Self-Test
LSTR MSG_BLTOUCH_RESET = _UxGT("Bặt lại BLTouch"); // Reset BLTouch
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Đem BLTouch"); // Deploy BLTouch
LSTR MSG_BLTOUCH_STOW = _UxGT("Cất BLTouch"); // Stow BLTouch
LSTR MSG_MANUAL_DEPLOY = _UxGT("Đem Đầu Dò-Z"); // Deploy Z-Probe
LSTR MSG_MANUAL_STOW = _UxGT("Cất Đầu Dò-Z"); // Stow Z-Probe
LSTR MSG_HOME_FIRST = _UxGT("Về nhà %s%s%s Trước");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Đầu Dò Bù Đắp Z"); // Probe Z Offset
LSTR MSG_BABYSTEP_X = _UxGT("Nhít X"); // Babystep X
LSTR MSG_BABYSTEP_Y = _UxGT("Nhít Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Nhít Z");
LSTR MSG_BABYSTEP_N = _UxGT("Nhít @");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Hủy bỏ công tắc"); // Endstop abort
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Sưởi đầu phun không thành công"); // Heating failed
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Điều sai: nhiệt độ dư"); // Err: REDUNDANT TEMP
LSTR MSG_THERMAL_RUNAWAY = _UxGT("Vấn đề nhiệt"); // THERMAL RUNAWAY | problem
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("Vấn đề nhiệt bàn"); // BED THERMAL RUNAWAY
LSTR MSG_ERR_MAXTEMP = _UxGT("Điều sai: nhiệt độ tối đa"); // Err: MAXTEMP
LSTR MSG_ERR_MINTEMP = _UxGT("Điều sai: nhiệt độ tối thiểu"); // Err: MINTEMP
LSTR MSG_HALTED = _UxGT("MÁY IN ĐÃ DỪNG LẠI"); // PRINTER HALTED
LSTR MSG_PLEASE_RESET = _UxGT("Xin bặt lại"); // Please reset
LSTR MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
LSTR MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
LSTR MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
LSTR MSG_HEATING = _UxGT("Đang sưởi nóng..."); // heating
LSTR MSG_COOLING = _UxGT("Đang làm nguội..."); // cooling
LSTR MSG_BED_HEATING = _UxGT("Đang sưởi nong bàn..."); // bed heating
LSTR MSG_BED_COOLING = _UxGT("Đang làm nguội bàn..."); // bed cooling
LSTR MSG_DELTA_CALIBRATE = _UxGT("Cân Chỉnh Delta"); // Delta calibration
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Chỉnh X lại");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Chỉnh Y lại");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Chỉnh Z lại");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Chỉnh Z Center"); // Calibrate Center
LSTR MSG_DELTA_SETTINGS = _UxGT("Cài Đặt Delta"); // Delta Settings
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Cân Chỉnh Tự Động"); // Auto Calibration
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Gậy Chéo"); // Diag Rod
LSTR MSG_DELTA_HEIGHT = _UxGT("Chiều Cao"); // Height
LSTR MSG_DELTA_RADIUS = _UxGT("Bán Kính"); // Radius
LSTR MSG_INFO_MENU = _UxGT("Về Máy In");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Thông Tin Máy In"); // Printer Info
LSTR MSG_3POINT_LEVELING = _UxGT("San lấp 3-Điểm"); // 3-Point Leveling
LSTR MSG_LINEAR_LEVELING = _UxGT("San Lấp Tuyến Tính"); // Linear Leveling
LSTR MSG_BILINEAR_LEVELING = _UxGT("San Lấp Song Tuyến"); // Bilinear Leveling
LSTR MSG_UBL_LEVELING = _UxGT("San Lấp Bàn Thống Nhất"); // Unified Bed Leveling
LSTR MSG_MESH_LEVELING = _UxGT("Lưới San Lấp"); // Mesh Leveling
LSTR MSG_INFO_STATS_MENU = _UxGT("Thống Kê Máy In"); // Printer Stats
LSTR MSG_INFO_BOARD_MENU = _UxGT("Thông Tin Bo Mạch"); // Board Info
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Điện Trở Nhiệt"); // Thermistors
LSTR MSG_INFO_EXTRUDERS = _UxGT("Máy đùn"); // Extruders
LSTR MSG_INFO_BAUDRATE = _UxGT("Baud"); // Baud
LSTR MSG_INFO_PROTOCOL = _UxGT("Giao Thức"); // Protocol
LSTR MSG_CASE_LIGHT = _UxGT("Đèn Khuông"); // Case light
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Độ Sáng"); // Light Brightness
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Số In"); // Print Count
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tổng số thời gian in"); // Total print time
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Thời gian việc lâu nhất"); // Longest job time
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Tổng số đùn"); // Extruded total
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("In"); // prints
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành"); // Completed
LSTR MSG_INFO_PRINT_TIME = _UxGT("Tổng số"); // total
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Dài nhất"); // Longest
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Đã ép đùn");
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("Nhiệt độ tối thiểu"); // Min Temp
LSTR MSG_INFO_MAX_TEMP = _UxGT("Nhiệt độ tối đa"); // Max temp
LSTR MSG_INFO_PSU = _UxGT("Bộ nguồn"); // PSU
LSTR MSG_DRIVE_STRENGTH = _UxGT("Sức mạnh ổ đĩa"); // Drive Strength
LSTR MSG_DAC_PERCENT_N = _UxGT("@ % trình điều khiển");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Ghi DAC EEPROM"); // DAC EEPROM Write
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("In tạm dừng"); // PRINT PAUSED
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("Nạp dây nhựa");
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Tùy chọn hồi phục:"); // RESUME OPTIONS
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Xả thêm"); // Purge more
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Tiếp tục"); // continue
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Đầu Phun: "); // Nozzle
LSTR MSG_RUNOUT_SENSOR_ENABLE = _UxGT("Cảm Biến Hết"); // Runout Sensor
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Sự nhà không thành công"); // Homing failed
LSTR MSG_LCD_PROBING_FAILED = _UxGT(" không thành công"); // Probing failed
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nhấn nút", "để tiếp tục in")); // Press button to resume print
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Chờ cho sự", "thay đổi dây nhựa", "bắt đầu")); // wait for filament change to start
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Đút dây nhựa vào", "và nhấn nút", "để tiếp tục")); // insert filament and press button to continue //
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nhấn nút", "để làm nóng đầu phun")); // Press button to heat nozzle
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Đầu phun đang nóng lên", "Xin chờ...")); // Nozzle heating Please wait
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa ra")); // Wait for filament unload
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa vào")); // Wait for filament load
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Chờ tro", "xả dây nhựa")); // wait for filament purge
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Nhấn nút để kết thúc", "xả dây nhựa")); // Click to finish dây nhựa purge
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Chờ tro in", "tiếp tục...")); // Wait for print to resume
#else // LCD_HEIGHT < 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Nhấn nút để tiếp tục")); // Click to continue
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Xin chờ..."));
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Chèn và nhấn")); // Insert and Click
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Nhấn để sưởi")); // Click to heat
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Đang sưởi nóng")); // Heating
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Đang dỡ ra...")); // Ejecting
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Đang nạp...")); // Loading
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Đang xả...")); // Purging
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Nhấn nút để kết thúc")); // Click to finish
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Đang tiếp tục...")); // Resuming
#endif // LCD_HEIGHT < 4
LSTR MSG_TMC_DRIVERS = _UxGT("Trình điều khiển TMC"); // TMC drivers
LSTR MSG_TMC_CURRENT = _UxGT("Dòng điện trình điều khiển"); // Driver current
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Ngưỡng Hỗn Hợp"); // Hybrid threshold
LSTR MSG_TMC_HOMING_THRS = _UxGT("Vô cảm biến"); // Sensorless homing
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Chế độ từng bước"); // Stepping mode
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("CắtTàngHình được kích hoạt"); // StealthChop enabled
}

View File

@ -0,0 +1,620 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Simplified Chinese
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_zh_CN {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 3;
LSTR LANGUAGE = _UxGT("Simplified Chinese");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT("已就绪."); // " ready."
LSTR MSG_MARLIN = _UxGT("马林");
LSTR MSG_YES = _UxGT("");
LSTR MSG_NO = _UxGT("");
LSTR MSG_BACK = _UxGT("返回"); // ”Back“
LSTR MSG_MEDIA_ABORTING = _UxGT("放弃中...");
LSTR MSG_MEDIA_INSERTED = _UxGT("存储卡已插入"); // "Card inserted"
LSTR MSG_MEDIA_REMOVED = _UxGT("存储卡被拔出"); // "Card removed"
LSTR MSG_MEDIA_WAITING = _UxGT("等待存储器");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("存储器读取错误");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB设备已弹出");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB启动错误");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("子响应溢出");
LSTR MSG_LCD_ENDSTOPS = _UxGT("挡块"); // "Endstops" // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("软挡块");
LSTR MSG_MAIN = _UxGT("主菜单"); // "Main"
LSTR MSG_ADVANCED_SETTINGS = _UxGT("高级设置");
LSTR MSG_CONFIGURATION = _UxGT("配置");
LSTR MSG_RUN_AUTO_FILES = _UxGT("自动开始"); // "Autostart"
LSTR MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); // "Disable steppers"
LSTR MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu"
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test"
LSTR MSG_HOMING = _UxGT("回原点");
LSTR MSG_AUTO_HOME = _UxGT("自动回原点"); // "Auto home"
LSTR MSG_AUTO_HOME_X = _UxGT("回X原位"); // "Home X"
LSTR MSG_AUTO_HOME_Y = _UxGT("回Y原位"); // "Home Y"
LSTR MSG_AUTO_HOME_Z = _UxGT("回Z原位"); // "Home Z"
LSTR MSG_AUTO_Z_ALIGN = _UxGT("自动Z对齐");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("平台调平XYZ归原位"); // "Homing XYZ"
LSTR MSG_LEVEL_BED_WAITING = _UxGT("单击开始热床调平"); // "Click to Begin"
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("下个热床调平点"); // "Next Point"
LSTR MSG_LEVEL_BED_DONE = _UxGT("完成热床调平"); // "Leveling Done!"
LSTR MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
LSTR MSG_SET_HOME_OFFSETS = _UxGT("设置原点偏移"); // "Set home offsets"
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已启用"); // "Offsets applied"
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("预热 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_2_LABEL"
LSTR MSG_PREHEAT_1_H = _UxGT("预热 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_2_LABEL"
LSTR MSG_PREHEAT_1_END = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_1_END_E = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ~"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_1_ALL = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 热床"); //MSG_PREHEAT_1 " Bed"
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 设置"); //MSG_PREHEAT_1 " conf"
LSTR MSG_PREHEAT_M = _UxGT("预热 $"); // "Preheat PREHEAT_2_LABEL"
LSTR MSG_PREHEAT_M_H = _UxGT("预热 $ ~"); // "Preheat PREHEAT_2_LABEL"
LSTR MSG_PREHEAT_M_END = _UxGT("预热 $ 喷嘴"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_M_END_E = _UxGT("预热 $ 喷嘴 ~"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_M_ALL = _UxGT("预热 $ 全部"); //MSG_PREHEAT_1 " All"
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("预热 $ 热床"); //MSG_PREHEAT_1 " Bed"
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("预热 $ 设置"); //MSG_PREHEAT_1 " conf"
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("预热自定义");
LSTR MSG_COOLDOWN = _UxGT("降温"); // "Cooldown"
LSTR MSG_CUTTER_FREQUENCY = _UxGT("切割频率");
LSTR MSG_LASER_MENU = _UxGT("激光控制");
LSTR MSG_LASER_POWER = _UxGT("激光电源");
LSTR MSG_SPINDLE_MENU = _UxGT("主轴控制");
LSTR MSG_SPINDLE_POWER = _UxGT("主轴电源");
LSTR MSG_SPINDLE_REVERSE = _UxGT("主轴反转");
LSTR MSG_SWITCH_PS_ON = _UxGT("开启电源"); // "Switch power on"
LSTR MSG_SWITCH_PS_OFF = _UxGT("关闭电源"); // "Switch power off"
LSTR MSG_EXTRUDE = _UxGT("挤出"); // "Extrude"
LSTR MSG_RETRACT = _UxGT("回抽"); // "Retract"
LSTR MSG_MOVE_AXIS = _UxGT("移动轴"); // "Move axis"
LSTR MSG_BED_LEVELING = _UxGT("调平热床"); // "Bed leveling"
LSTR MSG_LEVEL_BED = _UxGT("调平热床"); // "Level bed"
LSTR MSG_BED_TRAMMING = _UxGT("调平边角"); // "Bed Tramming"
LSTR MSG_NEXT_CORNER = _UxGT("下个边角"); // "Next corner"
LSTR MSG_MESH_EDITOR = _UxGT("网格编辑器");
LSTR MSG_EDIT_MESH = _UxGT("编辑网格"); // "Edit Mesh"
LSTR MSG_EDITING_STOPPED = _UxGT("网格编辑已停止"); // "Mesh Editing Stopped"
LSTR MSG_PROBING_POINT = _UxGT("探测点");
LSTR MSG_MESH_X = _UxGT("索引X");
LSTR MSG_MESH_Y = _UxGT("索引Y");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z 值");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("定制命令"); // "Custom Commands"
LSTR MSG_M48_TEST = _UxGT("M48探测");
LSTR MSG_M48_POINT = _UxGT("M48点");
LSTR MSG_M48_DEVIATION = _UxGT("M48偏差");
LSTR MSG_IDEX_MENU = _UxGT("IDEX模式");
LSTR MSG_OFFSETS_MENU = _UxGT("工具偏移量");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("自动停靠");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("复制");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("镜像复制");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("完全控制");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("第二喷头是Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("第二喷头是@");
LSTR MSG_UBL_DOING_G29 = _UxGT("执行G29"); // "Doing G29"
LSTR MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
LSTR MSG_UBL_LEVEL_BED = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
LSTR MSG_LCD_TILTING_MESH = _UxGT("倾斜點");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("手工创设网格"); // "Manually Build Mesh"
LSTR MSG_UBL_BC_INSERT = _UxGT("放置垫片并测量"); // "Place shim & measure"
LSTR MSG_UBL_BC_INSERT2 = _UxGT("测量"); // "Measure"
LSTR MSG_UBL_BC_REMOVE = _UxGT("移除并测量热床"); // "Remove & measure bed"
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("移动到下一个"); // "Moving to next"
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("激活UBL"); // "Activate UBL"
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("关闭UBL"); // "Deactivate UBL"
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("热床温度"); // "Bed Temp"
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("热床温度");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("热端温度"); // "Hotend Temp"
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("热端温度");
LSTR MSG_UBL_MESH_EDIT = _UxGT("网格编辑"); // "Mesh Edit"
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("编辑客户网格"); // "Edit Custom Mesh"
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("细调网格"); // "Fine Tuning Mesh"
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成编辑网格"); // "Done Editing Mesh"
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("创设客户网格"); // "Build Custom Mesh"
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("创设网格"); // "Build Mesh"
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("创设 $ 网格"); // "Build PREHEAT_1_LABEL Mesh"
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 网格"); // "Validate PREHEAT_1_LABEL Mesh"
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("创设冷网格"); // "Build Cold Mesh"
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("调整网格高度"); // "Adjust Mesh Height"
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合计"); // "Height Amount"
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准网格"); // "Validate Mesh"
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客户网格"); // "Validate Custom Mesh"
LSTR MSG_G26_HEATING_BED = _UxGT("G26加热热床");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26加热喷嘴");
LSTR MSG_G26_MANUAL_PRIME = _UxGT("手动填装中...");
LSTR MSG_G26_FIXED_LENGTH = _UxGT("固定距离填装");
LSTR MSG_G26_PRIME_DONE = _UxGT("填装完成");
LSTR MSG_G26_CANCELED = _UxGT("G26已取消");
LSTR MSG_G26_LEAVING = _UxGT("离开G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("继续热床网格"); // "Continue Bed Mesh"
LSTR MSG_UBL_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子网格调平"); // "Grid Mesh Leveling"
LSTR MSG_UBL_MESH_LEVEL = _UxGT("调平网格"); // "Level Mesh"
LSTR MSG_UBL_SIDE_POINTS = _UxGT("边点"); // "Side Points"
LSTR MSG_UBL_MAP_TYPE = _UxGT("图类型"); // "Map Type"
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("输出网格图"); // "Output Mesh Map"
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("输出到主机"); // "Output for Host"
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("输出到CSV"); // "Output for CSV"
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("输出到备份"); // "Off Printer Backup"
LSTR MSG_UBL_INFO_UBL = _UxGT("输出UBL信息"); // "Output UBL Info"
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合计"); // "Fill-in Amount"
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
LSTR MSG_UBL_SMART_FILLIN = _UxGT("聪明填充"); // "Smart Fill-in"
LSTR MSG_UBL_FILLIN_MESH = _UxGT("填充网格"); // "Fill-in Mesh"
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("作废所有的"); // "Invalidate All"
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作废最近的"); // "Invalidate Closest"
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("细调所有的"); // "Fine Tune All"
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("细调最近的"); // "Fine Tune Closest"
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("网格存储"); // "Mesh Storage"
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("存储槽"); // "Memory Slot"
LSTR MSG_UBL_LOAD_MESH = _UxGT("装载热床网格"); // "Load Bed Mesh"
LSTR MSG_UBL_SAVE_MESH = _UxGT("保存热床网格"); // "Save Bed Mesh"
LSTR MSG_MESH_LOADED = _UxGT("网格 %i 已装载"); // "Mesh %i loaded"
LSTR MSG_MESH_SAVED = _UxGT("网格 %i 已保存"); // "Mesh %i saved"
LSTR MSG_UBL_NO_STORAGE = _UxGT("没有存储"); // "No storage"
LSTR MSG_UBL_SAVE_ERROR = _UxGT("错误: UBL保存"); // "Err: UBL Save"
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("错误: UBL还原"); // "Err: UBL Restore"
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z偏移量: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 创设冷网格");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聪明填充");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准网格");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 细调所有的");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准网格");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 细调所有的");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存热床网格");
LSTR MSG_LED_CONTROL = _UxGT("LED控制"); // "LED Control")
LSTR MSG_LEDS = _UxGT(""); // "Lights")
LSTR MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets")
LSTR MSG_SET_LEDS_RED = _UxGT(""); // "Red")
LSTR MSG_SET_LEDS_ORANGE = _UxGT(""); // "Orange")
LSTR MSG_SET_LEDS_YELLOW = _UxGT(""); // "Yellow")
LSTR MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green")
LSTR MSG_SET_LEDS_BLUE = _UxGT(""); // "Blue")
LSTR MSG_SET_LEDS_INDIGO = _UxGT(""); // "Indigo")
LSTR MSG_SET_LEDS_VIOLET = _UxGT(""); // "Violet")
LSTR MSG_SET_LEDS_WHITE = _UxGT(""); // "White")
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default")
LSTR MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights")
LSTR MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity")
LSTR MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity")
LSTR MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity")
LSTR MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity")
LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
LSTR MSG_MOVING = _UxGT("移动..."); // "Moving...")
LSTR MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY")
LSTR MSG_MOVE_X = _UxGT("移动X"); // "Move X"
LSTR MSG_MOVE_Y = _UxGT("移动Y"); // "Move Y"
LSTR MSG_MOVE_Z = _UxGT("移动Z"); // "Move Z"
LSTR MSG_MOVE_N = _UxGT("移动@"); // "Move @"
LSTR MSG_MOVE_E = _UxGT("挤出机"); // "Extruder"
LSTR MSG_MOVE_EN = _UxGT("挤出机 *"); // "Extruder"
LSTR MSG_HOTEND_TOO_COLD = _UxGT("热端太冷");
LSTR MSG_MOVE_N_MM = _UxGT("移动 $ mm"); // "Move 0.025mm"
LSTR MSG_MOVE_01MM = _UxGT("移动 0.1 mm"); // "Move 0.1mm"
LSTR MSG_MOVE_1MM = _UxGT("移动 1 mm"); // "Move 1mm"
LSTR MSG_MOVE_10MM = _UxGT("移动 10 mm"); // "Move 10mm"
LSTR MSG_MOVE_100MM = _UxGT("移动 100 mm"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
LSTR MSG_BED_Z = _UxGT("热床Z"); // "Bed Z"
LSTR MSG_NOZZLE = _UxGT("喷嘴"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_N = _UxGT("喷嘴 ~"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_PARKED = _UxGT("喷嘴已停靠");
LSTR MSG_NOZZLE_STANDBY = _UxGT("喷嘴待命中");
LSTR MSG_BED = _UxGT("热床"); // "Bed"
LSTR MSG_CHAMBER = _UxGT("机箱壳");
LSTR MSG_FAN_SPEED = _UxGT("风扇速率"); // "Fan speed"
LSTR MSG_FAN_SPEED_N = _UxGT("风扇速率 ~"); // "Fan speed"
LSTR MSG_STORED_FAN_N = _UxGT("存储的风扇 ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("额外风扇速率"); // "Extra fan speed"
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("额外风扇速率 ~"); // "Extra fan speed"
LSTR MSG_CONTROLLER_FAN = _UxGT("控制器风扇");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("空闲速度");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("自动模式");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("工作速度");
LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("空闲周期");
LSTR MSG_FLOW = _UxGT("挤出速率"); // "Flow"
LSTR MSG_FLOW_N = _UxGT("挤出速率 ~"); // "Flow"
LSTR MSG_CONTROL = _UxGT("控制"); // "Control"
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 因数"); // " " LCD_STR_THERMOMETER " Fact"
LSTR MSG_AUTOTEMP = _UxGT("自动控温"); // "Autotemp"
LSTR MSG_LCD_ON = _UxGT(""); // "On"
LSTR MSG_LCD_OFF = _UxGT(""); // "Off"
LSTR MSG_PID_AUTOTUNE = _UxGT("自动PID");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("自动PID *");
LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID调整完成");
LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("自动调失败! 坏的挤出机");
LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("自动调失败! 温度太高");
LSTR MSG_PID_TIMEOUT = _UxGT("自动调失败! 超时");
LSTR MSG_SELECT = _UxGT("选择"); // "Select"
LSTR MSG_SELECT_E = _UxGT("选择 *");
LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
LSTR MSG_JERK = _UxGT("抖动速率"); // "Jerk"
LSTR MSG_VA_JERK = _UxGT("轴抖动速率") STR_A; // "Va-jerk"
LSTR MSG_VB_JERK = _UxGT("轴抖动速率") STR_B; // "Vb-jerk"
LSTR MSG_VC_JERK = _UxGT("轴抖动速率") STR_C; // "Vc-jerk"
LSTR MSG_VN_JERK = _UxGT("轴抖动速率@"); // "V@-jerk"
LSTR MSG_VE_JERK = _UxGT("挤出机抖动速率"); // "Ve-jerk"
LSTR MSG_JUNCTION_DEVIATION = _UxGT("接点差");
LSTR MSG_MAX_SPEED = _UxGT("速度"); // "Velocity"
LSTR MSG_VMAX_A = _UxGT("最大进料速率") STR_A; // "Vmax " max_feedrate_mm_s
LSTR MSG_VMAX_B = _UxGT("最大进料速率") STR_B;
LSTR MSG_VMAX_C = _UxGT("最大进料速率") STR_C;
LSTR MSG_VMAX_N = _UxGT("最大进料速率@");
LSTR MSG_VMAX_E = _UxGT("最大进料速率E");
LSTR MSG_VMAX_EN = _UxGT("最大进料速率 *");
LSTR MSG_VMIN = _UxGT("最小进料速率"); // "Vmin" min_feedrate_mm_s
LSTR MSG_VTRAV_MIN = _UxGT("最小移动速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
LSTR MSG_AMAX_A = _UxGT("最大打印加速度") STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
LSTR MSG_AMAX_B = _UxGT("最大打印加速度") STR_B;
LSTR MSG_AMAX_C = _UxGT("最大打印加速度") STR_C;
LSTR MSG_AMAX_N = _UxGT("最大打印加速度@");
LSTR MSG_AMAX_E = _UxGT("最大打印加速度E");
LSTR MSG_AMAX_EN = _UxGT("最大打印加速度 *");
LSTR MSG_A_RETRACT = _UxGT("收进加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
LSTR MSG_A_TRAVEL = _UxGT("非打印移动加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("频率最大");
LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("进给速度");
LSTR MSG_STEPS_PER_MM = _UxGT("轴步数/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
LSTR MSG_A_STEPS = STR_A _UxGT(" 步数/mm"); // "Asteps/mm"
LSTR MSG_B_STEPS = STR_B _UxGT(" 步数/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" 步数/mm");
LSTR MSG_N_STEPS = _UxGT("@ 步数/mm");
LSTR MSG_E_STEPS = _UxGT("E 步数/mm"); // "Esteps/mm"
LSTR MSG_EN_STEPS = _UxGT("* 步数/mm");
LSTR MSG_TEMPERATURE = _UxGT("温度"); // "Temperature"
LSTR MSG_MOTION = _UxGT("运动"); // "Motion"
LSTR MSG_FILAMENT = _UxGT("料丝"); // "Filament" menu_advanced_filament
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E 在 mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E 限制 在 mm") SUPERSCRIPT_THREE;
LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E 限制 *");
LSTR MSG_FILAMENT_DIAM = _UxGT("丝料直径"); // "Fil. Dia."
LSTR MSG_FILAMENT_DIAM_E = _UxGT("丝料直径 *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("卸载 mm"); // "Unload mm"
LSTR MSG_FILAMENT_LOAD = _UxGT("装载 mm"); // "Load mm"
LSTR MSG_ADVANCE_K = _UxGT("Advance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
LSTR MSG_CONTRAST = _UxGT("LCD对比度"); // "LCD contrast"
LSTR MSG_STORE_EEPROM = _UxGT("保存设置"); // "Store memory"
LSTR MSG_LOAD_EEPROM = _UxGT("装载设置"); // "Load memory"
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢复安全值"); // "Restore Defaults"
LSTR MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC 错误");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index 错误");
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version 错误");
LSTR MSG_SETTINGS_STORED = _UxGT("设置已保存");
LSTR MSG_MEDIA_UPDATE = _UxGT("存储器更新");
LSTR MSG_RESET_PRINTER = _UxGT("复位打印机");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("刷新");
LSTR MSG_INFO_SCREEN = _UxGT("信息屏"); // "Info screen"
LSTR MSG_PREPARE = _UxGT("准备"); // "Prepare"
LSTR MSG_TUNE = _UxGT("调整"); // "Tune"
LSTR MSG_POWER_MONITOR = _UxGT("电源监控");
LSTR MSG_CURRENT = _UxGT("电流");
LSTR MSG_VOLTAGE = _UxGT("电压");
LSTR MSG_POWER = _UxGT("功率");
LSTR MSG_START_PRINT = _UxGT("开始打印");
LSTR MSG_BUTTON_NEXT = _UxGT("下一个");
LSTR MSG_BUTTON_INIT = _UxGT("初始");
LSTR MSG_BUTTON_STOP = _UxGT("停止");
LSTR MSG_BUTTON_PRINT = _UxGT("打印");
LSTR MSG_BUTTON_RESET = _UxGT("复位");
LSTR MSG_BUTTON_IGNORE = _UxGT("忽略");
LSTR MSG_BUTTON_CANCEL = _UxGT("取消");
LSTR MSG_BUTTON_DONE = _UxGT("完成");
LSTR MSG_BUTTON_BACK = _UxGT("返回");
LSTR MSG_BUTTON_PROCEED = _UxGT("继续");
LSTR MSG_PAUSING = _UxGT("暂停中...");
LSTR MSG_PAUSE_PRINT = _UxGT("暂停打印"); // "Pause print"
LSTR MSG_RESUME_PRINT = _UxGT("恢复打印"); // "Resume print"
LSTR MSG_STOP_PRINT = _UxGT("停止打印"); // "Stop print"
LSTR MSG_PRINTING_OBJECT = _UxGT("打印物体");
LSTR MSG_CANCEL_OBJECT = _UxGT("取消物体");
LSTR MSG_CANCEL_OBJECT_N = _UxGT("取消物体 =");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("中断恢复");
LSTR MSG_MEDIA_MENU = _UxGT("从存储卡上打印"); // "Print from SD"
LSTR MSG_NO_MEDIA = _UxGT("无存储卡"); // "No SD card"
LSTR MSG_DWELL = _UxGT("休眠中 ..."); // "Sleep..."
LSTR MSG_USERWAIT = _UxGT("点击继续 ..."); // "Click to resume..."
LSTR MSG_PRINT_PAUSED = _UxGT("暫停打印"); // "Print paused"
LSTR MSG_PRINTING = _UxGT("打印中...");
LSTR MSG_PRINT_ABORTED = _UxGT("已取消打印"); // "Print aborted"
LSTR MSG_PRINT_DONE = _UxGT("打印已完成");
LSTR MSG_NO_MOVE = _UxGT("无移动"); // "No move."
LSTR MSG_KILLED = _UxGT("已杀掉"); // "KILLED. "
LSTR MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
LSTR MSG_CONTROL_RETRACT = _UxGT("回抽长度mm"); // "Retract mm" retract_length, retract length (positive mm)
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("换手回抽长度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
LSTR MSG_CONTROL_RETRACTF = _UxGT("回抽速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("回抽恢复长度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("换手回抽恢复长度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回抽恢复后进料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
LSTR MSG_AUTORETRACT = _UxGT("自动抽回"); // "Auto-Retract" autoretract_enabled,
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("交换长度");
LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("额外的交换");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("清洗长度");
LSTR MSG_TOOL_CHANGE = _UxGT("换工具");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z抬起");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("进给速度");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("回抽速度");
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("停靠头");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("恢复速度");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("风扇速度");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("风扇时间");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("自动开");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("自动关");
LSTR MSG_TOOL_MIGRATION = _UxGT("工具迁移");
LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("自动迁移");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("上一个挤出机");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("迁移至 *");
LSTR MSG_FILAMENTCHANGE = _UxGT("更换丝料"); // "Change filament"
LSTR MSG_FILAMENTCHANGE_E = _UxGT("更换丝料 *"); // "Change filament"
LSTR MSG_FILAMENTLOAD = _UxGT("装载丝料"); // "Load filament"
LSTR MSG_FILAMENTLOAD_E = _UxGT("装载丝料 *"); // "Load filament"
LSTR MSG_FILAMENTUNLOAD = _UxGT("卸载丝料"); // "Unload filament"
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("卸载丝料 *"); // "Unload filament"
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("卸载全部"); // "Unload All"
LSTR MSG_ATTACH_MEDIA = _UxGT("初始化存储卡"); // "Init. SD card"
LSTR MSG_CHANGE_MEDIA = _UxGT("更换存储卡"); // "Change SD card"
LSTR MSG_RELEASE_MEDIA = _UxGT("释放存储卡");
LSTR MSG_ZPROBE_OUT = _UxGT("Z探针在热床之外"); // "Z probe out. bed" Z probe is not within the physical limits
LSTR MSG_SKEW_FACTOR = _UxGT("偏斜因数"); // "Skew Factor"
LSTR MSG_BLTOUCH = _UxGT("BLTouch"); // "BLTouch"
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("自检");
LSTR MSG_BLTOUCH_RESET = _UxGT("重置");
LSTR MSG_BLTOUCH_STOW = _UxGT("装载");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("部署");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW模式");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V模式");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD模式");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("模式保存");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("设置BLTouch为5V");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("设置BLTouch为OD");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("报告开漏");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("危险: 错误的设置将引起损坏! 是否继续?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("初始化TouchMI");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z偏移量测试");
LSTR MSG_TOUCHMI_SAVE = _UxGT("保存");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("部署TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("部署Z探针");
LSTR MSG_MANUAL_STOW = _UxGT("收好Z探针");
LSTR MSG_HOME_FIRST = _UxGT("归位 %s%s%s 先"); // "Home ... first"
LSTR MSG_ZPROBE_OFFSETS = _UxGT("探针偏移量");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("探针X偏移");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("探针Y偏移");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("探针Z偏移"); // "Z Offset"
LSTR MSG_BABYSTEP_X = _UxGT("微量调整X轴"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
LSTR MSG_BABYSTEP_Y = _UxGT("微量调整Y轴"); // "Babystep Y"
LSTR MSG_BABYSTEP_Z = _UxGT("微量调整Z轴"); // "Babystep Z"
LSTR MSG_BABYSTEP_TOTAL = _UxGT("总计");
LSTR MSG_ENDSTOP_ABORT = _UxGT("挡块终止"); // "Endstop abort"
LSTR MSG_HEATING_FAILED_LCD = _UxGT("加热失败"); // "Heating failed"
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("错误:冗余温度"); // "Err: REDUNDANT TEMP"
LSTR MSG_THERMAL_RUNAWAY = _UxGT("温控失控"); // "THERMAL RUNAWAY"
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("热床热量失控");
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("机箱热量失控");
LSTR MSG_ERR_MAXTEMP = _UxGT("错误:最高温度"); // "Err: MAXTEMP"
LSTR MSG_ERR_MINTEMP = _UxGT("错误:最低温度"); // "Err: MINTEMP"
LSTR MSG_HALTED = _UxGT("打印停机"); // "PRINTER HALTED"
LSTR MSG_PLEASE_RESET = _UxGT("请重置"); // "Please reset"
LSTR MSG_SHORT_DAY = _UxGT(""); // "d" // One character only
LSTR MSG_SHORT_HOUR = _UxGT(""); // "h" // One character only
LSTR MSG_SHORT_MINUTE = _UxGT(""); // "m" // One character only
LSTR MSG_HEATING = _UxGT("加热中 ..."); // "Heating..."
LSTR MSG_COOLING = _UxGT("冷却中 ...");
LSTR MSG_BED_HEATING = _UxGT("加热热床中 ..."); // "Bed Heating..."
LSTR MSG_BED_COOLING = _UxGT("热床冷却中 ...");
LSTR MSG_CHAMBER_HEATING = _UxGT("机箱加热中 ...");
LSTR MSG_CHAMBER_COOLING = _UxGT("机箱冷却中 ...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("⊿校准"); // "Delta Calibration"
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("⊿校准X"); // "Calibrate X"
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校准Y"); // "Calibrate Y"
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校准Z"); // "Calibrate Z"
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校准中心"); // "Calibrate Center"
LSTR MSG_DELTA_SETTINGS = _UxGT("⊿设置"); // "Delta Settings"
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自动校准"); // "Auto Calibration"
LSTR MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
LSTR MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
LSTR MSG_DELTA_RADIUS = _UxGT("⊿半径"); // "Radius"
LSTR MSG_INFO_MENU = _UxGT("关于打印机"); // "About Printer"
LSTR MSG_INFO_PRINTER_MENU = _UxGT("打印机信息"); // "Printer Info"
LSTR MSG_3POINT_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
LSTR MSG_LINEAR_LEVELING = _UxGT("线性调平"); // "Linear Leveling"
LSTR MSG_BILINEAR_LEVELING = _UxGT("双线性调平"); // "Bilinear Leveling"
LSTR MSG_UBL_LEVELING = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
LSTR MSG_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
LSTR MSG_INFO_STATS_MENU = _UxGT("打印机统计"); // "Printer Stats"
LSTR MSG_INFO_BOARD_MENU = _UxGT("主板信息"); // "Board Info"
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("温度计"); // "Thermistors"
LSTR MSG_INFO_EXTRUDERS = _UxGT("挤出机"); // "Extruders"
LSTR MSG_INFO_BAUDRATE = _UxGT("波特率"); // "Baud"
LSTR MSG_INFO_PROTOCOL = _UxGT("协议"); // "Protocol"
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("监控温度失控:关");
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("监控温度失控:开");
LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("热端空闲超时");
LSTR MSG_CASE_LIGHT = _UxGT("外壳灯"); // "Case light"
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("灯亮度"); // "Light BRIGHTNESS"
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印机不正确"); // "The printer is incorrect"
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("打印计数"); // "Print Count"
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成了"); // "Completed"
LSTR MSG_INFO_PRINT_TIME = _UxGT("总打印时间"); // "Total print time"
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最长工作时间"); // "Longest job time"
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("总计挤出"); // "Extruded total"
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("打印数"); // "Prints"
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
LSTR MSG_INFO_PRINT_TIME = _UxGT("总共"); // "Total"
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最长"); // "Longest"
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("已挤出"); // "Extruded"
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("最低温度"); // "Min Temp"
LSTR MSG_INFO_MAX_TEMP = _UxGT("最高温度"); // "Max Temp"
LSTR MSG_INFO_PSU = _UxGT("电源供应"); // "Power Supply"
LSTR MSG_DRIVE_STRENGTH = _UxGT("驱动力度"); // "Drive Strength"
LSTR MSG_DAC_PERCENT_N = _UxGT("@ 驱动 %"); // "E Driver %"
LSTR MSG_ERROR_TMC = _UxGT("TMC 连接错误");
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驱动设置"); // "DAC EEPROM Write"
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("更换料");
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("打印已暂停"); // "PRINT PAUSED"
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("装载丝料"); // "LOAD FILAMENT"
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸载丝料"); // "UNLOAD FILAMENT"
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢复选项:"); // "RESUME OPTIONS:"
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢复打印"); // "Resume print"
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 喷嘴: "); // " Nozzle: "
LSTR MSG_RUNOUT_SENSOR = _UxGT("断料传感器");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("断料距离mm");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("归原位失败"); // "Homing failed"
LSTR MSG_LCD_PROBING_FAILED = _UxGT("探针探测失败"); // "Probing failed"
LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("选择料");
LSTR MSG_MMU2_MENU = _UxGT("MMU");
LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("升级MMU固件!");
LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU需要专注.");
LSTR MSG_MMU2_RESUME = _UxGT("MMU恢复");
LSTR MSG_MMU2_RESUMING = _UxGT("MMU恢复中...");
LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU加载");
LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU加载全部");
LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU加载到喷嘴");
LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU弹出");
LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU弹出 ~");
LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU卸载");
LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("加载填充. %i...");
LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("弹出填充. ...");
LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("卸载填充....");
LSTR MSG_MMU2_ALL = _UxGT("全部");
LSTR MSG_MMU2_FILAMENT_N = _UxGT("料 ~");
LSTR MSG_MMU2_RESET = _UxGT("复位MMU");
LSTR MSG_MMU2_RESETTING = _UxGT("MMU复位中...");
LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("移出, 按下");
LSTR MSG_MIX = _UxGT("混合");
LSTR MSG_MIX_COMPONENT_N = _UxGT("器件 =");
LSTR MSG_MIXER = _UxGT("混合器");
LSTR MSG_GRADIENT = _UxGT("梯度");
LSTR MSG_FULL_GRADIENT = _UxGT("全梯度");
LSTR MSG_TOGGLE_MIX = _UxGT("开关混合");
LSTR MSG_CYCLE_MIX = _UxGT("循环混合");
LSTR MSG_GRADIENT_MIX = _UxGT("梯度混合");
LSTR MSG_REVERSE_GRADIENT = _UxGT("反向梯度");
LSTR MSG_ACTIVE_VTOOL = _UxGT("激活 V-tool");
LSTR MSG_START_VTOOL = _UxGT("开始 V-tool");
LSTR MSG_END_VTOOL = _UxGT(" 结束 V-tool");
LSTR MSG_GRADIENT_ALIAS = _UxGT("别名 V-tool");
LSTR MSG_RESET_VTOOLS = _UxGT("复位 V-tools");
LSTR MSG_COMMIT_VTOOL = _UxGT("提交 V-tool Mix");
LSTR MSG_VTOOLS_RESET = _UxGT("V-tools 已复位");
LSTR MSG_START_Z = _UxGT("开始 Z:");
LSTR MSG_END_Z = _UxGT(" 结束 Z:");
LSTR MSG_GAMES = _UxGT("游戏");
LSTR MSG_BRICKOUT = _UxGT("敲方块");
LSTR MSG_INVADERS = _UxGT("入侵者");
LSTR MSG_SNAKE = _UxGT("贪吃蛇");
LSTR MSG_MAZE = _UxGT("迷宫");
LSTR MSG_BAD_PAGE = _UxGT("错误页面索引");
LSTR MSG_BAD_PAGE_SPEED = _UxGT("错误页面速度");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按钮", "恢复打印"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待开始", "丝料", "变更")); // "Wait for start of the filament change"
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入料", "并按下", "以继续"));
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按钮来", "加热喷嘴.")); // "Press button to heat nozzle."
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加热喷嘴", "请等待 ...")); // "Heating nozzle Please wait..."
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下丝料")); // "Wait for filament unload"
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "进料")); // "Wait for filament load"
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "丝料清除")); // "Wait for filament purge"
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下已完成", "料的清洗"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待打印", "恢复")); // "Wait for print to resume"
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下继续"));
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("请等待 ...")); // "Please wait..."
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入并单击")); // "Insert and Click"
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加热"));
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加热中 ...")); // "Heating..."
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("装载中 ...")); // "Loading..."
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢复中 ...")); // "Resuming..."
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("TMC驱动器");
LSTR MSG_TMC_CURRENT = _UxGT("驱动电流");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("混合阈值");
LSTR MSG_TMC_HOMING_THRS = _UxGT("无感回零");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("步进模式");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop已使能");
LSTR MSG_SERVICE_RESET = _UxGT("复位");
LSTR MSG_SERVICE_IN = _UxGT(" 在:");
LSTR MSG_BACKLASH = _UxGT("回差");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("校正");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("平滑的");
LSTR MSG_LEVEL_X_AXIS = _UxGT("X轴调平");
LSTR MSG_AUTO_CALIBRATE = _UxGT("自动校准");
LSTR MSG_HEATER_TIMEOUT = _UxGT("加热器超时");
LSTR MSG_REHEAT = _UxGT("重新加热");
LSTR MSG_REHEATING = _UxGT("重新加热中...");
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,501 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Traditional Chinese
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
namespace Language_zh_TW {
using namespace Language_en; // Inherit undefined strings from English
constexpr uint8_t CHARSIZE = 3;
LSTR LANGUAGE = _UxGT("Traditional Chinese");
LSTR WELCOME_MSG = MACHINE_NAME _UxGT("已就緒."); // " ready."
LSTR MSG_YES = _UxGT(""); // "YES"
LSTR MSG_NO = _UxGT(""); // "NO"
LSTR MSG_BACK = _UxGT("返回"); // "Back"
LSTR MSG_MEDIA_ABORTING = _UxGT("正在中止..."); // "Aborting..."
LSTR MSG_MEDIA_INSERTED = _UxGT("記憶卡已插入"); // "Card inserted"
LSTR MSG_MEDIA_REMOVED = _UxGT("記憶卡被拔出"); // "Card removed"
LSTR MSG_MEDIA_WAITING = _UxGT("等待記憶卡"); // "Waiting for media"
LSTR MSG_MEDIA_READ_ERROR = _UxGT("記憶卡讀取錯誤"); //"Media read error"
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB裝置已移除"); // "USB device removed"
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB啟動失敗"); // "USB start failed"
LSTR MSG_LCD_ENDSTOPS = _UxGT("擋塊"); // "Endstops" // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("軟體擋塊"); // "Soft Endstops"
LSTR MSG_MAIN = _UxGT("主選單"); // "Main"
LSTR MSG_ADVANCED_SETTINGS = _UxGT("進階設置"); // "Advanced Settings"
LSTR MSG_CONFIGURATION = _UxGT("設置"); //Configuration
LSTR MSG_RUN_AUTO_FILES = _UxGT("自動開始"); // "Autostart"
LSTR MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); // "Disable steppers"
LSTR MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu"
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test"
LSTR MSG_AUTO_HOME = _UxGT("自動回原點"); // "Auto home"
LSTR MSG_AUTO_HOME_X = _UxGT("回X原點"); // "Home X"
LSTR MSG_AUTO_HOME_Y = _UxGT("回Y原點"); // "Home Y"
LSTR MSG_AUTO_HOME_Z = _UxGT("回Z原點"); // "Home Z"
LSTR MSG_AUTO_Z_ALIGN = _UxGT("自動Z對齊"); // "Auto Z-Align"
LSTR MSG_LEVEL_BED_HOMING = _UxGT("平台調平XYZ歸原點"); // "Homing XYZ"
LSTR MSG_LEVEL_BED_WAITING = _UxGT("單擊開始熱床調平"); // "Click to Begin"
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("下個熱床調平點"); // "Next Point"
LSTR MSG_LEVEL_BED_DONE = _UxGT("完成熱床調平"); // "Leveling Done!"
LSTR MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
LSTR MSG_SET_HOME_OFFSETS = _UxGT("設置原點偏移"); // "Set home offsets"
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已啟用"); // "Offsets applied"
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("預熱 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_1_LABEL"
LSTR MSG_PREHEAT_1_H = _UxGT("預熱 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_1_LABEL"
LSTR MSG_PREHEAT_1_END = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_1_END_E = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ~"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_1_ALL = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 熱床"); //MSG_PREHEAT_1 " Bed"
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 設置"); //MSG_PREHEAT_1 " conf"
LSTR MSG_PREHEAT_M = _UxGT("預熱 $"); // "Preheat PREHEAT_1_LABEL"
LSTR MSG_PREHEAT_M_H = _UxGT("預熱 $ ~"); // "Preheat PREHEAT_1_LABEL"
LSTR MSG_PREHEAT_M_END = _UxGT("預熱 $ 噴嘴"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_M_END_E = _UxGT("預熱 $ 噴嘴 ~"); //MSG_PREHEAT_1 " "
LSTR MSG_PREHEAT_M_ALL = _UxGT("預熱 $ 全部"); //MSG_PREHEAT_1 " All"
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("預熱 $ 熱床"); //MSG_PREHEAT_1 " Bed"
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("預熱 $ 設置"); //MSG_PREHEAT_1 " conf"
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("自定預熱"); // "Preheat Custom"
LSTR MSG_COOLDOWN = _UxGT("降溫"); // "Cooldown"
LSTR MSG_LASER_MENU = _UxGT("激光控制"); // "Laser Control"
LSTR MSG_LASER_POWER = _UxGT("激光電源"); // "Laser Power"
LSTR MSG_SPINDLE_MENU = _UxGT("主軸控告制"); // "Spindle Control"
LSTR MSG_SPINDLE_POWER = _UxGT("主軸電源"); // "Spindle Power"
LSTR MSG_SPINDLE_REVERSE = _UxGT("主軸反轉"); // "Spindle Reverse"
LSTR MSG_SWITCH_PS_ON = _UxGT("電源打開"); // "Switch power on"
LSTR MSG_SWITCH_PS_OFF = _UxGT("電源關閉"); // "Switch power off"
LSTR MSG_EXTRUDE = _UxGT("擠出"); // "Extrude"
LSTR MSG_RETRACT = _UxGT("回縮"); // "Retract"
LSTR MSG_MOVE_AXIS = _UxGT("移動軸"); // "Move axis"
LSTR MSG_BED_LEVELING = _UxGT("調平熱床"); // "Bed leveling"
LSTR MSG_LEVEL_BED = _UxGT("調平熱床"); // "Level bed"
LSTR MSG_BED_TRAMMING = _UxGT("調平邊角"); // "Bed Tramming"
LSTR MSG_NEXT_CORNER = _UxGT("下個邊角"); // "Next corner"
LSTR MSG_MESH_EDITOR = _UxGT("網格編輯器"); // "Mesh Editor"
LSTR MSG_EDIT_MESH = _UxGT("編輯網格"); // "Edit Mesh"
LSTR MSG_EDITING_STOPPED = _UxGT("網格編輯已停止"); // "Mesh Editing Stopped"
LSTR MSG_PROBING_POINT = _UxGT("探測點"); // "Probing Point"
LSTR MSG_MESH_X = _UxGT("索引 X"); // "Index X"
LSTR MSG_MESH_Y = _UxGT("索引 Y"); // "Index Y"
LSTR MSG_MESH_EDIT_Z = _UxGT("Z 值"); // "Z Value"
LSTR MSG_CUSTOM_COMMANDS = _UxGT("自定命令"); // "Custom Commands"
LSTR MSG_M48_TEST = _UxGT("M48 探測測試"); // "M48 Probe Test"
LSTR MSG_M48_POINT = _UxGT("M48 探測點"); // "M48 Point"
LSTR MSG_M48_DEVIATION = _UxGT("偏差"); // "Deviation"
LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
LSTR MSG_UBL_DOING_G29 = _UxGT("執行G29"); // "Doing G29"
LSTR MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
LSTR MSG_UBL_LEVEL_BED = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
LSTR MSG_LCD_TILTING_MESH = _UxGT("傾斜點"); // "Tilting Point"
LSTR MSG_UBL_MANUAL_MESH = _UxGT("手工建網"); // "Manually Build Mesh"
LSTR MSG_UBL_BC_INSERT = _UxGT("放置墊片並測量"); // "Place shim & measure"
LSTR MSG_UBL_BC_INSERT2 = _UxGT("測量"); // "Measure"
LSTR MSG_UBL_BC_REMOVE = _UxGT("移除並測量熱床"); // "Remove & measure bed"
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("移動到下一個"); // "Moving to next"
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("啟動UBL"); // "Activate UBL"
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("關閉UBL"); // "Deactivate UBL"
LSTR MSG_UBL_SET_TEMP_BED = _UxGT("置設熱床溫度"); // "Bed Temp"
LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("置設熱床溫度"); // "Bed Temp")
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("置設噴嘴溫度"); // "Hotend Temp"
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("熱端溫度"); // "Hotend Temp"
LSTR MSG_UBL_MESH_EDIT = _UxGT("網格編輯"); // "Mesh Edit"
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("編輯客戶網格"); // "Edit Custom Mesh"
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("細調網格"); // "Fine Tuning Mesh"
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成編輯網格"); // "Done Editing Mesh"
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("創設客戶網格"); // "Build Custom Mesh"
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("創設網格"); // "Build Mesh"
#if HAS_PREHEAT
LSTR MSG_UBL_BUILD_MESH_M = _UxGT("創設 $ 網格"); // "Build PREHEAT_1_LABEL Mesh"
LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 網格"); // "Validate PREHEAT_1_LABEL Mesh"
#endif
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("創設冷網格"); // "Build Cold Mesh"
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("調整網格高度"); // "Adjust Mesh Height"
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合計"); // "Height Amount"
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准網格"); // "Validate Mesh"
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客戶網格"); // "Validate Custom Mesh"
LSTR MSG_G26_HEATING_BED = _UxGT("G26 加熱熱床"); // "G26 Heating Bed"
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 加熱噴嘴"); //"G26 Heating Nozzle"
LSTR MSG_G26_MANUAL_PRIME = _UxGT("手動填裝"); // "Manual priming..."
LSTR MSG_G26_FIXED_LENGTH = _UxGT("固定距離填裝"); // "Fixed Length Prime"
LSTR MSG_G26_PRIME_DONE = _UxGT("完成填裝"); // "Done Priming"
LSTR MSG_G26_CANCELED = _UxGT("G26已取消"); // "G26 Canceled"
LSTR MSG_G26_LEAVING = _UxGT("離開 G26"); // "Leaving G26"
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("繼續熱床網格"); // "Continue Bed Mesh"
LSTR MSG_UBL_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子網格調平"); // "Grid Mesh Leveling"
LSTR MSG_UBL_MESH_LEVEL = _UxGT("調平網格"); // "Level Mesh"
LSTR MSG_UBL_SIDE_POINTS = _UxGT("邊點"); // "Side Points"
LSTR MSG_UBL_MAP_TYPE = _UxGT("圖類型"); // "Map Type"
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("輸出網格圖"); // "Output Mesh Map"
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("輸出到主機"); // "Output for Host"
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("輸出到CSV"); // "Output for CSV"
LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("輸出到備份"); // "Off Printer Backup"
LSTR MSG_UBL_INFO_UBL = _UxGT("輸出UBL信息"); // "Output UBL Info"
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合計"); // "Fill-in Amount"
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
LSTR MSG_UBL_SMART_FILLIN = _UxGT("聰明填充"); // "Smart Fill-in"
LSTR MSG_UBL_FILLIN_MESH = _UxGT("填充網格"); // "Fill-in Mesh"
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("作廢所有的"); // "Invalidate All"
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作廢最近的"); // "Invalidate Closest"
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("細調所有的"); // "Fine Tune All"
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("細調最近的"); // "Fine Tune Closest"
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("網格存儲"); // "Mesh Storage"
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("存儲槽"); // "Memory Slot"
LSTR MSG_UBL_LOAD_MESH = _UxGT("裝載熱床網格"); // "Load Bed Mesh"
LSTR MSG_UBL_SAVE_MESH = _UxGT("保存熱床網格"); // "Save Bed Mesh"
LSTR MSG_MESH_LOADED = _UxGT("網格 %i 已裝載"); // "Mesh %i loaded"
LSTR MSG_MESH_SAVED = _UxGT("網格 %i 已保存"); // "Mesh %i saved"
LSTR MSG_UBL_NO_STORAGE = _UxGT("沒有存儲"); // "No storage"
LSTR MSG_UBL_SAVE_ERROR = _UxGT("錯誤: UBL保存"); // "Err: UBL Save"
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("錯誤: UBL還原"); // "Err: UBL Restore"
LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-偏移:"); // "Z-Offset: "
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 創設冷網格");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聰明填充");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准網格");
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 細調所有的");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准網格");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 細調所有的");
LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存熱床網格");
LSTR MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control")
LSTR MSG_LEDS = _UxGT(""); // "Lights")
LSTR MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets")
LSTR MSG_SET_LEDS_RED = _UxGT(""); // "Red")
LSTR MSG_SET_LEDS_ORANGE = _UxGT(""); // "Orange")
LSTR MSG_SET_LEDS_YELLOW = _UxGT(""); // "Yellow")
LSTR MSG_SET_LEDS_GREEN = _UxGT(""); // "Green")
LSTR MSG_SET_LEDS_BLUE = _UxGT(""); // "Blue")
LSTR MSG_SET_LEDS_INDIGO = _UxGT(""); // "Indigo")
LSTR MSG_SET_LEDS_VIOLET = _UxGT(""); // "Violet")
LSTR MSG_SET_LEDS_WHITE = _UxGT(""); // "White")
LSTR MSG_SET_LEDS_DEFAULT = _UxGT("復歸"); // "Default")
LSTR MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights")
LSTR MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity")
LSTR MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity")
LSTR MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity")
LSTR MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity")
LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
LSTR MSG_MOVING = _UxGT("移動 ..."); // "Moving...")
LSTR MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY")
LSTR MSG_MOVE_X = _UxGT("移動X"); // "Move X"
LSTR MSG_MOVE_Y = _UxGT("移動Y"); // "Move Y"
LSTR MSG_MOVE_Z = _UxGT("移動Z"); // "Move Z"
LSTR MSG_MOVE_N = _UxGT("移動Q"); // "Move @"
LSTR MSG_MOVE_E = _UxGT("擠出機"); // "Extruder"
LSTR MSG_MOVE_EN = _UxGT("擠出機 *"); // "Extruder *"
LSTR MSG_HOTEND_TOO_COLD = _UxGT("噴嘴溫度不夠"); // "Hotend too cold"
LSTR MSG_MOVE_N_MM = _UxGT("移動 $ mm"); // "Move 0.025mm"
LSTR MSG_MOVE_01MM = _UxGT("移動 0.1 mm"); // "Move 0.1mm"
LSTR MSG_MOVE_1MM = _UxGT("移動 1 mm"); // "Move 1mm"
LSTR MSG_MOVE_10MM = _UxGT("移動 10 mm"); // "Move 10mm"
LSTR MSG_MOVE_100MM = _UxGT("移動 100 mm"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
LSTR MSG_BED_Z = _UxGT("熱床Z"); // "Bed Z"
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); // "Bed"
LSTR MSG_CHAMBER = _UxGT("Enclosure");
LSTR MSG_FAN_SPEED = _UxGT("風扇速率"); // "Fan speed"
LSTR MSG_FAN_SPEED_N = _UxGT("風扇速率 =");
LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan =");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed"
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 =");
LSTR MSG_FLOW = _UxGT("擠出速率");
LSTR MSG_FLOW_N = _UxGT("擠出速率 ~"); // "Flow"
LSTR MSG_CONTROL = _UxGT("控制"); // "Control"
LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 系數"); // " " LCD_STR_THERMOMETER " Fact"
LSTR MSG_AUTOTEMP = _UxGT("自動控溫"); // "Autotemp"
LSTR MSG_LCD_ON = _UxGT(""); // "On"
LSTR MSG_LCD_OFF = _UxGT(""); // "Off"
LSTR MSG_SELECT = _UxGT("選擇"); // "Select"
LSTR MSG_SELECT_E = _UxGT("選擇 *");
LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
LSTR MSG_JERK = _UxGT("抖動速率"); // "Jerk"
LSTR MSG_VA_JERK = _UxGT("軸抖動速率") STR_A; // "Va-jerk"
LSTR MSG_VB_JERK = _UxGT("軸抖動速率") STR_B;
LSTR MSG_VC_JERK = _UxGT("軸抖動速率") STR_C;
LSTR MSG_VN_JERK = _UxGT("軸抖動速率@");
LSTR MSG_VE_JERK = _UxGT("擠出機抖動速率");
LSTR MSG_MAX_SPEED = _UxGT("速度"); // "Velocity"
LSTR MSG_VMAX_A = _UxGT("最大進料速率") STR_A; // "Vmax " max_feedrate_mm_s
LSTR MSG_VMAX_B = _UxGT("最大進料速率") STR_B;
LSTR MSG_VMAX_C = _UxGT("最大進料速率") STR_C;
LSTR MSG_VMAX_N = _UxGT("最大進料速率@");
LSTR MSG_VMAX_E = _UxGT("最大進料速率E");
LSTR MSG_VMAX_EN = _UxGT("最大進料速率 *"); // "Vmax " max_feedrate_mm_s
LSTR MSG_VMIN = _UxGT("最小進料速率"); // "Vmin" min_feedrate_mm_s
LSTR MSG_VTRAV_MIN = _UxGT("最小移動速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
LSTR MSG_AMAX_A = _UxGT("最大列印加速度") STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
LSTR MSG_AMAX_B = _UxGT("最大列印加速度") STR_B;
LSTR MSG_AMAX_C = _UxGT("最大列印加速度") STR_C;
LSTR MSG_AMAX_N = _UxGT("最大列印加速度@");
LSTR MSG_AMAX_E = _UxGT("最大列印加速度E");
LSTR MSG_AMAX_EN = _UxGT("最大列印加速度 *"); // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
LSTR MSG_A_RETRACT = _UxGT("回縮加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
LSTR MSG_A_TRAVEL = _UxGT("非列印移動加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
LSTR MSG_STEPS_PER_MM = _UxGT("軸步數/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
LSTR MSG_A_STEPS = STR_A _UxGT(" 軸步數/mm"); // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
LSTR MSG_B_STEPS = STR_B _UxGT(" 軸步數/mm");
LSTR MSG_C_STEPS = STR_C _UxGT(" 軸步數/mm");
LSTR MSG_N_STEPS = _UxGT("@ 軸步數/mm");
LSTR MSG_E_STEPS = _UxGT("擠出機步數/mm"); // "Esteps/mm"
LSTR MSG_EN_STEPS = _UxGT("擠出機~步數/mm");
LSTR MSG_TEMPERATURE = _UxGT("溫度"); // "Temperature"
LSTR MSG_MOTION = _UxGT("運作"); // "Motion"
LSTR MSG_FILAMENT = _UxGT("絲料測容"); // "Filament" menu_control_volumetric
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("測容積mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
LSTR MSG_FILAMENT_DIAM = _UxGT("絲料直徑"); // "Fil. Dia."
LSTR MSG_FILAMENT_DIAM_E = _UxGT("絲料直徑 *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("卸載 mm"); // "Unload mm"
LSTR MSG_FILAMENT_LOAD = _UxGT("装載 mm"); // "Load mm"
LSTR MSG_ADVANCE_K = _UxGT("Advance K");
LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
LSTR MSG_CONTRAST = _UxGT("LCD對比度"); // "LCD contrast"
LSTR MSG_STORE_EEPROM = _UxGT("保存設置"); // "Store memory"
LSTR MSG_LOAD_EEPROM = _UxGT("載入設置"); // "Load memory"
LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢復安全值"); // "Restore failsafe"
LSTR MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
LSTR MSG_ERR_EEPROM_CRC = _UxGT("錯誤: EEPROM CRC"); // "Err: EEPROM CRC"
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("錯誤: EEPROM Index"); // "Err: EEPROM Index"
LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM Version"); // "EEPROM Version"
LSTR MSG_MEDIA_UPDATE = _UxGT("媒體更新"); // "Media Update"
LSTR MSG_RESET_PRINTER = _UxGT("重置打印機"); // "Reset Printer
LSTR MSG_REFRESH = _UxGT("刷新"); // "Refresh"
LSTR MSG_INFO_SCREEN = _UxGT("資訊界面"); // "Info screen"
LSTR MSG_PREPARE = _UxGT("準備"); // "Prepare"
LSTR MSG_TUNE = _UxGT("調整"); // "Tune"
LSTR MSG_START_PRINT = _UxGT("開始列印"); // "Start Print"
LSTR MSG_BUTTON_NEXT = _UxGT("下一個"); // "Next"
LSTR MSG_BUTTON_INIT = _UxGT("初始 "); // "Init"
LSTR MSG_BUTTON_STOP = _UxGT("停止 "); // "Stop"
LSTR MSG_BUTTON_PRINT = _UxGT("列印 "); // "Print"
LSTR MSG_BUTTON_RESET = _UxGT("復歸 "); // "Reset"
LSTR MSG_BUTTON_CANCEL = _UxGT("放棄 "); // "Cancel"
LSTR MSG_BUTTON_DONE = _UxGT("確認 "); // "Done"
LSTR MSG_BUTTON_BACK = _UxGT("返回 "); // "Back"
LSTR MSG_BUTTON_PROCEED = _UxGT("繼續 "); // "Proceed"
LSTR MSG_PAUSE_PRINT = _UxGT("暫停列印"); // "Pause print"
LSTR MSG_RESUME_PRINT = _UxGT("恢復列印"); // "Resume print"
LSTR MSG_STOP_PRINT = _UxGT("停止列印"); // "Stop print"
LSTR MSG_PRINTING_OBJECT = _UxGT("列印物件"); // "Printing Object"
LSTR MSG_CANCEL_OBJECT = _UxGT("中止物件"); // "Cancel Object"
LSTR MSG_CANCEL_OBJECT_N = _UxGT("中止物件 ="); // "Cancel Object ="
LSTR MSG_OUTAGE_RECOVERY = _UxGT("中斷恢復"); // "Outage Recovery"
LSTR MSG_MEDIA_MENU = _UxGT("從記憶卡上列印"); // "Print from SD"
LSTR MSG_NO_MEDIA = _UxGT("無記憶卡"); // "No SD card"
LSTR MSG_DWELL = _UxGT("休眠 ..."); // "Sleep..."
LSTR MSG_USERWAIT = _UxGT("點擊繼續 ..."); // "Click to resume..."
LSTR MSG_PRINT_PAUSED = _UxGT("列印已暫停"); // "Print paused"
LSTR MSG_PRINTING = _UxGT("列印中 ..."); // "Printing..."
LSTR MSG_PRINT_ABORTED = _UxGT("已取消列印"); // "Print aborted"
LSTR MSG_NO_MOVE = _UxGT("無移動"); // "No move."
LSTR MSG_KILLED = _UxGT("已砍掉"); // "KILLED. "
LSTR MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
LSTR MSG_CONTROL_RETRACT = _UxGT("回縮長度mm"); // "Retract mm" retract_length, retract length (positive mm)
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("換手回抽長度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
LSTR MSG_CONTROL_RETRACTF = _UxGT("回縮速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("回縮恢復長度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("換手回縮恢復長度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回縮恢復後進料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
LSTR MSG_AUTORETRACT = _UxGT("自動回縮"); // "Auto-Retract" autoretract_enabled,
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("交換長度"); // "Swap Length"
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("清除長度"); // "Purge Length"
LSTR MSG_TOOL_CHANGE = _UxGT("交換工具"); //"Tool Change"
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z軸提昇"); // "Z Raise"
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("最高速度"); // "Prime Speed"
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("收回速度"); // "Retract Speed"
LSTR MSG_NOZZLE_STANDBY = _UxGT("噴嘴待機"); //"Nozzle Standby"
LSTR MSG_FILAMENTCHANGE = _UxGT("更換絲料"); // "Change filament"
LSTR MSG_FILAMENTCHANGE_E = _UxGT("更換絲料 *");
LSTR MSG_FILAMENTLOAD = _UxGT("裝載絲料"); // "Load filament"
LSTR MSG_FILAMENTLOAD_E = _UxGT("裝載絲料 *");
LSTR MSG_FILAMENTUNLOAD = _UxGT("卸載絲料"); // "Unload filament"
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("卸載絲料 *"); // "Unload filament"
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("卸載全部"); // "Unload All"
LSTR MSG_INIT_MEDIA = _UxGT("初始化記憶卡"); // "Init. SD card"
LSTR MSG_ATTACH_MEDIA = _UxGT("連接記憶卡"); // "Attach Media
LSTR MSG_CHANGE_MEDIA = _UxGT("更換記憶卡"); // "Change SD card"
LSTR MSG_RELEASE_MEDIA = _UxGT("釋放媒體"); // "Release Media"
LSTR MSG_ZPROBE_OUT = _UxGT("Z探針在熱床之外"); // "Z probe out. bed" Z probe is not within the physical limits
LSTR MSG_SKEW_FACTOR = _UxGT("偏斜因數"); // "Skew Factor"
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch 自檢"); // "BLTouch Self-Test"
LSTR MSG_BLTOUCH_RESET = _UxGT("重置BLTouch"); // "Reset BLTouch"
LSTR MSG_BLTOUCH_STOW = _UxGT("裝載BLTouch"); // "Stow BLTouch"
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("部署BLTouch"); // "Deploy BLTouch"
LSTR MSG_HOME_FIRST = _UxGT("歸位 %s%s%s 先"); // "Home ... first"
LSTR MSG_ZPROBE_OFFSETS = _UxGT("探針偏移"); //Probe Offsets
LSTR MSG_ZPROBE_XOFFSET = _UxGT("探針X偏移量"); //Probe X Offset
LSTR MSG_ZPROBE_YOFFSET = _UxGT("探針Y偏移量"); //Probe Y Offset
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("探針Z偏移量"); //Probe Z Offset
LSTR MSG_BABYSTEP_X = _UxGT("微量調整X軸"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
LSTR MSG_BABYSTEP_Y = _UxGT("微量調整Y軸"); // "Babystep Y"
LSTR MSG_BABYSTEP_Z = _UxGT("微量調整Z軸"); // "Babystep Z"
LSTR MSG_BABYSTEP_TOTAL = _UxGT("總計"); // "Total"
LSTR MSG_ENDSTOP_ABORT = _UxGT("擋塊終止"); // "Endstop abort"
LSTR MSG_HEATING_FAILED_LCD = _UxGT("加熱失敗"); // "Heating failed"
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("錯誤:冗餘溫度"); // "Err: REDUNDANT TEMP"
LSTR MSG_THERMAL_RUNAWAY = _UxGT("溫度失控"); // "THERMAL RUNAWAY"
LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("熱床溫度失控"); // "BED THERMAL RUNAWAY"
LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("機箱溫度失控"); // "CHAMBER T. RUNAWAY"
LSTR MSG_ERR_MAXTEMP = _UxGT("錯誤:最高溫度"); // "Err: MAXTEMP"
LSTR MSG_ERR_MINTEMP = _UxGT("錯誤:最低溫度"); // "Err: MINTEMP"
LSTR MSG_HALTED = _UxGT("印表機停機"); // "PRINTER HALTED"
LSTR MSG_PLEASE_RESET = _UxGT("請重置"); // "Please reset"
LSTR MSG_SHORT_DAY = _UxGT(""); // "d" // One character only
LSTR MSG_SHORT_HOUR = _UxGT(""); // "h" // One character only
LSTR MSG_SHORT_MINUTE = _UxGT(""); // "m" // One character only
LSTR MSG_HEATING = _UxGT("加熱中 ..."); // "Heating..."
LSTR MSG_COOLING = _UxGT("冷卻中 ..."); // "Cooling..."
LSTR MSG_BED_HEATING = _UxGT("加熱熱床中 ..."); // "Bed Heating..."
LSTR MSG_BED_COOLING = _UxGT("熱床冷卻中 ..."); // "Bed Cooling..."
LSTR MSG_CHAMBER_HEATING = _UxGT("機箱加熱中 .."); // "Chamber Heating..."
LSTR MSG_CHAMBER_COOLING = _UxGT("機箱冷卻中 ..."); //Chamber Cooling...
LSTR MSG_DELTA_CALIBRATE = _UxGT("⊿校準"); // "Delta Calibration"
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("⊿校準X"); // "Calibrate X"
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校準Y"); // "Calibrate Y"
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校準Z"); // "Calibrate Z"
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校準中心"); // "Calibrate Center"
LSTR MSG_DELTA_SETTINGS = _UxGT("⊿設置"); // "Delta Settings"
LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自動校準"); // "Auto Calibration"
LSTR MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
LSTR MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
LSTR MSG_DELTA_RADIUS = _UxGT("⊿半徑"); // "Radius"
LSTR MSG_INFO_MENU = _UxGT("關於印表機"); // "About Printer"
LSTR MSG_INFO_PRINTER_MENU = _UxGT("印表機訊息"); // "Printer Info"
LSTR MSG_3POINT_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
LSTR MSG_LINEAR_LEVELING = _UxGT("線性調平"); // "Linear Leveling"
LSTR MSG_BILINEAR_LEVELING = _UxGT(" 雙線性調平"); // "Bilinear Leveling"
LSTR MSG_UBL_LEVELING = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
LSTR MSG_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
LSTR MSG_INFO_STATS_MENU = _UxGT("印表機統計"); // "Printer Stats"
LSTR MSG_INFO_BOARD_MENU = _UxGT("主板訊息"); // "Board Info"
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("溫度計"); // "Thermistors"
LSTR MSG_INFO_EXTRUDERS = _UxGT(" 擠出機"); // "Extruders"
LSTR MSG_INFO_BAUDRATE = _UxGT("傳輸率"); // "Baud"
LSTR MSG_INFO_PROTOCOL = _UxGT("協議"); // "Protocol"
LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("監測溫度失控:關"); // "Runaway Watch: OFF"
LSTR MSG_INFO_RUNAWAY_ON = _UxGT("監測溫度失控:開"); // "Runaway Watch: ON"
LSTR MSG_CASE_LIGHT = _UxGT("外殼燈"); // "Case light"
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("燈亮度"); // "Light BRIGHTNESS"
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印機不正確"); // "The printer is incorrect"
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("列印計數"); // "Print Count"
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("已完成"); // "Completed"
LSTR MSG_INFO_PRINT_TIME = _UxGT("總列印時間"); // "Total print time"
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最長工作時間"); // "Longest job time"
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("總計擠出"); // "Extruded total"
#else
LSTR MSG_INFO_PRINT_COUNT = _UxGT("列印數"); // "Prints"
LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
LSTR MSG_INFO_PRINT_TIME = _UxGT("總共"); // "Total"
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最長"); // "Longest"
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("已擠出"); // "Extruded"
#endif
LSTR MSG_INFO_MIN_TEMP = _UxGT("最低溫度"); // "Min Temp"
LSTR MSG_INFO_MAX_TEMP = _UxGT("最高溫度"); // "Max Temp"
LSTR MSG_INFO_PSU = _UxGT("電源供應"); // "Power Supply"
LSTR MSG_DRIVE_STRENGTH = _UxGT("驅動力度"); // "Drive Strength"
LSTR MSG_DAC_PERCENT_N = _UxGT("@ 驅動 %"); //E Driver %
LSTR MSG_ERROR_TMC = _UxGT("TMC連接錯誤"); // "TMC CONNECTION ERROR"
LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驅動設置"); // "DAC EEPROM Write"
LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("更換絲料"); // "FILAMENT CHANGE"
LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("列印已暫停"); // "PRINT PAUSED"
LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("裝載絲料"); // "LOAD FILAMENT"
LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸載絲料"); // "UNLOAD FILAMENT"
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢複選項:"); // "RESUME OPTIONS:"
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢復列印"); // "Resume print"
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 噴嘴: "); // " Nozzle: "
LSTR MSG_RUNOUT_SENSOR = _UxGT("斷絲偵測"); // "Runout Sensor"
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("絲距離mm"); // "Runout Dist mm"
LSTR MSG_KILL_HOMING_FAILED = _UxGT("歸原位失敗"); // "Homing failed"
LSTR MSG_LCD_PROBING_FAILED = _UxGT("探針探測失敗"); // "Probing failed"
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按鈕", "恢復列印")); //"Press Button to resume print"
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待開始", "絲料", "變更")); // "Wait for start of the filament change"
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下絲料")); // "Wait for filament unload"
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入絲料", "並按鍵", "繼續 ...")); // "Insert filament and press button to continue..."
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按鈕", "加熱噴嘴.")); // "Press button to heat nozzle."
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加熱噴嘴", "請等待 ...")); // "Heating nozzle Please wait..."
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "進料")); // "Wait for filament load"
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "絲料清除")); // "Wait for filament purge"
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下完成","絲料清除")); //"Press button to filament purge"
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待列印", "恢復")); // "Wait for print to resume"
#else // LCD_HEIGHT < 4
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下繼續..")); // "Click to continue"
LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("請等待 ...")); // "Please wait..."
LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入並點擊")); // "Insert and Click"
LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加熱..")); // "Click to heat"
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加熱中 ...")); // "Heating..."
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("載入中 ...")); // "Loading..."
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成..")); // "Click to finish"
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢復中 ...")); // "Resuming..."
#endif // LCD_HEIGHT < 4
}
#if FAN_COUNT == 1
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
#else
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
#endif

View File

@ -0,0 +1,207 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(MARLIN_BRICKOUT)
#include "game.h"
#define BRICK_H 5
#define BRICK_TOP MENU_FONT_ASCENT
#define PADDLE_H 2
#define PADDLE_VEL 3
#define PADDLE_W ((LCD_PIXEL_WIDTH) / 8)
#define PADDLE_Y (LCD_PIXEL_HEIGHT - 1 - PADDLE_H)
#define BRICK_W ((LCD_PIXEL_WIDTH) / (BRICK_COLS))
#define BRICK_BOT (BRICK_TOP + BRICK_H * BRICK_ROWS - 1)
#define BRICK_COL(X) ((X) / (BRICK_W))
#define BRICK_ROW(Y) ((Y - (BRICK_TOP)) / (BRICK_H))
brickout_data_t &bdat = marlin_game_data.brickout;
inline void reset_bricks(const uint16_t v) {
bdat.brick_count = (BRICK_COLS) * (BRICK_ROWS);
LOOP_L_N(i, BRICK_ROWS) bdat.bricks[i] = v;
}
void reset_ball() {
constexpr uint8_t ball_dist = 24;
bdat.bally = BTOF(PADDLE_Y - ball_dist);
bdat.ballv = FTOF(1.3f);
bdat.ballh = -FTOF(1.25f);
uint8_t bx = bdat.paddle_x + (PADDLE_W) / 2 + ball_dist;
if (bx >= LCD_PIXEL_WIDTH - 10) { bx -= ball_dist * 2; bdat.ballh = -bdat.ballh; }
bdat.ballx = BTOF(bx);
bdat.hit_dir = -1;
}
void BrickoutGame::game_screen() {
if (game_frame()) { // Run logic twice for finer resolution
// Update Paddle Position
bdat.paddle_x = constrain(int8_t(ui.encoderPosition), 0, (LCD_PIXEL_WIDTH - (PADDLE_W)) / (PADDLE_VEL));
ui.encoderPosition = bdat.paddle_x;
bdat.paddle_x *= (PADDLE_VEL);
// Run the ball logic
if (game_state) do {
// Provisionally update the ball position
const fixed_t newx = bdat.ballx + bdat.ballh, newy = bdat.bally + bdat.ballv; // current next position
if (!WITHIN(newx, 0, BTOF(LCD_PIXEL_WIDTH - 1))) { // out in x?
bdat.ballh = -bdat.ballh; _BUZZ(5, 220); // bounce x
}
if (newy < 0) { // out in y?
bdat.ballv = -bdat.ballv; _BUZZ(5, 280); // bounce v
bdat.hit_dir = 1;
}
// Did the ball go below the bottom?
else if (newy > BTOF(LCD_PIXEL_HEIGHT)) {
_BUZZ(500, 75);
if (--bdat.balls_left) reset_ball(); else game_state = 0;
break; // done
}
// Is the ball colliding with a brick?
if (WITHIN(newy, BTOF(BRICK_TOP), BTOF(BRICK_BOT))) {
const int8_t bit = BRICK_COL(FTOB(newx)), row = BRICK_ROW(FTOB(newy));
const uint16_t mask = _BV(bit);
if (bdat.bricks[row] & mask) {
// Yes. Remove it!
bdat.bricks[row] &= ~mask;
// Score!
score += BRICK_ROWS - row;
// If bricks are gone, go to reset state
if (!--bdat.brick_count) game_state = 2;
// Bounce the ball cleverly
if ((bdat.ballv < 0) == (bdat.hit_dir < 0)) { bdat.ballv = -bdat.ballv; bdat.ballh += fixed_t(random(-16, 16)); _BUZZ(5, 880); }
else { bdat.ballh = -bdat.ballh; bdat.ballv += fixed_t(random(-16, 16)); _BUZZ(5, 640); }
}
}
// Is the ball moving down and in paddle range?
else if (bdat.ballv > 0 && WITHIN(newy, BTOF(PADDLE_Y), BTOF(PADDLE_Y + PADDLE_H))) {
// Ball actually hitting paddle
const int8_t diff = FTOB(newx) - bdat.paddle_x;
if (WITHIN(diff, 0, PADDLE_W - 1)) {
// Reverse Y direction
bdat.ballv = -bdat.ballv; _BUZZ(3, 880);
bdat.hit_dir = -1;
// Near edges affects X velocity
const bool is_left_edge = (diff <= 1);
if (is_left_edge || diff >= PADDLE_W-1 - 1) {
if ((bdat.ballh > 0) == is_left_edge) bdat.ballh = -bdat.ballh;
}
else if (diff <= 3) {
bdat.ballh += fixed_t(random(-64, 0));
NOLESS(bdat.ballh, BTOF(-2));
NOMORE(bdat.ballh, BTOF(2));
}
else if (diff >= PADDLE_W-1 - 3) {
bdat.ballh += fixed_t(random( 0, 64));
NOLESS(bdat.ballh, BTOF(-2));
NOMORE(bdat.ballh, BTOF(2));
}
// Paddle hit after clearing the board? Reset the board.
if (game_state == 2) { reset_bricks(0xFFFF); game_state = 1; }
}
}
bdat.ballx += bdat.ballh; bdat.bally += bdat.ballv; // update with new velocity
} while (false);
}
u8g.setColorIndex(1);
// Draw bricks
if (PAGE_CONTAINS(BRICK_TOP, BRICK_BOT)) {
LOOP_L_N(y, BRICK_ROWS) {
const uint8_t yy = y * BRICK_H + BRICK_TOP;
if (PAGE_CONTAINS(yy, yy + BRICK_H - 1)) {
LOOP_L_N(x, BRICK_COLS) {
if (TEST(bdat.bricks[y], x)) {
const uint8_t xx = x * BRICK_W;
LOOP_L_N(v, BRICK_H - 1)
if (PAGE_CONTAINS(yy + v, yy + v))
u8g.drawHLine(xx, yy + v, BRICK_W - 1);
}
}
}
}
}
// Draw paddle
if (PAGE_CONTAINS(PADDLE_Y-1, PADDLE_Y)) {
u8g.drawHLine(bdat.paddle_x, PADDLE_Y, PADDLE_W);
#if PADDLE_H > 1
u8g.drawHLine(bdat.paddle_x, PADDLE_Y-1, PADDLE_W);
#if PADDLE_H > 2
u8g.drawHLine(bdat.paddle_x, PADDLE_Y-2, PADDLE_W);
#endif
#endif
}
// Draw ball while game is running
if (game_state) {
const uint8_t by = FTOB(bdat.bally);
if (PAGE_CONTAINS(by, by+1))
u8g.drawFrame(FTOB(bdat.ballx), by, 2, 2);
}
// Or draw GAME OVER
else
draw_game_over();
if (PAGE_UNDER(MENU_FONT_ASCENT)) {
// Score Digits
//const uint8_t sx = (LCD_PIXEL_WIDTH - (score >= 10 ? score >= 100 ? score >= 1000 ? 4 : 3 : 2 : 1) * MENU_FONT_WIDTH) / 2;
constexpr uint8_t sx = 0;
lcd_put_int(sx, MENU_FONT_ASCENT - 1, score);
// Balls Left
lcd_moveto(LCD_PIXEL_WIDTH - MENU_FONT_WIDTH * 3, MENU_FONT_ASCENT - 1);
PGM_P const ohs = PSTR("ooo\0\0");
lcd_put_u8str_P(ohs + 3 - bdat.balls_left);
}
// A click always exits this game
if (ui.use_click()) exit_game();
}
#define SCREEN_M ((LCD_PIXEL_WIDTH) / 2)
void BrickoutGame::enter_game() {
init_game(2, game_screen); // 2 = reset bricks on paddle hit
constexpr uint8_t paddle_start = SCREEN_M - (PADDLE_W) / 2;
bdat.paddle_x = paddle_start;
bdat.balls_left = 3;
reset_bricks(0x0000);
reset_ball();
ui.encoderPosition = paddle_start / (PADDLE_VEL);
}
#endif // MARLIN_BRICKOUT

View File

@ -0,0 +1,38 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "types.h"
#define BRICK_ROWS 4
#define BRICK_COLS 16
typedef struct {
uint8_t balls_left, brick_count;
uint16_t bricks[BRICK_ROWS];
int8_t paddle_x, hit_dir;
fixed_t ballx, bally, ballh, ballv;
} brickout_data_t;
class BrickoutGame : MarlinGame { public: static void enter_game(), game_screen(); };
extern BrickoutGame brickout;

View File

@ -0,0 +1,66 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfigPre.h"
#if HAS_GAMES
#include "game.h"
int MarlinGame::score;
uint8_t MarlinGame::game_state;
millis_t MarlinGame::next_frame;
MarlinGameData marlin_game_data;
bool MarlinGame::game_frame() {
static int8_t slew;
if (ui.first_page) slew = 2;
ui.refresh(LCDVIEW_CALL_NO_REDRAW); // Refresh as often as possible
return (game_state && slew-- > 0);
}
void MarlinGame::draw_game_over() {
constexpr int8_t gowide = (MENU_FONT_WIDTH) * 9,
gohigh = MENU_FONT_ASCENT - 3,
lx = (LCD_PIXEL_WIDTH - gowide) / 2,
ly = (LCD_PIXEL_HEIGHT + gohigh) / 2;
if (PAGE_CONTAINS(ly - gohigh - 1, ly + 1)) {
u8g.setColorIndex(0);
u8g.drawBox(lx - 1, ly - gohigh - 1, gowide + 2, gohigh + 2);
u8g.setColorIndex(1);
if (ui.get_blink()) lcd_put_u8str(lx, ly, F("GAME OVER"));
}
}
void MarlinGame::init_game(const uint8_t init_state, const screenFunc_t screen) {
score = 0;
game_state = init_state;
ui.goto_screen(screen);
ui.defer_status_screen();
}
void MarlinGame::exit_game() {
ui.goto_previous_screen_no_defer();
}
#endif // HAS_GAMES

70
src/lcd/menu/game/game.h Normal file
View File

@ -0,0 +1,70 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../../../inc/MarlinConfigPre.h"
#include "../../dogm/marlinui_DOGM.h"
#include "../../lcdprint.h"
#include "../../marlinui.h"
//#define MUTE_GAMES
#if ENABLED(MUTE_GAMES) || !HAS_SOUND
#define _BUZZ(D,F) NOOP
#else
#define _BUZZ(D,F) BUZZ(D,F)
#endif
#if HAS_GAME_MENU
void menu_game();
#endif
#if ENABLED(MARLIN_BRICKOUT)
#include "brickout.h"
#endif
#if ENABLED(MARLIN_INVADERS)
#include "invaders.h"
#endif
#if ENABLED(MARLIN_MAZE)
#include "maze.h"
#endif
#if ENABLED(MARLIN_SNAKE)
#include "snake.h"
#endif
// Pool game data to save SRAM
union MarlinGameData {
#if ENABLED(MARLIN_BRICKOUT)
brickout_data_t brickout;
#endif
#if ENABLED(MARLIN_INVADERS)
invaders_data_t invaders;
#endif
#if ENABLED(MARLIN_SNAKE)
snake_data_t snake;
#endif
#if ENABLED(MARLIN_MAZE)
maze_data_t maze;
#endif
};
extern MarlinGameData marlin_game_data;

View File

@ -0,0 +1,438 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(MARLIN_INVADERS)
#include "game.h"
#define CANNON_W 11
#define CANNON_H 8
#define CANNON_VEL 4
#define CANNON_Y (LCD_PIXEL_HEIGHT - 1 - CANNON_H)
#define INVADER_VEL 3
#define INVADER_TOP MENU_FONT_ASCENT
#define INVADERS_WIDE ((INVADER_COL_W) * (INVADER_COLS))
#define INVADERS_HIGH ((INVADER_ROW_H) * (INVADER_ROWS))
#define UFO_H 5
#define UFO_W 13
#define LASER_H 4
#define SHOT_H 3
#define EXPL_W 11
#define LIFE_W 8
#define LIFE_H 5
#define INVADER_RIGHT ((INVADER_COLS) * (INVADER_COL_W))
// 11x8
const unsigned char invader[3][2][16] PROGMEM = {
{ { B00000110,B00000000,
B00001111,B00000000,
B00011111,B10000000,
B00110110,B11000000,
B00111111,B11000000,
B00001001,B00000000,
B00010110,B10000000,
B00101001,B01000000
}, {
B00000110,B00000000,
B00001111,B00000000,
B00011111,B10000000,
B00110110,B11000000,
B00111111,B11000000,
B00010110,B10000000,
B00100000,B01000000,
B00010000,B10000000
}
}, {
{ B00010000,B01000000,
B00001000,B10000000,
B00011111,B11000000,
B00110111,B01100000,
B01111111,B11110000,
B01011111,B11010000,
B01010000,B01010000,
B00001101,B10000000
}, {
B00010000,B01000000,
B01001000,B10010000,
B01011111,B11010000,
B01110111,B01110000,
B01111111,B11110000,
B00011111,B11000000,
B00010000,B01000000,
B00100000,B00100000
}
}, {
{ B00001111,B00000000,
B01111111,B11100000,
B11111111,B11110000,
B11100110,B01110000,
B11111111,B11110000,
B00011001,B10000000,
B00110110,B11000000,
B11000000,B00110000
}, {
B00001111,B00000000,
B01111111,B11100000,
B11111111,B11110000,
B11100110,B01110000,
B11111111,B11110000,
B00011001,B10000000,
B00110110,B11000000,
B00011001,B10000000
}
}
};
const unsigned char cannon[] PROGMEM = {
B00000100,B00000000,
B00001110,B00000000,
B00001110,B00000000,
B01111111,B11000000,
B11111111,B11100000,
B11111111,B11100000,
B11111111,B11100000,
B11111111,B11100000
};
const unsigned char life[] PROGMEM = {
B00010000,
B01111100,
B11111110,
B11111110,
B11111110
};
const unsigned char explosion[] PROGMEM = {
B01000100,B01000000,
B00100100,B10000000,
B00000000,B00000000,
B00110001,B10000000,
B00000000,B00000000,
B00100100,B10000000,
B01000100,B01000000
};
const unsigned char ufo[] PROGMEM = {
B00011111,B11000000,
B01111111,B11110000,
B11011101,B11011000,
B11111111,B11111000,
B01111111,B11110000
};
constexpr uint8_t inv_type[] = {
#if INVADER_ROWS == 5
0, 1, 1, 2, 2
#elif INVADER_ROWS == 4
0, 1, 1, 2
#elif INVADER_ROWS == 3
0, 1, 2
#else
#error "INVASION_SIZE must be 3, 4, or 5."
#endif
};
invaders_data_t &idat = marlin_game_data.invaders;
#define INV_X_LEFT(C,T) (idat.pos.x + (C) * (INVADER_COL_W) + inv_off[T])
#define INV_X_CTR(C,T) (INV_X_LEFT(C,T) + inv_wide[T] / 2)
#define INV_Y_BOT(R) (idat.pos.y + (R + 1) * (INVADER_ROW_H) - 2)
constexpr uint8_t inv_off[] = { 2, 1, 0 }, inv_wide[] = { 8, 11, 12 };
inline void update_invader_data() {
uint8_t inv_mask = 0;
// Get a list of all active invaders
uint8_t sc = 0;
LOOP_L_N(y, INVADER_ROWS) {
uint8_t m = idat.bugs[y];
if (m) idat.botmost = y + 1;
inv_mask |= m;
LOOP_L_N(x, INVADER_COLS)
if (TEST(m, x)) idat.shooters[sc++] = (y << 4) | x;
}
idat.leftmost = 0;
LOOP_L_N(i, INVADER_COLS) { if (TEST(inv_mask, i)) break; idat.leftmost -= INVADER_COL_W; }
idat.rightmost = LCD_PIXEL_WIDTH - (INVADERS_WIDE);
for (uint8_t i = INVADER_COLS; i--;) { if (TEST(inv_mask, i)) break; idat.rightmost += INVADER_COL_W; }
if (idat.count == 2) idat.dir = idat.dir > 0 ? INVADER_VEL + 1 : -(INVADER_VEL + 1);
}
inline void reset_bullets() {
LOOP_L_N(i, COUNT(idat.bullet)) idat.bullet[i].v = 0;
}
inline void reset_invaders() {
idat.pos.x = 0; idat.pos.y = INVADER_TOP;
idat.dir = INVADER_VEL;
idat.count = (INVADER_COLS) * (INVADER_ROWS);
LOOP_L_N(i, INVADER_ROWS) idat.bugs[i] = _BV(INVADER_COLS) - 1;
update_invader_data();
reset_bullets();
}
inline void spawn_ufo() {
idat.ufov = random(0, 2) ? 1 : -1;
idat.ufox = idat.ufov > 0 ? -(UFO_W) : LCD_PIXEL_WIDTH - 1;
}
inline void reset_player() {
idat.cannon_x = 0;
ui.encoderPosition = 0;
}
inline void fire_cannon() {
idat.laser.x = idat.cannon_x + CANNON_W / 2;
idat.laser.y = LCD_PIXEL_HEIGHT - CANNON_H - (LASER_H);
idat.laser.v = -(LASER_H);
}
inline void explode(const int8_t x, const int8_t y, const int8_t v=4) {
idat.explod.x = x - (EXPL_W) / 2;
idat.explod.y = y;
idat.explod.v = v;
}
inline void kill_cannon(uint8_t &game_state, const uint8_t st) {
reset_bullets();
explode(idat.cannon_x + (CANNON_W) / 2, CANNON_Y, 6);
_BUZZ(1000, 10);
if (--idat.cannons_left) {
idat.laser.v = 0;
game_state = st;
reset_player();
}
else
game_state = 0;
}
void InvadersGame::game_screen() {
ui.refresh(LCDVIEW_CALL_NO_REDRAW); // Call as often as possible
// Run game logic once per full screen
if (ui.first_page) {
// Update Cannon Position
int16_t ep = constrain(int16_t(ui.encoderPosition), 0, (LCD_PIXEL_WIDTH - (CANNON_W)) / (CANNON_VEL));
ui.encoderPosition = ep;
ep *= (CANNON_VEL);
if (ep > idat.cannon_x) { idat.cannon_x += CANNON_VEL - 1; if (ep - idat.cannon_x < 2) idat.cannon_x = ep; }
if (ep < idat.cannon_x) { idat.cannon_x -= CANNON_VEL - 1; if (idat.cannon_x - ep < 2) idat.cannon_x = ep; }
// Run the game logic
if (game_state) do {
// Move the UFO, if any
if (idat.ufov) { idat.ufox += idat.ufov; if (!WITHIN(idat.ufox, -(UFO_W), LCD_PIXEL_WIDTH - 1)) idat.ufov = 0; }
if (game_state > 1) { if (--game_state == 2) { reset_invaders(); } else if (game_state == 100) { game_state = 1; } break; }
const bool did_blink = (++idat.blink_count > idat.count >> 1);
if (did_blink) {
idat.game_blink = !idat.game_blink;
idat.blink_count = 0;
}
if (idat.count && did_blink) {
const int8_t newx = idat.pos.x + idat.dir;
if (!WITHIN(newx, idat.leftmost, idat.rightmost)) { // Invaders reached the edge?
idat.dir *= -1; // Invaders change direction
idat.pos.y += (INVADER_ROW_H) / 2; // Invaders move down
idat.pos.x -= idat.dir; // ...and only move down this time.
if (idat.pos.y + idat.botmost * (INVADER_ROW_H) - 2 >= CANNON_Y) // Invaders reached the bottom?
kill_cannon(game_state, 20); // Kill the cannon. Reset invaders.
}
idat.pos.x += idat.dir; // Invaders take one step left/right
// Randomly shoot if invaders are listed
if (idat.count && !random(0, 20)) {
// Find a free bullet
laser_t *b = nullptr;
LOOP_L_N(i, COUNT(idat.bullet)) if (!idat.bullet[i].v) { b = &idat.bullet[i]; break; }
if (b) {
// Pick a random shooter and update the bullet
//SERIAL_ECHOLNPGM("free bullet found");
const uint8_t inv = idat.shooters[random(0, idat.count + 1)], col = inv & 0x0F, row = inv >> 4, type = inv_type[row];
b->x = INV_X_CTR(col, type);
b->y = INV_Y_BOT(row);
b->v = 2 + random(0, 2);
}
}
}
// Update the laser position
if (idat.laser.v) {
idat.laser.y += idat.laser.v;
if (idat.laser.y < 0) idat.laser.v = 0;
}
// Did the laser collide with an invader?
if (idat.laser.v && WITHIN(idat.laser.y, idat.pos.y, idat.pos.y + INVADERS_HIGH - 1)) {
const int8_t col = idat.laser_col();
if (WITHIN(col, 0, INVADER_COLS - 1)) {
const int8_t row = idat.laser_row();
if (WITHIN(row, 0, INVADER_ROWS - 1)) {
const uint8_t mask = _BV(col);
if (idat.bugs[row] & mask) {
const uint8_t type = inv_type[row];
const int8_t invx = INV_X_LEFT(col, type);
if (WITHIN(idat.laser.x, invx, invx + inv_wide[type] - 1)) {
// Turn off laser
idat.laser.v = 0;
// Remove the invader!
idat.bugs[row] &= ~mask;
// Score!
score += INVADER_ROWS - row;
// Explode sound!
_BUZZ(40, 10);
// Explosion bitmap!
explode(invx + inv_wide[type] / 2, idat.pos.y + row * (INVADER_ROW_H));
// If invaders are gone, go to reset invaders state
if (--idat.count) update_invader_data(); else { game_state = 20; reset_bullets(); }
} // laser x hit
} // invader exists
} // good row
} // good col
} // laser in invader zone
// Handle alien bullets
LOOP_L_N(s, COUNT(idat.bullet)) {
laser_t *b = &idat.bullet[s];
if (b->v) {
// Update alien bullet position
b->y += b->v;
if (b->y >= LCD_PIXEL_HEIGHT)
b->v = 0; // Offscreen
else if (b->y >= CANNON_Y && WITHIN(b->x, idat.cannon_x, idat.cannon_x + CANNON_W - 1))
kill_cannon(game_state, 120); // Hit the cannon
}
}
// Randomly spawn a UFO
if (!idat.ufov && !random(0,500)) spawn_ufo();
// Did the laser hit a ufo?
if (idat.laser.v && idat.ufov && idat.laser.y < UFO_H + 2 && WITHIN(idat.laser.x, idat.ufox, idat.ufox + UFO_W - 1)) {
// Turn off laser and UFO
idat.laser.v = idat.ufov = 0;
// Score!
score += 10;
// Explode!
_BUZZ(40, 10);
// Explosion bitmap
explode(idat.ufox + (UFO_W) / 2, 1);
}
} while (false);
}
// Click-and-hold to abort
if (ui.button_pressed()) --idat.quit_count; else idat.quit_count = 10;
// Click to fire or exit
if (ui.use_click()) {
if (!game_state)
idat.quit_count = 0;
else if (game_state == 1 && !idat.laser.v)
fire_cannon();
}
if (!idat.quit_count) exit_game();
u8g.setColorIndex(1);
// Draw invaders
if (PAGE_CONTAINS(idat.pos.y, idat.pos.y + idat.botmost * (INVADER_ROW_H) - 2 - 1)) {
int8_t yy = idat.pos.y;
LOOP_L_N(y, INVADER_ROWS) {
const uint8_t type = inv_type[y];
if (PAGE_CONTAINS(yy, yy + INVADER_H - 1)) {
int8_t xx = idat.pos.x;
LOOP_L_N(x, INVADER_COLS) {
if (TEST(idat.bugs[y], x))
u8g.drawBitmapP(xx, yy, 2, INVADER_H, invader[type][idat.game_blink]);
xx += INVADER_COL_W;
}
}
yy += INVADER_ROW_H;
}
}
// Draw UFO
if (idat.ufov && PAGE_UNDER(UFO_H + 2))
u8g.drawBitmapP(idat.ufox, 2, 2, UFO_H, ufo);
// Draw cannon
if (game_state && PAGE_CONTAINS(CANNON_Y, CANNON_Y + CANNON_H - 1) && (game_state < 2 || (game_state & 0x02)))
u8g.drawBitmapP(idat.cannon_x, CANNON_Y, 2, CANNON_H, cannon);
// Draw laser
if (idat.laser.v && PAGE_CONTAINS(idat.laser.y, idat.laser.y + LASER_H - 1))
u8g.drawVLine(idat.laser.x, idat.laser.y, LASER_H);
// Draw invader bullets
LOOP_L_N (i, COUNT(idat.bullet)) {
if (idat.bullet[i].v && PAGE_CONTAINS(idat.bullet[i].y - (SHOT_H - 1), idat.bullet[i].y))
u8g.drawVLine(idat.bullet[i].x, idat.bullet[i].y - (SHOT_H - 1), SHOT_H);
}
// Draw explosion
if (idat.explod.v && PAGE_CONTAINS(idat.explod.y, idat.explod.y + 7 - 1)) {
u8g.drawBitmapP(idat.explod.x, idat.explod.y, 2, 7, explosion);
--idat.explod.v;
}
// Blink GAME OVER when game is over
if (!game_state) draw_game_over();
if (PAGE_UNDER(MENU_FONT_ASCENT - 1)) {
// Draw Score
//const uint8_t sx = (LCD_PIXEL_WIDTH - (score >= 10 ? score >= 100 ? score >= 1000 ? 4 : 3 : 2 : 1) * MENU_FONT_WIDTH) / 2;
constexpr uint8_t sx = 0;
lcd_put_int(sx, MENU_FONT_ASCENT - 1, score);
// Draw lives
if (idat.cannons_left)
for (uint8_t i = 1; i <= idat.cannons_left; ++i)
u8g.drawBitmapP(LCD_PIXEL_WIDTH - i * (LIFE_W), 6 - (LIFE_H), 1, LIFE_H, life);
}
}
void InvadersGame::enter_game() {
init_game(20, game_screen); // countdown to reset invaders
idat.cannons_left = 3;
idat.quit_count = 10;
idat.laser.v = 0;
reset_invaders();
reset_player();
}
#endif // MARLIN_INVADERS

View File

@ -0,0 +1,62 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "types.h"
#define INVASION_SIZE 3
#if INVASION_SIZE == 3
#define INVADER_COLS 5
#elif INVASION_SIZE == 4
#define INVADER_COLS 6
#else
#define INVADER_COLS 8
#undef INVASION_SIZE
#define INVASION_SIZE 5
#endif
#define INVADER_ROWS INVASION_SIZE
#define INVADER_COL_W 14
#define INVADER_H 8
#define INVADER_ROW_H (INVADER_H + 2)
typedef struct { int8_t x, y, v; } laser_t;
typedef struct {
pos_t pos;
uint8_t cannons_left;
int8_t cannon_x;
laser_t bullet[10], laser, explod;
int8_t dir, leftmost, rightmost, botmost;
uint8_t count, quit_count, blink_count;
uint8_t bugs[INVADER_ROWS], shooters[(INVADER_ROWS) * (INVADER_COLS)];
int8_t ufox, ufov;
bool game_blink;
int8_t laser_col() { return ((laser.x - pos.x) / (INVADER_COL_W)); };
int8_t laser_row() { return ((laser.y - pos.y + 2) / (INVADER_ROW_H)); };
} invaders_data_t;
class InvadersGame : MarlinGame { public: static void enter_game(), game_screen(); };
extern InvadersGame invaders;

134
src/lcd/menu/game/maze.cpp Normal file
View File

@ -0,0 +1,134 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(MARLIN_MAZE)
#include "game.h"
int8_t move_dir, last_move_dir, // NESW0
prizex, prizey, prize_cnt, old_encoder;
fixed_t playerx, playery;
// Up to 50 lines, then you win!
typedef struct { int8_t x, y; } pos_t;
uint8_t head_ind;
pos_t maze_walls[50] = {
{ 0, 0 }
};
// Turn the player cw or ccw
inline void turn_player(const bool cw) {
if (move_dir == 4) move_dir = last_move_dir;
move_dir += cw ? 1 : -1;
move_dir &= 0x03;
last_move_dir = move_dir;
}
// Reset the player for a new game
void player_reset() {
// Init position
playerx = BTOF(1);
playery = BTOF(GAME_H / 2);
// Init motion with a ccw turn
move_dir = 0;
turn_player(false);
// Clear prize flag
prize_cnt = 255;
// Clear the controls
ui.encoderPosition = 0;
old_encoder = 0;
}
void MazeGame::game_screen() {
// Run the sprite logic
if (game_frame()) do { // Run logic twice for finer resolution
// Move the man one unit in the current direction
// Direction index 4 is for the stopped man
const int8_t oldx = FTOB(playerx), oldy = FTOB(playery);
pos_t dir_add[] = { { 0, -1 }, { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, 0 } };
playerx += dir_add[move_dir].x;
playery += dir_add[move_dir].y;
const int8_t x = FTOB(playerx), y = FTOB(playery);
} while(0);
u8g.setColorIndex(1);
// Draw Score
if (PAGE_UNDER(HEADER_H)) lcd_put_int(0, HEADER_H - 1, score);
// Draw the maze
// LOOP_L_N(n, head_ind) {
// const pos_t &p = maze_walls[n], &q = maze_walls[n + 1];
// if (p.x == q.x) {
// const int8_t y1 = GAMEY(_MIN(p.y, q.y)), y2 = GAMEY(_MAX(p.y, q.y));
// if (PAGE_CONTAINS(y1, y2))
// u8g.drawVLine(GAMEX(p.x), y1, y2 - y1 + 1);
// }
// else if (PAGE_CONTAINS(GAMEY(p.y), GAMEY(p.y))) {
// const int8_t x1 = GAMEX(_MIN(p.x, q.x)), x2 = GAMEX(_MAX(p.x, q.x));
// u8g.drawHLine(x1, GAMEY(p.y), x2 - x1 + 1);
// }
// }
// Draw Man
// const int8_t fy = GAMEY(foody);
// if (PAGE_CONTAINS(fy, fy + FOOD_WH - 1)) {
// const int8_t fx = GAMEX(foodx);
// u8g.drawFrame(fx, fy, FOOD_WH, FOOD_WH);
// if (FOOD_WH == 5) u8g.drawPixel(fx + 2, fy + 2);
// }
// Draw Ghosts
// const int8_t fy = GAMEY(foody);
// if (PAGE_CONTAINS(fy, fy + FOOD_WH - 1)) {
// const int8_t fx = GAMEX(foodx);
// u8g.drawFrame(fx, fy, FOOD_WH, FOOD_WH);
// if (FOOD_WH == 5) u8g.drawPixel(fx + 2, fy + 2);
// }
// Draw Prize
// if (PAGE_CONTAINS(prizey, prizey + PRIZE_WH - 1)) {
// u8g.drawFrame(prizex, prizey, PRIZE_WH, PRIZE_WH);
// if (PRIZE_WH == 5) u8g.drawPixel(prizex + 2, prizey + 2);
// }
// Draw GAME OVER
if (!game_state) draw_game_over();
// A click always exits this game
if (ui.use_click()) exit_game();
}
void MazeGame::enter_game() {
init_game(1, game_screen); // Game running
reset_player();
reset_enemies();
}
#endif // MARLIN_MAZE

30
src/lcd/menu/game/maze.h Normal file
View File

@ -0,0 +1,30 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "types.h"
typedef struct { pos_t pos; } maze_data_t;
class MazeGame : MarlinGame { public: static void enter_game(), game_screen(); };
extern MazeGame maze;

323
src/lcd/menu/game/snake.cpp Normal file
View File

@ -0,0 +1,323 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(MARLIN_SNAKE)
#include "game.h"
#define SNAKE_BOX 4
#define HEADER_H (MENU_FONT_ASCENT - 2)
#define SNAKE_WH (SNAKE_BOX + 1)
#define IDEAL_L 2
#define IDEAL_R (LCD_PIXEL_WIDTH - 1 - 2)
#define IDEAL_T (HEADER_H + 2)
#define IDEAL_B (LCD_PIXEL_HEIGHT - 1 - 2)
#define IDEAL_W (IDEAL_R - (IDEAL_L) + 1)
#define IDEAL_H (IDEAL_B - (IDEAL_T) + 1)
#define GAME_W int((IDEAL_W) / (SNAKE_WH))
#define GAME_H int((IDEAL_H) / (SNAKE_WH))
#define BOARD_W ((SNAKE_WH) * (GAME_W) + 1)
#define BOARD_H ((SNAKE_WH) * (GAME_H) + 1)
#define BOARD_L ((LCD_PIXEL_WIDTH - (BOARD_W) + 1) / 2)
#define BOARD_R (BOARD_L + BOARD_W - 1)
#define BOARD_T (((LCD_PIXEL_HEIGHT + IDEAL_T) - (BOARD_H)) / 2)
#define BOARD_B (BOARD_T + BOARD_H - 1)
#define GAMEX(X) (BOARD_L + ((X) * (SNAKE_WH)))
#define GAMEY(Y) (BOARD_T + ((Y) * (SNAKE_WH)))
#if SNAKE_BOX > 2
#define FOOD_WH SNAKE_BOX
#else
#define FOOD_WH 2
#endif
#if SNAKE_BOX < 1
#define SNAKE_SIZ 1
#else
#define SNAKE_SIZ SNAKE_BOX
#endif
constexpr fixed_t snakev = FTOF(0.20);
snake_data_t &sdat = marlin_game_data.snake;
// Remove the first pixel from the tail.
// If needed, shift out the first segment.
void shorten_tail() {
pos_t &p = sdat.snake_tail[0], &q = sdat.snake_tail[1];
bool shift = false;
if (p.x == q.x) {
// Vertical line
p.y += (q.y > p.y) ? 1 : -1;
shift = p.y == q.y;
}
else {
// Horizontal line
p.x += (q.x > p.x) ? 1 : -1;
shift = p.x == q.x;
}
if (shift) {
sdat.head_ind--;
LOOP_LE_N(i, sdat.head_ind)
sdat.snake_tail[i] = sdat.snake_tail[i + 1];
}
}
// The food is on a line
inline bool food_on_line() {
LOOP_L_N(n, sdat.head_ind) {
pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.x == q.x) {
if ((sdat.foodx == p.x - 1 || sdat.foodx == p.x) && WITHIN(sdat.foody, _MIN(p.y, q.y), _MAX(p.y, q.y)))
return true;
}
else if ((sdat.foody == p.y - 1 || sdat.foody == p.y) && WITHIN(sdat.foodx, _MIN(p.x, q.x), _MAX(p.x, q.x)))
return true;
}
return false;
}
// Add a new food blob
void food_reset() {
do {
sdat.foodx = random(0, GAME_W);
sdat.foody = random(0, GAME_H);
} while (food_on_line());
}
// Turn the snake cw or ccw
inline void turn_snake(const bool cw) {
sdat.snake_dir += cw ? 1 : -1;
sdat.snake_dir &= 0x03;
sdat.head_ind++;
sdat.snake_tail[sdat.head_ind].x = FTOB(sdat.snakex);
sdat.snake_tail[sdat.head_ind].y = FTOB(sdat.snakey);
}
// Reset the snake for a new game
void snake_reset() {
// Init the head and velocity
sdat.snakex = BTOF(1);
sdat.snakey = BTOF(GAME_H / 2);
//snakev = FTOF(0.25);
// Init the tail with a cw turn
sdat.snake_dir = 0;
sdat.head_ind = 0;
sdat.snake_tail[0].x = 0;
sdat.snake_tail[0].y = GAME_H / 2;
turn_snake(true);
// Clear food flag
sdat.food_cnt = 5;
// Clear the controls
ui.encoderPosition = 0;
sdat.old_encoder = 0;
}
// Check if head segment overlaps another
bool snake_overlap() {
// 4 lines must exist before a collision is possible
if (sdat.head_ind < 4) return false;
// Is the last segment crossing any others?
const pos_t &h1 = sdat.snake_tail[sdat.head_ind - 1], &h2 = sdat.snake_tail[sdat.head_ind];
// VERTICAL head segment?
if (h1.x == h2.x) {
// Loop from oldest to segment two away from head
LOOP_L_N(n, sdat.head_ind - 2) {
// Segment p to q
const pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.x != q.x) {
// Crossing horizontal segment
if (WITHIN(h1.x, _MIN(p.x, q.x), _MAX(p.x, q.x)) && (h1.y <= p.y) == (h2.y >= p.y)) return true;
} // Overlapping vertical segment
else if (h1.x == p.x && _MIN(h1.y, h2.y) <= _MAX(p.y, q.y) && _MAX(h1.y, h2.y) >= _MIN(p.y, q.y)) return true;
}
}
else {
// Loop from oldest to segment two away from head
LOOP_L_N(n, sdat.head_ind - 2) {
// Segment p to q
const pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.y != q.y) {
// Crossing vertical segment
if (WITHIN(h1.y, _MIN(p.y, q.y), _MAX(p.y, q.y)) && (h1.x <= p.x) == (h2.x >= p.x)) return true;
} // Overlapping horizontal segment
else if (h1.y == p.y && _MIN(h1.x, h2.x) <= _MAX(p.x, q.x) && _MAX(h1.x, h2.x) >= _MIN(p.x, q.x)) return true;
}
}
return false;
}
void SnakeGame::game_screen() {
// Run the snake logic
if (game_frame()) do { // Run logic twice for finer resolution
// Move the snake's head one unit in the current direction
const int8_t oldx = FTOB(sdat.snakex), oldy = FTOB(sdat.snakey);
switch (sdat.snake_dir) {
case 0: sdat.snakey -= snakev; break;
case 1: sdat.snakex += snakev; break;
case 2: sdat.snakey += snakev; break;
case 3: sdat.snakex -= snakev; break;
}
const int8_t x = FTOB(sdat.snakex), y = FTOB(sdat.snakey);
// If movement took place...
if (oldx != x || oldy != y) {
if (!WITHIN(x, 0, GAME_W - 1) || !WITHIN(y, 0, GAME_H - 1)) {
game_state = 0; // Game Over
_BUZZ(400, 40); // Bzzzt!
break; // ...out of do-while
}
sdat.snake_tail[sdat.head_ind].x = x;
sdat.snake_tail[sdat.head_ind].y = y;
// Change snake direction if set
const int8_t enc = int8_t(ui.encoderPosition), diff = enc - sdat.old_encoder;
if (diff) {
sdat.old_encoder = enc;
turn_snake(diff > 0);
}
if (sdat.food_cnt) --sdat.food_cnt; else shorten_tail();
// Did the snake collide with itself or go out of bounds?
if (snake_overlap()) {
game_state = 0; // Game Over
_BUZZ(400, 40); // Bzzzt!
}
// Is the snake at the food?
else if (x == sdat.foodx && y == sdat.foody) {
_BUZZ(5, 220);
_BUZZ(5, 280);
score++;
sdat.food_cnt = 2;
food_reset();
}
}
} while(0);
u8g.setColorIndex(1);
// Draw Score
if (PAGE_UNDER(HEADER_H)) lcd_put_int(0, HEADER_H - 1, score);
// DRAW THE PLAYFIELD BORDER
u8g.drawFrame(BOARD_L - 2, BOARD_T - 2, BOARD_R - BOARD_L + 4, BOARD_B - BOARD_T + 4);
// Draw the snake (tail)
#if SNAKE_WH < 2
// At this scale just draw a line
LOOP_L_N(n, sdat.head_ind) {
const pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.x == q.x) {
const int8_t y1 = GAMEY(_MIN(p.y, q.y)), y2 = GAMEY(_MAX(p.y, q.y));
if (PAGE_CONTAINS(y1, y2))
u8g.drawVLine(GAMEX(p.x), y1, y2 - y1 + 1);
}
else if (PAGE_CONTAINS(GAMEY(p.y), GAMEY(p.y))) {
const int8_t x1 = GAMEX(_MIN(p.x, q.x)), x2 = GAMEX(_MAX(p.x, q.x));
u8g.drawHLine(x1, GAMEY(p.y), x2 - x1 + 1);
}
}
#elif SNAKE_WH == 2
// At this scale draw two lines
LOOP_L_N(n, sdat.head_ind) {
const pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.x == q.x) {
const int8_t y1 = GAMEY(_MIN(p.y, q.y)), y2 = GAMEY(_MAX(p.y, q.y));
if (PAGE_CONTAINS(y1, y2 + 1))
u8g.drawFrame(GAMEX(p.x), y1, 2, y2 - y1 + 1 + 1);
}
else {
const int8_t py = GAMEY(p.y);
if (PAGE_CONTAINS(py, py + 1)) {
const int8_t x1 = GAMEX(_MIN(p.x, q.x)), x2 = GAMEX(_MAX(p.x, q.x));
u8g.drawFrame(x1, py, x2 - x1 + 1 + 1, 2);
}
}
}
#else
// Draw a series of boxes
LOOP_L_N(n, sdat.head_ind) {
const pos_t &p = sdat.snake_tail[n], &q = sdat.snake_tail[n + 1];
if (p.x == q.x) {
const int8_t y1 = _MIN(p.y, q.y), y2 = _MAX(p.y, q.y);
if (PAGE_CONTAINS(GAMEY(y1), GAMEY(y2) + SNAKE_SIZ - 1)) {
for (int8_t i = y1; i <= y2; ++i) {
const int8_t y = GAMEY(i);
if (PAGE_CONTAINS(y, y + SNAKE_SIZ - 1))
u8g.drawBox(GAMEX(p.x), y, SNAKE_SIZ, SNAKE_SIZ);
}
}
}
else {
const int8_t py = GAMEY(p.y);
if (PAGE_CONTAINS(py, py + SNAKE_SIZ - 1)) {
const int8_t x1 = _MIN(p.x, q.x), x2 = _MAX(p.x, q.x);
for (int8_t i = x1; i <= x2; ++i)
u8g.drawBox(GAMEX(i), py, SNAKE_SIZ, SNAKE_SIZ);
}
}
}
#endif
// Draw food
const int8_t fy = GAMEY(sdat.foody);
if (PAGE_CONTAINS(fy, fy + FOOD_WH - 1)) {
const int8_t fx = GAMEX(sdat.foodx);
u8g.drawFrame(fx, fy, FOOD_WH, FOOD_WH);
if (FOOD_WH == 5) u8g.drawPixel(fx + 2, fy + 2);
}
// Draw GAME OVER
if (!game_state) draw_game_over();
// A click always exits this game
if (ui.use_click()) exit_game();
}
void SnakeGame::enter_game() {
init_game(1, game_screen); // 1 = Game running
snake_reset();
food_reset();
}
#endif // MARLIN_SNAKE

38
src/lcd/menu/game/snake.h Normal file
View File

@ -0,0 +1,38 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "types.h"
typedef struct {
int8_t snake_dir, // NESW
foodx, foody,
food_cnt,
old_encoder;
pos_t snake_tail[50];
fixed_t snakex, snakey;
uint8_t head_ind;
} snake_data_t;
class SnakeGame : MarlinGame { public: static void enter_game(), game_screen(); };
extern SnakeGame snake;

46
src/lcd/menu/game/types.h Normal file
View File

@ -0,0 +1,46 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <stdint.h>
typedef struct { int8_t x, y; } pos_t;
// Simple 8:8 fixed-point
typedef int16_t fixed_t;
#define FTOF(F) fixed_t((F)*256.0f)
#define PTOF(P) (float(P)*(1.0f/256.0f))
#define BTOF(X) (fixed_t(X)<<8)
#define FTOB(X) int8_t(fixed_t(X)>>8)
class MarlinGame {
protected:
static int score;
static uint8_t game_state;
static millis_t next_frame;
static bool game_frame();
static void draw_game_over();
static void exit_game();
public:
static void init_game(const uint8_t init_state, const screenFunc_t screen);
};

377
src/lcd/menu/menu.cpp Normal file
View File

@ -0,0 +1,377 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#include "menu.h"
#include "../../module/planner.h"
#include "../../module/motion.h"
#include "../../module/printcounter.h"
#include "../../module/temperature.h"
#include "../../gcode/queue.h"
#if HAS_SOUND
#include "../../libs/buzzer.h"
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
#include "../../module/probe.h"
#endif
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
////////////////////////////////////////////
///////////// Global Variables /////////////
////////////////////////////////////////////
#if HAS_LEVELING && ANY(LCD_BED_TRAMMING, PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION)
bool leveling_was_active; // = false
#endif
#if ANY(PROBE_MANUALLY, MESH_BED_LEVELING, X_AXIS_TWIST_COMPENSATION)
uint8_t manual_probe_index; // = 0
#endif
// Menu Navigation
int8_t encoderTopLine, encoderLine, screen_items;
typedef struct {
screenFunc_t menu_function; // The screen's function
uint32_t encoder_position; // The position of the encoder
int8_t top_line, items; // The amount of scroll, and the number of items
#if SCREENS_CAN_TIME_OUT
bool sticky; // The screen is sticky
#endif
} menuPosition;
menuPosition screen_history[6];
uint8_t screen_history_depth = 0;
int8_t MenuItemBase::itemIndex; // Index number for draw and action
FSTR_P MenuItemBase::itemStringF; // A string for substitution
const char *MenuItemBase::itemStringC;
chimera_t editable; // Value Editing
// Menu Edit Items
FSTR_P MenuEditItemBase::editLabel;
void* MenuEditItemBase::editValue;
int32_t MenuEditItemBase::minEditValue,
MenuEditItemBase::maxEditValue;
screenFunc_t MenuEditItemBase::callbackFunc;
bool MenuEditItemBase::liveEdit;
////////////////////////////////////////////
//////// Menu Navigation & History /////////
////////////////////////////////////////////
void MarlinUI::return_to_status() { goto_screen(status_screen); }
void MarlinUI::push_current_screen() {
if (screen_history_depth < COUNT(screen_history))
screen_history[screen_history_depth++] = { currentScreen, encoderPosition, encoderTopLine, screen_items OPTARG(SCREENS_CAN_TIME_OUT, screen_is_sticky()) };
}
void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back/*=false*/)) {
IF_DISABLED(TURBO_BACK_MENU_ITEM, constexpr bool is_back = false);
TERN_(HAS_TOUCH_BUTTONS, on_edit_screen = false);
if (screen_history_depth > 0) {
menuPosition &sh = screen_history[--screen_history_depth];
goto_screen(sh.menu_function,
is_back ? 0 : sh.encoder_position,
is_back ? 0 : sh.top_line,
sh.items
);
defer_status_screen(TERN_(SCREENS_CAN_TIME_OUT, sh.sticky));
}
else
return_to_status();
}
////////////////////////////////////////////
/////////// Menu Editing Actions ///////////
////////////////////////////////////////////
// All Edit Screens run the same way, but `draw_edit_screen` is implementation-specific
void MenuEditItemBase::edit_screen(strfunc_t strfunc, loadfunc_t loadfunc) {
// Reset repeat_delay for Touch Buttons
TERN_(HAS_TOUCH_BUTTONS, ui.repeat_delay = BUTTON_DELAY_EDIT);
// Constrain ui.encoderPosition to 0 ... maxEditValue (calculated in encoder steps)
if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
// If drawing is flagged then redraw the (whole) edit screen
if (ui.should_draw())
draw_edit_screen(strfunc(ui.encoderPosition + minEditValue));
// If there was a click or "live editing" and encoder moved...
if (ui.lcd_clicked || (liveEdit && ui.should_draw())) {
// Pass the editValue pointer to the loadfunc along with the encoder plus min
if (editValue) loadfunc(editValue, ui.encoderPosition + minEditValue);
// If a callbackFunc was set, call it for click or always for "live editing"
if (callbackFunc && (liveEdit || ui.lcd_clicked)) (*callbackFunc)();
// Use up the click to finish editing and go to the previous screen
if (ui.use_click()) ui.goto_previous_screen();
}
}
// Going to an edit screen sets up some persistent values first
void MenuEditItemBase::goto_edit_screen(
FSTR_P const el, // Edit label
void * const ev, // Edit value pointer
const int32_t minv, // Encoder minimum
const int32_t maxv, // Encoder maximum
const uint16_t ep, // Initial encoder value
const screenFunc_t cs, // MenuItem_type::draw_edit_screen => MenuEditItemBase::edit()
const screenFunc_t cb, // Callback after edit
const bool le // Flag to call cb() during editing
) {
TERN_(HAS_TOUCH_BUTTONS, ui.on_edit_screen = true);
ui.screen_changed = true;
ui.push_current_screen();
ui.refresh();
editLabel = el;
editValue = ev;
minEditValue = minv;
maxEditValue = maxv;
ui.encoderPosition = ep;
ui.currentScreen = cs;
callbackFunc = cb;
liveEdit = le;
}
////////////////////////////////////////////
///////////////// Menu Tree ////////////////
////////////////////////////////////////////
#include "../../MarlinCore.h"
/**
* General function to go directly to a screen
*/
void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, const uint8_t top/*=0*/, const uint8_t items/*=0*/) {
if (currentScreen != screen) {
thermalManager.set_menu_cold_override(false);
TERN_(IS_DWIN_MARLINUI, did_first_redraw = false);
TERN_(HAS_TOUCH_BUTTONS, repeat_delay = BUTTON_DELAY_MENU);
TERN_(LCD_SET_PROGRESS_MANUALLY, progress_reset());
#if BOTH(DOUBLECLICK_FOR_Z_BABYSTEPPING, BABYSTEPPING)
static millis_t doubleclick_expire_ms = 0;
// Going to menu_main from status screen? Remember first click time.
// Going back to status screen within a very short time? Go to Z babystepping.
if (screen == menu_main) {
if (on_status_screen())
doubleclick_expire_ms = millis() + DOUBLECLICK_MAX_INTERVAL;
}
else if (screen == status_screen && currentScreen == menu_main && PENDING(millis(), doubleclick_expire_ms)) {
if (BABYSTEP_ALLOWED())
screen = TERN(BABYSTEP_ZPROBE_OFFSET, lcd_babystep_zoffset, lcd_babystep_z);
else {
#if ENABLED(MOVE_Z_WHEN_IDLE)
ui.manual_move.menu_scale = MOVE_Z_IDLE_MULTIPLICATOR;
screen = []{ lcd_move_axis(Z_AXIS); };
#endif
}
}
#endif
currentScreen = screen;
encoderPosition = encoder;
encoderTopLine = top;
screen_items = items;
if (on_status_screen()) {
defer_status_screen(false);
clear_menu_history();
TERN_(AUTO_BED_LEVELING_UBL, bedlevel.lcd_map_control = false);
}
clear_lcd();
// Re-initialize custom characters that may be re-used
#if HAS_MARLINUI_HD44780
if (TERN1(AUTO_BED_LEVELING_UBL, !bedlevel.lcd_map_control))
set_custom_characters(on_status_screen() ? CHARSET_INFO : CHARSET_MENU);
#endif
refresh(LCDVIEW_CALL_REDRAW_NEXT);
screen_changed = true;
TERN_(HAS_MARLINUI_U8GLIB, drawing_screen = false);
TERN_(HAS_MARLINUI_MENU, encoder_direction_normal());
set_selection(false);
}
}
////////////////////////////////////////////
///////////// Manual Movement //////////////
////////////////////////////////////////////
//
// Display a "synchronize" screen with a custom message until
// all moves are finished. Go back to calling screen when done.
//
void MarlinUI::synchronize(FSTR_P const fmsg/*=nullptr*/) {
static FSTR_P sync_message = fmsg ?: GET_TEXT_F(MSG_MOVING);
push_current_screen();
goto_screen([]{
if (should_draw()) MenuItem_static::draw(LCD_HEIGHT >= 4, sync_message);
});
defer_status_screen();
planner.synchronize(); // idle() is called until moves complete
goto_previous_screen_no_defer();
}
/**
* Scrolling for menus and other line-based screens
*
* encoderLine is the position based on the encoder
* encoderTopLine is the top menu line to display
* screen_items is the total number of items in the menu (after one call)
*/
void scroll_screen(const uint8_t limit, const bool is_menu) {
ui.encoder_direction_menus();
ENCODER_RATE_MULTIPLY(false);
if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
if (ui.first_page) {
encoderLine = ui.encoderPosition / (ENCODER_STEPS_PER_MENU_ITEM);
ui.screen_changed = false;
}
if (screen_items > 0 && encoderLine >= screen_items - limit) {
encoderLine = _MAX(0, screen_items - limit);
ui.encoderPosition = encoderLine * (ENCODER_STEPS_PER_MENU_ITEM);
}
if (is_menu) {
NOMORE(encoderTopLine, encoderLine);
if (encoderLine >= encoderTopLine + LCD_HEIGHT)
encoderTopLine = encoderLine - LCD_HEIGHT + 1;
}
else
encoderTopLine = encoderLine;
}
#if HAS_SOUND
void MarlinUI::completion_feedback(const bool good/*=true*/) {
TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); // Wake up on rotary encoder click...
if (good) OKAY_BUZZ(); else ERR_BUZZ();
}
#endif
#if HAS_LINE_TO_Z
void line_to_z(const_float_t z) {
current_position.z = z;
line_to_current_position(manual_feedrate_mm_s.z);
}
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
#include "../../feature/babystep.h"
void lcd_babystep_zoffset() {
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
ui.defer_status_screen();
const bool do_probe = DISABLED(BABYSTEP_HOTEND_Z_OFFSET) || active_extruder == 0;
if (ui.encoderPosition) {
const int16_t babystep_increment = int16_t(ui.encoderPosition) * (BABYSTEP_SIZE_Z);
ui.encoderPosition = 0;
const float diff = planner.mm_per_step[Z_AXIS] * babystep_increment,
new_probe_offset = probe.offset.z + diff,
new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET
, do_probe ? new_probe_offset : hotend_offset[active_extruder].z - diff
, new_probe_offset
);
if (WITHIN(new_offs, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
babystep.add_steps(Z_AXIS, babystep_increment);
if (do_probe)
probe.offset.z = new_offs;
else
TERN(BABYSTEP_HOTEND_Z_OFFSET, hotend_offset[active_extruder].z = new_offs, NOOP);
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
}
if (ui.should_draw()) {
if (do_probe) {
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_ZPROBE_ZOFFSET), BABYSTEP_TO_STR(probe.offset.z));
TERN_(BABYSTEP_ZPROBE_GFX_OVERLAY, ui.zoffset_overlay(probe.offset.z));
}
else {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_HOTEND_OFFSET_Z), ftostr54sign(hotend_offset[active_extruder].z));
#endif
}
}
}
#endif // BABYSTEP_ZPROBE_OFFSET
void _lcd_draw_homing() {
if (ui.should_draw()) {
constexpr uint8_t line = (LCD_HEIGHT - 1) / 2;
MenuItem_static::draw(line, GET_TEXT_F(MSG_LEVEL_BED_HOMING));
}
}
#if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS))
void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(!planner.leveling_active); }
#endif
//
// Selection screen presents a prompt and two options
//
bool MarlinUI::selection; // = false
bool MarlinUI::update_selection() {
encoder_direction_select();
if (encoderPosition) {
selection = int16_t(encoderPosition) > 0;
encoderPosition = 0;
}
return selection;
}
void MenuItem_confirm::select_screen(
FSTR_P const yes, FSTR_P const no,
selectFunc_t yesFunc, selectFunc_t noFunc,
FSTR_P const pref, const char * const string/*=nullptr*/, FSTR_P const suff/*=nullptr*/
) {
ui.defer_status_screen();
const bool ui_selection = !yes ? false : !no || ui.update_selection(),
got_click = ui.use_click();
if (got_click || ui.should_draw()) {
draw_select_screen(yes, no, ui_selection, pref, string, suff);
if (got_click) {
selectFunc_t callFunc = ui_selection ? yesFunc : noFunc;
if (callFunc) callFunc(); else ui.goto_previous_screen();
}
}
}
#endif // HAS_MARLINUI_MENU

272
src/lcd/menu/menu.h Normal file
View File

@ -0,0 +1,272 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../marlinui.h"
#include "../../libs/numtostr.h"
#include "../../inc/MarlinConfig.h"
#include "limits.h"
extern int8_t encoderLine, encoderTopLine, screen_items;
void scroll_screen(const uint8_t limit, const bool is_menu);
typedef void (*selectFunc_t)();
#define SS_LEFT 0x00
#define SS_CENTER 0x01
#define SS_INVERT 0x02
#define SS_DEFAULT SS_CENTER
#if ENABLED(BABYSTEP_ZPROBE_OFFSET) && Z_PROBE_OFFSET_RANGE_MIN >= -9 && Z_PROBE_OFFSET_RANGE_MAX <= 9
#define BABYSTEP_TO_STR(N) ftostr43sign(N)
#elif ENABLED(BABYSTEPPING)
#define BABYSTEP_TO_STR(N) ftostr53sign(N)
#endif
////////////////////////////////////////////
///////////// Base Menu Items //////////////
////////////////////////////////////////////
class MenuItemBase {
public:
// Index to interject in the item label and/or for use by its action.
static int8_t itemIndex;
// Optional pointers for use in display or by the action
static FSTR_P itemStringF;
static const char* itemStringC;
// Store an index and string for later substitution
FORCE_INLINE static void init(const int8_t ind=0, FSTR_P const fstr=nullptr) { itemIndex = ind; itemStringF = fstr; itemStringC = nullptr; }
FORCE_INLINE static void init(const int8_t ind, const char * const cstr) { itemIndex = ind; itemStringC = cstr; itemStringF = nullptr; }
// Implementation-specific:
// Draw an item either selected (pre_char) or not (space) with post_char
// Menus may set up itemIndex, itemStringC/F and pass them to string-building or string-emitting functions
static void _draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char pre_char, const char post_char);
// Draw an item either selected ('>') or not (space) with post_char
FORCE_INLINE static void _draw(const bool sel, const uint8_t row, FSTR_P const fstr, const char post_char) {
_draw(sel, row, fstr, '>', post_char);
}
};
// STATIC_ITEM(LABEL,...)
class MenuItem_static : public MenuItemBase {
public:
static void draw(const uint8_t row, FSTR_P const fstr, const uint8_t style=SS_DEFAULT, const char * const vstr=nullptr);
};
// BACK_ITEM(LABEL)
class MenuItem_back : public MenuItemBase {
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr) {
_draw(sel, row, fstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]);
}
// Back Item action goes back one step in history
FORCE_INLINE static void action(FSTR_P const=nullptr) { ui.go_back(); }
};
// CONFIRM_ITEM(LABEL,Y,N,FY,FN,...),
// YESNO_ITEM(LABEL,FY,FN,...)
class MenuItem_confirm : public MenuItemBase {
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, ...) {
_draw(sel, row, ftpl, '>', LCD_STR_ARROW_RIGHT[0]);
}
// Implemented for HD44780 and DOGM
// Draw the prompt, buttons, and state
static void draw_select_screen(
FSTR_P const yes, // Right option label
FSTR_P const no, // Left option label
const bool yesno, // Is "yes" selected?
FSTR_P const pref, // Prompt prefix
const char * const string, // Prompt runtime string
FSTR_P const suff // Prompt suffix
);
static void select_screen(
FSTR_P const yes, FSTR_P const no,
selectFunc_t yesFunc, selectFunc_t noFunc,
FSTR_P const pref, const char * const string=nullptr, FSTR_P const suff=nullptr
);
static void select_screen(
FSTR_P const yes, FSTR_P const no,
selectFunc_t yesFunc, selectFunc_t noFunc,
FSTR_P const pref, FSTR_P const fstr, FSTR_P const suff=nullptr
) {
#ifdef __AVR__
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
select_screen(yes, no, yesFunc, noFunc, pref, str, suff);
#else
select_screen(yes, no, yesFunc, noFunc, pref, FTOP(fstr), suff);
#endif
}
// Shortcut for prompt with "NO"/ "YES" labels
FORCE_INLINE static void confirm_screen(selectFunc_t yesFunc, selectFunc_t noFunc, FSTR_P const pref, const char * const string=nullptr, FSTR_P const suff=nullptr) {
select_screen(GET_TEXT_F(MSG_YES), GET_TEXT_F(MSG_NO), yesFunc, noFunc, pref, string, suff);
}
};
////////////////////////////////////////////
///////////// Edit Menu Items //////////////
////////////////////////////////////////////
// The Menu Edit shadow value
typedef union {
bool state;
float decimal;
int8_t int8;
int16_t int16;
int32_t int32;
uint8_t uint8;
uint16_t uint16;
uint32_t uint32;
celsius_t celsius;
} chimera_t;
extern chimera_t editable;
// Base class for Menu Edit Items
class MenuEditItemBase : public MenuItemBase {
private:
// These values are statically constructed by init() via action()
// The action() method acts like the instantiator. The entire lifespan
// of a menu item is within its declaration, so all these values decompose
// into behavior and unused items get optimized out.
static FSTR_P editLabel;
static void *editValue;
static int32_t minEditValue, maxEditValue; // Encoder value range
static screenFunc_t callbackFunc;
static bool liveEdit;
protected:
typedef const char* (*strfunc_t)(const int32_t);
typedef void (*loadfunc_t)(void *, const int32_t);
static void goto_edit_screen(
FSTR_P const el, // Edit label
void * const ev, // Edit value pointer
const int32_t minv, // Encoder minimum
const int32_t maxv, // Encoder maximum
const uint16_t ep, // Initial encoder value
const screenFunc_t cs, // MenuItem_type::draw_edit_screen => MenuEditItemBase::edit()
const screenFunc_t cb, // Callback after edit
const bool le // Flag to call cb() during editing
);
static void edit_screen(strfunc_t, loadfunc_t); // Edit value handler
public:
// Implementation-specific:
// Draw the current item at specified row with edit data
static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm=false);
static void draw(const bool sel, const uint8_t row, FSTR_P const ftpl, FSTR_P const fstr) {
draw(sel, row, ftpl, FTOP(fstr), true);
}
// Implementation-specific:
// This low-level method is good to draw from anywhere
static void draw_edit_screen(FSTR_P const fstr, const char * const value);
// This method is for the current menu item
static void draw_edit_screen(const char * const value) { draw_edit_screen(editLabel, value); }
};
#if ENABLED(SDSUPPORT)
class CardReader;
class MenuItem_sdbase {
public:
// Implemented for HD44780 and DOGM
static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, CardReader &theCard, const bool isDir);
};
#endif
////////////////////////////////////////////
/////////////// Menu Screens ///////////////
////////////////////////////////////////////
void menu_main();
void menu_move();
#if ENABLED(SDSUPPORT)
void menu_media();
#endif
////////////////////////////////////////////
//////// Menu Item Helper Functions ////////
////////////////////////////////////////////
void _lcd_draw_homing();
#define HAS_LINE_TO_Z ANY(DELTA, PROBE_MANUALLY, MESH_BED_LEVELING, LCD_BED_TRAMMING)
#if HAS_LINE_TO_Z
void line_to_z(const_float_t z);
#endif
#if ENABLED(PROBE_OFFSET_WIZARD)
void goto_probe_offset_wizard();
#endif
#if ENABLED(X_AXIS_TWIST_COMPENSATION)
void xatc_wizard_continue();
void menu_advanced_settings();
#endif
#if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS))
void _lcd_toggle_bed_leveling();
#endif
#if ENABLED(BABYSTEPPING)
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
void lcd_babystep_zoffset();
#else
void lcd_babystep_z();
#endif
#if ENABLED(BABYSTEP_MILLIMETER_UNITS)
#define BABYSTEP_SIZE_X int32_t((BABYSTEP_MULTIPLICATOR_XY) * planner.settings.axis_steps_per_mm[X_AXIS])
#define BABYSTEP_SIZE_Y int32_t((BABYSTEP_MULTIPLICATOR_XY) * planner.settings.axis_steps_per_mm[Y_AXIS])
#define BABYSTEP_SIZE_Z int32_t((BABYSTEP_MULTIPLICATOR_Z) * planner.settings.axis_steps_per_mm[Z_AXIS])
#else
#define BABYSTEP_SIZE_X BABYSTEP_MULTIPLICATOR_XY
#define BABYSTEP_SIZE_Y BABYSTEP_MULTIPLICATOR_XY
#define BABYSTEP_SIZE_Z BABYSTEP_MULTIPLICATOR_Z
#endif
#endif
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
void touch_screen_calibration();
#endif
extern uint8_t screen_history_depth;
inline void clear_menu_history() { screen_history_depth = 0; }
#define STICKY_SCREEN(S) []{ ui.defer_status_screen(); ui.goto_screen(S); }
#if HAS_LEVELING && ANY(LCD_BED_TRAMMING, PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION)
extern bool leveling_was_active;
#endif
#if ANY(PROBE_MANUALLY, MESH_BED_LEVELING, X_AXIS_TWIST_COMPENSATION)
extern uint8_t manual_probe_index;
#endif

33
src/lcd/menu/menu_addon.h Normal file
View File

@ -0,0 +1,33 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../lcdprint.h"
#define _MENU_ITEM_ADDON_START(N,X) do{ \
if (ui.should_draw() && _menuLineNr == _thisItemNr - 1) { \
N(X)
#define MENU_ITEM_ADDON_START(X) _MENU_ITEM_ADDON_START(SETCURSOR_X, X)
#define MENU_ITEM_ADDON_START_RJ(X) _MENU_ITEM_ADDON_START(SETCURSOR_X_RJ, X)
#define MENU_ITEM_ADDON_END() } }while(0)

View File

@ -0,0 +1,704 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Advanced Settings Menus
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#include "menu_item.h"
#include "../../MarlinCore.h"
#include "../../module/planner.h"
#if DISABLED(NO_VOLUMETRICS)
#include "../../gcode/parser.h"
#endif
#if HAS_BED_PROBE
#include "../../module/probe.h"
#endif
#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER)
#include "../../module/temperature.h"
#endif
#if HAS_FILAMENT_RUNOUT_DISTANCE
#include "../../feature/runout.h"
#endif
#if ENABLED(SD_FIRMWARE_UPDATE)
#include "../../module/settings.h"
#endif
#if ENABLED(PASSWORD_FEATURE)
#include "../../feature/password/password.h"
#endif
void menu_tmc();
void menu_backlash();
#if HAS_MOTOR_CURRENT_DAC
#include "../../feature/dac/stepper_dac.h"
void menu_dac() {
static xyze_uint8_t driverPercent;
LOOP_LOGICAL_AXES(i) driverPercent[i] = stepper_dac.get_current_percent((AxisEnum)i);
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
LOOP_LOGICAL_AXES(a)
EDIT_ITEM_N(uint8, a, MSG_DAC_PERCENT_N, &driverPercent[a], 0, 100, []{ stepper_dac.set_current_percents(driverPercent); });
ACTION_ITEM(MSG_DAC_EEPROM_WRITE, stepper_dac.commit_eeprom);
END_MENU();
}
#endif
#if HAS_MOTOR_CURRENT_PWM
#include "../../module/stepper.h"
void menu_pwm() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
#define EDIT_CURRENT_PWM(LABEL,I) EDIT_ITEM_F(long5, F(LABEL), &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power)
#if ANY_PIN(MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y)
EDIT_CURRENT_PWM(STR_A STR_B, 0);
#endif
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
EDIT_CURRENT_PWM(STR_C, 1);
#endif
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
EDIT_CURRENT_PWM(STR_E, 2);
#endif
END_MENU();
}
#endif
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
//
// Advanced Settings > Filament
//
void menu_advanced_filament() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
#if ENABLED(LIN_ADVANCE)
#if EXTRUDERS == 1
EDIT_ITEM(float42_52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 10);
#elif HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_N(float42_52, e, MSG_ADVANCE_K_E, &planner.extruder_advance_K[e], 0, 10);
#endif
#endif
#if DISABLED(NO_VOLUMETRICS)
EDIT_ITEM(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, planner.calculate_volumetric_multipliers);
#if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
EDIT_ITEM_FAST(float42_52, MSG_VOLUMETRIC_LIMIT, &planner.volumetric_extruder_limit[active_extruder], 0.0f, 20.0f, planner.calculate_volumetric_extruder_limits);
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_FAST_N(float42_52, e, MSG_VOLUMETRIC_LIMIT_E, &planner.volumetric_extruder_limit[e], 0.0f, 20.00f, planner.calculate_volumetric_extruder_limits);
#endif
#endif
if (parser.volumetric_enabled) {
EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_FAST_N(float43, e, MSG_FILAMENT_DIAM_E, &planner.filament_size[e], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
#endif
}
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
constexpr float extrude_maxlength = TERN(PREVENT_LENGTHY_EXTRUDE, EXTRUDE_MAXLENGTH, 999);
EDIT_ITEM_FAST(float4, MSG_FILAMENT_UNLOAD, &fc_settings[active_extruder].unload_length, 0, extrude_maxlength);
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_FAST_N(float4, e, MSG_FILAMENTUNLOAD_E, &fc_settings[e].unload_length, 0, extrude_maxlength);
#endif
EDIT_ITEM_FAST(float4, MSG_FILAMENT_LOAD, &fc_settings[active_extruder].load_length, 0, extrude_maxlength);
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_FAST_N(float4, e, MSG_FILAMENTLOAD_E, &fc_settings[e].load_length, 0, extrude_maxlength);
#endif
#endif
#if HAS_FILAMENT_RUNOUT_DISTANCE
editable.decimal = runout.runout_distance();
EDIT_ITEM_FAST(float3, MSG_RUNOUT_DISTANCE_MM, &editable.decimal, 1, 999,
[]{ runout.set_runout_distance(editable.decimal); }, true
);
#endif
END_MENU();
}
#endif // !NO_VOLUMETRICS || ADVANCED_PAUSE_FEATURE
//
// Advanced Settings > Temperature helpers
//
#if ENABLED(PID_AUTOTUNE_MENU)
#if ENABLED(PIDTEMP)
int16_t autotune_temp[HOTENDS] = ARRAY_BY_HOTENDS1(PREHEAT_1_TEMP_HOTEND);
#endif
#if ENABLED(PIDTEMPBED)
int16_t autotune_temp_bed = PREHEAT_1_TEMP_BED;
#endif
#if ENABLED(PIDTEMPCHAMBER)
int16_t autotune_temp_chamber = PREHEAT_1_TEMP_CHAMBER;
#endif
#include "../../gcode/queue.h"
void _lcd_autotune(const heater_id_t hid) {
char cmd[30];
int16_t tune_temp;
switch (hid) {
#if ENABLED(PIDTEMPBED)
case H_BED: tune_temp = autotune_temp_bed; break;
#endif
#if ENABLED(PIDTEMPCHAMBER)
case H_CHAMBER: tune_temp = autotune_temp_chamber; break;
#endif
default:
#if ENABLED(PIDTEMP)
tune_temp = autotune_temp[hid]; break;
#else
return;
#endif
}
sprintf_P(cmd, PSTR("M303 U1 E%i S%i"), hid, tune_temp);
queue.inject(cmd);
ui.return_to_status();
}
#endif // PID_AUTOTUNE_MENU
#if ENABLED(PID_EDIT_MENU)
float raw_Ki, raw_Kd; // place-holders for Ki and Kd edits
// Helpers for editing PID Ki & Kd values
// grab the PID value out of the temp variable; scale it; then update the PID driver
void copy_and_scalePID_i(const int8_t e) {
switch (e) {
#if ENABLED(PIDTEMPBED)
case H_BED: thermalManager.temp_bed.pid.Ki = scalePID_i(raw_Ki); break;
#endif
#if ENABLED(PIDTEMPCHAMBER)
case H_CHAMBER: thermalManager.temp_chamber.pid.Ki = scalePID_i(raw_Ki); break;
#endif
default:
#if ENABLED(PIDTEMP)
PID_PARAM(Ki, e) = scalePID_i(raw_Ki);
thermalManager.updatePID();
#endif
break;
}
}
void copy_and_scalePID_d(const int8_t e) {
switch (e) {
#if ENABLED(PIDTEMPBED)
case H_BED: thermalManager.temp_bed.pid.Kd = scalePID_d(raw_Kd); break;
#endif
#if ENABLED(PIDTEMPCHAMBER)
case H_CHAMBER: thermalManager.temp_chamber.pid.Kd = scalePID_d(raw_Kd); break;
#endif
default:
#if ENABLED(PIDTEMP)
PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
thermalManager.updatePID();
#endif
break;
}
}
#endif
#if BOTH(AUTOTEMP, HAS_TEMP_HOTEND) || ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU, MPC_AUTOTUNE_MENU, MPC_EDIT_MENU)
#define SHOW_MENU_ADVANCED_TEMPERATURE 1
#endif
//
// Advanced Settings > Temperature
//
#if SHOW_MENU_ADVANCED_TEMPERATURE
#if ENABLED(MPC_EDIT_MENU)
#define MPC_EDIT_DEFS(N) \
MPC_t &c = thermalManager.temp_hotend[N].constants; \
TERN_(MPC_INCLUDE_FAN, editable.decimal = c.ambient_xfer_coeff_fan0 + c.fan255_adjustment)
#endif
void menu_advanced_temperature() {
#if ENABLED(MPC_EDIT_MENU) && !HAS_MULTI_HOTEND
MPC_EDIT_DEFS(0);
#endif
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
//
// Autotemp, Min, Max, Fact
//
#if BOTH(AUTOTEMP, HAS_TEMP_HOTEND)
EDIT_ITEM(bool, MSG_AUTOTEMP, &planner.autotemp_enabled);
EDIT_ITEM(int3, MSG_MIN, &planner.autotemp_min, 0, thermalManager.hotend_max_target(0));
EDIT_ITEM(int3, MSG_MAX, &planner.autotemp_max, 0, thermalManager.hotend_max_target(0));
EDIT_ITEM(float42_52, MSG_FACTOR, &planner.autotemp_factor, 0, 10);
#endif
//
// PID-P, PID-I, PID-D, PID-C, PID Autotune
// PID-P E1, PID-I E1, PID-D E1, PID-C E1, PID Autotune E1
// PID-P E2, PID-I E2, PID-D E2, PID-C E2, PID Autotune E2
// PID-P E3, PID-I E3, PID-D E3, PID-C E3, PID Autotune E3
// PID-P E4, PID-I E4, PID-D E4, PID-C E4, PID Autotune E4
// PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
//
#if BOTH(PIDTEMP, PID_EDIT_MENU)
#define __PID_HOTEND_MENU_ITEMS(N) \
raw_Ki = unscalePID_i(PID_PARAM(Ki, N)); \
raw_Kd = unscalePID_d(PID_PARAM(Kd, N)); \
EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_P_E, &PID_PARAM(Kp, N), 1, 9990); \
EDIT_ITEM_FAST_N(float52sign, N, MSG_PID_I_E, &raw_Ki, 0.01f, 9990, []{ copy_and_scalePID_i(N); }); \
EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_D_E, &raw_Kd, 1, 9990, []{ copy_and_scalePID_d(N); })
#if ENABLED(PID_EXTRUSION_SCALING)
#define _PID_HOTEND_MENU_ITEMS(N) \
__PID_HOTEND_MENU_ITEMS(N); \
EDIT_ITEM_N(float4, N, MSG_PID_C_E, &PID_PARAM(Kc, N), 1, 9990)
#else
#define _PID_HOTEND_MENU_ITEMS(N) __PID_HOTEND_MENU_ITEMS(N)
#endif
#if ENABLED(PID_FAN_SCALING)
#define _HOTEND_PID_EDIT_MENU_ITEMS(N) \
_PID_HOTEND_MENU_ITEMS(N); \
EDIT_ITEM_N(float4, N, MSG_PID_F_E, &PID_PARAM(Kf, N), 1, 9990)
#else
#define _HOTEND_PID_EDIT_MENU_ITEMS(N) _PID_HOTEND_MENU_ITEMS(N)
#endif
#else
#define _HOTEND_PID_EDIT_MENU_ITEMS(N) NOOP
#endif
#if ENABLED(PID_EDIT_MENU) && EITHER(PIDTEMPBED, PIDTEMPCHAMBER)
#define _PID_EDIT_ITEMS_TMPL(N,T) \
raw_Ki = unscalePID_i(T.pid.Ki); \
raw_Kd = unscalePID_d(T.pid.Kd); \
EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_P_E, &T.pid.Kp, 1, 9990); \
EDIT_ITEM_FAST_N(float52sign, N, MSG_PID_I_E, &raw_Ki, 0.01f, 9990, []{ copy_and_scalePID_i(N); }); \
EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_D_E, &raw_Kd, 1, 9990, []{ copy_and_scalePID_d(N); })
#endif
#if ENABLED(PIDTEMP)
#if ENABLED(PID_AUTOTUNE_MENU)
#define HOTEND_PID_EDIT_MENU_ITEMS(N) \
_HOTEND_PID_EDIT_MENU_ITEMS(N); \
EDIT_ITEM_FAST_N(int3, N, MSG_PID_AUTOTUNE_E, &autotune_temp[N], 150, thermalManager.hotend_max_target(N), []{ _lcd_autotune(heater_id_t(MenuItemBase::itemIndex)); });
#else
#define HOTEND_PID_EDIT_MENU_ITEMS(N) _HOTEND_PID_EDIT_MENU_ITEMS(N);
#endif
HOTEND_PID_EDIT_MENU_ITEMS(0);
#if ENABLED(PID_PARAMS_PER_HOTEND)
REPEAT_S(1, HOTENDS, HOTEND_PID_EDIT_MENU_ITEMS);
#endif
#endif
#if ENABLED(MPC_EDIT_MENU)
#define _MPC_EDIT_ITEMS(N) \
EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_POWER_E, &c.heater_power, 1, 200); \
EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_BLOCK_HEAT_CAPACITY_E, &c.block_heat_capacity, 0, 40); \
EDIT_ITEM_FAST_N(float43, N, MSG_SENSOR_RESPONSIVENESS_E, &c.sensor_responsiveness, 0, 1); \
EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_E, &c.ambient_xfer_coeff_fan0, 0, 1)
#if ENABLED(MPC_INCLUDE_FAN)
#define MPC_EDIT_ITEMS(N) \
_MPC_EDIT_ITEMS(N); \
EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_FAN_E, &editable.decimal, 0, 1, []{ \
MPC_t &c = thermalManager.temp_hotend[MenuItemBase::itemIndex].constants; \
c.fan255_adjustment = editable.decimal - c.ambient_xfer_coeff_fan0; \
})
#else
#define MPC_EDIT_ITEMS _MPC_EDIT_ITEMS
#endif
#if HAS_MULTI_HOTEND
static auto mpc_edit_hotend = [](const uint8_t e) {
MPC_EDIT_DEFS(e);
START_MENU();
BACK_ITEM(MSG_TEMPERATURE);
MPC_EDIT_ITEMS(e);
END_MENU();
};
#define MPC_ENTRY(N) SUBMENU_N(N, MSG_MPC_EDIT, []{ mpc_edit_hotend(MenuItemBase::itemIndex); });
#else
#define MPC_ENTRY MPC_EDIT_ITEMS
#endif
REPEAT(HOTENDS, MPC_ENTRY);
#endif // MPC_EDIT_MENU
#if ENABLED(MPC_AUTOTUNE_MENU)
ACTION_ITEM(MSG_MPC_AUTOTUNE, []{ queue.inject(F("M306 T")); ui.return_to_status(); });
#endif
#if ENABLED(PIDTEMPBED)
#if ENABLED(PID_EDIT_MENU)
_PID_EDIT_ITEMS_TMPL(H_BED, thermalManager.temp_bed);
#endif
#if ENABLED(PID_AUTOTUNE_MENU)
EDIT_ITEM_FAST_N(int3, H_BED, MSG_PID_AUTOTUNE_E, &autotune_temp_bed, PREHEAT_1_TEMP_BED, BED_MAX_TARGET, []{ _lcd_autotune(H_BED); });
#endif
#endif
#if ENABLED(PIDTEMPCHAMBER)
#if ENABLED(PID_EDIT_MENU)
_PID_EDIT_ITEMS_TMPL(H_CHAMBER, thermalManager.temp_chamber);
#endif
#if ENABLED(PID_AUTOTUNE_MENU)
EDIT_ITEM_FAST_N(int3, H_CHAMBER, MSG_PID_AUTOTUNE_E, &autotune_temp_chamber, PREHEAT_1_TEMP_CHAMBER, CHAMBER_MAX_TARGET, []{ _lcd_autotune(H_CHAMBER); });
#endif
#endif
END_MENU();
}
#endif // SHOW_MENU_ADVANCED_TEMPERATURE
#if DISABLED(SLIM_LCD_MENUS)
// M203 / M205 Velocity options
void menu_advanced_velocity() {
// M203 Max Feedrate
constexpr xyze_feedrate_t max_fr_edit =
#ifdef MAX_FEEDRATE_EDIT_VALUES
MAX_FEEDRATE_EDIT_VALUES
#elif ENABLED(LIMITED_MAX_FR_EDITING)
DEFAULT_MAX_FEEDRATE
#else
LOGICAL_AXIS_ARRAY_1(9999)
#endif
;
#if ENABLED(LIMITED_MAX_FR_EDITING) && !defined(MAX_FEEDRATE_EDIT_VALUES)
const xyze_feedrate_t max_fr_edit_scaled = max_fr_edit * 2;
#else
const xyze_feedrate_t &max_fr_edit_scaled = max_fr_edit;
#endif
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
LOOP_NUM_AXES(a)
EDIT_ITEM_FAST_N(float5, a, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[a], 1, max_fr_edit_scaled[a]);
#if E_STEPPERS
EDIT_ITEM_FAST_N(float5, E_AXIS, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
#endif
#if ENABLED(DISTINCT_E_FACTORS)
LOOP_L_N(n, E_STEPPERS)
EDIT_ITEM_FAST_N(float5, n, MSG_VMAX_EN, &planner.settings.max_feedrate_mm_s[E_AXIS_N(n)], 1, max_fr_edit_scaled.e);
#endif
// M205 S Min Feedrate
EDIT_ITEM_FAST(float5, MSG_VMIN, &planner.settings.min_feedrate_mm_s, 0, 9999);
// M205 T Min Travel Feedrate
EDIT_ITEM_FAST(float5, MSG_VTRAV_MIN, &planner.settings.min_travel_feedrate_mm_s, 0, 9999);
END_MENU();
}
// M201 / M204 Accelerations
void menu_advanced_acceleration() {
const float max_accel = _MAX(planner.settings.max_acceleration_mm_per_s2[A_AXIS], planner.settings.max_acceleration_mm_per_s2[B_AXIS], planner.settings.max_acceleration_mm_per_s2[C_AXIS]);
// M201 settings
constexpr xyze_ulong_t max_accel_edit =
#ifdef MAX_ACCEL_EDIT_VALUES
MAX_ACCEL_EDIT_VALUES
#elif ENABLED(LIMITED_MAX_ACCEL_EDITING)
DEFAULT_MAX_ACCELERATION
#else
LOGICAL_AXIS_ARRAY_1(99000)
#endif
;
#if ENABLED(LIMITED_MAX_ACCEL_EDITING) && !defined(MAX_ACCEL_EDIT_VALUES)
const xyze_ulong_t max_accel_edit_scaled = max_accel_edit * 2;
#else
const xyze_ulong_t &max_accel_edit_scaled = max_accel_edit;
#endif
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
// M204 P Acceleration
EDIT_ITEM_FAST(float5_25, MSG_ACC, &planner.settings.acceleration, 25, max_accel);
#if HAS_EXTRUDERS
// M204 R Retract Acceleration
EDIT_ITEM_FAST(float5, MSG_A_RETRACT, &planner.settings.retract_acceleration, 100, planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)]);
#endif
// M204 T Travel Acceleration
EDIT_ITEM_FAST(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel);
#define EDIT_AMAX(Q,L) EDIT_ITEM_FAST_N(long5_25, _AXIS(Q), MSG_AMAX_N, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], []{ planner.refresh_acceleration_rates(); })
NUM_AXIS_CODE(
EDIT_AMAX(A, 100), EDIT_AMAX(B, 100), EDIT_AMAX(C, 10),
EDIT_AMAX(I, 10), EDIT_AMAX(J, 10), EDIT_AMAX(K, 10)
);
#if ENABLED(DISTINCT_E_FACTORS)
EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, max_accel_edit_scaled.e, []{ planner.refresh_acceleration_rates(); });
LOOP_L_N(n, E_STEPPERS)
EDIT_ITEM_FAST_N(long5_25, n, MSG_AMAX_EN, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(n)], 100, max_accel_edit_scaled.e, []{
if (MenuItemBase::itemIndex == active_extruder)
planner.refresh_acceleration_rates();
});
#elif E_STEPPERS
EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, max_accel_edit_scaled.e, []{ planner.refresh_acceleration_rates(); });
#endif
#ifdef XY_FREQUENCY_LIMIT
EDIT_ITEM(int8, MSG_XY_FREQUENCY_LIMIT, &planner.xy_freq_limit_hz, 0, 100, planner.refresh_frequency_limit, true);
editable.uint8 = uint8_t(LROUND(planner.xy_freq_min_speed_factor * 255)); // percent to u8
EDIT_ITEM(percent, MSG_XY_FREQUENCY_FEEDRATE, &editable.uint8, 3, 255, []{ planner.set_min_speed_factor_u8(editable.uint8); }, true);
#endif
END_MENU();
}
#if HAS_CLASSIC_JERK
void menu_advanced_jerk() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
#if HAS_JUNCTION_DEVIATION
EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, TERN(LIN_ADVANCE, 0.3f, 0.5f)
OPTARG(LIN_ADVANCE, planner.recalculate_max_e_jerk)
);
#endif
constexpr xyze_float_t max_jerk_edit =
#ifdef MAX_JERK_EDIT_VALUES
MAX_JERK_EDIT_VALUES
#elif ENABLED(LIMITED_JERK_EDITING)
#define _JERK2(N) DEFAULT_##N##JERK * 2
{ MAPLIST(_JERK2, LOGICAL_AXIS_NAMES) }
#else
LOGICAL_AXIS_ARRAY_1(990)
#endif
;
LOOP_LOGICAL_AXES(a) {
if (a == C_AXIS || TERN0(HAS_EXTRUDERS, a == E_AXIS))
EDIT_ITEM_FAST_N(float52sign, a, MSG_VN_JERK, &planner.max_jerk[a], 0.1f, max_jerk_edit[a]);
else
EDIT_ITEM_FAST_N(float3, a, MSG_VN_JERK, &planner.max_jerk[a], 1.0f, max_jerk_edit[a]);
}
END_MENU();
}
#endif
// M851 - Z Probe Offsets
#if HAS_BED_PROBE
void menu_probe_offsets() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
#if HAS_PROBE_XY_OFFSET
EDIT_ITEM(float31sign, MSG_ZPROBE_XOFFSET, &probe.offset.x, -(X_BED_SIZE), X_BED_SIZE);
EDIT_ITEM(float31sign, MSG_ZPROBE_YOFFSET, &probe.offset.y, -(Y_BED_SIZE), Y_BED_SIZE);
#endif
EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_ZPROBE_ZOFFSET, &probe.offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#if ENABLED(PROBE_OFFSET_WIZARD)
SUBMENU(MSG_PROBE_WIZARD, goto_probe_offset_wizard);
#endif
#if ENABLED(X_AXIS_TWIST_COMPENSATION)
SUBMENU(MSG_XATC, xatc_wizard_continue);
#endif
END_MENU();
}
#endif
#endif // !SLIM_LCD_MENUS
// M92 Steps-per-mm
void menu_advanced_steps_per_mm() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
LOOP_NUM_AXES(a)
EDIT_ITEM_FAST_N(float61, a, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[a], 5, 9999, []{ planner.refresh_positioning(); });
#if ENABLED(DISTINCT_E_FACTORS)
LOOP_L_N(n, E_STEPPERS)
EDIT_ITEM_FAST_N(float61, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{
const uint8_t e = MenuItemBase::itemIndex;
if (e == active_extruder)
planner.refresh_positioning();
else
planner.mm_per_step[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)];
});
#elif E_STEPPERS
EDIT_ITEM_FAST_N(float61, E_AXIS, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
#endif
END_MENU();
}
void menu_advanced_settings() {
const bool is_busy = printer_busy();
#if ENABLED(SD_FIRMWARE_UPDATE)
bool sd_update_state = settings.sd_update_status();
#endif
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if DISABLED(SLIM_LCD_MENUS)
#if HAS_M206_COMMAND
//
// Set Home Offsets
//
ACTION_ITEM(MSG_SET_HOME_OFFSETS, []{ queue.inject(F("M428")); ui.return_to_status(); });
#endif
// M203 / M205 - Feedrate items
SUBMENU(MSG_MAX_SPEED, menu_advanced_velocity);
// M201 - Acceleration items
SUBMENU(MSG_ACCELERATION, menu_advanced_acceleration);
#if HAS_CLASSIC_JERK
// M205 - Max Jerk
SUBMENU(MSG_JERK, menu_advanced_jerk);
#elif HAS_JUNCTION_DEVIATION
EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f
OPTARG(LIN_ADVANCE, planner.recalculate_max_e_jerk)
);
#endif
// M851 - Z Probe Offsets
#if HAS_BED_PROBE
if (!is_busy) SUBMENU(MSG_ZPROBE_OFFSETS, menu_probe_offsets);
#endif
#endif // !SLIM_LCD_MENUS
// M92 - Steps Per mm
if (!is_busy)
SUBMENU(MSG_STEPS_PER_MM, menu_advanced_steps_per_mm);
#if ENABLED(BACKLASH_GCODE)
SUBMENU(MSG_BACKLASH, menu_backlash);
#endif
#if HAS_MOTOR_CURRENT_DAC
SUBMENU(MSG_DRIVE_STRENGTH, menu_dac);
#endif
#if HAS_MOTOR_CURRENT_PWM
SUBMENU(MSG_DRIVE_STRENGTH, menu_pwm);
#endif
#if HAS_TRINAMIC_CONFIG
SUBMENU(MSG_TMC_DRIVERS, menu_tmc);
#endif
#if SHOW_MENU_ADVANCED_TEMPERATURE
SUBMENU(MSG_TEMPERATURE, menu_advanced_temperature);
#endif
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
SUBMENU(MSG_FILAMENT, menu_advanced_filament);
#elif ENABLED(LIN_ADVANCE)
#if EXTRUDERS == 1
EDIT_ITEM(float42_52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 10);
#elif HAS_MULTI_EXTRUDER
LOOP_L_N(n, E_STEPPERS)
EDIT_ITEM_N(float42_52, n, MSG_ADVANCE_K_E, &planner.extruder_advance_K[n], 0, 10);
#endif
#endif
// M540 S - Abort on endstop hit when SD printing
#if ENABLED(SD_ABORT_ON_ENDSTOP_HIT)
EDIT_ITEM(bool, MSG_ENDSTOP_ABORT, &planner.abort_on_endstop_hit);
#endif
#if ENABLED(SD_FIRMWARE_UPDATE)
EDIT_ITEM(bool, MSG_MEDIA_UPDATE, &sd_update_state, []{
//
// Toggle the SD Firmware Update state in EEPROM
//
const bool new_state = !settings.sd_update_status(),
didset = settings.set_sd_update_status(new_state);
ui.completion_feedback(didset);
ui.return_to_status();
if (new_state) LCD_MESSAGE(MSG_RESET_PRINTER); else ui.reset_status();
});
#endif
#if ENABLED(PASSWORD_FEATURE)
SUBMENU(MSG_PASSWORD_SETTINGS, password.access_menu_password);
#endif
#if ENABLED(EEPROM_SETTINGS) && DISABLED(SLIM_LCD_MENUS)
CONFIRM_ITEM(MSG_INIT_EEPROM,
MSG_BUTTON_INIT, MSG_BUTTON_CANCEL,
ui.init_eeprom, nullptr,
GET_TEXT_F(MSG_INIT_EEPROM), (const char *)nullptr, F("?")
);
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU

View File

@ -0,0 +1,78 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Backlash Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, BACKLASH_GCODE)
#include "menu_item.h"
#include "../../feature/backlash.h"
void menu_backlash() {
START_MENU();
BACK_ITEM(MSG_MAIN);
editable.uint8 = backlash.get_correction_uint8();
EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &editable.uint8, backlash.all_off, backlash.all_on, []{ backlash.set_correction_uint8(editable.uint8); });
#if DISABLED(CORE_BACKLASH) || EITHER(MARKFORGED_XY, MARKFORGED_YX)
#define _CAN_CALI AXIS_CAN_CALIBRATE
#else
#define _CAN_CALI(A) true
#endif
#define EDIT_BACKLASH_DISTANCE(N) do { \
editable.decimal = backlash.get_distance_mm(_AXIS(N)); \
EDIT_ITEM_FAST_N(float43, _AXIS(N), MSG_BACKLASH_N, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_distance_mm(_AXIS(N), editable.decimal); }); \
} while (0);
if (_CAN_CALI(A)) EDIT_BACKLASH_DISTANCE(A);
#if HAS_Y_AXIS && _CAN_CALI(B)
EDIT_BACKLASH_DISTANCE(B);
#endif
#if HAS_Z_AXIS && _CAN_CALI(C)
EDIT_BACKLASH_DISTANCE(C);
#endif
#if HAS_I_AXIS && _CAN_CALI(I)
EDIT_BACKLASH_DISTANCE(I);
#endif
#if HAS_J_AXIS && _CAN_CALI(J)
EDIT_BACKLASH_DISTANCE(J);
#endif
#if HAS_K_AXIS && _CAN_CALI(K)
EDIT_BACKLASH_DISTANCE(K);
#endif
#ifdef BACKLASH_SMOOTHING_MM
editable.decimal = backlash.get_smoothing_mm();
EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_smoothing_mm(editable.decimal); });
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && BACKLASH_GCODE

View File

@ -0,0 +1,365 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Level Bed Corners menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, LCD_BED_TRAMMING)
#include "menu_item.h"
#include "../../module/motion.h"
#include "../../module/planner.h"
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
#ifndef BED_TRAMMING_Z_HOP
#define BED_TRAMMING_Z_HOP 4.0
#endif
#ifndef BED_TRAMMING_HEIGHT
#define BED_TRAMMING_HEIGHT 0.0
#endif
#if ENABLED(BED_TRAMMING_USE_PROBE)
#include "../../module/probe.h"
#include "../../module/endstops.h"
#if ENABLED(BLTOUCH)
#include "../../feature/bltouch.h"
#endif
#ifndef BED_TRAMMING_PROBE_TOLERANCE
#define BED_TRAMMING_PROBE_TOLERANCE 0.2
#endif
float last_z;
int good_points;
bool corner_probing_done, wait_for_probe;
#if HAS_MARLINUI_U8GLIB
#include "../dogm/marlinui_DOGM.h"
#endif
#define GOOD_POINTS_TO_STR(N) ui8tostr2(N)
#define LAST_Z_TO_STR(N) ftostr53_63(N) //ftostr42_52(N)
#endif
static_assert(BED_TRAMMING_Z_HOP >= 0, "BED_TRAMMING_Z_HOP must be >= 0. Please update your configuration.");
#ifndef BED_TRAMMING_LEVELING_ORDER
#define BED_TRAMMING_LEVELING_ORDER { LF, RF, LB, RB } // Default
//#define BED_TRAMMING_LEVELING_ORDER { LF, LB, RF } // 3 hard-coded points
//#define BED_TRAMMING_LEVELING_ORDER { LF, RF } // 3-Point tramming - Rear
//#define BED_TRAMMING_LEVELING_ORDER { LF, LB } // 3-Point tramming - Right
//#define BED_TRAMMING_LEVELING_ORDER { RF, RB } // 3-Point tramming - Left
//#define BED_TRAMMING_LEVELING_ORDER { LB, RB } // 3-Point tramming - Front
#endif
#define LF 1
#define RF 2
#define RB 3
#define LB 4
constexpr int lco[] = BED_TRAMMING_LEVELING_ORDER;
constexpr bool level_corners_3_points = COUNT(lco) == 2;
static_assert(level_corners_3_points || COUNT(lco) == 4, "BED_TRAMMING_LEVELING_ORDER must have exactly 2 or 4 corners.");
constexpr int lcodiff = ABS(lco[0] - lco[1]);
static_assert(COUNT(lco) == 4 || lcodiff == 1 || lcodiff == 3, "The first two BED_TRAMMING_LEVELING_ORDER corners must be on the same edge.");
constexpr int nr_edge_points = level_corners_3_points ? 3 : 4;
constexpr int available_points = nr_edge_points + ENABLED(BED_TRAMMING_INCLUDE_CENTER);
constexpr int center_index = TERN(BED_TRAMMING_INCLUDE_CENTER, available_points - 1, -1);
constexpr float inset_lfrb[4] = BED_TRAMMING_INSET_LFRB;
constexpr xy_pos_t lf { (X_MIN_BED) + inset_lfrb[0], (Y_MIN_BED) + inset_lfrb[1] },
rb { (X_MAX_BED) - inset_lfrb[2], (Y_MAX_BED) - inset_lfrb[3] };
static int8_t bed_corner;
/**
* Select next corner coordinates
*/
static void _lcd_level_bed_corners_get_next_position() {
if (level_corners_3_points) {
if (bed_corner >= available_points) bed_corner = 0; // Above max position -> move back to first corner
switch (bed_corner) {
case 0 ... 1:
// First two corners set explicitly by the configuration
current_position = lf; // Left front
switch (lco[bed_corner]) {
case RF: current_position.x = rb.x; break; // Right Front
case RB: current_position = rb; break; // Right Back
case LB: current_position.y = rb.y; break; // Left Back
}
break;
case 2:
// Determine which edge to probe for 3rd point
current_position.set(lf.x + (rb.x - lf.x) / 2, lf.y + (rb.y - lf.y) / 2);
if ((lco[0] == LB && lco[1] == RB) || (lco[0] == RB && lco[1] == LB)) current_position.y = lf.y; // Front Center
if ((lco[0] == LF && lco[1] == LB) || (lco[0] == LB && lco[1] == LF)) current_position.x = rb.x; // Center Right
if ((lco[0] == RF && lco[1] == RB) || (lco[0] == RB && lco[1] == RF)) current_position.x = lf.x; // Left Center
if ((lco[0] == LF && lco[1] == RF) || (lco[0] == RF && lco[1] == LF)) current_position.y = rb.y; // Center Back
#if DISABLED(BED_TRAMMING_INCLUDE_CENTER) && ENABLED(BED_TRAMMING_USE_PROBE)
bed_corner++; // Must increment the count to ensure it resets the loop if the 3rd point is out of tolerance
#endif
break;
#if ENABLED(BED_TRAMMING_INCLUDE_CENTER)
case 3:
current_position.set(X_CENTER, Y_CENTER);
break;
#endif
}
}
else {
// Four-Corner Bed Tramming with optional center
if (TERN0(BED_TRAMMING_INCLUDE_CENTER, bed_corner == center_index)) {
current_position.set(X_CENTER, Y_CENTER);
TERN_(BED_TRAMMING_USE_PROBE, good_points--); // Decrement to allow one additional probe point
}
else {
current_position = lf; // Left front
switch (lco[bed_corner]) {
case RF: current_position.x = rb.x; break; // Right front
case RB: current_position = rb; break; // Right rear
case LB: current_position.y = rb.y; break; // Left rear
}
}
}
}
/**
* Level corners, starting in the front-left corner.
*/
#if ENABLED(BED_TRAMMING_USE_PROBE)
#define VALIDATE_POINT(X, Y, STR) static_assert(Probe::build_time::can_reach((X), (Y)), \
"BED_TRAMMING_INSET_LFRB " STR " inset is not reachable with the default NOZZLE_TO_PROBE offset and PROBING_MARGIN.")
VALIDATE_POINT(lf.x, Y_CENTER, "left"); VALIDATE_POINT(X_CENTER, lf.y, "front");
VALIDATE_POINT(rb.x, Y_CENTER, "right"); VALIDATE_POINT(X_CENTER, rb.y, "back");
#ifndef PAGE_CONTAINS
#define PAGE_CONTAINS(...) true
#endif
void _lcd_draw_probing() {
if (!ui.should_draw()) return;
TERN_(HAS_MARLINUI_U8GLIB, ui.set_font(FONT_MENU)); // Set up the font for extra info
MenuItem_static::draw(0, GET_TEXT_F(MSG_PROBING_POINT), SS_INVERT); // "Probing Mesh" heading
uint8_t cy = TERN(TFT_COLOR_UI, 3, LCD_HEIGHT - 1), y = LCD_ROW_Y(cy);
// Display # of good points found vs total needed
if (PAGE_CONTAINS(y - (MENU_FONT_HEIGHT), y)) {
SETCURSOR(TERN(TFT_COLOR_UI, 2, 0), cy);
lcd_put_u8str(GET_TEXT_F(MSG_BED_TRAMMING_GOOD_POINTS));
IF_ENABLED(TFT_COLOR_UI, lcd_moveto(12, cy));
lcd_put_u8str(GOOD_POINTS_TO_STR(good_points));
lcd_put_lchar('/');
lcd_put_u8str(GOOD_POINTS_TO_STR(nr_edge_points));
}
--cy;
y -= MENU_LINE_HEIGHT;
// Display the Last Z value
if (PAGE_CONTAINS(y - (MENU_FONT_HEIGHT), y)) {
SETCURSOR(TERN(TFT_COLOR_UI, 2, 0), cy);
lcd_put_u8str(GET_TEXT_F(MSG_BED_TRAMMING_LAST_Z));
IF_ENABLED(TFT_COLOR_UI, lcd_moveto(12, 2));
lcd_put_u8str(LAST_Z_TO_STR(last_z));
}
}
void _lcd_draw_raise() {
if (!ui.should_draw()) return;
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_DONE), GET_TEXT_F(MSG_BUTTON_SKIP)
, []{ corner_probing_done = true; wait_for_probe = false; }
, []{ wait_for_probe = false; }
, GET_TEXT_F(MSG_BED_TRAMMING_RAISE)
);
}
void _lcd_draw_level_prompt() {
if (!ui.should_draw()) return;
MenuItem_confirm::select_screen(
GET_TEXT_F(TERN(HAS_LEVELING, MSG_BUTTON_LEVEL, MSG_BUTTON_DONE)),
TERN(HAS_LEVELING, GET_TEXT_F(MSG_BUTTON_BACK), nullptr)
, []{ queue.inject(TERN(HAS_LEVELING, F("G29N"), FPSTR(G28_STR))); ui.return_to_status(); }
, TERN(HAS_LEVELING, ui.goto_previous_screen_no_defer, []{})
, GET_TEXT_F(MSG_BED_TRAMMING_IN_RANGE)
);
}
bool _lcd_level_bed_corners_probe(bool verify=false) {
if (verify) do_blocking_move_to_z(current_position.z + BED_TRAMMING_Z_HOP); // do clearance if needed
TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.deploy()); // Deploy in LOW SPEED MODE on every probe action
do_blocking_move_to_z(last_z - BED_TRAMMING_PROBE_TOLERANCE, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW)); // Move down to lower tolerance
if (TEST(endstops.trigger_state(), Z_MIN_PROBE)) { // check if probe triggered
endstops.hit_on_purpose();
set_current_from_steppers_for_axis(Z_AXIS);
sync_plan_position();
TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.stow()); // Stow in LOW SPEED MODE on every trigger
// Triggered outside tolerance range?
if (ABS(current_position.z - last_z) > BED_TRAMMING_PROBE_TOLERANCE) {
last_z = current_position.z; // Above tolerance. Set a new Z for subsequent corners.
good_points = 0; // ...and start over
}
return true; // probe triggered
}
do_blocking_move_to_z(last_z); // go back to tolerance middle point before raise
return false; // probe not triggered
}
bool _lcd_level_bed_corners_raise() {
bool probe_triggered = false;
corner_probing_done = false;
wait_for_probe = true;
ui.goto_screen(_lcd_draw_raise); // show raise screen
ui.set_selection(true);
while (wait_for_probe && !probe_triggered) { // loop while waiting to bed raise and probe trigger
probe_triggered = PROBE_TRIGGERED();
if (probe_triggered) {
endstops.hit_on_purpose();
TERN_(BED_TRAMMING_AUDIO_FEEDBACK, BUZZ(200, 600));
}
idle();
}
TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.stow());
ui.goto_screen(_lcd_draw_probing);
return (probe_triggered);
}
void _lcd_test_corners() {
bed_corner = TERN(BED_TRAMMING_INCLUDE_CENTER, center_index, 0);
last_z = BED_TRAMMING_HEIGHT;
endstops.enable_z_probe(true);
good_points = 0;
ui.goto_screen(_lcd_draw_probing);
do {
ui.refresh(LCDVIEW_REDRAW_NOW);
_lcd_draw_probing(); // update screen with # of good points
do_blocking_move_to_z(current_position.z + BED_TRAMMING_Z_HOP + TERN0(BLTOUCH, bltouch.z_extra_clearance())); // clearance
_lcd_level_bed_corners_get_next_position(); // Select next corner coordinates
current_position -= probe.offset_xy; // Account for probe offsets
do_blocking_move_to_xy(current_position); // Goto corner
TERN_(BLTOUCH, if (bltouch.high_speed_mode) bltouch.deploy()); // Deploy in HIGH SPEED MODE
if (!_lcd_level_bed_corners_probe()) { // Probe down to tolerance
if (_lcd_level_bed_corners_raise()) { // Prompt user to raise bed if needed
#if ENABLED(BED_TRAMMING_VERIFY_RAISED) // Verify
while (!_lcd_level_bed_corners_probe(true)) { // Loop while corner verified
if (!_lcd_level_bed_corners_raise()) { // Prompt user to raise bed if needed
if (corner_probing_done) return; // Done was selected
break; // Skip was selected
}
}
#endif
}
else if (corner_probing_done) // Done was selected
return;
}
if (bed_corner != center_index) good_points++; // ignore center
if (++bed_corner > 3) bed_corner = 0;
} while (good_points < nr_edge_points); // loop until all points within tolerance
#if ENABLED(BLTOUCH)
if (bltouch.high_speed_mode) {
// In HIGH SPEED MODE do clearance and stow at the very end
do_blocking_move_to_z(current_position.z + BED_TRAMMING_Z_HOP);
bltouch.stow();
}
#endif
ui.goto_screen(_lcd_draw_level_prompt); // prompt for bed leveling
ui.set_selection(true);
}
#else // !BED_TRAMMING_USE_PROBE
static void _lcd_goto_next_corner() {
line_to_z(BED_TRAMMING_Z_HOP);
// Select next corner coordinates
_lcd_level_bed_corners_get_next_position();
line_to_current_position(manual_feedrate_mm_s.x);
line_to_z(BED_TRAMMING_HEIGHT);
if (++bed_corner >= available_points) bed_corner = 0;
}
#endif // !BED_TRAMMING_USE_PROBE
static void _lcd_level_bed_corners_homing() {
_lcd_draw_homing();
if (!all_axes_homed()) return;
#if ENABLED(BED_TRAMMING_USE_PROBE)
_lcd_test_corners();
if (corner_probing_done) ui.goto_previous_screen_no_defer();
TERN_(HAS_LEVELING, set_bed_leveling_enabled(leveling_was_active));
endstops.enable_z_probe(false);
#else
bed_corner = 0;
ui.goto_screen([]{
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_NEXT), GET_TEXT_F(MSG_BUTTON_DONE)
, _lcd_goto_next_corner
, []{
line_to_z(BED_TRAMMING_Z_HOP); // Raise Z off the bed when done
TERN_(HAS_LEVELING, set_bed_leveling_enabled(leveling_was_active));
ui.goto_previous_screen_no_defer();
}
, GET_TEXT_F(TERN(BED_TRAMMING_INCLUDE_CENTER, MSG_LEVEL_BED_NEXT_POINT, MSG_NEXT_CORNER))
, (const char*)nullptr, F("?")
);
});
ui.set_selection(true);
_lcd_goto_next_corner();
#endif
}
void _lcd_level_bed_corners() {
ui.defer_status_screen();
if (!all_axes_trusted()) {
set_all_unhomed();
queue.inject_P(G28_STR);
}
// Disable leveling so the planner won't mess with us
#if HAS_LEVELING
leveling_was_active = planner.leveling_active;
set_bed_leveling_enabled(false);
#endif
ui.goto_screen(_lcd_level_bed_corners_homing);
}
#endif // HAS_MARLINUI_MENU && LCD_BED_TRAMMING

View File

@ -0,0 +1,304 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Bed Leveling Menus
//
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(LCD_BED_LEVELING)
#include "menu_item.h"
#include "../../module/planner.h"
#include "../../feature/bedlevel/bedlevel.h"
#if HAS_BED_PROBE && DISABLED(BABYSTEP_ZPROBE_OFFSET)
#include "../../module/probe.h"
#endif
#if HAS_GRAPHICAL_TFT
#include "../tft/tft.h"
#if ENABLED(TOUCH_SCREEN)
#include "../tft/touch.h"
#endif
#endif
#if EITHER(PROBE_MANUALLY, MESH_BED_LEVELING)
#include "../../module/motion.h"
#include "../../gcode/queue.h"
//
// Motion > Level Bed handlers
//
// LCD probed points are from defaults
constexpr uint8_t total_probe_points = TERN(AUTO_BED_LEVELING_3POINT, 3, GRID_MAX_POINTS);
//
// Bed leveling is done. Wait for G29 to complete.
// A flag is used so that this can release control
// and allow the command queue to be processed.
//
// When G29 finishes the last move:
// - Raise Z to the "Z after probing" height
// - Don't return until done.
//
// ** This blocks the command queue! **
//
void _lcd_level_bed_done() {
if (!ui.wait_for_move) {
#if Z_AFTER_PROBING > 0 && DISABLED(MESH_BED_LEVELING)
// Display "Done" screen and wait for moves to complete
line_to_z(Z_AFTER_PROBING);
ui.synchronize(GET_TEXT_F(MSG_LEVEL_BED_DONE));
#endif
ui.goto_previous_screen_no_defer();
ui.completion_feedback();
}
if (ui.should_draw()) MenuItem_static::draw(LCD_HEIGHT >= 4, GET_TEXT_F(MSG_LEVEL_BED_DONE));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
void _lcd_level_goto_next_point();
//
// Step 7: Get the Z coordinate, click goes to the next point or exits
//
void _lcd_level_bed_get_z() {
if (ui.use_click()) {
//
// Save the current Z position and move
//
// If done...
if (++manual_probe_index >= total_probe_points) {
//
// The last G29 records the point and enables bed leveling
//
ui.wait_for_move = true;
ui.goto_screen(_lcd_level_bed_done);
#if ENABLED(MESH_BED_LEVELING)
queue.inject(F("G29S2"));
#elif ENABLED(PROBE_MANUALLY)
queue.inject(F("G29V1"));
#endif
}
else
_lcd_level_goto_next_point();
return;
}
//
// Encoder knob or keypad buttons adjust the Z position
//
if (ui.encoderPosition) {
const float z = current_position.z + float(int32_t(ui.encoderPosition)) * (MESH_EDIT_Z_STEP);
line_to_z(constrain(z, -(LCD_PROBE_Z_RANGE) * 0.5f, (LCD_PROBE_Z_RANGE) * 0.5f));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
ui.encoderPosition = 0;
}
//
// Draw on first display, then only on Z change
//
if (ui.should_draw()) {
const float v = current_position.z;
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+'));
}
}
//
// Step 6: Display "Next point: 1 / 9" while waiting for move to finish
//
void _lcd_level_bed_moving() {
if (ui.should_draw()) {
char msg[10];
sprintf_P(msg, PSTR("%i / %u"), int(manual_probe_index + 1), total_probe_points);
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_LEVEL_BED_NEXT_POINT), msg);
}
ui.refresh(LCDVIEW_CALL_NO_REDRAW);
if (!ui.wait_for_move) ui.goto_screen(_lcd_level_bed_get_z);
}
//
// Step 5: Initiate a move to the next point
//
void _lcd_level_goto_next_point() {
ui.goto_screen(_lcd_level_bed_moving);
// G29 Records Z, moves, and signals when it pauses
ui.wait_for_move = true;
#if ENABLED(MESH_BED_LEVELING)
queue.inject(manual_probe_index ? F("G29S2") : F("G29S1"));
#elif ENABLED(PROBE_MANUALLY)
queue.inject(F("G29V1"));
#endif
}
//
// Step 4: Display "Click to Begin", wait for click
// Move to the first probe position
//
void _lcd_level_bed_homing_done() {
if (ui.should_draw()) {
MenuItem_static::draw(1, GET_TEXT_F(MSG_LEVEL_BED_WAITING));
// Color UI needs a control to detect a touch
#if BOTH(TOUCH_SCREEN, HAS_GRAPHICAL_TFT)
touch.add_control(CLICK, 0, 0, TFT_WIDTH, TFT_HEIGHT);
#endif
}
if (ui.use_click()) {
manual_probe_index = 0;
_lcd_level_goto_next_point();
}
}
//
// Step 3: Display "Homing XYZ" - Wait for homing to finish
//
void _lcd_level_bed_homing() {
_lcd_draw_homing();
if (all_axes_homed()) ui.goto_screen(_lcd_level_bed_homing_done);
}
#if ENABLED(PROBE_MANUALLY)
extern bool g29_in_progress;
#endif
//
// Step 2: Continue Bed Leveling...
//
void _lcd_level_bed_continue() {
ui.defer_status_screen();
set_all_unhomed();
ui.goto_screen(_lcd_level_bed_homing);
queue.inject_P(G28_STR);
}
#endif // PROBE_MANUALLY || MESH_BED_LEVELING
#if ENABLED(MESH_EDIT_MENU)
inline void refresh_planner() {
set_current_from_steppers_for_axis(ALL_AXES_ENUM);
sync_plan_position();
}
void menu_edit_mesh() {
static uint8_t xind, yind; // =0
START_MENU();
BACK_ITEM(MSG_BED_LEVELING);
EDIT_ITEM(uint8, MSG_MESH_X, &xind, 0, (GRID_MAX_POINTS_X) - 1);
EDIT_ITEM(uint8, MSG_MESH_Y, &yind, 0, (GRID_MAX_POINTS_Y) - 1);
EDIT_ITEM_FAST(float43, MSG_MESH_EDIT_Z, &bedlevel.z_values[xind][yind], -(LCD_PROBE_Z_RANGE) * 0.5, (LCD_PROBE_Z_RANGE) * 0.5, refresh_planner);
END_MENU();
}
#endif // MESH_EDIT_MENU
/**
* Step 1: Bed Level entry-point
*
* << Motion
* Auto Home (if homing needed)
* Leveling On/Off (if data exists, and homed)
* Fade Height: --- (Req: ENABLE_LEVELING_FADE_HEIGHT)
* Mesh Z Offset: --- (Req: MESH_BED_LEVELING)
* Z Probe Offset: --- (Req: HAS_BED_PROBE, Opt: BABYSTEP_ZPROBE_OFFSET)
* Level Bed >
* Bed Tramming > (if homed)
* Load Settings (Req: EEPROM_SETTINGS)
* Save Settings (Req: EEPROM_SETTINGS)
*/
void menu_bed_leveling() {
const bool is_homed = all_axes_trusted(),
is_valid = leveling_is_valid();
START_MENU();
BACK_ITEM(MSG_MOTION);
// Auto Home if not using manual probing
#if NONE(PROBE_MANUALLY, MESH_BED_LEVELING)
if (!is_homed) GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
#endif
// Level Bed
#if EITHER(PROBE_MANUALLY, MESH_BED_LEVELING)
// Manual leveling uses a guided procedure
SUBMENU(MSG_LEVEL_BED, _lcd_level_bed_continue);
#else
// Automatic leveling can just run the G-code
GCODES_ITEM(MSG_LEVEL_BED, is_homed ? F("G29") : F("G29N"));
#endif
#if ENABLED(MESH_EDIT_MENU)
if (is_valid) SUBMENU(MSG_EDIT_MESH, menu_edit_mesh);
#endif
// Homed and leveling is valid? Then leveling can be toggled.
if (is_homed && is_valid) {
bool show_state = planner.leveling_active;
EDIT_ITEM(bool, MSG_BED_LEVELING, &show_state, _lcd_toggle_bed_leveling);
}
// Z Fade Height
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
// Shadow for editing the fade height
editable.decimal = planner.z_fade_height;
EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, []{ set_z_fade_height(editable.decimal); });
#endif
//
// Mesh Bed Leveling Z-Offset
//
#if ENABLED(MESH_BED_LEVELING)
#if WITHIN(Z_PROBE_OFFSET_RANGE_MIN, -9, 9)
#define LCD_Z_OFFSET_TYPE float43 // Values from -9.000 to +9.000
#else
#define LCD_Z_OFFSET_TYPE float42_52 // Values from -99.99 to 99.99
#endif
EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_BED_Z, &bedlevel.z_offset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#elif HAS_BED_PROBE
EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_ZPROBE_ZOFFSET, &probe.offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
#if ENABLED(LCD_BED_TRAMMING)
SUBMENU(MSG_BED_TRAMMING, _lcd_level_bed_corners);
#endif
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_LOAD_EEPROM, ui.load_settings);
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
#endif
END_MENU();
}
#endif // LCD_BED_LEVELING

View File

@ -0,0 +1,74 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Cancel Object Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, CANCEL_OBJECTS)
#include "menu_item.h"
#include "menu_addon.h"
#include "../../feature/cancel_object.h"
static void lcd_cancel_object_confirm() {
const int8_t v = MenuItemBase::itemIndex;
const char item_num[] = {
' ',
char((v > 9) ? '0' + (v / 10) : ' '),
char('0' + (v % 10)),
'\0'
};
MenuItem_confirm::confirm_screen(
[]{
cancelable.cancel_object(MenuItemBase::itemIndex);
ui.completion_feedback();
ui.goto_previous_screen();
},
nullptr,
GET_TEXT_F(MSG_CANCEL_OBJECT), item_num, F("?")
);
}
void menu_cancelobject() {
const int8_t ao = cancelable.active_object;
START_MENU();
BACK_ITEM(MSG_MAIN);
// Draw cancelable items in a loop
for (int8_t i = -1; i < cancelable.object_count; i++) {
if (i == ao) continue; // Active is drawn on -1 index
const int8_t j = i < 0 ? ao : i; // Active or index item
if (!cancelable.is_canceled(j)) { // Not canceled already?
SUBMENU_N(j, MSG_CANCEL_OBJECT_N, lcd_cancel_object_confirm); // Offer the option.
if (i < 0) SKIP_ITEM(); // Extra line after active
}
}
END_MENU();
}
#endif // HAS_MARLINUI_MENU && CANCEL_OBJECTS

View File

@ -0,0 +1,592 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Configuration Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#include "menu_item.h"
#include "../../MarlinCore.h"
#if HAS_FILAMENT_SENSOR
#include "../../feature/runout.h"
#endif
#if HAS_FANCHECK
#include "../../feature/fancheck.h"
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../feature/powerloss.h"
#endif
#if HAS_BED_PROBE
#include "../../module/probe.h"
#if ENABLED(BLTOUCH)
#include "../../feature/bltouch.h"
#endif
#endif
#if ENABLED(SOUND_MENU_ITEM)
#include "../../libs/buzzer.h"
#endif
#include "../../core/debug_out.h"
#define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST)
void menu_advanced_settings();
#if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
void menu_delta_calibrate();
#endif
#if ENABLED(LCD_PROGRESS_BAR_TEST)
#include "../lcdprint.h"
static void progress_bar_test() {
static int8_t bar_percent = 0;
if (ui.use_click()) {
ui.goto_previous_screen();
TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_MENU));
return;
}
bar_percent += (int8_t)ui.encoderPosition;
LIMIT(bar_percent, 0, 100);
ui.encoderPosition = 0;
MenuItem_static::draw(0, GET_TEXT_F(MSG_PROGRESS_BAR_TEST), SS_DEFAULT|SS_INVERT);
lcd_put_int((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2, bar_percent); lcd_put_lchar('%');
lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
}
void _progress_bar_test() {
ui.goto_screen(progress_bar_test);
TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_INFO));
}
#endif // LCD_PROGRESS_BAR_TEST
#if HAS_DEBUG_MENU
void menu_debug() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(LCD_PROGRESS_BAR_TEST)
SUBMENU(MSG_PROGRESS_BAR_TEST, _progress_bar_test);
#endif
END_MENU();
}
#endif
#if HAS_MULTI_EXTRUDER
#include "../../module/tool_change.h"
void menu_tool_change() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
static constexpr float max_extrude = TERN(PREVENT_LENGTHY_EXTRUDE, EXTRUDE_MAXLENGTH, 500);
#if ENABLED(TOOLCHANGE_PARK)
EDIT_ITEM(bool, MSG_FILAMENT_PARK_ENABLED, &toolchange_settings.enable_park);
#endif
EDIT_ITEM(float3, MSG_FILAMENT_SWAP_LENGTH, &toolchange_settings.swap_length, 0, max_extrude);
EDIT_ITEM(float41sign, MSG_FILAMENT_SWAP_EXTRA, &toolchange_settings.extra_resume, -10, 10);
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_RETRACT_SPEED, &toolchange_settings.retract_speed, 10, 5400);
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_UNRETRACT_SPEED, &toolchange_settings.unretract_speed, 10, 5400);
EDIT_ITEM(float3, MSG_FILAMENT_PURGE_LENGTH, &toolchange_settings.extra_prime, 0, max_extrude);
EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_PRIME_SPEED, &toolchange_settings.prime_speed, 10, 5400);
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_SPEED, &toolchange_settings.fan_speed, 0, 255);
EDIT_ITEM_FAST(uint8, MSG_SINGLENOZZLE_FAN_TIME, &toolchange_settings.fan_time, 1, 30);
#endif
EDIT_ITEM(float3, MSG_TOOL_CHANGE_ZLIFT, &toolchange_settings.z_raise, 0, 10);
END_MENU();
}
#if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
#include "../../module/motion.h" // for active_extruder
#include "../../gcode/queue.h"
void menu_toolchange_migration() {
FSTR_P const msg_migrate = GET_TEXT_F(MSG_TOOL_MIGRATION_SWAP);
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
// Auto mode ON/OFF
EDIT_ITEM(bool, MSG_TOOL_MIGRATION_AUTO, &migration.automode);
EDIT_ITEM(uint8, MSG_TOOL_MIGRATION_END, &migration.last, 0, EXTRUDERS - 1);
// Migrate to a chosen extruder
EXTRUDER_LOOP() {
if (e != active_extruder) {
ACTION_ITEM_N_F(e, msg_migrate, []{
char cmd[12];
sprintf_P(cmd, PSTR("M217 T%i"), int(MenuItemBase::itemIndex));
queue.inject(cmd);
});
}
}
END_MENU();
}
#endif
#endif
#if HAS_HOTEND_OFFSET
#include "../../module/motion.h"
#include "../../gcode/queue.h"
void menu_tool_offsets() {
auto _recalc_offsets = []{
if (active_extruder && all_axes_trusted()) { // For the 2nd extruder re-home so the next tool-change gets the new offsets.
queue.inject_P(G28_STR); // In future, we can babystep the 2nd extruder (if active), making homing unnecessary.
active_extruder = 0;
}
};
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(DUAL_X_CARRIAGE)
EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets);
#else
EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets);
#endif
EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets);
EDIT_ITEM_FAST_N(float42_52, Z_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
#endif
END_MENU();
}
#endif
#if ENABLED(DUAL_X_CARRIAGE)
void menu_idex() {
const bool need_g28 = axes_should_home(_BV(Y_AXIS)|_BV(Z_AXIS));
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
GCODES_ITEM(MSG_IDEX_MODE_AUTOPARK, F("M605S1\nG28X\nG1X0"));
GCODES_ITEM(MSG_IDEX_MODE_DUPLICATE, need_g28
? F("M605S1\nT0\nG28\nM605S2\nG28X\nG1X0") // If Y or Z is not homed, do a full G28 first
: F("M605S1\nT0\nM605S2\nG28X\nG1X0")
);
GCODES_ITEM(MSG_IDEX_MODE_MIRRORED_COPY, need_g28
? F("M605S1\nT0\nG28\nM605S2\nG28X\nG1X0\nM605S3") // If Y or Z is not homed, do a full G28 first
: F("M605S1\nT0\nM605S2\nG28 X\nG1X0\nM605S3")
);
GCODES_ITEM(MSG_IDEX_MODE_FULL_CTRL, F("M605S0\nG28X"));
EDIT_ITEM(float42_52, MSG_IDEX_DUPE_GAP, &duplicate_extruder_x_offset, (X2_MIN_POS) - (X1_MIN_POS), (X_BED_SIZE) - 20);
END_MENU();
}
#endif
#if ENABLED(BLTOUCH)
#if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU)
void bltouch_report() {
PGMSTR(mode0, "OD");
PGMSTR(mode1, "5V");
DEBUG_ECHOPGM("BLTouch Mode: ");
DEBUG_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0);
DEBUG_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")");
char mess[21];
strcpy_P(mess, PSTR("BLTouch Mode: "));
strcpy_P(&mess[15], bltouch.od_5v_mode ? mode1 : mode0);
ui.set_status(mess);
ui.return_to_status();
}
#endif
void menu_bltouch() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
ACTION_ITEM(MSG_BLTOUCH_RESET, bltouch._reset);
ACTION_ITEM(MSG_BLTOUCH_SELFTEST, bltouch._selftest);
ACTION_ITEM(MSG_BLTOUCH_DEPLOY, bltouch._deploy);
ACTION_ITEM(MSG_BLTOUCH_STOW, bltouch._stow);
ACTION_ITEM(MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode);
#ifdef BLTOUCH_HS_MODE
EDIT_ITEM(bool, MSG_BLTOUCH_SPEED_MODE, &bltouch.high_speed_mode);
#endif
#if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU)
CONFIRM_ITEM(MSG_BLTOUCH_5V_MODE, MSG_BLTOUCH_5V_MODE, MSG_BUTTON_CANCEL, bltouch._set_5V_mode, nullptr, GET_TEXT_F(MSG_BLTOUCH_MODE_CHANGE));
CONFIRM_ITEM(MSG_BLTOUCH_OD_MODE, MSG_BLTOUCH_OD_MODE, MSG_BUTTON_CANCEL, bltouch._set_OD_mode, nullptr, GET_TEXT_F(MSG_BLTOUCH_MODE_CHANGE));
ACTION_ITEM(MSG_BLTOUCH_MODE_STORE, bltouch._mode_store);
CONFIRM_ITEM(MSG_BLTOUCH_MODE_STORE_5V, MSG_BLTOUCH_MODE_STORE_5V, MSG_BUTTON_CANCEL, bltouch.mode_conv_5V, nullptr, GET_TEXT_F(MSG_BLTOUCH_MODE_CHANGE));
CONFIRM_ITEM(MSG_BLTOUCH_MODE_STORE_OD, MSG_BLTOUCH_MODE_STORE_OD, MSG_BUTTON_CANCEL, bltouch.mode_conv_OD, nullptr, GET_TEXT_F(MSG_BLTOUCH_MODE_CHANGE));
ACTION_ITEM(MSG_BLTOUCH_MODE_ECHO, bltouch_report);
#endif
END_MENU();
}
#endif
#if ENABLED(TOUCH_MI_PROBE)
void menu_touchmi() {
ui.defer_status_screen();
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
GCODES_ITEM(MSG_TOUCHMI_INIT, F("M851 Z0\nG28\nG1 F200 Z0"));
SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
GCODES_ITEM(MSG_TOUCHMI_SAVE, F("M500\nG1 F200 Z10"));
GCODES_ITEM(MSG_TOUCHMI_ZTEST, F("G28\nG1 F200 Z0"));
END_MENU();
}
#endif
#if ENABLED(CONTROLLER_FAN_MENU)
#include "../../feature/controllerfan.h"
void menu_controller_fan() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_IDLE_SPEED, &controllerFan.settings.idle_speed, CONTROLLERFAN_SPEED_MIN, 255);
EDIT_ITEM(bool, MSG_CONTROLLER_FAN_AUTO_ON, &controllerFan.settings.auto_mode);
if (controllerFan.settings.auto_mode) {
EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_SPEED, &controllerFan.settings.active_speed, CONTROLLERFAN_SPEED_MIN, 255);
EDIT_ITEM(uint16_4, MSG_CONTROLLER_FAN_DURATION, &controllerFan.settings.duration, 0, 4800);
}
END_MENU();
}
#endif
#if ENABLED(FWRETRACT)
#include "../../feature/fwretract.h"
void menu_config_retract() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(FWRETRACT_AUTORETRACT)
EDIT_ITEM(bool, MSG_AUTORETRACT, &fwretract.autoretract_enabled, fwretract.refresh_autoretract);
#endif
EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT, &fwretract.settings.retract_length, 0, 100);
#if HAS_MULTI_EXTRUDER
EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_SWAP, &fwretract.settings.swap_retract_length, 0, 100);
#endif
EDIT_ITEM(float3, MSG_CONTROL_RETRACTF, &fwretract.settings.retract_feedrate_mm_s, 1, 999);
EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_ZHOP, &fwretract.settings.retract_zraise, 0, 999);
EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_RECOVER, &fwretract.settings.retract_recover_extra, -100, 100);
#if HAS_MULTI_EXTRUDER
EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_RECOVER_SWAP, &fwretract.settings.swap_retract_recover_extra, -100, 100);
#endif
EDIT_ITEM(float3, MSG_CONTROL_RETRACT_RECOVERF, &fwretract.settings.retract_recover_feedrate_mm_s, 1, 999);
#if HAS_MULTI_EXTRUDER
EDIT_ITEM(float3, MSG_CONTROL_RETRACT_RECOVER_SWAPF, &fwretract.settings.swap_retract_recover_feedrate_mm_s, 1, 999);
#endif
END_MENU();
}
#endif
#if HAS_PREHEAT && DISABLED(SLIM_LCD_MENUS)
void _menu_configuration_preheat_settings() {
#define _MINTEMP_ITEM(N) HEATER_##N##_MINTEMP,
#define _MAXTEMP_ITEM(N) HEATER_##N##_MAXTEMP,
#define MINTEMP_ALL _MIN(REPEAT(HOTENDS, _MINTEMP_ITEM) 999)
#define MAXTEMP_ALL _MAX(REPEAT(HOTENDS, _MAXTEMP_ITEM) 0)
const uint8_t m = MenuItemBase::itemIndex;
START_MENU();
STATIC_ITEM_F(ui.get_preheat_label(m), SS_DEFAULT|SS_INVERT);
BACK_ITEM(MSG_CONFIGURATION);
#if HAS_FAN
editable.uint8 = uint8_t(ui.material_preset[m].fan_speed);
EDIT_ITEM_N(percent, m, MSG_FAN_SPEED, &editable.uint8, 0, 255, []{ ui.material_preset[MenuItemBase::itemIndex].fan_speed = editable.uint8; });
#endif
#if HAS_TEMP_HOTEND
EDIT_ITEM(int3, MSG_NOZZLE, &ui.material_preset[m].hotend_temp, MINTEMP_ALL, MAXTEMP_ALL - (HOTEND_OVERSHOOT));
#endif
#if HAS_HEATED_BED
EDIT_ITEM(int3, MSG_BED, &ui.material_preset[m].bed_temp, BED_MINTEMP, BED_MAX_TARGET);
#endif
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
#endif
END_MENU();
}
#endif
#if ENABLED(CUSTOM_MENU_CONFIG)
void _lcd_custom_menus_configuration_gcode(FSTR_P const fstr) {
queue.inject(fstr);
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_RETURN, ui.return_to_status());
}
void custom_menus_configuration() {
START_MENU();
BACK_ITEM(MSG_MAIN);
#define HAS_CUSTOM_ITEM_CONF(N) (defined(CONFIG_MENU_ITEM_##N##_DESC) && defined(CONFIG_MENU_ITEM_##N##_GCODE))
#ifdef CUSTOM_MENU_CONFIG_SCRIPT_DONE
#define _DONE_SCRIPT "\n" CUSTOM_MENU_CONFIG_SCRIPT_DONE
#else
#define _DONE_SCRIPT ""
#endif
#define GCODE_LAMBDA_CONF(N) []{ _lcd_custom_menus_configuration_gcode(F(CONFIG_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
#define _CUSTOM_ITEM_CONF(N) ACTION_ITEM_F(F(CONFIG_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_CONF(N));
#define _CUSTOM_ITEM_CONF_CONFIRM(N) \
SUBMENU_F(F(CONFIG_MENU_ITEM_##N##_DESC), []{ \
MenuItem_confirm::confirm_screen( \
GCODE_LAMBDA_CONF(N), nullptr, \
F(CONFIG_MENU_ITEM_##N##_DESC "?") \
); \
})
#define CUSTOM_ITEM_CONF(N) do{ \
constexpr char c = CONFIG_MENU_ITEM_##N##_GCODE[strlen(CONFIG_MENU_ITEM_##N##_GCODE) - 1]; \
static_assert(c != '\n' && c != '\r', "CONFIG_MENU_ITEM_" STRINGIFY(N) "_GCODE cannot have a newline at the end. Please remove it."); \
if (ENABLED(CONFIG_MENU_ITEM_##N##_CONFIRM)) \
_CUSTOM_ITEM_CONF_CONFIRM(N); \
else \
_CUSTOM_ITEM_CONF(N); \
}while(0)
#if HAS_CUSTOM_ITEM_CONF(1)
CUSTOM_ITEM_CONF(1);
#endif
#if HAS_CUSTOM_ITEM_CONF(2)
CUSTOM_ITEM_CONF(2);
#endif
#if HAS_CUSTOM_ITEM_CONF(3)
CUSTOM_ITEM_CONF(3);
#endif
#if HAS_CUSTOM_ITEM_CONF(4)
CUSTOM_ITEM_CONF(4);
#endif
#if HAS_CUSTOM_ITEM_CONF(5)
CUSTOM_ITEM_CONF(5);
#endif
#if HAS_CUSTOM_ITEM_CONF(6)
CUSTOM_ITEM_CONF(6);
#endif
#if HAS_CUSTOM_ITEM_CONF(7)
CUSTOM_ITEM_CONF(7);
#endif
#if HAS_CUSTOM_ITEM_CONF(8)
CUSTOM_ITEM_CONF(8);
#endif
#if HAS_CUSTOM_ITEM_CONF(9)
CUSTOM_ITEM_CONF(9);
#endif
#if HAS_CUSTOM_ITEM_CONF(10)
CUSTOM_ITEM_CONF(10);
#endif
#if HAS_CUSTOM_ITEM_CONF(11)
CUSTOM_ITEM_CONF(11);
#endif
#if HAS_CUSTOM_ITEM_CONF(12)
CUSTOM_ITEM_CONF(12);
#endif
#if HAS_CUSTOM_ITEM_CONF(13)
CUSTOM_ITEM_CONF(13);
#endif
#if HAS_CUSTOM_ITEM_CONF(14)
CUSTOM_ITEM_CONF(14);
#endif
#if HAS_CUSTOM_ITEM_CONF(15)
CUSTOM_ITEM_CONF(15);
#endif
#if HAS_CUSTOM_ITEM_CONF(16)
CUSTOM_ITEM_CONF(16);
#endif
#if HAS_CUSTOM_ITEM_CONF(17)
CUSTOM_ITEM_CONF(17);
#endif
#if HAS_CUSTOM_ITEM_CONF(18)
CUSTOM_ITEM_CONF(18);
#endif
#if HAS_CUSTOM_ITEM_CONF(19)
CUSTOM_ITEM_CONF(19);
#endif
#if HAS_CUSTOM_ITEM_CONF(20)
CUSTOM_ITEM_CONF(20);
#endif
#if HAS_CUSTOM_ITEM_CONF(21)
CUSTOM_ITEM_CONF(21);
#endif
#if HAS_CUSTOM_ITEM_CONF(22)
CUSTOM_ITEM_CONF(22);
#endif
#if HAS_CUSTOM_ITEM_CONF(23)
CUSTOM_ITEM_CONF(23);
#endif
#if HAS_CUSTOM_ITEM_CONF(24)
CUSTOM_ITEM_CONF(24);
#endif
#if HAS_CUSTOM_ITEM_CONF(25)
CUSTOM_ITEM_CONF(25);
#endif
END_MENU();
}
#endif // CUSTOM_MENU_CONFIG
void menu_configuration() {
const bool busy = printer_busy();
START_MENU();
BACK_ITEM(MSG_MAIN);
//
// Debug Menu when certain options are enabled
//
#if HAS_DEBUG_MENU
SUBMENU(MSG_DEBUG_MENU, menu_debug);
#endif
#if ENABLED(CUSTOM_MENU_CONFIG)
if (TERN1(CUSTOM_MENU_CONFIG_ONLY_IDLE, !busy)) {
#ifdef CUSTOM_MENU_CONFIG_TITLE
SUBMENU_F(F(CUSTOM_MENU_CONFIG_TITLE), custom_menus_configuration);
#else
SUBMENU(MSG_CUSTOM_COMMANDS, custom_menus_configuration);
#endif
}
#endif
SUBMENU(MSG_ADVANCED_SETTINGS, menu_advanced_settings);
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#elif HAS_BED_PROBE
EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_ZPROBE_ZOFFSET, &probe.offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
//
// Set Fan Controller speed
//
#if ENABLED(CONTROLLER_FAN_MENU)
SUBMENU(MSG_CONTROLLER_FAN, menu_controller_fan);
#endif
if (!busy) {
#if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
SUBMENU(MSG_DELTA_CALIBRATE, menu_delta_calibrate);
#endif
#if HAS_HOTEND_OFFSET
SUBMENU(MSG_OFFSETS_MENU, menu_tool_offsets);
#endif
#if ENABLED(DUAL_X_CARRIAGE)
SUBMENU(MSG_IDEX_MENU, menu_idex);
#endif
#if ENABLED(BLTOUCH)
SUBMENU(MSG_BLTOUCH, menu_bltouch);
#endif
#if ENABLED(TOUCH_MI_PROBE)
SUBMENU(MSG_TOUCHMI_PROBE, menu_touchmi);
#endif
}
//
// Set single nozzle filament retract and prime length
//
#if HAS_MULTI_EXTRUDER
SUBMENU(MSG_TOOL_CHANGE, menu_tool_change);
#if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
SUBMENU(MSG_TOOL_MIGRATION, menu_toolchange_migration);
#endif
#endif
#if HAS_LCD_BRIGHTNESS
EDIT_ITEM_FAST(uint8, MSG_BRIGHTNESS, &ui.brightness, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.refresh_brightness, true);
#endif
#if HAS_LCD_CONTRAST && LCD_CONTRAST_MIN < LCD_CONTRAST_MAX
EDIT_ITEM_FAST(uint8, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true);
#endif
//
// Set display backlight / sleep timeout
//
#if LCD_BACKLIGHT_TIMEOUT && LCD_BKL_TIMEOUT_MIN < LCD_BKL_TIMEOUT_MAX
EDIT_ITEM(uint16_4, MSG_LCD_TIMEOUT_SEC, &ui.lcd_backlight_timeout, LCD_BKL_TIMEOUT_MIN, LCD_BKL_TIMEOUT_MAX, ui.refresh_backlight_timeout);
#elif HAS_DISPLAY_SLEEP
EDIT_ITEM(uint8, MSG_SCREEN_TIMEOUT, &ui.sleep_timeout_minutes, SLEEP_TIMEOUT_MIN, SLEEP_TIMEOUT_MAX, ui.refresh_screen_timeout);
#endif
#if ENABLED(FWRETRACT)
SUBMENU(MSG_RETRACT, menu_config_retract);
#endif
#if HAS_FILAMENT_SENSOR
EDIT_ITEM(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
#endif
#if HAS_FANCHECK
EDIT_ITEM(bool, MSG_FANCHECK, &fan_check.enabled);
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
EDIT_ITEM(bool, MSG_OUTAGE_RECOVERY, &recovery.enabled, recovery.changed);
#endif
// Preheat configurations
#if HAS_PREHEAT && DISABLED(SLIM_LCD_MENUS)
LOOP_L_N(m, PREHEAT_COUNT)
SUBMENU_N_f(m, ui.get_preheat_label(m), MSG_PREHEAT_M_SETTINGS, _menu_configuration_preheat_settings);
#endif
#if ENABLED(SOUND_MENU_ITEM)
EDIT_ITEM(bool, MSG_SOUND, &ui.sound_on, []{ ui.chirp(); });
#endif
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
if (!busy) ACTION_ITEM(MSG_LOAD_EEPROM, ui.load_settings);
#endif
if (!busy) ACTION_ITEM(MSG_RESTORE_DEFAULTS, ui.reset_settings);
END_MENU();
}
#endif // HAS_MARLINUI_MENU

View File

@ -0,0 +1,160 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Delta Calibrate Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU && EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
#include "menu_item.h"
#include "../../module/delta.h"
#include "../../module/motion.h"
#include "../../module/planner.h"
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
#if ENABLED(EXTENSIBLE_UI)
#include "../extui/ui_api.h"
#endif
#if HAS_PROBE_XY_OFFSET
#include "../../module/probe.h"
#endif
void _man_probe_pt(const xy_pos_t &xy) {
if (!ui.wait_for_move) {
ui.wait_for_move = true;
do_blocking_move_to_xy_z(xy, Z_CLEARANCE_BETWEEN_PROBES);
ui.wait_for_move = false;
ui.synchronize();
ui.manual_move.menu_scale = _MAX(PROBE_MANUALLY_STEP, MIN_STEPS_PER_SEGMENT / planner.settings.axis_steps_per_mm[0]); // Use first axis as for delta XYZ should always match
ui.goto_screen([]{ lcd_move_axis(Z_AXIS); });
}
}
#if ENABLED(DELTA_AUTO_CALIBRATION)
#if HAS_RESUME_CONTINUE
#include "../../MarlinCore.h" // for wait_for_user_response()
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
#include "../../feature/host_actions.h" // for hostui.prompt_do
#endif
float lcd_probe_pt(const xy_pos_t &xy) {
_man_probe_pt(xy);
ui.defer_status_screen();
TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("Delta Calibration in progress"), FPSTR(CONTINUE_STR)));
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Delta Calibration in progress")));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
ui.goto_previous_screen_no_defer();
return current_position.z;
}
#endif
#if ENABLED(DELTA_CALIBRATION_MENU)
#include "../../gcode/queue.h"
void _lcd_calibrate_homing() {
_lcd_draw_homing();
if (all_axes_homed()) ui.goto_previous_screen();
}
void _lcd_delta_calibrate_home() {
queue.inject_P(G28_STR);
ui.goto_screen(_lcd_calibrate_homing);
}
void _goto_tower_a(const_float_t a) {
float dcr = DELTA_PRINTABLE_RADIUS - PROBING_MARGIN;
TERN_(HAS_PROBE_XY_OFFSET, dcr -= HYPOT(probe.offset_xy.x, probe.offset_xy.y));
TERN_(HAS_DELTA_SENSORLESS_PROBING, dcr *= sensorless_radius_factor);
xy_pos_t tower_vec = { cos(RADIANS(a)), sin(RADIANS(a)) };
_man_probe_pt(tower_vec * dcr);
}
void _goto_tower_x() { _goto_tower_a(210); }
void _goto_tower_y() { _goto_tower_a(330); }
void _goto_tower_z() { _goto_tower_a( 90); }
void _goto_center() { xy_pos_t ctr{0}; _man_probe_pt(ctr); }
#endif
void lcd_delta_settings() {
auto _recalc_delta_settings = []{
TERN_(HAS_LEVELING, reset_bed_level()); // After changing kinematics bed-level data is no longer valid
recalc_delta_settings();
};
START_MENU();
BACK_ITEM(MSG_DELTA_CALIBRATE);
EDIT_ITEM(float52sign, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10, delta_height + 10, _recalc_delta_settings);
#define EDIT_ENDSTOP_ADJ(LABEL,N) EDIT_ITEM_F(float43, F(LABEL), &delta_endstop_adj.N, -5, 0, _recalc_delta_settings)
EDIT_ENDSTOP_ADJ("Ex", a);
EDIT_ENDSTOP_ADJ("Ey", b);
EDIT_ENDSTOP_ADJ("Ez", c);
EDIT_ITEM(float52sign, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5, delta_radius + 5, _recalc_delta_settings);
#define EDIT_ANGLE_TRIM(LABEL,N) EDIT_ITEM_F(float43, F(LABEL), &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings)
EDIT_ANGLE_TRIM("Tx", a);
EDIT_ANGLE_TRIM("Ty", b);
EDIT_ANGLE_TRIM("Tz", c);
EDIT_ITEM(float52sign, MSG_DELTA_DIAG_ROD, &delta_diagonal_rod, delta_diagonal_rod - 5, delta_diagonal_rod + 5, _recalc_delta_settings);
END_MENU();
}
void menu_delta_calibrate() {
#if ENABLED(DELTA_CALIBRATION_MENU)
const bool all_homed = all_axes_homed(); // Acquire ahead of loop
#endif
START_MENU();
BACK_ITEM(MSG_MAIN);
#if ENABLED(DELTA_AUTO_CALIBRATION)
GCODES_ITEM(MSG_DELTA_AUTO_CALIBRATE, F("G33"));
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
ACTION_ITEM(MSG_LOAD_EEPROM, ui.load_settings);
#endif
#endif
SUBMENU(MSG_DELTA_SETTINGS, lcd_delta_settings);
#if ENABLED(DELTA_CALIBRATION_MENU)
SUBMENU(MSG_AUTO_HOME, _lcd_delta_calibrate_home);
if (all_homed) {
SUBMENU(MSG_DELTA_CALIBRATE_X, _goto_tower_x);
SUBMENU(MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
SUBMENU(MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
SUBMENU(MSG_DELTA_CALIBRATE_CENTER, _goto_center);
}
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && (DELTA_CALIBRATION_MENU || DELTA_AUTO_CALIBRATION)

View File

@ -0,0 +1,350 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Filament Change Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, ADVANCED_PAUSE_FEATURE)
#include "menu_item.h"
#include "../../module/temperature.h"
#include "../../feature/pause.h"
#include "../../gcode/queue.h"
#if HAS_FILAMENT_SENSOR
#include "../../feature/runout.h"
#endif
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
#include "../../MarlinCore.h"
#endif
//
// Change Filament > Change/Unload/Load Filament
//
static PauseMode _change_filament_mode; // = PAUSE_MODE_PAUSE_PRINT
static int8_t _change_filament_extruder; // = 0
inline FSTR_P _change_filament_command() {
switch (_change_filament_mode) {
case PAUSE_MODE_LOAD_FILAMENT: return F("M701 T%d");
case PAUSE_MODE_UNLOAD_FILAMENT: return _change_filament_extruder >= 0
? F("M702 T%d") : F("M702 ;%d");
case PAUSE_MODE_CHANGE_FILAMENT:
case PAUSE_MODE_PAUSE_PRINT:
default: break;
}
return F("M600 B0 T%d");
}
// Initiate Filament Load/Unload/Change at the specified temperature
static void _change_filament_with_temp(const uint16_t celsius) {
char cmd[11];
sprintf_P(cmd, FTOP(_change_filament_command()), _change_filament_extruder);
thermalManager.setTargetHotend(celsius, _change_filament_extruder);
queue.inject(cmd);
}
#if HAS_PREHEAT
static void _change_filament_with_preset() {
_change_filament_with_temp(ui.material_preset[MenuItemBase::itemIndex].hotend_temp);
}
#endif
static void _change_filament_with_custom() {
_change_filament_with_temp(thermalManager.degTargetHotend(MenuItemBase::itemIndex));
}
//
// Menu to choose the temperature and start Filament Change
//
inline FSTR_P change_filament_header(const PauseMode mode) {
switch (mode) {
case PAUSE_MODE_LOAD_FILAMENT: return GET_TEXT_F(MSG_FILAMENTLOAD);
case PAUSE_MODE_UNLOAD_FILAMENT: return GET_TEXT_F(MSG_FILAMENTUNLOAD);
default: break;
}
return GET_TEXT_F(MSG_FILAMENTCHANGE);
}
void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
_change_filament_mode = mode;
_change_filament_extruder = extruder;
const int8_t old_index = MenuItemBase::itemIndex;
START_MENU();
if (LCD_HEIGHT >= 4) STATIC_ITEM_F(change_filament_header(mode), SS_DEFAULT|SS_INVERT);
BACK_ITEM(MSG_BACK);
#if HAS_PREHEAT
LOOP_L_N(m, PREHEAT_COUNT)
ACTION_ITEM_N_f(m, ui.get_preheat_label(m), MSG_PREHEAT_M, _change_filament_with_preset);
#endif
EDIT_ITEM_FAST_N(int3, extruder, MSG_PREHEAT_CUSTOM, &thermalManager.temp_hotend[extruder].target,
EXTRUDE_MINTEMP, thermalManager.hotend_max_target(extruder),
_change_filament_with_custom
);
END_MENU();
MenuItemBase::itemIndex = old_index;
}
/**
* "Change Filament" submenu
*/
#if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
bool printingIsPaused();
#endif
void menu_change_filament() {
#if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
// Say "filament change" when no print is active
editable.int8 = printingIsPaused() ? PAUSE_MODE_PAUSE_PRINT : PAUSE_MODE_CHANGE_FILAMENT;
#if E_STEPPERS > 1 && ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
bool too_cold = false;
for (uint8_t s = 0; !too_cold && s < E_STEPPERS; s++)
too_cold = thermalManager.targetTooColdToExtrude(s);
#endif
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
const bool is_busy = printer_busy();
#endif
START_MENU();
BACK_ITEM(MSG_MAIN);
// Change filament
#if E_STEPPERS == 1
FSTR_P const fmsg = GET_TEXT_F(MSG_FILAMENTCHANGE);
if (thermalManager.targetTooColdToExtrude(active_extruder))
SUBMENU_F(fmsg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
else
GCODES_ITEM_F(fmsg, F("M600 B0"));
#else
FSTR_P const fmsg = GET_TEXT_F(MSG_FILAMENTCHANGE_E);
LOOP_L_N(s, E_STEPPERS) {
if (thermalManager.targetTooColdToExtrude(s))
SUBMENU_N_F(s, fmsg, []{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, MenuItemBase::itemIndex); });
else {
ACTION_ITEM_N_F(s, fmsg, []{
PGM_P const cmdpstr = PSTR("M600 B0 T%i");
char cmd[strlen_P(cmdpstr) + 3 + 1];
sprintf_P(cmd, cmdpstr, int(MenuItemBase::itemIndex));
queue.inject(cmd);
});
}
}
#endif
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
if (!is_busy) {
// Load filament
#if E_STEPPERS == 1
FSTR_P const msg_load = GET_TEXT_F(MSG_FILAMENTLOAD);
if (thermalManager.targetTooColdToExtrude(active_extruder))
SUBMENU_F(msg_load, []{ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); });
else
GCODES_ITEM_F(msg_load, F("M701"));
#else
FSTR_P const msg_load = GET_TEXT_F(MSG_FILAMENTLOAD_E);
LOOP_L_N(s, E_STEPPERS) {
if (thermalManager.targetTooColdToExtrude(s))
SUBMENU_N_F(s, msg_load, []{ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, MenuItemBase::itemIndex); });
else {
ACTION_ITEM_N_F(s, msg_load, []{
char cmd[12];
sprintf_P(cmd, PSTR("M701 T%i"), int(MenuItemBase::itemIndex));
queue.inject(cmd);
});
}
}
#endif
// Unload filament
#if E_STEPPERS == 1
FSTR_P const msg_unload = GET_TEXT_F(MSG_FILAMENTUNLOAD);
if (thermalManager.targetTooColdToExtrude(active_extruder))
SUBMENU_F(msg_unload, []{ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); });
else
GCODES_ITEM_F(msg_unload, F("M702"));
#else
#if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
if (too_cold)
SUBMENU(MSG_FILAMENTUNLOAD_ALL, []{ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, -1); });
else
GCODES_ITEM(MSG_FILAMENTUNLOAD_ALL, F("M702"));
#endif
FSTR_P const msg_unload = GET_TEXT_F(MSG_FILAMENTUNLOAD_E);
LOOP_L_N(s, E_STEPPERS) {
if (thermalManager.targetTooColdToExtrude(s))
SUBMENU_N_F(s, msg_unload, []{ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, MenuItemBase::itemIndex); });
else {
ACTION_ITEM_N_F(s, msg_unload, []{
char cmd[12];
sprintf_P(cmd, PSTR("M702 T%i"), int(MenuItemBase::itemIndex));
queue.inject(cmd);
});
}
}
#endif
} // !printer_busy
#endif
END_MENU();
#else
if (thermalManager.targetHotEnoughToExtrude(active_extruder))
queue.inject(F("M600B0"));
else
ui.goto_screen([]{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
#endif
}
static uint8_t hotend_status_extruder = 0;
static FSTR_P pause_header() {
switch (pause_mode) {
case PAUSE_MODE_CHANGE_FILAMENT: return GET_TEXT_F(MSG_FILAMENT_CHANGE_HEADER);
case PAUSE_MODE_LOAD_FILAMENT: return GET_TEXT_F(MSG_FILAMENT_CHANGE_HEADER_LOAD);
case PAUSE_MODE_UNLOAD_FILAMENT: return GET_TEXT_F(MSG_FILAMENT_CHANGE_HEADER_UNLOAD);
default: break;
}
return GET_TEXT_F(MSG_FILAMENT_CHANGE_HEADER_PAUSE);
}
// Portions from STATIC_ITEM...
#define HOTEND_STATUS_ITEM() do { \
if (_menuLineNr == _thisItemNr) { \
if (ui.should_draw()) { \
IF_DISABLED(HAS_GRAPHICAL_TFT, MenuItem_static::draw(_lcdLineNr, GET_TEXT_F(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT)); \
ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \
} \
if (_skipStatic && encoderLine <= _thisItemNr) { \
ui.encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \
++encoderLine; \
} \
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); \
} \
++_thisItemNr; \
}while(0)
void menu_pause_option() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER);
#endif
ACTION_ITEM(MSG_FILAMENT_CHANGE_OPTION_PURGE, []{ pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; });
#if HAS_FILAMENT_SENSOR
const bool still_out = runout.filament_ran_out;
if (still_out)
EDIT_ITEM(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
#else
constexpr bool still_out = false;
#endif
if (!still_out)
ACTION_ITEM(MSG_FILAMENT_CHANGE_OPTION_RESUME, []{ pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; });
END_MENU();
}
//
// ADVANCED_PAUSE_FEATURE message screens
//
// Warning: fmsg must have three null bytes to delimit lines!
//
void _lcd_pause_message(FSTR_P const fmsg) {
PGM_P const msg1 = FTOP(fmsg);
PGM_P const msg2 = msg1 + strlen_P(msg1) + 1;
PGM_P const msg3 = msg2 + strlen_P(msg2) + 1;
const bool has2 = msg2[0], has3 = msg3[0],
skip1 = !has2 && (LCD_HEIGHT) >= 5;
START_SCREEN();
STATIC_ITEM_F(pause_header(), SS_DEFAULT|SS_INVERT); // 1: Header
if (skip1) SKIP_ITEM(); // Move a single-line message down
STATIC_ITEM_F(FPSTR(msg1)); // 2: Message Line 1
if (has2) STATIC_ITEM_F(FPSTR(msg2)); // 3: Message Line 2
if (has3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_F(FPSTR(msg3)); // 4: Message Line 3 (if LCD has 5 lines)
if (skip1 + 1 + has2 + has3 < (LCD_HEIGHT) - 2) SKIP_ITEM(); // Push Hotend Status down, if needed
HOTEND_STATUS_ITEM(); // 5: Hotend Status
END_SCREEN();
}
void lcd_pause_parking_message() { _lcd_pause_message(GET_TEXT_F(MSG_PAUSE_PRINT_PARKING)); }
void lcd_pause_changing_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_INIT)); }
void lcd_pause_unload_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_UNLOAD)); }
void lcd_pause_heating_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEATING)); }
void lcd_pause_heat_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEAT)); }
void lcd_pause_insert_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); }
void lcd_pause_load_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD)); }
void lcd_pause_waiting_message() { _lcd_pause_message(GET_TEXT_F(MSG_ADVANCED_PAUSE_WAITING)); }
void lcd_pause_resume_message() { _lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_RESUME)); }
void lcd_pause_purge_message() {
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
_lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_CONT_PURGE));
#else
_lcd_pause_message(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE));
#endif
}
FORCE_INLINE screenFunc_t ap_message_screen(const PauseMessage message) {
switch (message) {
case PAUSE_MESSAGE_PARKING: return lcd_pause_parking_message;
case PAUSE_MESSAGE_CHANGING: return lcd_pause_changing_message;
case PAUSE_MESSAGE_UNLOAD: return lcd_pause_unload_message;
case PAUSE_MESSAGE_WAITING: return lcd_pause_waiting_message;
case PAUSE_MESSAGE_INSERT: return lcd_pause_insert_message;
case PAUSE_MESSAGE_LOAD: return lcd_pause_load_message;
case PAUSE_MESSAGE_PURGE: return lcd_pause_purge_message;
case PAUSE_MESSAGE_RESUME: return lcd_pause_resume_message;
case PAUSE_MESSAGE_HEAT: return lcd_pause_heat_message;
case PAUSE_MESSAGE_HEATING: return lcd_pause_heating_message;
case PAUSE_MESSAGE_OPTION: pause_menu_response = PAUSE_RESPONSE_WAIT_FOR;
return menu_pause_option;
case PAUSE_MESSAGE_STATUS:
default: break;
}
return nullptr;
}
void MarlinUI::pause_show_message(
const PauseMessage message,
const PauseMode mode/*=PAUSE_MODE_SAME*/,
const uint8_t extruder/*=active_extruder*/
) {
if (mode != PAUSE_MODE_SAME) pause_mode = mode;
hotend_status_extruder = extruder;
const screenFunc_t next_screen = ap_message_screen(message);
if (next_screen) {
ui.defer_status_screen();
ui.goto_screen(next_screen);
}
else
ui.return_to_status();
}
#endif // HAS_MARLINUI_MENU && ADVANCED_PAUSE_FEATURE

View File

@ -0,0 +1,48 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfigPre.h"
#if HAS_GAME_MENU
#include "menu_item.h"
#include "game/game.h"
void menu_game() {
START_MENU();
BACK_ITEM(TERN(LCD_INFO_MENU, MSG_INFO_MENU, MSG_MAIN));
#if ENABLED(MARLIN_BRICKOUT)
SUBMENU(MSG_BRICKOUT, brickout.enter_game);
#endif
#if ENABLED(MARLIN_INVADERS)
SUBMENU(MSG_INVADERS, invaders.enter_game);
#endif
#if ENABLED(MARLIN_SNAKE)
SUBMENU(MSG_SNAKE, snake.enter_game);
#endif
#if ENABLED(MARLIN_MAZE)
SUBMENU(MSG_MAZE, maze.enter_game);
#endif
END_MENU();
}
#endif // HAS_GAME_MENU

320
src/lcd/menu/menu_info.cpp Normal file
View File

@ -0,0 +1,320 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Info Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, LCD_INFO_MENU)
#include "menu_item.h"
#if HAS_GAMES
#include "game/game.h"
#endif
#define VALUE_ITEM(MSG, VALUE, STYL) do{ char msg[21]; strcpy_P(msg, PSTR(": ")); strcpy(msg + 2, VALUE); STATIC_ITEM(MSG, STYL, msg); }while(0)
#define VALUE_ITEM_F(MSG, PVALUE, STYL) do{ char msg[21]; strcpy_P(msg, PSTR(": ")); strcpy_P(msg + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, msg); }while(0)
#if ENABLED(PRINTCOUNTER)
#include "../../module/printcounter.h"
//
// About Printer > Printer Stats
//
void menu_info_stats() {
if (ui.use_click()) return ui.go_back();
printStatistics stats = print_job_timer.getStats();
char buffer[21];
START_SCREEN(); // 12345678901234567890
VALUE_ITEM(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT); // Print Count: 999
VALUE_ITEM(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT); // Completed : 666
STATIC_ITEM(MSG_INFO_PRINT_TIME, SS_LEFT); // Total print Time:
STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s
STATIC_ITEM(MSG_INFO_PRINT_LONGEST, SS_LEFT); // Longest job time:
STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s
STATIC_ITEM(MSG_INFO_PRINT_FILAMENT, SS_LEFT); // Extruded total:
sprintf_P(buffer, PSTR("%ld.%im")
, long(stats.filamentUsed / 1000)
, int16_t(stats.filamentUsed / 100) % 10
);
STATIC_ITEM_F(F("> "), SS_LEFT, buffer); // > 125m
#if SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0
strcpy_P(buffer, GET_TEXT(MSG_SERVICE_IN));
#endif
#if SERVICE_INTERVAL_1 > 0
STATIC_ITEM_F(F(SERVICE_NAME_1 " "), SS_LEFT, buffer); // Service X in:
STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s
#endif
#if SERVICE_INTERVAL_2 > 0
STATIC_ITEM_F(F(SERVICE_NAME_2 " "), SS_LEFT, buffer);
STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService2).toString(buffer));
#endif
#if SERVICE_INTERVAL_3 > 0
STATIC_ITEM_F(F(SERVICE_NAME_3 " "), SS_LEFT, buffer);
STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService3).toString(buffer));
#endif
END_SCREEN();
}
#endif
//
// About Printer > Thermistors
//
void menu_info_thermistors() {
if (ui.use_click()) return ui.go_back();
START_SCREEN();
#if HAS_EXTRUDERS
#define THERMISTOR_ID TEMP_SENSOR_0
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E0 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_1 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_1
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E1 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_2 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_2
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E2 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_3 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_3
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E3 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_4 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_4
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E4 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_5 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_5
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E5 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_6 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_6
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E6 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_6_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_6_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if TEMP_SENSOR_7 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_7
#include "../thermistornames.h"
STATIC_ITEM_F(F(STR_E7 ": " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_7_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_7_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if HAS_HEATED_BED
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_BED
#include "../thermistornames.h"
STATIC_ITEM_F(F("BED: " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_BED, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if HAS_HEATED_CHAMBER
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_CHAMBER
#include "../thermistornames.h"
STATIC_ITEM_F(F("CHAM: " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_CHAMBER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
#if HAS_COOLER
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_COOLER
#include "../thermistornames.h"
STATIC_ITEM_F(F("COOL: " THERMISTOR_NAME), SS_INVERT);
PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(COOLER_MINTEMP), SS_LEFT);
PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(COOLER_MAXTEMP), SS_LEFT);
STATIC_ITEM(TERN(WATCH_COOLER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT);
#endif
END_SCREEN();
}
//
// About Printer > Board Info
//
void menu_info_board() {
if (ui.use_click()) return ui.go_back();
START_SCREEN();
STATIC_ITEM_F(F(BOARD_INFO_NAME), SS_DEFAULT|SS_INVERT); // MyPrinterController
#ifdef BOARD_WEBSITE_URL
STATIC_ITEM_F(F(BOARD_WEBSITE_URL), SS_LEFT); // www.my3dprinter.com
#endif
PSTRING_ITEM(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000
PSTRING_ITEM(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER); // Protocol: 1.0
PSTRING_ITEM(MSG_INFO_PSU, PSU_NAME, SS_CENTER);
END_SCREEN();
}
//
// About Printer > Printer Info
//
#if ENABLED(LCD_PRINTER_INFO_IS_BOOTSCREEN)
void menu_show_marlin_bootscreen() {
if (ui.use_click()) { ui.goto_previous_screen_no_defer(); }
ui.draw_marlin_bootscreen();
}
#if ENABLED(SHOW_CUSTOM_BOOTSCREEN)
void menu_show_custom_bootscreen() {
if (ui.use_click()) { ui.goto_screen(menu_show_marlin_bootscreen); }
ui.draw_custom_bootscreen();
}
#endif
#else
void menu_info_printer() {
if (ui.use_click()) return ui.go_back();
START_SCREEN();
STATIC_ITEM(MSG_MARLIN, SS_DEFAULT|SS_INVERT); // Marlin
STATIC_ITEM_F(F(SHORT_BUILD_VERSION)); // x.x.x-Branch
STATIC_ITEM_F(F(STRING_DISTRIBUTION_DATE)); // YYYY-MM-DD HH:MM
STATIC_ITEM_F(F(MACHINE_NAME), SS_DEFAULT|SS_INVERT); // My3DPrinter
STATIC_ITEM_F(F(WEBSITE_URL)); // www.my3dprinter.com
PSTRING_ITEM(MSG_INFO_EXTRUDERS, STRINGIFY(EXTRUDERS), SS_CENTER); // Extruders: 2
#if HAS_LEVELING
STATIC_ITEM(
TERN_(AUTO_BED_LEVELING_3POINT, MSG_3POINT_LEVELING) // 3-Point Leveling
TERN_(AUTO_BED_LEVELING_LINEAR, MSG_LINEAR_LEVELING) // Linear Leveling
TERN_(AUTO_BED_LEVELING_BILINEAR, MSG_BILINEAR_LEVELING) // Bi-linear Leveling
TERN_(AUTO_BED_LEVELING_UBL, MSG_UBL_LEVELING) // Unified Bed Leveling
TERN_(MESH_BED_LEVELING, MSG_MESH_LEVELING) // Mesh Leveling
);
#endif
END_SCREEN();
}
#endif
//
// "About Printer" submenu
//
void menu_info() {
START_MENU();
BACK_ITEM(MSG_MAIN);
#if ENABLED(LCD_PRINTER_INFO_IS_BOOTSCREEN)
SUBMENU(MSG_INFO_PRINTER_MENU, TERN(SHOW_CUSTOM_BOOTSCREEN, menu_show_custom_bootscreen, menu_show_marlin_bootscreen));
#else
SUBMENU(MSG_INFO_PRINTER_MENU, menu_info_printer); // Printer Info >
SUBMENU(MSG_INFO_BOARD_MENU, menu_info_board); // Board Info >
#if HAS_EXTRUDERS
SUBMENU(MSG_INFO_THERMISTOR_MENU, menu_info_thermistors); // Thermistors >
#endif
#endif
#if ENABLED(PRINTCOUNTER)
SUBMENU(MSG_INFO_STATS_MENU, menu_info_stats); // Printer Stats >
#endif
#if HAS_GAMES
{
#if ENABLED(GAMES_EASTER_EGG)
SKIP_ITEM(); SKIP_ITEM(); SKIP_ITEM();
#endif
// Game sub-menu or the individual game
SUBMENU(
#if HAS_GAME_MENU
MSG_GAMES, menu_game
#elif ENABLED(MARLIN_BRICKOUT)
MSG_BRICKOUT, brickout.enter_game
#elif ENABLED(MARLIN_INVADERS)
MSG_INVADERS, invaders.enter_game
#elif ENABLED(MARLIN_SNAKE)
MSG_SNAKE, snake.enter_game
#elif ENABLED(MARLIN_MAZE)
MSG_MAZE, maze.enter_game
#endif
);
}
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && LCD_INFO_MENU

574
src/lcd/menu/menu_item.h Normal file
View File

@ -0,0 +1,574 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "menu.h"
#include "../marlinui.h"
#include "../../gcode/queue.h" // for inject
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(LASER_SYNCHRONOUS_M106_M107)
#include "../../module/planner.h"
#endif
////////////////////////////////////////////
///////////// Base Menu Items //////////////
////////////////////////////////////////////
// SUBMENU(LABEL, screen_handler)
class MenuItem_submenu : public MenuItemBase {
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, ...) {
_draw(sel, row, fstr, '>', LCD_STR_ARROW_RIGHT[0]);
}
static void action(FSTR_P const, const screenFunc_t func) { ui.push_current_screen(); ui.goto_screen(func); }
};
// Any menu item that invokes an immediate action
class MenuItem_button : public MenuItemBase {
public:
// Button-y Items are selectable lines with no other indicator
static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, ...) {
_draw(sel, row, fstr, '>', ' ');
}
};
// ACTION_ITEM(LABEL, FUNC)
class MenuItem_function : public MenuItem_button {
public:
//static void action(FSTR_P const, const uint8_t, const menuAction_t func) { (*func)(); };
static void action(FSTR_P const, const menuAction_t func) { if (func) (*func)(); };
};
// GCODES_ITEM(LABEL, GCODES)
class MenuItem_gcode : public MenuItem_button {
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, ...) {
_draw(sel, row, fstr, '>', ' ');
}
static void action(FSTR_P const, FSTR_P const fgcode) { queue.inject(fgcode); }
static void action(FSTR_P const fstr, const uint8_t, FSTR_P const fgcode) { action(fstr, fgcode); }
};
////////////////////////////////////////////
///////////// Edit Menu Items //////////////
////////////////////////////////////////////
// Template for specific Menu Edit Item Types
template<typename NAME>
class TMenuEditItem : MenuEditItemBase {
private:
typedef typename NAME::type_t type_t;
static float scale(const_float_t value) { return NAME::scale(value); }
static float unscale(const_float_t value) { return NAME::unscale(value); }
static const char* to_string(const int32_t value) { return NAME::strfunc(unscale(value)); }
static void load(void *ptr, const int32_t value) { *((type_t*)ptr) = unscale(value); }
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, type_t * const data, ...) {
MenuEditItemBase::draw(sel, row, fstr, NAME::strfunc(*(data)));
}
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, type_t (*pget)(), ...) {
MenuEditItemBase::draw(sel, row, fstr, NAME::strfunc(pget()));
}
// Edit screen for this type of item
static void edit_screen() { MenuEditItemBase::edit_screen(to_string, load); }
static void action(
FSTR_P const fstr, // Edit label
type_t * const ptr, // Value pointer
const type_t minValue, // Value range
const type_t maxValue,
const screenFunc_t callback=nullptr, // Value update callback
const bool live=false // Callback during editing
) {
// Make sure minv and maxv fit within int32_t
const int32_t minv = _MAX(scale(minValue), INT32_MIN),
maxv = _MIN(scale(maxValue), INT32_MAX);
goto_edit_screen(fstr, ptr, minv, maxv - minv, scale(*ptr) - minv,
edit_screen, callback, live);
}
};
/**
* DEFINE_MENU_EDIT_ITEM_TYPE(int3, int16_t, i16tostr3rj, 1)
*
* Define struct types for use by EDIT_ITEM(...) macros, which encompass
* a primitive storage type, a string function, and a scale factor for edit / display.
* The EDIT_ITEM macros take care of calling action and draw methods as needed.
*
* For example, DEFINE_MENU_EDIT_ITEM_TYPE(percent, uint8_t, ui8tostr4pctrj, 100.f/255.f, +0.5f) expands into:
*
* struct MenuEditItemInfo_percent {
* typedef uint8_t type_t;
* static float scale(const_float_t value) { return value * (100.f/255.f) +0.5f; }
* static float unscale(const_float_t value) { return value / (100.f/255.f) +0.5f; }
* static const char* strfunc(const_float_t value) { return ui8tostr4pctrj(_DOFIX(uint8_t,value)); }
* };
* typedef TMenuEditItem<MenuEditItemInfo_percent> MenuItem_percent
*/
#define __DOFIXfloat PROBE()
#define _DOFIX(TYPE,V) TYPE(TERN(IS_PROBE(__DOFIX##TYPE),FIXFLOAT(V),(V)))
#define DEFINE_MENU_EDIT_ITEM_TYPE(NAME, TYPE, STRFUNC, SCALE, ETC...) \
struct MenuEditItemInfo_##NAME { \
typedef TYPE type_t; \
static float scale(const_float_t value) { return value * (SCALE) ETC; } \
static float unscale(const_float_t value) { return value / (SCALE) ETC; } \
static const char* strfunc(const_float_t value) { return STRFUNC(_DOFIX(TYPE,value)); } \
}; \
typedef TMenuEditItem<MenuEditItemInfo_##NAME> MenuItem_##NAME
// NAME TYPE STRFUNC SCALE ROUND
DEFINE_MENU_EDIT_ITEM_TYPE(percent ,uint8_t ,ui8tostr4pctrj , 100.f/255.f, +0.5f); // 100% right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(percent_3 ,uint8_t ,pcttostrpctrj , 1 ); // 100% right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(int3 ,int16_t ,i16tostr3rj , 1 ); // 123, -12 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(int4 ,int16_t ,i16tostr4signrj , 1 ); // 1234, -123 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(int8 ,int8_t ,i8tostr3rj , 1 ); // 123, -12 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(uint8 ,uint8_t ,ui8tostr3rj , 1 ); // 123 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(uint16_3 ,uint16_t ,ui16tostr3rj , 1 ); // 123 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(uint16_4 ,uint16_t ,ui16tostr4rj , 0.1f ); // 1234 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(uint16_5 ,uint16_t ,ui16tostr5rj , 0.01f ); // 12345 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(float3 ,float ,ftostr3 , 1 ); // 123 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(float42_52 ,float ,ftostr42_52 , 100 ); // _2.34, 12.34, -2.34 or 123.45, -23.45
DEFINE_MENU_EDIT_ITEM_TYPE(float43 ,float ,ftostr43sign ,1000 ); // -1.234, _1.234, +1.234
DEFINE_MENU_EDIT_ITEM_TYPE(float4 ,float ,ftostr4sign , 1 ); // 1234 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(float5 ,float ,ftostr5rj , 1 ); // 12345 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(float5_25 ,float ,ftostr5rj , 0.04f ); // 12345 right-justified (25 increment)
DEFINE_MENU_EDIT_ITEM_TYPE(float61 ,float ,ftostr61rj , 10 ); // 12345.6 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(float31sign ,float ,ftostr31sign , 10 ); // +12.3
DEFINE_MENU_EDIT_ITEM_TYPE(float41sign ,float ,ftostr41sign , 10 ); // +123.4
DEFINE_MENU_EDIT_ITEM_TYPE(float51sign ,float ,ftostr51sign , 10 ); // +1234.5
DEFINE_MENU_EDIT_ITEM_TYPE(float52sign ,float ,ftostr52sign , 100 ); // +123.45
DEFINE_MENU_EDIT_ITEM_TYPE(long5 ,uint32_t ,ftostr5rj , 0.01f ); // 12345 right-justified
DEFINE_MENU_EDIT_ITEM_TYPE(long5_25 ,uint32_t ,ftostr5rj , 0.04f ); // 12345 right-justified (25 increment)
#if HAS_BED_PROBE
#if Z_PROBE_OFFSET_RANGE_MIN >= -9 && Z_PROBE_OFFSET_RANGE_MAX <= 9
#define LCD_Z_OFFSET_TYPE float43 // Values from -9.000 to +9.000
#else
#define LCD_Z_OFFSET_TYPE float42_52 // Values from -99.99 to 99.99
#endif
#endif
class MenuItem_bool : public MenuEditItemBase {
public:
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, const bool onoff) {
MenuEditItemBase::draw(sel, row, fstr, onoff ? GET_TEXT_F(MSG_LCD_ON) : GET_TEXT_F(MSG_LCD_OFF));
}
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, bool * const data, ...) {
draw(sel, row, fstr, *data);
}
FORCE_INLINE static void draw(const bool sel, const uint8_t row, FSTR_P const fstr, FSTR_P const, bool (*pget)(), ...) {
draw(sel, row, fstr, pget());
}
static void action(FSTR_P const fstr, bool * const ptr, const screenFunc_t callbackFunc=nullptr) {
*ptr ^= true; ui.refresh();
if (callbackFunc) (*callbackFunc)();
}
};
/**
* ////////////////////////////////////////////
* //////////// Menu System Macros ////////////
* ////////////////////////////////////////////
*
* Marlin's native menu screens work by running a loop from the top visible line index
* to the bottom visible line index (according to how much the screen has been scrolled).
* This complete loop is done on every menu screen call.
*
* The menu system is highly dynamic, so it doesn't know ahead of any menu loop which
* items will be visible or hidden, so menu items don't have a fixed index number.
*
* During the loop, each menu item checks to see if its line is the current one. If it is,
* then it checks to see if a click has arrived so it can run its action. If the action
* doesn't redirect to another screen then the menu item calls its draw method.
*
* Menu item add-ons can do whatever they like.
*
* This mixture of drawing and processing inside a loop has the advantage that a single
* line can be used to represent a menu item, and that is the rationale for this design.
*
* One of the pitfalls of this method is that DOGM displays call the screen handler 2x,
* 4x, or 8x per screen update to draw just one segment of the screen. As a result, any
* menu item that exists in two screen segments is drawn and processed twice per screen
* update. With each item processed 5, 10, 20, or 40 times the logic has to be simple.
*
* To avoid repetition and side-effects, function calls for testing menu item conditions
* should be done before the menu loop (START_MENU / START_SCREEN).
*/
/**
* SCREEN_OR_MENU_LOOP generates header code for a screen or menu
*
* encoderTopLine is the top menu line to display
* _lcdLineNr is the index of the LCD line (e.g., 0-3)
* _menuLineNr is the menu item to draw and process
* _thisItemNr is the index of each MENU_ITEM or STATIC_ITEM
*/
#define SCREEN_OR_MENU_LOOP(IS_MENU) \
scroll_screen(IS_MENU ? 1 : LCD_HEIGHT, IS_MENU); \
int8_t _menuLineNr = encoderTopLine, _thisItemNr = 0; \
bool _skipStatic = IS_MENU; UNUSED(_thisItemNr); \
for (int8_t _lcdLineNr = 0; _lcdLineNr < LCD_HEIGHT; _lcdLineNr++, _menuLineNr++) { \
_thisItemNr = 0
/**
* START_SCREEN Opening code for a screen having only static items.
* Do simplified scrolling of the entire screen.
*
* START_MENU Opening code for a screen with menu items.
* Scroll as-needed to keep the selected line in view.
*/
#define START_SCREEN() SCREEN_OR_MENU_LOOP(false)
#define START_MENU() SCREEN_OR_MENU_LOOP(true)
#define NEXT_ITEM() (++_thisItemNr)
#define SKIP_ITEM() NEXT_ITEM()
#define END_SCREEN() } screen_items = _thisItemNr
#define END_MENU() END_SCREEN(); UNUSED(_skipStatic)
/**
* MENU_ITEM generates draw & handler code for a menu item, potentially calling:
*
* MenuItem_<type>::draw(sel, row, label, arg3...)
* MenuItem_<type>::action(arg3...)
*
* Examples:
* BACK_ITEM(MSG_INFO_SCREEN)
* MenuItem_back::action(flabel, ...)
* MenuItem_back::draw(sel, row, flabel, ...)
*
* ACTION_ITEM(MSG_PAUSE_PRINT, lcd_sdcard_pause)
* MenuItem_function::action(flabel, lcd_sdcard_pause)
* MenuItem_function::draw(sel, row, flabel, lcd_sdcard_pause)
*
* EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
* MenuItem_int3::action(flabel, &feedrate_percentage, 10, 999)
* MenuItem_int3::draw(sel, row, flabel, &feedrate_percentage, 10, 999)
*/
#if ENABLED(ENCODER_RATE_MULTIPLIER)
#define _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER) do{ if (USE_MULTIPLIER) ui.enable_encoder_multiplier(true); }while(0)
#else
#define _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER)
#endif
#define _MENU_INNER_F(TYPE, USE_MULTIPLIER, FLABEL, V...) do { \
FSTR_P const flabel = FLABEL; \
if (encoderLine == _thisItemNr && ui.use_click()) { \
_MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \
MenuItem_##TYPE::action(flabel, ##V); \
if (ui.screen_changed) return; \
} \
if (ui.should_draw()) \
MenuItem_##TYPE::draw \
(encoderLine == _thisItemNr, _lcdLineNr, flabel, ##V); \
}while(0)
// Item with optional data
#define _MENU_ITEM_F(TYPE, V...) do { \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Item with index value, C-string, and optional data
#define _MENU_ITEM_N_S_F(TYPE, N, S, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(N, S); \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Item with index value and F-string
#define _MENU_ITEM_N_f_F(TYPE, N, f, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(N, f); \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Item with index value
#define _MENU_ITEM_N_F(TYPE, N, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(N); \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Items with a unique string
#define _MENU_ITEM_S_F(TYPE, S, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(0, S); \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Items with a unique F-string
#define _MENU_ITEM_f_F(TYPE, f, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(0, f); \
_MENU_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// STATIC_ITEM draws a styled string with no highlight.
// Parameters: label [, style [, char *value] ]
#define STATIC_ITEM_INNER_F(FLABEL, V...) do{ \
if (_skipStatic && encoderLine <= _thisItemNr) { \
ui.encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \
++encoderLine; \
} \
if (ui.should_draw()) \
MenuItem_static::draw(_lcdLineNr, FLABEL, ##V); \
} while(0)
#define STATIC_ITEM_F(FLABEL, V...) do{ \
if (_menuLineNr == _thisItemNr) \
STATIC_ITEM_INNER_F(FLABEL, ##V); \
NEXT_ITEM(); \
} while(0)
#define STATIC_ITEM_N_F(N, FLABEL, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
MenuItemBase::init(N); \
STATIC_ITEM_INNER_F(FLABEL, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// PSTRING_ITEM is like STATIC_ITEM but it takes
// two PSTRs with the style as the last parameter.
#define PSTRING_ITEM_F(FLABEL, PVAL, STYL) do{ \
constexpr int m = 20; \
char msg[m+1]; \
msg[0] = ':'; msg[1] = ' '; \
strncpy_P(msg+2, PSTR(PVAL), m-2); \
if (msg[m-1] & 0x80) msg[m-1] = '\0'; \
STATIC_ITEM_F(FLABEL, STYL, msg); \
}while(0)
#define PSTRING_ITEM(LABEL, V...) PSTRING_ITEM_F(GET_TEXT_F(LABEL), ##V)
#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_F(GET_TEXT_F(LABEL), ##V)
#define STATIC_ITEM_N(N, LABEL, V...) STATIC_ITEM_N_F(N, GET_TEXT_F(LABEL), ##V)
// Menu item with index and composed C-string substitution
#define MENU_ITEM_N_S_F(TYPE, N, S, FLABEL, V...) _MENU_ITEM_N_S_F(TYPE, N, S, false, FLABEL, ##V)
#define MENU_ITEM_N_S(TYPE, N, S, LABEL, V...) MENU_ITEM_N_S_F(TYPE, N, S, GET_TEXT_F(LABEL), ##V)
// Menu item with composed C-string substitution
#define MENU_ITEM_S_F(TYPE, S, FLABEL, V...) _MENU_ITEM_S_F(TYPE, S, false, FLABEL, ##V)
#define MENU_ITEM_S(TYPE, S, LABEL, V...) MENU_ITEM_S_F(TYPE, S, GET_TEXT_F(LABEL), ##V)
// Menu item substitution, indexed
#define MENU_ITEM_N_F(TYPE, N, FLABEL, V...) _MENU_ITEM_N_F(TYPE, N, false, FLABEL, ##V)
#define MENU_ITEM_N(TYPE, N, LABEL, V...) MENU_ITEM_N_F(TYPE, N, GET_TEXT_F(LABEL), ##V)
// Basic menu items, no substitution
#define MENU_ITEM_F(TYPE, FLABEL, V...) _MENU_ITEM_F(TYPE, false, FLABEL, ##V)
#define MENU_ITEM(TYPE, LABEL, V...) MENU_ITEM_F(TYPE, GET_TEXT_F(LABEL), ##V)
// Predefined menu item types //
#define BACK_ITEM_F(FLABEL) MENU_ITEM_F(back, FLABEL)
#define BACK_ITEM(LABEL) MENU_ITEM(back, LABEL)
#define ACTION_ITEM_N_S_F(N, S, FLABEL, ACTION) MENU_ITEM_N_S_F(function, N, S, FLABEL, ACTION)
#define ACTION_ITEM_N_S(N, S, LABEL, ACTION) ACTION_ITEM_N_S_F(N, S, GET_TEXT_F(LABEL), ACTION)
#define ACTION_ITEM_S_F(S, FLABEL, ACTION) MENU_ITEM_S_F(function, S, FLABEL, ACTION)
#define ACTION_ITEM_S(S, LABEL, ACTION) ACTION_ITEM_S_F(S, GET_TEXT_F(LABEL), ACTION)
#define ACTION_ITEM_N_F(N, FLABEL, ACTION) MENU_ITEM_N_F(function, N, FLABEL, ACTION)
#define ACTION_ITEM_N(N, LABEL, ACTION) ACTION_ITEM_N_F(N, GET_TEXT_F(LABEL), ACTION)
#define ACTION_ITEM_F(FLABEL, ACTION) MENU_ITEM_F(function, FLABEL, ACTION)
#define ACTION_ITEM(LABEL, ACTION) ACTION_ITEM_F(GET_TEXT_F(LABEL), ACTION)
#define GCODES_ITEM_N_S_F(N, S, FLABEL, GCODES) MENU_ITEM_N_S_F(gcode, N, S, FLABEL, GCODES)
#define GCODES_ITEM_N_S(N, S, LABEL, GCODES) GCODES_ITEM_N_S_F(N, S, GET_TEXT_F(LABEL), GCODES)
#define GCODES_ITEM_S_F(S, FLABEL, GCODES) MENU_ITEM_S_F(gcode, S, FLABEL, GCODES)
#define GCODES_ITEM_S(S, LABEL, GCODES) GCODES_ITEM_S_F(S, GET_TEXT_F(LABEL), GCODES)
#define GCODES_ITEM_N_F(N, FLABEL, GCODES) MENU_ITEM_N_F(gcode, N, FLABEL, GCODES)
#define GCODES_ITEM_N(N, LABEL, GCODES) GCODES_ITEM_N_F(N, GET_TEXT_F(LABEL), GCODES)
#define GCODES_ITEM_F(FLABEL, GCODES) MENU_ITEM_F(gcode, FLABEL, GCODES)
#define GCODES_ITEM(LABEL, GCODES) GCODES_ITEM_F(GET_TEXT_F(LABEL), GCODES)
#define SUBMENU_N_S_F(N, S, FLABEL, DEST) MENU_ITEM_N_S_F(submenu, N, S, FLABEL, DEST)
#define SUBMENU_N_S(N, S, LABEL, DEST) SUBMENU_N_S_F(N, S, GET_TEXT_F(LABEL), DEST)
#define SUBMENU_S_F(S, FLABEL, DEST) MENU_ITEM_S_F(submenu, S, FLABEL, DEST)
#define SUBMENU_S(S, LABEL, DEST) SUBMENU_S_F(S, GET_TEXT_F(LABEL), DEST)
#define SUBMENU_N_F(N, FLABEL, DEST) MENU_ITEM_N_F(submenu, N, FLABEL, DEST)
#define SUBMENU_N(N, LABEL, DEST) SUBMENU_N_F(N, GET_TEXT_F(LABEL), DEST)
#define SUBMENU_F(FLABEL, DEST) MENU_ITEM_F(submenu, FLABEL, DEST)
#define SUBMENU(LABEL, DEST) SUBMENU_F(GET_TEXT_F(LABEL), DEST)
#define EDIT_ITEM_N_S_F(TYPE, N, S, FLABEL, V...) MENU_ITEM_N_S_F(TYPE, N, S, FLABEL, ##V)
#define EDIT_ITEM_N_S(TYPE, N, S, LABEL, V...) EDIT_ITEM_N_S_F(TYPE, N, S, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_S_F(TYPE, S, FLABEL, V...) MENU_ITEM_S_F(TYPE, S, FLABEL, ##V)
#define EDIT_ITEM_S(TYPE, S, LABEL, V...) EDIT_ITEM_S_F(TYPE, S, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_N_F(TYPE, N, FLABEL, V...) MENU_ITEM_N_F(TYPE, N, FLABEL, ##V)
#define EDIT_ITEM_N(TYPE, N, LABEL, V...) EDIT_ITEM_N_F(TYPE, N, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_F(TYPE, FLABEL, V...) MENU_ITEM_F(TYPE, FLABEL, ##V)
#define EDIT_ITEM(TYPE, LABEL, V...) EDIT_ITEM_F(TYPE, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_N_S_F(TYPE, N, S, FLABEL, V...) _MENU_ITEM_N_S_F(TYPE, N, S, true, FLABEL, ##V)
#define EDIT_ITEM_FAST_N_S(TYPE, N, S, LABEL, V...) EDIT_ITEM_FAST_N_S_F(TYPE, N, S, true, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_S_F(TYPE, S, FLABEL, V...) _MENU_ITEM_S_F(TYPE, S, true, FLABEL, ##V)
#define EDIT_ITEM_FAST_S(TYPE, S, LABEL, V...) EDIT_ITEM_FAST_S_F(TYPE, S, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_N_F(TYPE, N, FLABEL, V...) _MENU_ITEM_N_F(TYPE, N, true, FLABEL, ##V)
#define EDIT_ITEM_FAST_N(TYPE, N, LABEL, V...) EDIT_ITEM_FAST_N_F(TYPE, N, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_F(TYPE, FLABEL, V...) _MENU_ITEM_F(TYPE, true, FLABEL, ##V)
#define EDIT_ITEM_FAST(TYPE, LABEL, V...) EDIT_ITEM_FAST_F(TYPE, GET_TEXT_F(LABEL), ##V)
// F-string substitution instead of C-string //
#define MENU_ITEM_N_f_F(TYPE, N, f, FLABEL, V...) _MENU_ITEM_N_f_F(TYPE, N, f, false, FLABEL, ##V)
#define MENU_ITEM_N_f(TYPE, N, f, LABEL, V...) MENU_ITEM_N_f_F(TYPE, N, f, GET_TEXT_F(LABEL), ##V)
#define MENU_ITEM_f_F(TYPE, f, FLABEL, V...) _MENU_ITEM_f_F(TYPE, f, false, FLABEL, ##V)
#define MENU_ITEM_f(TYPE, f, LABEL, V...) MENU_ITEM_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
#define ACTION_ITEM_N_f_F(N, f, FLABEL, ACTION) MENU_ITEM_N_f_F(function, N, f, FLABEL, ACTION)
#define ACTION_ITEM_N_f(N, f, LABEL, ACTION) ACTION_ITEM_N_f_F(N, f, GET_TEXT_F(LABEL), ACTION)
#define ACTION_ITEM_f_F(f, FLABEL, ACTION) MENU_ITEM_f_F(function, f, FLABEL, ACTION)
#define ACTION_ITEM_f(f, LABEL, ACTION) ACTION_ITEM_f_F(f, GET_TEXT_F(LABEL), ACTION)
#define GCODES_ITEM_N_f_F(N, f, FLABEL, GCODES) MENU_ITEM_N_f_F(gcode, N, f, FLABEL, GCODES)
#define GCODES_ITEM_N_f(N, f, LABEL, GCODES) GCODES_ITEM_N_f_F(N, f, GET_TEXT_F(LABEL), GCODES)
#define GCODES_ITEM_f_F(f, FLABEL, GCODES) MENU_ITEM_f_F(gcode, f, FLABEL, GCODES)
#define GCODES_ITEM_f(f, LABEL, GCODES) GCODES_ITEM_f_F(f, GET_TEXT_F(LABEL), GCODES)
#define SUBMENU_N_f_F(N, f, FLABEL, DEST) MENU_ITEM_N_f_F(submenu, N, f, FLABEL, DEST)
#define SUBMENU_N_f(N, f, LABEL, DEST) SUBMENU_N_f_F(N, f, GET_TEXT_F(LABEL), DEST)
#define SUBMENU_f_F(f, FLABEL, DEST) MENU_ITEM_f_F(submenu, f, FLABEL, DEST)
#define SUBMENU_f(f, LABEL, DEST) SUBMENU_f_F(f, GET_TEXT_F(LABEL), DEST)
#define EDIT_ITEM_N_f_F(TYPE, N, f, FLABEL, V...) MENU_ITEM_N_f_F(TYPE, N, f, FLABEL, ##V)
#define EDIT_ITEM_N_f(TYPE, N, f, LABEL, V...) EDIT_ITEM_N_f_F(TYPE, N, f, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_f_F(TYPE, f, FLABEL, V...) MENU_ITEM_f_F(TYPE, f, FLABEL, ##V)
#define EDIT_ITEM_f(TYPE, f, LABEL, V...) EDIT_ITEM_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_N_f_F(TYPE, N, f, FLABEL, V...) _MENU_ITEM_N_f_F(TYPE, N, f, true, FLABEL, ##V)
#define EDIT_ITEM_FAST_N_f(TYPE, N, f, LABEL, V...) EDIT_ITEM_FAST_N_f_F(TYPE, N, f, true, GET_TEXT_F(LABEL), ##V)
#define EDIT_ITEM_FAST_f_F(TYPE, f, FLABEL, V...) _MENU_ITEM_f_F(TYPE, f, true, FLABEL, ##V)
#define EDIT_ITEM_FAST_f(TYPE, f, LABEL, V...) EDIT_ITEM_FAST_f_F(TYPE, f, GET_TEXT_F(LABEL), ##V)
#define _CONFIRM_ITEM_INNER_F(FLABEL, V...) do { \
if (encoderLine == _thisItemNr && ui.use_click()) { \
ui.push_current_screen(); \
ui.goto_screen([]{MenuItem_confirm::select_screen(V);}); \
return; \
} \
if (ui.should_draw()) MenuItem_confirm::draw \
(encoderLine == _thisItemNr, _lcdLineNr, FLABEL, ##V); \
}while(0)
// Indexed items set a global index value and optional data
#define _CONFIRM_ITEM_F(FLABEL, V...) do { \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
_CONFIRM_ITEM_INNER_F(FLABEL, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Indexed items set a global index value
#define _CONFIRM_ITEM_N_S_F(N, S, V...) do{ \
if (_menuLineNr == _thisItemNr) { \
_skipStatic = false; \
MenuItemBase::init(N, S); \
_CONFIRM_ITEM_INNER_F(TYPE, ##V); \
} \
NEXT_ITEM(); \
}while(0)
// Indexed items set a global index value
#define _CONFIRM_ITEM_N_F(N, V...) _CONFIRM_ITEM_N_S_F(N, nullptr, V)
#define CONFIRM_ITEM_F(FLABEL,A,B,V...) _CONFIRM_ITEM_F(FLABEL, GET_TEXT_F(A), GET_TEXT_F(B), ##V)
#define CONFIRM_ITEM(LABEL, V...) CONFIRM_ITEM_F(GET_TEXT_F(LABEL), ##V)
#define YESNO_ITEM_F(FLABEL, V...) CONFIRM_ITEM_F(FLABEL, MSG_YES, MSG_NO, ##V)
#define YESNO_ITEM(LABEL, V...) YESNO_ITEM_F(GET_TEXT_F(LABEL), ##V)
#define CONFIRM_ITEM_N_S_F(N,S,FLABEL,A,B,V...) _CONFIRM_ITEM_N_S_F(N, S, FLABEL, GET_TEXT_F(A), GET_TEXT_F(B), ##V)
#define CONFIRM_ITEM_N_S(N,S,LABEL,V...) CONFIRM_ITEM_N_S_F(N, S, GET_TEXT_F(LABEL), ##V)
#define CONFIRM_ITEM_N_F(N,FLABEL,A,B,V...) _CONFIRM_ITEM_N_F(N, FLABEL, GET_TEXT_F(A), GET_TEXT_F(B), ##V)
#define CONFIRM_ITEM_N(N,LABEL, V...) CONFIRM_ITEM_N_F(N, GET_TEXT_F(LABEL), ##V)
#define YESNO_ITEM_N_S_F(N,S,FLABEL, V...) _CONFIRM_ITEM_N_S_F(N, S, FLABEL, MSG_YES, MSG_NO, ##V)
#define YESNO_ITEM_N_S(N,S,LABEL, V...) YESNO_ITEM_N_S_F(N, S, GET_TEXT_F(LABEL), ##V)
#define YESNO_ITEM_N_F(N,FLABEL, V...) CONFIRM_ITEM_N_F(N, FLABEL, MSG_YES, MSG_NO, ##V)
#define YESNO_ITEM_N(N,LABEL, V...) YESNO_ITEM_N_F(N, GET_TEXT_F(LABEL), ##V)
#if ENABLED(LCD_BED_TRAMMING)
void _lcd_level_bed_corners();
#endif
#if HAS_FAN
#include "../../module/temperature.h"
inline void on_fan_update() {
thermalManager.set_fan_speed(MenuItemBase::itemIndex, editable.uint8);
TERN_(LASER_SYNCHRONOUS_M106_M107, planner.buffer_sync_block(BLOCK_BIT_SYNC_FANS));
}
#if ENABLED(EXTRA_FAN_SPEED)
#define EDIT_EXTRA_FAN_SPEED(V...) EDIT_ITEM_FAST_N(V)
#else
#define EDIT_EXTRA_FAN_SPEED(...)
#endif
#define _FAN_EDIT_ITEMS(F,L) do{ \
editable.uint8 = thermalManager.fan_speed[F]; \
EDIT_ITEM_FAST_N(percent, F, MSG_##L, &editable.uint8, 0, 255, on_fan_update); \
EDIT_EXTRA_FAN_SPEED(percent, F, MSG_EXTRA_##L, &thermalManager.extra_fan_speed[F].speed, 3, 255); \
}while(0)
#if FAN_COUNT > 1
#define FAN_EDIT_ITEMS(F) _FAN_EDIT_ITEMS(F,FAN_SPEED_N)
#endif
#define SNFAN(N) (ENABLED(SINGLENOZZLE_STANDBY_FAN) && !HAS_FAN##N && EXTRUDERS > N)
#if SNFAN(1) || SNFAN(2) || SNFAN(3) || SNFAN(4) || SNFAN(5) || SNFAN(6) || SNFAN(7)
#define DEFINE_SINGLENOZZLE_ITEM() \
auto singlenozzle_item = [&](const uint8_t f) { \
editable.uint8 = thermalManager.singlenozzle_fan_speed[f]; \
EDIT_ITEM_FAST_N(percent, f, MSG_STORED_FAN_N, &editable.uint8, 0, 255, on_fan_update); \
}
#else
#define DEFINE_SINGLENOZZLE_ITEM() NOOP
#endif
#endif // HAS_FAN

View File

@ -0,0 +1,57 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Job Recovery Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, POWER_LOSS_RECOVERY)
#include "menu_item.h"
#include "../../gcode/queue.h"
#include "../../sd/cardreader.h"
#include "../../feature/powerloss.h"
static void lcd_power_loss_recovery_resume() {
ui.return_to_status();
queue.inject(F("M1000"));
}
void lcd_power_loss_recovery_cancel() {
recovery.cancel();
ui.return_to_status();
}
// TODO: Display long filename with Cancel/Resume buttons
// Requires supporting methods in PLR class.
void menu_job_recovery() {
ui.defer_status_screen();
START_MENU();
STATIC_ITEM(MSG_OUTAGE_RECOVERY);
ACTION_ITEM(MSG_RESUME_PRINT, lcd_power_loss_recovery_resume);
ACTION_ITEM(MSG_STOP_PRINT, lcd_power_loss_recovery_cancel);
END_MENU();
}
#endif // HAS_MARLINUI_MENU && POWER_LOSS_RECOVERY

View File

@ -0,0 +1,59 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Language Selection Menu
//
#include "../../inc/MarlinConfig.h"
#if HAS_MULTI_LANGUAGE
#include "menu_item.h"
#include "../../MarlinCore.h"
#include "../../module/settings.h"
static void set_lcd_language(const uint8_t inlang) {
ui.set_language(inlang);
TERN_(LCD_LANGUAGE_AUTO_SAVE, (void)settings.save());
}
void menu_language() {
START_MENU();
BACK_ITEM(MSG_MAIN);
MENU_ITEM_F(function, FPSTR(GET_LANGUAGE_NAME(1)), []{ set_lcd_language(0); });
MENU_ITEM_F(function, FPSTR(GET_LANGUAGE_NAME(2)), []{ set_lcd_language(1); });
#if NUM_LANGUAGES > 2
MENU_ITEM_F(function, FPSTR(GET_LANGUAGE_NAME(3)), []{ set_lcd_language(2); });
#if NUM_LANGUAGES > 3
MENU_ITEM_F(function, FPSTR(GET_LANGUAGE_NAME(4)), []{ set_lcd_language(3); });
#if NUM_LANGUAGES > 4
MENU_ITEM_F(function, FPSTR(GET_LANGUAGE_NAME(5)), []{ set_lcd_language(4); });
#endif
#endif
#endif
END_MENU();
}
#endif // HAS_MULTI_LANGUAGE

172
src/lcd/menu/menu_led.cpp Normal file
View File

@ -0,0 +1,172 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// LED Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU && EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU)
#include "menu_item.h"
#if ENABLED(PSU_CONTROL)
#include "../../feature/power.h"
#endif
#if ENABLED(LED_CONTROL_MENU)
#include "../../feature/leds/leds.h"
#if ENABLED(LED_COLOR_PRESETS)
void menu_led_presets() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_LED_PRESETS, SS_DEFAULT|SS_INVERT);
#endif
BACK_ITEM(MSG_LED_CONTROL);
ACTION_ITEM(MSG_SET_LEDS_WHITE, leds.set_white);
ACTION_ITEM(MSG_SET_LEDS_RED, leds.set_red);
ACTION_ITEM(MSG_SET_LEDS_ORANGE, leds.set_orange);
ACTION_ITEM(MSG_SET_LEDS_YELLOW, leds.set_yellow);
ACTION_ITEM(MSG_SET_LEDS_GREEN, leds.set_green);
ACTION_ITEM(MSG_SET_LEDS_BLUE, leds.set_blue);
ACTION_ITEM(MSG_SET_LEDS_INDIGO, leds.set_indigo);
ACTION_ITEM(MSG_SET_LEDS_VIOLET, leds.set_violet);
END_MENU();
}
#endif
#if ENABLED(NEO2_COLOR_PRESETS)
void menu_leds2_presets() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_NEO2_PRESETS, SS_DEFAULT|SS_INVERT);
#endif
BACK_ITEM(MSG_LED_CONTROL);
ACTION_ITEM(MSG_SET_LEDS_WHITE, leds2.set_white);
ACTION_ITEM(MSG_SET_LEDS_RED, leds2.set_red);
ACTION_ITEM(MSG_SET_LEDS_ORANGE, leds2.set_orange);
ACTION_ITEM(MSG_SET_LEDS_YELLOW, leds2.set_yellow);
ACTION_ITEM(MSG_SET_LEDS_GREEN, leds2.set_green);
ACTION_ITEM(MSG_SET_LEDS_BLUE, leds2.set_blue);
ACTION_ITEM(MSG_SET_LEDS_INDIGO, leds2.set_indigo);
ACTION_ITEM(MSG_SET_LEDS_VIOLET, leds2.set_violet);
END_MENU();
}
#endif
void menu_led_custom() {
START_MENU();
BACK_ITEM(MSG_LED_CONTROL);
#if ENABLED(NEOPIXEL2_SEPARATE)
STATIC_ITEM_N(1, MSG_LED_CHANNEL_N, SS_DEFAULT|SS_INVERT);
#endif
EDIT_ITEM(uint8, MSG_INTENSITY_R, &leds.color.r, 0, 255, leds.update, true);
EDIT_ITEM(uint8, MSG_INTENSITY_G, &leds.color.g, 0, 255, leds.update, true);
EDIT_ITEM(uint8, MSG_INTENSITY_B, &leds.color.b, 0, 255, leds.update, true);
#if HAS_WHITE_LED
EDIT_ITEM(uint8, MSG_INTENSITY_W, &leds.color.w, 0, 255, leds.update, true);
#endif
#if ENABLED(NEOPIXEL_LED)
EDIT_ITEM(uint8, MSG_LED_BRIGHTNESS, &leds.color.i, 0, 255, leds.update, true);
#endif
#if ENABLED(NEOPIXEL2_SEPARATE)
STATIC_ITEM_N(2, MSG_LED_CHANNEL_N, SS_DEFAULT|SS_INVERT);
EDIT_ITEM(uint8, MSG_INTENSITY_R, &leds2.color.r, 0, 255, leds2.update, true);
EDIT_ITEM(uint8, MSG_INTENSITY_G, &leds2.color.g, 0, 255, leds2.update, true);
EDIT_ITEM(uint8, MSG_INTENSITY_B, &leds2.color.b, 0, 255, leds2.update, true);
#if HAS_WHITE_LED2
EDIT_ITEM(uint8, MSG_INTENSITY_W, &leds2.color.w, 0, 255, leds2.update, true);
#endif
EDIT_ITEM(uint8, MSG_NEO2_BRIGHTNESS, &leds2.color.i, 0, 255, leds2.update, true);
#endif
END_MENU();
}
#endif
#if ENABLED(CASE_LIGHT_MENU)
#include "../../feature/caselight.h"
#define CASELIGHT_TOGGLE_ITEM() EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&caselight.on, caselight.update_enabled)
#if CASELIGHT_USES_BRIGHTNESS
void menu_case_light() {
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
EDIT_ITEM(percent, MSG_CASE_LIGHT_BRIGHTNESS, &caselight.brightness, 0, 255, caselight.update_brightness, true);
CASELIGHT_TOGGLE_ITEM();
END_MENU();
}
#endif
#endif
void menu_led() {
START_MENU();
BACK_ITEM(MSG_MAIN);
#if ENABLED(LED_CONTROL_MENU)
if (TERN1(PSU_CONTROL, powerManager.psu_on)) {
editable.state = leds.lights_on;
EDIT_ITEM(bool, MSG_LEDS, &editable.state, leds.toggle);
}
#if ENABLED(LED_COLOR_PRESETS)
ACTION_ITEM(MSG_SET_LEDS_DEFAULT, leds.set_default);
#endif
#if ENABLED(NEOPIXEL2_SEPARATE)
editable.state = leds2.lights_on;
EDIT_ITEM(bool, MSG_LEDS2, &editable.state, leds2.toggle);
#if ENABLED(NEO2_COLOR_PRESETS)
ACTION_ITEM(MSG_SET_LEDS_DEFAULT, leds2.set_default);
#endif
#endif
#if ENABLED(LED_COLOR_PRESETS)
SUBMENU(MSG_LED_PRESETS, menu_led_presets);
#endif
#if ENABLED(NEO2_COLOR_PRESETS)
SUBMENU(MSG_NEO2_PRESETS, menu_leds2_presets);
#endif
SUBMENU(MSG_CUSTOM_LEDS, menu_led_custom);
#endif
//
// Set Case light on/off/brightness
//
#if ENABLED(CASE_LIGHT_MENU)
#if CASELIGHT_USES_BRIGHTNESS
if (caselight.has_brightness())
SUBMENU(MSG_CASE_LIGHT, menu_case_light);
else
#endif
CASELIGHT_TOGGLE_ITEM();
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && LED_CONTROL_MENU

464
src/lcd/menu/menu_main.cpp Normal file
View File

@ -0,0 +1,464 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Main Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#include "menu_item.h"
#include "../../module/temperature.h"
#include "../../gcode/queue.h"
#include "../../module/printcounter.h"
#include "../../module/stepper.h"
#include "../../sd/cardreader.h"
#if ENABLED(PSU_CONTROL)
#include "../../feature/power.h"
#endif
#if HAS_GAMES && DISABLED(LCD_INFO_MENU)
#include "game/game.h"
#endif
#if EITHER(SDSUPPORT, HOST_PROMPT_SUPPORT) || defined(ACTION_ON_CANCEL)
#define MACHINE_CAN_STOP 1
#endif
#if ANY(SDSUPPORT, HOST_PROMPT_SUPPORT, PARK_HEAD_ON_PAUSE) || defined(ACTION_ON_PAUSE)
#define MACHINE_CAN_PAUSE 1
#endif
#if ENABLED(MMU2_MENUS)
#include "menu_mmu2.h"
#endif
#if ENABLED(PASSWORD_FEATURE)
#include "../../feature/password/password.h"
#endif
#if (ENABLED(HOST_START_MENU_ITEM) && defined(ACTION_ON_START)) || (ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION))
#include "../../feature/host_actions.h"
#endif
#if ENABLED(GCODE_REPEAT_MARKERS)
#include "../../feature/repeat.h"
#endif
void menu_tune();
void menu_cancelobject();
void menu_motion();
void menu_temperature();
void menu_configuration();
#if HAS_POWER_MONITOR
void menu_power_monitor();
#endif
#if ENABLED(MIXING_EXTRUDER)
void menu_mixer();
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
void menu_change_filament();
#endif
#if ENABLED(LCD_INFO_MENU)
void menu_info();
#endif
#if EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU)
void menu_led();
#endif
#if HAS_CUTTER
void menu_spindle_laser();
#endif
#if ENABLED(PREHEAT_SHORTCUT_MENU_ITEM)
void menu_preheat_only();
#endif
#if HAS_MULTI_LANGUAGE
void menu_language();
#endif
#if ENABLED(CUSTOM_MENU_MAIN)
void _lcd_custom_menu_main_gcode(FSTR_P const fstr) {
queue.inject(fstr);
TERN_(CUSTOM_MENU_MAIN_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
TERN_(CUSTOM_MENU_MAIN_SCRIPT_RETURN, ui.return_to_status());
}
void custom_menus_main() {
START_MENU();
BACK_ITEM(MSG_MAIN);
#define HAS_CUSTOM_ITEM_MAIN(N) (defined(MAIN_MENU_ITEM_##N##_DESC) && defined(MAIN_MENU_ITEM_##N##_GCODE))
#ifdef CUSTOM_MENU_MAIN_SCRIPT_DONE
#define _DONE_SCRIPT "\n" CUSTOM_MENU_MAIN_SCRIPT_DONE
#else
#define _DONE_SCRIPT ""
#endif
#define GCODE_LAMBDA_MAIN(N) []{ _lcd_custom_menu_main_gcode(F(MAIN_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
#define _CUSTOM_ITEM_MAIN(N) ACTION_ITEM_F(F(MAIN_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_MAIN(N));
#define _CUSTOM_ITEM_MAIN_CONFIRM(N) \
SUBMENU_F(F(MAIN_MENU_ITEM_##N##_DESC), []{ \
MenuItem_confirm::confirm_screen( \
GCODE_LAMBDA_MAIN(N), nullptr, \
F(MAIN_MENU_ITEM_##N##_DESC "?") \
); \
})
#define CUSTOM_ITEM_MAIN(N) do{ \
constexpr char c = MAIN_MENU_ITEM_##N##_GCODE[strlen(MAIN_MENU_ITEM_##N##_GCODE) - 1]; \
static_assert(c != '\n' && c != '\r', "MAIN_MENU_ITEM_" STRINGIFY(N) "_GCODE cannot have a newline at the end. Please remove it."); \
if (ENABLED(MAIN_MENU_ITEM_##N##_CONFIRM)) \
_CUSTOM_ITEM_MAIN_CONFIRM(N); \
else \
_CUSTOM_ITEM_MAIN(N); \
}while(0)
#if HAS_CUSTOM_ITEM_MAIN(1)
CUSTOM_ITEM_MAIN(1);
#endif
#if HAS_CUSTOM_ITEM_MAIN(2)
CUSTOM_ITEM_MAIN(2);
#endif
#if HAS_CUSTOM_ITEM_MAIN(3)
CUSTOM_ITEM_MAIN(3);
#endif
#if HAS_CUSTOM_ITEM_MAIN(4)
CUSTOM_ITEM_MAIN(4);
#endif
#if HAS_CUSTOM_ITEM_MAIN(5)
CUSTOM_ITEM_MAIN(5);
#endif
#if HAS_CUSTOM_ITEM_MAIN(6)
CUSTOM_ITEM_MAIN(6);
#endif
#if HAS_CUSTOM_ITEM_MAIN(7)
CUSTOM_ITEM_MAIN(7);
#endif
#if HAS_CUSTOM_ITEM_MAIN(8)
CUSTOM_ITEM_MAIN(8);
#endif
#if HAS_CUSTOM_ITEM_MAIN(9)
CUSTOM_ITEM_MAIN(9);
#endif
#if HAS_CUSTOM_ITEM_MAIN(10)
CUSTOM_ITEM_MAIN(10);
#endif
#if HAS_CUSTOM_ITEM_MAIN(11)
CUSTOM_ITEM_MAIN(11);
#endif
#if HAS_CUSTOM_ITEM_MAIN(12)
CUSTOM_ITEM_MAIN(12);
#endif
#if HAS_CUSTOM_ITEM_MAIN(13)
CUSTOM_ITEM_MAIN(13);
#endif
#if HAS_CUSTOM_ITEM_MAIN(14)
CUSTOM_ITEM_MAIN(14);
#endif
#if HAS_CUSTOM_ITEM_MAIN(15)
CUSTOM_ITEM_MAIN(15);
#endif
#if HAS_CUSTOM_ITEM_MAIN(16)
CUSTOM_ITEM_MAIN(16);
#endif
#if HAS_CUSTOM_ITEM_MAIN(17)
CUSTOM_ITEM_MAIN(17);
#endif
#if HAS_CUSTOM_ITEM_MAIN(18)
CUSTOM_ITEM_MAIN(18);
#endif
#if HAS_CUSTOM_ITEM_MAIN(19)
CUSTOM_ITEM_MAIN(19);
#endif
#if HAS_CUSTOM_ITEM_MAIN(20)
CUSTOM_ITEM_MAIN(20);
#endif
#if HAS_CUSTOM_ITEM_MAIN(21)
CUSTOM_ITEM_MAIN(21);
#endif
#if HAS_CUSTOM_ITEM_MAIN(22)
CUSTOM_ITEM_MAIN(22);
#endif
#if HAS_CUSTOM_ITEM_MAIN(23)
CUSTOM_ITEM_MAIN(23);
#endif
#if HAS_CUSTOM_ITEM_MAIN(24)
CUSTOM_ITEM_MAIN(24);
#endif
#if HAS_CUSTOM_ITEM_MAIN(25)
CUSTOM_ITEM_MAIN(25);
#endif
END_MENU();
}
#endif // CUSTOM_MENU_MAIN
void menu_main() {
const bool busy = printingIsActive()
#if ENABLED(SDSUPPORT)
, card_detected = card.isMounted()
, card_open = card_detected && card.isFileOpen()
#endif
;
START_MENU();
BACK_ITEM(MSG_INFO_SCREEN);
#if ENABLED(SDSUPPORT)
#if !defined(MEDIA_MENU_AT_TOP) && !HAS_ENCODER_WHEEL
#define MEDIA_MENU_AT_TOP
#endif
auto sdcard_menu_items = [&]{
#if ENABLED(MENU_ADDAUTOSTART)
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
#endif
if (card_detected) {
if (!card_open) {
#if HAS_SD_DETECT
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21")); // M21 Change Media
#else // - or -
ACTION_ITEM(MSG_RELEASE_MEDIA, []{ // M22 Release Media
queue.inject(F("M22"));
#if ENABLED(TFT_COLOR_UI)
// Menu display issue on item removal with multi language selection menu
if (encoderTopLine > 0) encoderTopLine--;
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
#endif
});
#endif
SUBMENU(MSG_MEDIA_MENU, MEDIA_MENU_GATEWAY); // Media Menu (or Password First)
}
}
else {
#if HAS_SD_DETECT
ACTION_ITEM(MSG_NO_MEDIA, nullptr); // "No Media"
#else
GCODES_ITEM(MSG_ATTACH_MEDIA, F("M21")); // M21 Attach Media
#endif
}
};
#endif
if (busy) {
#if MACHINE_CAN_PAUSE
ACTION_ITEM(MSG_PAUSE_PRINT, ui.pause_print);
#endif
#if MACHINE_CAN_STOP
SUBMENU(MSG_STOP_PRINT, []{
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_STOP), GET_TEXT_F(MSG_BACK),
ui.abort_print, nullptr,
GET_TEXT_F(MSG_STOP_PRINT), (const char *)nullptr, F("?")
);
});
#endif
#if ENABLED(GCODE_REPEAT_MARKERS)
if (repeat.is_active())
ACTION_ITEM(MSG_END_LOOPS, repeat.cancel);
#endif
SUBMENU(MSG_TUNE, menu_tune);
#if ENABLED(CANCEL_OBJECTS) && DISABLED(SLIM_LCD_MENUS)
SUBMENU(MSG_CANCEL_OBJECT, []{ editable.int8 = -1; ui.goto_screen(menu_cancelobject); });
#endif
}
else {
#if BOTH(SDSUPPORT, MEDIA_MENU_AT_TOP)
sdcard_menu_items();
#endif
if (TERN0(MACHINE_CAN_PAUSE, printingIsPaused()))
ACTION_ITEM(MSG_RESUME_PRINT, ui.resume_print);
#if ENABLED(HOST_START_MENU_ITEM) && defined(ACTION_ON_START)
ACTION_ITEM(MSG_HOST_START_PRINT, hostui.start);
#endif
#if ENABLED(PREHEAT_SHORTCUT_MENU_ITEM)
SUBMENU(MSG_PREHEAT_CUSTOM, menu_preheat_only);
#endif
SUBMENU(MSG_MOTION, menu_motion);
}
#if HAS_CUTTER
SUBMENU(MSG_CUTTER(MENU), STICKY_SCREEN(menu_spindle_laser));
#endif
#if HAS_TEMPERATURE
SUBMENU(MSG_TEMPERATURE, menu_temperature);
#endif
#if HAS_POWER_MONITOR
SUBMENU(MSG_POWER_MONITOR, menu_power_monitor);
#endif
#if ENABLED(MIXING_EXTRUDER)
SUBMENU(MSG_MIXER, menu_mixer);
#endif
#if ENABLED(MMU2_MENUS)
if (!busy) SUBMENU(MSG_MMU2_MENU, menu_mmu2);
#endif
SUBMENU(MSG_CONFIGURATION, menu_configuration);
#if ENABLED(CUSTOM_MENU_MAIN)
if (TERN1(CUSTOM_MENU_MAIN_ONLY_IDLE, !busy)) {
#ifdef CUSTOM_MENU_MAIN_TITLE
SUBMENU_F(F(CUSTOM_MENU_MAIN_TITLE), custom_menus_main);
#else
SUBMENU(MSG_CUSTOM_COMMANDS, custom_menus_main);
#endif
}
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#if E_STEPPERS == 1 && DISABLED(FILAMENT_LOAD_UNLOAD_GCODES)
YESNO_ITEM(MSG_FILAMENTCHANGE,
menu_change_filament, nullptr,
GET_TEXT_F(MSG_FILAMENTCHANGE), (const char *)nullptr, F("?")
);
#else
SUBMENU(MSG_FILAMENTCHANGE, menu_change_filament);
#endif
#endif
#if ENABLED(LCD_INFO_MENU)
SUBMENU(MSG_INFO_MENU, menu_info);
#endif
#if EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU)
SUBMENU(MSG_LEDS, menu_led);
#endif
//
// Switch power on/off
//
#if ENABLED(PSU_CONTROL)
if (powerManager.psu_on)
#if ENABLED(PS_OFF_CONFIRM)
CONFIRM_ITEM(MSG_SWITCH_PS_OFF,
MSG_YES, MSG_NO,
ui.poweroff, nullptr,
GET_TEXT_F(MSG_SWITCH_PS_OFF), (const char *)nullptr, F("?")
);
#else
ACTION_ITEM(MSG_SWITCH_PS_OFF, ui.poweroff);
#endif
else
GCODES_ITEM(MSG_SWITCH_PS_ON, F("M80"));
#endif
#if ENABLED(SDSUPPORT) && DISABLED(MEDIA_MENU_AT_TOP)
sdcard_menu_items();
#endif
#if HAS_SERVICE_INTERVALS
static auto _service_reset = [](const int index) {
print_job_timer.resetServiceInterval(index);
ui.completion_feedback();
ui.reset_status();
ui.return_to_status();
};
#if SERVICE_INTERVAL_1 > 0
CONFIRM_ITEM_F(F(SERVICE_NAME_1),
MSG_BUTTON_RESET, MSG_BUTTON_CANCEL,
[]{ _service_reset(1); }, nullptr,
GET_TEXT_F(MSG_SERVICE_RESET), F(SERVICE_NAME_1), F("?")
);
#endif
#if SERVICE_INTERVAL_2 > 0
CONFIRM_ITEM_F(F(SERVICE_NAME_2),
MSG_BUTTON_RESET, MSG_BUTTON_CANCEL,
[]{ _service_reset(2); }, nullptr,
GET_TEXT_F(MSG_SERVICE_RESET), F(SERVICE_NAME_2), F("?")
);
#endif
#if SERVICE_INTERVAL_3 > 0
CONFIRM_ITEM_F(F(SERVICE_NAME_3),
MSG_BUTTON_RESET, MSG_BUTTON_CANCEL,
[]{ _service_reset(3); }, nullptr,
GET_TEXT_F(MSG_SERVICE_RESET), F(SERVICE_NAME_3), F("?")
);
#endif
#endif
#if HAS_GAMES && DISABLED(LCD_INFO_MENU)
#if ENABLED(GAMES_EASTER_EGG)
SKIP_ITEM();
SKIP_ITEM();
SKIP_ITEM();
#endif
// Game sub-menu or the individual game
{
SUBMENU(
#if HAS_GAME_MENU
MSG_GAMES, menu_game
#elif ENABLED(MARLIN_BRICKOUT)
MSG_BRICKOUT, brickout.enter_game
#elif ENABLED(MARLIN_INVADERS)
MSG_INVADERS, invaders.enter_game
#elif ENABLED(MARLIN_SNAKE)
MSG_SNAKE, snake.enter_game
#elif ENABLED(MARLIN_MAZE)
MSG_MAZE, maze.enter_game
#endif
);
}
#endif
#if HAS_MULTI_LANGUAGE
SUBMENU(LANGUAGE, menu_language);
#endif
#if ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION)
SUBMENU(MSG_HOST_SHUTDOWN, []{
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_PROCEED), GET_TEXT_F(MSG_BUTTON_CANCEL),
[]{ ui.return_to_status(); hostui.shutdown(); }, nullptr,
GET_TEXT_F(MSG_HOST_SHUTDOWN), (const char *)nullptr, F("?")
);
});
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU

164
src/lcd/menu/menu_media.cpp Normal file
View File

@ -0,0 +1,164 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// SD Card Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, SDSUPPORT)
#include "menu_item.h"
#include "../../sd/cardreader.h"
void lcd_sd_updir() {
ui.encoderPosition = card.cdup() ? ENCODER_STEPS_PER_MENU_ITEM : 0;
encoderTopLine = 0;
ui.screen_changed = true;
ui.refresh();
}
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
uint16_t sd_encoder_position = 0xFFFF;
int8_t sd_top_line, sd_items;
void MarlinUI::reselect_last_file() {
if (sd_encoder_position == 0xFFFF) return;
goto_screen(menu_media, sd_encoder_position, sd_top_line, sd_items);
sd_encoder_position = 0xFFFF;
defer_status_screen();
TERN_(HAS_TOUCH_SLEEP, ui.wakeup_screen());
}
#endif
inline void sdcard_start_selected_file() {
card.openAndPrintFile(card.filename);
ui.return_to_status();
ui.reset_status();
}
class MenuItem_sdfile : public MenuItem_sdbase {
public:
static inline void draw(const bool sel, const uint8_t row, FSTR_P const fstr, CardReader &theCard) {
MenuItem_sdbase::draw(sel, row, fstr, theCard, false);
}
static void action(FSTR_P const fstr, CardReader &) {
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
// Save menu state for the selected file
sd_encoder_position = ui.encoderPosition;
sd_top_line = encoderTopLine;
sd_items = screen_items;
#endif
#if ENABLED(SD_MENU_CONFIRM_START)
MenuItem_submenu::action(fstr, []{
char * const longest = card.longest_filename();
char buffer[strlen(longest) + 2];
buffer[0] = ' ';
strcpy(buffer + 1, longest);
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_PRINT), GET_TEXT_F(MSG_BUTTON_CANCEL),
sdcard_start_selected_file, nullptr,
GET_TEXT_F(MSG_START_PRINT), buffer, F("?")
);
});
#else
sdcard_start_selected_file();
UNUSED(fstr);
#endif
}
};
class MenuItem_sdfolder : public MenuItem_sdbase {
public:
static inline void draw(const bool sel, const uint8_t row, FSTR_P const fstr, CardReader &theCard) {
MenuItem_sdbase::draw(sel, row, fstr, theCard, true);
}
static void action(FSTR_P const, CardReader &theCard) {
card.cd(theCard.filename);
encoderTopLine = 0;
ui.encoderPosition = 2 * (ENCODER_STEPS_PER_MENU_ITEM);
ui.screen_changed = true;
TERN_(HAS_MARLINUI_U8GLIB, ui.drawing_screen = false);
ui.refresh();
}
};
void menu_media_filelist() {
ui.encoder_direction_menus();
#if HAS_MARLINUI_U8GLIB
static uint16_t fileCnt;
if (ui.first_page) fileCnt = card.get_num_Files();
#else
const uint16_t fileCnt = card.get_num_Files();
#endif
START_MENU();
#if ENABLED(MULTI_VOLUME)
ACTION_ITEM(MSG_BACK, []{ ui.goto_screen(menu_media); });
#else
BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN) : GET_TEXT_F(MSG_BACK));
#endif
if (card.flag.workDirIsRoot) {
#if !HAS_SD_DETECT
ACTION_ITEM(MSG_REFRESH, []{ encoderTopLine = 0; card.mount(); });
#endif
}
else if (card.isMounted())
ACTION_ITEM_F(F(LCD_STR_FOLDER " .."), lcd_sd_updir);
if (ui.should_draw()) for (uint16_t i = 0; i < fileCnt; i++) {
if (_menuLineNr == _thisItemNr) {
card.getfilename_sorted(SD_ORDER(i, fileCnt));
if (card.flag.filenameIsDir)
MENU_ITEM(sdfolder, MSG_MEDIA_MENU, card);
else
MENU_ITEM(sdfile, MSG_MEDIA_MENU, card);
}
else
SKIP_ITEM();
}
END_MENU();
}
#if ENABLED(MULTI_VOLUME)
void menu_media_select() {
START_MENU();
BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN) : GET_TEXT_F(MSG_BACK));
#if ENABLED(VOLUME_SD_ONBOARD)
ACTION_ITEM(MSG_SD_CARD, []{ card.changeMedia(&card.media_driver_sdcard); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
#if ENABLED(VOLUME_USB_FLASH_DRIVE)
ACTION_ITEM(MSG_USB_DISK, []{ card.changeMedia(&card.media_driver_usbFlash); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
END_MENU();
}
#endif
void menu_media() {
TERN(MULTI_VOLUME, menu_media_select, menu_media_filelist)();
}
#endif // HAS_MARLINUI_MENU && SDSUPPORT

278
src/lcd/menu/menu_mixer.cpp Normal file
View File

@ -0,0 +1,278 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Mixer Menu
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, MIXING_EXTRUDER)
#include "menu_item.h"
#include "menu_addon.h"
#include "../../feature/mixing.h"
#if HAS_GRAPHICAL_TFT
#include "../tft/tft.h"
#endif
#define CHANNEL_MIX_EDITING !HAS_DUAL_MIXING
#if ENABLED(GRADIENT_MIX)
void _lcd_mixer_gradient_z_edit(const bool isend) {
ui.defer_status_screen();
ENCODER_RATE_MULTIPLY(true);
float &zvar = isend ? mixer.gradient.end_z : mixer.gradient.start_z;
if (ui.encoderPosition) {
zvar += float(int32_t(ui.encoderPosition)) * 0.1;
ui.encoderPosition = 0;
NOLESS(zvar, 0);
NOMORE(zvar, Z_MAX_POS);
}
if (ui.should_draw()) {
char tmp[16];
SETCURSOR(1, (LCD_HEIGHT - 1) / 2);
lcd_put_u8str(isend ? GET_TEXT_F(MSG_END_Z) : GET_TEXT_F(MSG_START_Z));
sprintf_P(tmp, PSTR("%4d.%d mm"), int(zvar), int(zvar * 10) % 10);
SETCURSOR_RJ(9, (LCD_HEIGHT - 1) / 2);
lcd_put_u8str(tmp);
}
if (ui.lcd_clicked) {
if (isend && zvar < mixer.gradient.start_z)
mixer.gradient.start_z = zvar;
else if (!isend && zvar > mixer.gradient.end_z)
mixer.gradient.end_z = zvar;
mixer.refresh_gradient();
ui.goto_previous_screen();
}
else {
TERN_(HAS_GRAPHICAL_TFT, tft.draw_edit_screen_buttons());
}
}
void lcd_mixer_edit_gradient_menu() {
START_MENU();
BACK_ITEM(MSG_MIXER);
EDIT_ITEM(int8, MSG_START_VTOOL, &mixer.gradient.start_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
EDIT_ITEM(int8, MSG_END_VTOOL, &mixer.gradient.end_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
#if ENABLED(GRADIENT_VTOOL)
EDIT_ITEM(int8, MSG_GRADIENT_ALIAS, &mixer.gradient.vtool_index, -1, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
#endif
char tmp[18];
FSTR_P const slabel = GET_TEXT_F(MSG_START_Z);
SUBMENU_F(slabel, []{ _lcd_mixer_gradient_z_edit(false); });
MENU_ITEM_ADDON_START_RJ(11);
sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
FSTR_P const elabel = GET_TEXT_F(MSG_END_Z);
SUBMENU_F(elabel, []{ _lcd_mixer_gradient_z_edit(true); });
MENU_ITEM_ADDON_START_RJ(11);
sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
END_MENU();
}
#endif // GRADIENT_MIX
static uint8_t v_index;
#if HAS_DUAL_MIXING
void _lcd_draw_mix(const uint8_t y) {
char tmp[20]; // "100%_100%"
sprintf_P(tmp, PSTR("%3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
SETCURSOR(2, y); lcd_put_u8str(GET_TEXT_F(MSG_MIX));
SETCURSOR_RJ(10, y); lcd_put_u8str(tmp);
}
#endif
void _lcd_mixer_select_vtool() {
mixer.T(v_index);
TERN_(HAS_DUAL_MIXING, _lcd_draw_mix(LCD_HEIGHT - 1));
}
#if CHANNEL_MIX_EDITING
void _lcd_mixer_cycle_mix() {
uint16_t bits = 0;
MIXER_STEPPER_LOOP(i) if (mixer.collector[i]) SBI(bits, i);
bits = (bits + 1) & (_BV(MIXING_STEPPERS) - 1);
if (!bits) ++bits;
MIXER_STEPPER_LOOP(i) mixer.collector[i] = TEST(bits, i) ? 10.0f : 0.0f;
ui.refresh();
}
void _lcd_mixer_commit_vtool() {
mixer.normalize();
ui.goto_previous_screen();
}
#endif
void lcd_mixer_mix_edit() {
#if HAS_DUAL_MIXING && !CHANNEL_MIX_EDITING
// Adjust 2-channel mix from the encoder
if (ui.encoderPosition) {
mixer.mix[0] += int32_t(ui.encoderPosition);
ui.encoderPosition = 0;
if (mixer.mix[0] < 0) mixer.mix[0] += 101;
if (mixer.mix[0] > 100) mixer.mix[0] -= 101;
mixer.mix[1] = 100 - mixer.mix[0];
}
_lcd_draw_mix((LCD_HEIGHT - 1) / 2);
// Click to commit the change
if (ui.lcd_clicked) {
mixer.update_vtool_from_mix();
ui.goto_previous_screen();
}
TERN_(HAS_GRAPHICAL_TFT, tft.draw_edit_screen_buttons());
#else
START_MENU();
BACK_ITEM(MSG_MIXER);
#if CHANNEL_MIX_EDITING
LOOP_S_LE_N(n, 1, MIXING_STEPPERS)
EDIT_ITEM_FAST_N(float42_52, n, MSG_MIX_COMPONENT_N, &mixer.collector[n-1], 0, 10);
ACTION_ITEM(MSG_CYCLE_MIX, _lcd_mixer_cycle_mix);
ACTION_ITEM(MSG_COMMIT_VTOOL, _lcd_mixer_commit_vtool);
#endif
END_MENU();
#endif
}
#if HAS_DUAL_MIXING
//
// Toggle Dual-Mix
//
inline void _lcd_mixer_toggle_mix() {
mixer.mix[0] = mixer.mix[0] == 100 ? 0 : 100;
mixer.mix[1] = 100 - mixer.mix[0];
mixer.update_vtool_from_mix();
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
#endif
#if CHANNEL_MIX_EDITING
//
// Prepare and Edit Mix
//
inline void _lcd_goto_mix_edit() {
mixer.refresh_collector(10, v_index);
ui.goto_screen(lcd_mixer_mix_edit);
lcd_mixer_mix_edit();
}
#endif
#if ENABLED(GRADIENT_MIX)
//
// Reverse Gradient
//
inline void _lcd_mixer_reverse_gradient() {
const uint8_t sv = mixer.gradient.start_vtool;
mixer.gradient.start_vtool = mixer.gradient.end_vtool;
mixer.gradient.end_vtool = sv;
mixer.refresh_gradient();
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
#endif
void menu_mixer() {
START_MENU();
BACK_ITEM(MSG_MAIN);
v_index = mixer.get_current_vtool();
EDIT_ITEM(uint8, MSG_ACTIVE_VTOOL, &v_index, 0, MIXING_VIRTUAL_TOOLS - 1, _lcd_mixer_select_vtool, ENABLED(HAS_DUAL_MIXING));
#if HAS_DUAL_MIXING
{
char tmp[11];
SUBMENU(MSG_MIX, lcd_mixer_mix_edit);
MENU_ITEM_ADDON_START_RJ(9);
mixer.update_mix_from_vtool();
sprintf_P(tmp, PSTR("%3d;%3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
ACTION_ITEM(MSG_TOGGLE_MIX, _lcd_mixer_toggle_mix);
}
#else
SUBMENU(MSG_MIX, _lcd_goto_mix_edit);
#endif
//
// Reset All V-Tools
//
CONFIRM_ITEM(MSG_RESET_VTOOLS,
MSG_BUTTON_RESET, MSG_BUTTON_CANCEL,
[]{
mixer.reset_vtools();
LCD_MESSAGE(MSG_VTOOLS_RESET);
ui.return_to_status();
},
nullptr,
GET_TEXT_F(MSG_RESET_VTOOLS), (const char *)nullptr, F("?")
);
#if ENABLED(GRADIENT_MIX)
{
char tmp[13];
SUBMENU(MSG_GRADIENT, lcd_mixer_edit_gradient_menu);
MENU_ITEM_ADDON_START_RJ(9);
sprintf_P(tmp, PSTR("T%i->T%i"), mixer.gradient.start_vtool, mixer.gradient.end_vtool);
lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
ACTION_ITEM(MSG_REVERSE_GRADIENT, _lcd_mixer_reverse_gradient);
}
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && MIXING_EXTRUDER

170
src/lcd/menu/menu_mmu2.cpp Normal file
View File

@ -0,0 +1,170 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfig.h"
#if BOTH(HAS_MARLINUI_MENU, MMU2_MENUS)
#include "../../MarlinCore.h"
#include "../../feature/mmu/mmu2.h"
#include "menu_mmu2.h"
#include "menu_item.h"
//
// Load Filament
//
inline void action_mmu2_load_filament_to_nozzle(const uint8_t tool) {
ui.reset_status();
ui.return_to_status();
ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(tool + 1));
if (mmu2.load_filament_to_nozzle(tool)) ui.reset_status();
ui.return_to_status();
}
void _mmu2_load_filament(uint8_t index) {
ui.return_to_status();
ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
mmu2.load_filament(index);
ui.reset_status();
}
void action_mmu2_load_all() {
EXTRUDER_LOOP() _mmu2_load_filament(e);
ui.return_to_status();
}
void menu_mmu2_load_filament() {
START_MENU();
BACK_ITEM(MSG_MMU2_MENU);
ACTION_ITEM(MSG_MMU2_ALL, action_mmu2_load_all);
EXTRUDER_LOOP() ACTION_ITEM_N(e, MSG_MMU2_FILAMENT_N, []{ _mmu2_load_filament(MenuItemBase::itemIndex); });
END_MENU();
}
void menu_mmu2_load_to_nozzle() {
START_MENU();
BACK_ITEM(MSG_MMU2_MENU);
EXTRUDER_LOOP() ACTION_ITEM_N(e, MSG_MMU2_FILAMENT_N, []{ action_mmu2_load_filament_to_nozzle(MenuItemBase::itemIndex); });
END_MENU();
}
//
// Eject Filament
//
void _mmu2_eject_filament(uint8_t index) {
ui.reset_status();
ui.return_to_status();
ui.status_printf(0, GET_TEXT_F(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
if (mmu2.eject_filament(index, true)) ui.reset_status();
}
void action_mmu2_unload_filament() {
ui.reset_status();
ui.return_to_status();
LCD_MESSAGE(MSG_MMU2_UNLOADING_FILAMENT);
idle();
if (mmu2.unload()) ui.reset_status();
}
void menu_mmu2_eject_filament() {
START_MENU();
BACK_ITEM(MSG_MMU2_MENU);
EXTRUDER_LOOP() ACTION_ITEM_N(e, MSG_MMU2_FILAMENT_N, []{ _mmu2_eject_filament(MenuItemBase::itemIndex); });
END_MENU();
}
//
// MMU2 Menu
//
void action_mmu2_reset() {
mmu2.init();
ui.reset_status();
}
void menu_mmu2() {
START_MENU();
BACK_ITEM(MSG_MAIN);
SUBMENU(MSG_MMU2_LOAD_FILAMENT, menu_mmu2_load_filament);
SUBMENU(MSG_MMU2_LOAD_TO_NOZZLE, menu_mmu2_load_to_nozzle);
SUBMENU(MSG_MMU2_EJECT_FILAMENT, menu_mmu2_eject_filament);
ACTION_ITEM(MSG_MMU2_UNLOAD_FILAMENT, action_mmu2_unload_filament);
ACTION_ITEM(MSG_MMU2_RESET, action_mmu2_reset);
END_MENU();
}
//
// T* Choose Filament
//
uint8_t feeder_index;
bool wait_for_mmu_menu;
inline void action_mmu2_chosen(const uint8_t index) {
feeder_index = index;
wait_for_mmu_menu = false;
}
void menu_mmu2_choose_filament() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_MMU2_CHOOSE_FILAMENT_HEADER, SS_DEFAULT|SS_INVERT);
#endif
EXTRUDER_LOOP() ACTION_ITEM_N(e, MSG_MMU2_FILAMENT_N, []{ action_mmu2_chosen(MenuItemBase::itemIndex); });
END_MENU();
}
//
// MMU2 Filament Runout
//
void menu_mmu2_pause() {
feeder_index = mmu2.get_current_tool();
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, SS_DEFAULT|SS_INVERT);
#endif
ACTION_ITEM(MSG_MMU2_RESUME, []{ wait_for_mmu_menu = false; });
ACTION_ITEM(MSG_MMU2_UNLOAD_FILAMENT, []{ mmu2.unload(); });
ACTION_ITEM(MSG_MMU2_LOAD_FILAMENT, []{ mmu2.load_filament(feeder_index); });
ACTION_ITEM(MSG_MMU2_LOAD_TO_NOZZLE, []{ mmu2.load_filament_to_nozzle(feeder_index); });
END_MENU();
}
void mmu2_M600() {
ui.defer_status_screen();
ui.goto_screen(menu_mmu2_pause);
wait_for_mmu_menu = true;
while (wait_for_mmu_menu) idle();
}
uint8_t mmu2_choose_filament() {
ui.defer_status_screen();
ui.goto_screen(menu_mmu2_choose_filament);
wait_for_mmu_menu = true;
while (wait_for_mmu_menu) idle();
ui.return_to_status();
return feeder_index;
}
#endif // HAS_MARLINUI_MENU && MMU2_MENUS

28
src/lcd/menu/menu_mmu2.h Normal file
View File

@ -0,0 +1,28 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <stdint.h>
void menu_mmu2();
void mmu2_M600();
uint8_t mmu2_choose_filament();

View File

@ -0,0 +1,409 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Motion Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#define LARGE_AREA_TEST ((X_BED_SIZE) >= 1000 || (Y_BED_SIZE) >= 1000 || (Z_MAX_POS) >= 1000)
#include "menu_item.h"
#include "menu_addon.h"
#include "../../module/motion.h"
#include "../../gcode/parser.h" // for inch support
#if ENABLED(DELTA)
#include "../../module/delta.h"
#endif
#if ENABLED(PREVENT_COLD_EXTRUSION)
#include "../../module/temperature.h"
#endif
#if HAS_LEVELING
#include "../../module/planner.h"
#include "../../feature/bedlevel/bedlevel.h"
#endif
//
// "Motion" > "Move Axis" submenu
//
void lcd_move_axis(const AxisEnum axis) {
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
if (ui.encoderPosition && !ui.manual_move.processing) {
// Get motion limit from software endstops, if any
float min, max;
soft_endstop.get_manual_axis_limits(axis, min, max);
// Delta limits XY based on the current offset from center
// This assumes the center is 0,0
#if ENABLED(DELTA)
if (axis != Z_AXIS) {
max = SQRT(sq((float)(DELTA_PRINTABLE_RADIUS)) - sq(current_position[Y_AXIS - axis])); // (Y_AXIS - axis) == the other axis
min = -max;
}
#endif
// Get the new position
const float diff = float(int32_t(ui.encoderPosition)) * ui.manual_move.menu_scale;
(void)ui.manual_move.apply_diff(axis, diff, min, max);
ui.manual_move.soon(axis);
ui.refresh(LCDVIEW_REDRAW_NOW);
}
ui.encoderPosition = 0;
if (ui.should_draw()) {
MenuEditItemBase::itemIndex = axis;
const float pos = ui.manual_move.axis_value(axis);
if (parser.using_inch_units()) {
const float imp_pos = LINEAR_UNIT(pos);
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ftostr63(imp_pos));
}
else
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ui.manual_move.menu_scale >= 0.1f ? (LARGE_AREA_TEST ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
}
}
#if E_MANUAL
static void lcd_move_e(TERN_(MULTI_E_MANUAL, const int8_t eindex=active_extruder)) {
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
if (ui.encoderPosition) {
if (!ui.manual_move.processing) {
const float diff = float(int32_t(ui.encoderPosition)) * ui.manual_move.menu_scale;
TERN(IS_KINEMATIC, ui.manual_move.offset, current_position.e) += diff;
ui.manual_move.soon(E_AXIS OPTARG(MULTI_E_MANUAL, eindex));
ui.refresh(LCDVIEW_REDRAW_NOW);
}
ui.encoderPosition = 0;
}
if (ui.should_draw()) {
TERN_(MULTI_E_MANUAL, MenuItemBase::init(eindex));
MenuEditItemBase::draw_edit_screen(
GET_TEXT_F(TERN(MULTI_E_MANUAL, MSG_MOVE_EN, MSG_MOVE_E)),
ftostr41sign(current_position.e
PLUS_TERN0(IS_KINEMATIC, ui.manual_move.offset)
MINUS_TERN0(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin)
)
);
} // should_draw
}
#endif // E_MANUAL
#if EITHER(PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION)
void _goto_manual_move_z(const_float_t scale) {
ui.manual_move.menu_scale = scale;
ui.goto_screen([]{ lcd_move_axis(Z_AXIS); });
}
#endif
//
// "Motion" > "Move Xmm" > "Move XYZ" submenu
//
#ifndef FINE_MANUAL_MOVE
#define FINE_MANUAL_MOVE 0.025
#endif
void _goto_manual_move(const_float_t scale) {
ui.defer_status_screen();
ui.manual_move.menu_scale = scale;
ui.goto_screen(ui.manual_move.screen_ptr);
thermalManager.set_menu_cold_override(true);
}
void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int8_t eindex=active_extruder) {
ui.manual_move.screen_ptr = func;
START_MENU();
if (LCD_HEIGHT >= 4) {
if (axis < NUM_AXES)
STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT);
else {
TERN_(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin = current_position.e);
STATIC_ITEM_N(eindex, MSG_MOVE_EN, SS_DEFAULT|SS_INVERT);
}
}
BACK_ITEM(MSG_MOVE_AXIS);
if (parser.using_inch_units()) {
if (LARGE_AREA_TEST) SUBMENU(MSG_MOVE_1IN, []{ _goto_manual_move(IN_TO_MM(1.000f)); });
SUBMENU(MSG_MOVE_01IN, []{ _goto_manual_move(IN_TO_MM(0.100f)); });
SUBMENU(MSG_MOVE_001IN, []{ _goto_manual_move(IN_TO_MM(0.010f)); });
SUBMENU(MSG_MOVE_0001IN, []{ _goto_manual_move(IN_TO_MM(0.001f)); });
}
else {
if (LARGE_AREA_TEST) SUBMENU(MSG_MOVE_100MM, []{ _goto_manual_move(100); });
SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10); });
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move( 1); });
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
if (axis == Z_AXIS && (FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move(float(FINE_MANUAL_MOVE)); });
}
END_MENU();
}
#if E_MANUAL
inline void _goto_menu_move_distance_e() {
ui.goto_screen([]{ _menu_move_distance(E_AXIS, []{ lcd_move_e(); }); });
}
inline void _menu_move_distance_e_maybe() {
#if ENABLED(PREVENT_COLD_EXTRUSION)
const bool too_cold = thermalManager.tooColdToExtrude(active_extruder);
if (too_cold) {
ui.goto_screen([]{
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_PROCEED), GET_TEXT_F(MSG_BACK),
_goto_menu_move_distance_e, nullptr,
GET_TEXT_F(MSG_HOTEND_TOO_COLD), (const char *)nullptr, F("!")
);
});
return;
}
#endif
_goto_menu_move_distance_e();
}
#endif // E_MANUAL
void menu_move() {
START_MENU();
BACK_ITEM(MSG_MOTION);
#if BOTH(HAS_SOFTWARE_ENDSTOPS, SOFT_ENDSTOPS_MENU_ITEM)
EDIT_ITEM(bool, MSG_LCD_SOFT_ENDSTOPS, &soft_endstop._enabled);
#endif
// Move submenu for each axis
if (NONE(IS_KINEMATIC, NO_MOTION_BEFORE_HOMING) || all_axes_homed()) {
if (TERN1(DELTA, current_position.z <= delta_clip_start_height)) {
SUBMENU_N(X_AXIS, MSG_MOVE_N, []{ _menu_move_distance(X_AXIS, []{ lcd_move_axis(X_AXIS); }); });
#if HAS_Y_AXIS
SUBMENU_N(Y_AXIS, MSG_MOVE_N, []{ _menu_move_distance(Y_AXIS, []{ lcd_move_axis(Y_AXIS); }); });
#endif
}
else {
#if ENABLED(DELTA)
ACTION_ITEM(MSG_FREE_XY, []{ line_to_z(delta_clip_start_height); ui.synchronize(); });
#endif
}
#if HAS_Z_AXIS
#define _AXIS_MOVE(N) SUBMENU_N(N, MSG_MOVE_N, []{ _menu_move_distance(AxisEnum(N), []{ lcd_move_axis(AxisEnum(N)); }); });
REPEAT_S(2, NUM_AXES, _AXIS_MOVE);
#endif
}
else
GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
#if ANY(SWITCHING_EXTRUDER, SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
#if EXTRUDERS >= 4
switch (active_extruder) {
case 0: GCODES_ITEM_N(1, MSG_SELECT_E, F("T1")); break;
case 1: GCODES_ITEM_N(0, MSG_SELECT_E, F("T0")); break;
case 2: GCODES_ITEM_N(3, MSG_SELECT_E, F("T3")); break;
case 3: GCODES_ITEM_N(2, MSG_SELECT_E, F("T2")); break;
#if EXTRUDERS == 6
case 4: GCODES_ITEM_N(5, MSG_SELECT_E, F("T5")); break;
case 5: GCODES_ITEM_N(4, MSG_SELECT_E, F("T4")); break;
#endif
}
#elif EXTRUDERS == 3
if (active_extruder < 2) {
if (active_extruder)
GCODES_ITEM_N(0, MSG_SELECT_E, F("T0"));
else
GCODES_ITEM_N(1, MSG_SELECT_E, F("T1"));
}
#else
if (active_extruder)
GCODES_ITEM_N(0, MSG_SELECT_E, F("T0"));
else
GCODES_ITEM_N(1, MSG_SELECT_E, F("T1"));
#endif
#elif ENABLED(DUAL_X_CARRIAGE)
if (active_extruder)
GCODES_ITEM_N(0, MSG_SELECT_E, F("T0"));
else
GCODES_ITEM_N(1, MSG_SELECT_E, F("T1"));
#endif
#if E_MANUAL
// The current extruder
SUBMENU(MSG_MOVE_E, _menu_move_distance_e_maybe);
#define SUBMENU_MOVE_E(N) SUBMENU_N(N, MSG_MOVE_EN, []{ _menu_move_distance(E_AXIS, []{ lcd_move_e(N); }, N); });
#if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
// ...and the non-switching
#if E_MANUAL == 7 || E_MANUAL == 5 || E_MANUAL == 3
SUBMENU_MOVE_E(E_MANUAL - 1);
#endif
#elif MULTI_E_MANUAL
// Independent extruders with one E stepper per hotend
REPEAT(E_MANUAL, SUBMENU_MOVE_E);
#endif
#endif // E_MANUAL
END_MENU();
}
#define _HOME_ITEM(N) GCODES_ITEM_N(N##_AXIS, MSG_AUTO_HOME_A, F("G28" STR_##N));
#if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU)
//
// "Motion" > "Homing" submenu
//
void menu_home() {
START_MENU();
BACK_ITEM(MSG_MOTION);
GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
MAIN_AXIS_MAP(_HOME_ITEM);
END_MENU();
}
#endif
#if ENABLED(AUTO_BED_LEVELING_UBL)
void _lcd_ubl_level_bed();
#elif ENABLED(LCD_BED_LEVELING)
void menu_bed_leveling();
#endif
#if ENABLED(ASSISTED_TRAMMING_WIZARD)
void goto_tramming_wizard();
#endif
void menu_motion() {
START_MENU();
//
// ^ Main
//
BACK_ITEM(MSG_MAIN);
//
// Move Axis
//
if (TERN1(DELTA, all_axes_homed()))
SUBMENU(MSG_MOVE_AXIS, menu_move);
//
// Auto Home
//
#if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU)
SUBMENU(MSG_HOMING, menu_home);
#else
GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU)
MAIN_AXIS_MAP(_HOME_ITEM);
#endif
#endif
//
// Auto-calibration
//
#if ENABLED(CALIBRATION_GCODE)
GCODES_ITEM(MSG_AUTO_CALIBRATE, F("G425"));
#endif
//
// Auto Z-Align
//
#if EITHER(Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION)
GCODES_ITEM(MSG_AUTO_Z_ALIGN, F("G34"));
#endif
//
// Assisted Bed Tramming
//
#if ENABLED(ASSISTED_TRAMMING_WIZARD)
SUBMENU(MSG_TRAMMING_WIZARD, goto_tramming_wizard);
#endif
//
// Level Bed
//
#if ENABLED(AUTO_BED_LEVELING_UBL)
SUBMENU(MSG_UBL_LEVEL_BED, _lcd_ubl_level_bed);
#elif ENABLED(LCD_BED_LEVELING)
if (!g29_in_progress)
SUBMENU(MSG_BED_LEVELING, menu_bed_leveling);
#elif HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)
#if DISABLED(PROBE_MANUALLY)
GCODES_ITEM(MSG_LEVEL_BED, F("G29N"));
#endif
if (all_axes_homed() && leveling_is_valid()) {
bool show_state = planner.leveling_active;
EDIT_ITEM(bool, MSG_BED_LEVELING, &show_state, _lcd_toggle_bed_leveling);
}
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
editable.decimal = planner.z_fade_height;
EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, []{ set_z_fade_height(editable.decimal); });
#endif
#endif
#if ENABLED(LCD_BED_TRAMMING) && DISABLED(LCD_BED_LEVELING)
SUBMENU(MSG_BED_TRAMMING, _lcd_level_bed_corners);
#endif
#if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
GCODES_ITEM(MSG_M48_TEST, F("G28O\nM48 P10"));
#endif
//
// Disable Steppers
//
GCODES_ITEM(MSG_DISABLE_STEPPERS, F("M84"));
END_MENU();
}
#endif // HAS_MARLINUI_MENU

View File

@ -0,0 +1,187 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Advanced Settings Menus
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, PASSWORD_FEATURE)
#include "../../feature/password/password.h"
#include "menu_item.h"
#include "menu_addon.h"
void menu_advanced_settings();
screenFunc_t success_screen, fail_screen;
bool authenticating; // = false
char string[(PASSWORD_LENGTH) + 1];
static uint8_t digit_no;
//
// Screen for both editing and setting the password
//
void Password::menu_password_entry() {
ui.defer_status_screen(!did_first_run); // No timeout to status before first auth
START_MENU();
// "Login" or "New Code"
STATIC_ITEM_F(authenticating ? GET_TEXT_F(MSG_LOGIN_REQUIRED) : GET_TEXT_F(MSG_EDIT_PASSWORD), SS_CENTER|SS_INVERT);
STATIC_ITEM_F(FPSTR(NUL_STR), SS_CENTER, string);
#if HAS_MARLINUI_U8GLIB
STATIC_ITEM_F(FPSTR(NUL_STR), SS_CENTER, "");
#endif
// Make the digit edit item look like a sub-menu
FSTR_P const label = GET_TEXT_F(MSG_ENTER_DIGIT);
EDIT_ITEM_F(uint8, label, &editable.uint8, 0, 9, digit_entered);
MENU_ITEM_ADDON_START(utf8_strlen(label) + 1);
lcd_put_lchar(' ');
lcd_put_lchar('1' + digit_no);
SETCURSOR_X(LCD_WIDTH - 2);
lcd_put_lchar('>');
MENU_ITEM_ADDON_END();
ACTION_ITEM(MSG_START_OVER, start_over);
if (!authenticating) BACK_ITEM(MSG_BUTTON_CANCEL);
END_MENU();
}
//
// Authentication check
//
void Password::authentication_done() {
ui.goto_screen(is_locked ? fail_screen : success_screen);
ui.completion_feedback(!is_locked);
}
// A single digit was completed
void Password::digit_entered() {
uint32_t multiplier = CAT(1e, PASSWORD_LENGTH); // 1e5 = 100000
LOOP_LE_N(i, digit_no) multiplier /= 10;
value_entry += editable.uint8 * multiplier;
string[digit_no++] = '0' + editable.uint8;
// Exit edit screen menu and go to another screen
ui.goto_previous_screen();
ui.use_click();
ui.goto_screen(menu_password_entry);
// After password has been keyed in
if (digit_no == PASSWORD_LENGTH) {
if (authenticating)
authentication_check();
else
set_password_done();
}
}
//
// Set/Change Password
//
void Password::screen_password_entry() {
value_entry = 0;
digit_no = 0;
editable.uint8 = 0;
memset(string, '_', PASSWORD_LENGTH);
string[PASSWORD_LENGTH] = '\0';
menu_password_entry();
}
void Password::screen_set_password() {
authenticating = false;
screen_password_entry();
}
void Password::authenticate_user(const screenFunc_t in_succ_scr, const screenFunc_t in_fail_scr) {
success_screen = in_succ_scr;
fail_screen = in_fail_scr;
if (is_set) {
authenticating = true;
ui.goto_screen(screen_password_entry);
ui.update();
}
else {
ui.goto_screen(in_succ_scr);
is_locked = false;
}
}
void Password::access_menu_password() {
authenticate_user(menu_password, menu_advanced_settings);
}
#if ENABLED(PASSWORD_ON_SD_PRINT_MENU)
void Password::media_gatekeeper() {
authenticate_user(menu_media, menu_main);
}
#endif
void Password::start_over() {
ui.goto_previous_screen(); // Goto previous screen, if any
ui.goto_screen(screen_password_entry);
}
void Password::menu_password_report() {
START_SCREEN();
BACK_ITEM(MSG_PASSWORD_SETTINGS);
STATIC_ITEM(MSG_PASSWORD_SET, SS_LEFT, string);
STATIC_ITEM(MSG_REMINDER_SAVE_SETTINGS, SS_LEFT);
END_SCREEN();
}
void Password::set_password_done(const bool with_set/*=true*/) {
is_set = with_set;
value = value_entry;
ui.completion_feedback(true);
ui.goto_screen(menu_password_report);
}
void Password::remove_password() {
string[0] = '0';
string[1] = '\0';
set_password_done(false);
}
//
// Password Menu
//
void Password::menu_password() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
SUBMENU(MSG_CHANGE_PASSWORD, screen_set_password);
ACTION_ITEM(MSG_REMOVE_PASSWORD, []{ ui.push_current_screen(); remove_password(); } );
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && PASSWORD_FEATURE

View File

@ -0,0 +1,62 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Power Monitor Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU && HAS_POWER_MONITOR
#include "menu_item.h"
#include "../../feature/power_monitor.h"
void menu_power_monitor() {
START_MENU();
BACK_ITEM(MSG_MAIN);
#if ENABLED(POWER_MONITOR_CURRENT)
{
bool ena = power_monitor.current_display_enabled();
EDIT_ITEM(bool, MSG_CURRENT, &ena, power_monitor.toggle_current_display);
}
#endif
#if ENABLED(POWER_MONITOR_VOLTAGE)
{
bool ena = power_monitor.voltage_display_enabled();
EDIT_ITEM(bool, MSG_VOLTAGE, &ena, power_monitor.toggle_voltage_display);
}
#endif
#if HAS_POWER_MONITOR_WATTS
{
bool ena = power_monitor.power_display_enabled();
EDIT_ITEM(bool, MSG_POWER, &ena, power_monitor.toggle_power_display);
}
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && HAS_POWER_MONITOR

View File

@ -0,0 +1,164 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Calibrate Probe offset menu.
//
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(PROBE_OFFSET_WIZARD)
#include "menu_item.h"
#include "menu_addon.h"
#include "../../gcode/queue.h"
#include "../../module/motion.h"
#include "../../module/planner.h"
#include "../../module/probe.h"
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
void _goto_manual_move_z(const_float_t);
// Global storage
float z_offset_backup, calculated_z_offset, z_offset_ref;
inline void z_clearance_move() {
do_z_clearance(Z_POST_CLEARANCE);
}
void set_offset_and_go_back(const_float_t z) {
probe.offset.z = z;
SET_SOFT_ENDSTOP_LOOSE(false);
TERN_(HAS_LEVELING, set_bed_leveling_enabled(leveling_was_active));
ui.goto_previous_screen_no_defer();
}
void probe_offset_wizard_menu() {
START_MENU();
calculated_z_offset = probe.offset.z + current_position.z - z_offset_ref;
if (LCD_HEIGHT >= 4)
STATIC_ITEM(MSG_MOVE_NOZZLE_TO_BED, SS_CENTER|SS_INVERT);
STATIC_ITEM_F(F("Z"), SS_CENTER, ftostr42_52(current_position.z));
STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_LEFT, ftostr42_52(calculated_z_offset));
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move_z( 1); });
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
ACTION_ITEM(MSG_BUTTON_DONE, []{
set_offset_and_go_back(calculated_z_offset);
current_position.z = z_offset_ref; // Set Z to z_offset_ref, as we can expect it is at probe height
sync_plan_position();
z_clearance_move(); // Raise Z as if it was homed
});
ACTION_ITEM(MSG_BUTTON_CANCEL, []{
set_offset_and_go_back(z_offset_backup);
// If wizard-homing was done by probe with PROBE_OFFSET_WIZARD_START_Z
#if HOMING_Z_WITH_PROBE && defined(PROBE_OFFSET_WIZARD_START_Z)
set_axis_never_homed(Z_AXIS); // On cancel the Z position needs correction
queue.inject(F("G28Z"));
#else // Otherwise do a Z clearance move like after Homing
z_clearance_move();
#endif
});
END_MENU();
}
void prepare_for_probe_offset_wizard() {
#if defined(PROBE_OFFSET_WIZARD_XY_POS) || !HOMING_Z_WITH_PROBE
if (ui.should_draw()) MenuItem_static::draw(1, GET_TEXT_F(MSG_PROBE_WIZARD_PROBING));
if (ui.wait_for_move) return;
#ifndef PROBE_OFFSET_WIZARD_XY_POS
#define PROBE_OFFSET_WIZARD_XY_POS XY_CENTER
#endif
// Get X and Y from configuration, or use center
constexpr xy_pos_t wizard_pos = PROBE_OFFSET_WIZARD_XY_POS;
// Probe for Z reference
ui.wait_for_move = true;
z_offset_ref = probe.probe_at_point(wizard_pos, PROBE_PT_RAISE, 0, true);
ui.wait_for_move = false;
// Stow the probe, as the last call to probe.probe_at_point(...) left
// the probe deployed if it was successful.
probe.stow();
#else
if (ui.wait_for_move) return;
#endif
// Move Nozzle to Probing/Homing Position
ui.wait_for_move = true;
current_position += probe.offset_xy;
line_to_current_position(MMM_TO_MMS(XY_PROBE_FEEDRATE));
ui.synchronize(GET_TEXT_F(MSG_PROBE_WIZARD_MOVING));
ui.wait_for_move = false;
SET_SOFT_ENDSTOP_LOOSE(true); // Disable soft endstops for free Z movement
// Go to Calibration Menu
ui.goto_screen(probe_offset_wizard_menu);
ui.defer_status_screen();
}
void goto_probe_offset_wizard() {
ui.defer_status_screen();
set_all_unhomed();
// Store probe.offset.z for Case: Cancel
z_offset_backup = probe.offset.z;
#ifdef PROBE_OFFSET_WIZARD_START_Z
probe.offset.z = PROBE_OFFSET_WIZARD_START_Z;
#endif
// Store Bed-Leveling-State and disable
#if HAS_LEVELING
leveling_was_active = planner.leveling_active;
set_bed_leveling_enabled(false);
#endif
// Home all axes
queue.inject_P(G28_STR);
ui.goto_screen([]{
_lcd_draw_homing();
if (all_axes_homed()) {
z_offset_ref = 0; // Set Z Value for Wizard Position to 0
ui.goto_screen(prepare_for_probe_offset_wizard);
ui.defer_status_screen();
}
});
}
#endif // PROBE_OFFSET_WIZARD

View File

@ -0,0 +1,88 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Spindle / Laser Menu
//
#include "../../inc/MarlinConfig.h"
#if HAS_MARLINUI_MENU && HAS_CUTTER
#include "menu_item.h"
#include "../../feature/spindle_laser.h"
void menu_spindle_laser() {
bool is_enabled = cutter.enabled();
#if ENABLED(SPINDLE_CHANGE_DIR)
bool is_rev = cutter.is_reverse();
#endif
START_MENU();
BACK_ITEM(MSG_MAIN);
#if ENABLED(SPINDLE_LASER_USE_PWM)
// Change the cutter's "current power" value without turning the cutter on or off
// Power is displayed and set in units and range according to CUTTER_POWER_UNIT
EDIT_ITEM_FAST(CUTTER_MENU_POWER_TYPE, MSG_CUTTER(POWER), &cutter.menuPower,
cutter.mpower_min(), cutter.mpower_max(), cutter.update_from_mpower);
#endif
editable.state = is_enabled;
EDIT_ITEM(bool, MSG_CUTTER(TOGGLE), &is_enabled, []{
#if ENABLED(SPINDLE_FEATURE)
if (editable.state) cutter.disable(); else cutter.enable_same_dir();
#else
cutter.laser_menu_toggle(!editable.state);
#endif
});
#if ENABLED(AIR_EVACUATION)
bool evac_state = cutter.air_evac_state();
EDIT_ITEM(bool, MSG_CUTTER(EVAC_TOGGLE), &evac_state, cutter.air_evac_toggle);
#endif
#if ENABLED(AIR_ASSIST)
bool air_assist_state = cutter.air_assist_state();
EDIT_ITEM(bool, MSG_CUTTER(ASSIST_TOGGLE), &air_assist_state, cutter.air_assist_toggle);
#endif
#if ENABLED(SPINDLE_CHANGE_DIR)
if (!is_enabled) {
editable.state = is_rev;
ACTION_ITEM_F(is_rev ? GET_TEXT_F(MSG_CUTTER(REVERSE)) : GET_TEXT_F(MSG_CUTTER(FORWARD)), []{ cutter.set_reverse(!editable.state); });
}
#endif
#if ENABLED(LASER_FEATURE)
// Setup and fire a test pulse using the current PWM power level for for a duration of test_pulse_min to test_pulse_max ms.
EDIT_ITEM_FAST(CUTTER_MENU_PULSE_TYPE, MSG_LASER_PULSE_MS, &cutter.testPulse, LASER_TEST_PULSE_MIN, LASER_TEST_PULSE_MAX);
ACTION_ITEM(MSG_LASER_FIRE_PULSE, cutter.test_fire_pulse);
#if ENABLED(HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY
EDIT_ITEM_FAST(CUTTER_MENU_FREQUENCY_TYPE, MSG_CUTTER_FREQUENCY, &cutter.frequency, 2000, 80000, cutter.refresh_frequency);
#endif
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU && HAS_CUTTER

View File

@ -0,0 +1,310 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Temperature Menu
//
#include "../../inc/MarlinConfig.h"
#if HAS_MARLINUI_MENU && HAS_TEMPERATURE
#include "menu_item.h"
#include "../../module/temperature.h"
#if HAS_FAN || ENABLED(SINGLENOZZLE)
#include "../../module/motion.h"
#endif
#if EITHER(HAS_COOLER, LASER_COOLANT_FLOW_METER)
#include "../../feature/cooler.h"
#endif
#if ENABLED(SINGLENOZZLE_STANDBY_TEMP)
#include "../../module/tool_change.h"
#endif
//
// "Temperature" submenu items
//
#if HAS_PREHEAT
void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t indb) {
UNUSED(e); UNUSED(indh); UNUSED(indb);
#if HAS_HOTEND
if (indh >= 0 && ui.material_preset[indh].hotend_temp > 0)
setTargetHotend(_MIN(thermalManager.hotend_max_target(e), ui.material_preset[indh].hotend_temp), e);
#endif
#if HAS_HEATED_BED
if (indb >= 0 && ui.material_preset[indb].bed_temp > 0) setTargetBed(ui.material_preset[indb].bed_temp);
#endif
#if HAS_FAN
if (indh >= 0) {
const uint8_t fan_index = active_extruder < (FAN_COUNT) ? active_extruder : 0;
if (true
#if REDUNDANT_PART_COOLING_FAN
&& fan_index != REDUNDANT_PART_COOLING_FAN
#endif
) set_fan_speed(fan_index, ui.material_preset[indh].fan_speed);
}
#endif
ui.return_to_status();
}
#if HAS_TEMP_HOTEND
inline void _preheat_end(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); }
void do_preheat_end_m() { _preheat_end(editable.int8, 0); }
#endif
#if HAS_HEATED_BED
inline void _preheat_bed(const uint8_t m) { thermalManager.lcd_preheat(0, -1, m); }
#endif
#if HAS_COOLER
inline void _precool_laser(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); }
void do_precool_laser_m() { _precool_laser(editable.int8, thermalManager.temp_cooler.target); }
#endif
#if HAS_TEMP_HOTEND && HAS_HEATED_BED
inline void _preheat_both(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, m); }
// Indexed "Preheat ABC" and "Heat Bed" items
#define PREHEAT_ITEMS(M,E) do{ \
ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_both(M, MenuItemBase::itemIndex); }); \
ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_END_E, []{ _preheat_end(M, MenuItemBase::itemIndex); }); \
}while(0)
#elif HAS_MULTI_HOTEND
// No heated bed, so just indexed "Preheat ABC" items
#define PREHEAT_ITEMS(M,E) ACTION_ITEM_N_f(E, ui.get_preheat_label(M), MSG_PREHEAT_M_H, []{ _preheat_end(M, MenuItemBase::itemIndex); })
#endif
#if HAS_MULTI_HOTEND || HAS_HEATED_BED
// Set editable.int8 to the Material index before entering this menu
// because MenuItemBase::itemIndex will be re-used by PREHEAT_ITEMS
void menu_preheat_m() {
const uint8_t m = editable.int8; // Don't re-use 'editable' in this menu
START_MENU();
BACK_ITEM(MSG_TEMPERATURE);
#if HOTENDS == 1
#if HAS_HEATED_BED
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, []{ _preheat_both(editable.int8, 0); });
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_END, do_preheat_end_m);
#else
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
#endif
#elif HAS_MULTI_HOTEND
HOTEND_LOOP() PREHEAT_ITEMS(editable.int8, e);
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_ALL, []() {
const celsius_t t = ui.material_preset[editable.int8].hotend_temp;
HOTEND_LOOP() thermalManager.setTargetHotend(t, e);
TERN(HAS_HEATED_BED, _preheat_bed(editable.int8), ui.return_to_status());
});
#endif
#if HAS_HEATED_BED
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M_BEDONLY, []{ _preheat_bed(editable.int8); });
#endif
END_MENU();
}
#endif // HAS_MULTI_HOTEND || HAS_HEATED_BED
#endif // HAS_PREHEAT
#if HAS_TEMP_HOTEND || HAS_HEATED_BED
void lcd_cooldown() {
thermalManager.cooldown();
ui.return_to_status();
}
#endif // HAS_TEMP_HOTEND || HAS_HEATED_BED
void menu_temperature() {
#if HAS_TEMP_HOTEND || HAS_HEATED_BED
bool has_heat = false;
#if HAS_TEMP_HOTEND
HOTEND_LOOP() if (thermalManager.degTargetHotend(HOTEND_INDEX)) { has_heat = true; break; }
#endif
#endif
#if HAS_COOLER
if (thermalManager.temp_cooler.target == 0) thermalManager.temp_cooler.target = COOLER_DEFAULT_TEMP;
#endif
START_MENU();
BACK_ITEM(MSG_MAIN);
//
// Nozzle:
// Nozzle [1-5]:
//
#if HOTENDS == 1
editable.celsius = thermalManager.temp_hotend[0].target;
EDIT_ITEM_FAST(int3, MSG_NOZZLE, &editable.celsius, 0, thermalManager.hotend_max_target(0), []{ thermalManager.setTargetHotend(editable.celsius, 0); });
#elif HAS_MULTI_HOTEND
HOTEND_LOOP() {
editable.celsius = thermalManager.temp_hotend[e].target;
EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &editable.celsius, 0, thermalManager.hotend_max_target(e), []{ thermalManager.setTargetHotend(editable.celsius, MenuItemBase::itemIndex); });
}
#endif
#if ENABLED(SINGLENOZZLE_STANDBY_TEMP)
LOOP_S_L_N(e, 1, EXTRUDERS)
EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_STANDBY, &thermalManager.singlenozzle_temp[e], 0, thermalManager.hotend_max_target(0));
#endif
//
// Bed:
//
#if HAS_HEATED_BED
EDIT_ITEM_FAST(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAX_TARGET, thermalManager.start_watching_bed);
#endif
//
// Chamber:
//
#if HAS_HEATED_CHAMBER
EDIT_ITEM_FAST(int3, MSG_CHAMBER, &thermalManager.temp_chamber.target, 0, CHAMBER_MAX_TARGET, thermalManager.start_watching_chamber);
#endif
//
// Cooler:
//
#if HAS_COOLER
bool cstate = cooler.enabled;
EDIT_ITEM(bool, MSG_COOLER_TOGGLE, &cstate, cooler.toggle);
EDIT_ITEM_FAST(int3, MSG_COOLER, &thermalManager.temp_cooler.target, COOLER_MIN_TARGET, COOLER_MAX_TARGET, thermalManager.start_watching_cooler);
#endif
//
// Flow Meter Safety Shutdown:
//
#if ENABLED(FLOWMETER_SAFETY)
bool fstate = cooler.flowsafety_enabled;
EDIT_ITEM(bool, MSG_FLOWMETER_SAFETY, &fstate, cooler.flowsafety_toggle);
#endif
//
// Fan Speed:
//
#if HAS_FAN
DEFINE_SINGLENOZZLE_ITEM();
#if HAS_FAN0
_FAN_EDIT_ITEMS(0,FIRST_FAN_SPEED);
#endif
#if HAS_FAN1 && REDUNDANT_PART_COOLING_FAN != 1
FAN_EDIT_ITEMS(1);
#elif SNFAN(1)
singlenozzle_item(1);
#endif
#if HAS_FAN2 && REDUNDANT_PART_COOLING_FAN != 2
FAN_EDIT_ITEMS(2);
#elif SNFAN(2)
singlenozzle_item(2);
#endif
#if HAS_FAN3 && REDUNDANT_PART_COOLING_FAN != 3
FAN_EDIT_ITEMS(3);
#elif SNFAN(3)
singlenozzle_item(3);
#endif
#if HAS_FAN4 && REDUNDANT_PART_COOLING_FAN != 4
FAN_EDIT_ITEMS(4);
#elif SNFAN(4)
singlenozzle_item(4);
#endif
#if HAS_FAN5 && REDUNDANT_PART_COOLING_FAN != 5
FAN_EDIT_ITEMS(5);
#elif SNFAN(5)
singlenozzle_item(5);
#endif
#if HAS_FAN6 && REDUNDANT_PART_COOLING_FAN != 6
FAN_EDIT_ITEMS(6);
#elif SNFAN(6)
singlenozzle_item(6);
#endif
#if HAS_FAN7 && REDUNDANT_PART_COOLING_FAN != 7
FAN_EDIT_ITEMS(7);
#elif SNFAN(7)
singlenozzle_item(7);
#endif
#endif // HAS_FAN
#if HAS_PREHEAT
//
// Preheat for all Materials
//
LOOP_L_N(m, PREHEAT_COUNT) {
editable.int8 = m;
#if HAS_MULTI_HOTEND || HAS_HEATED_BED
SUBMENU_f(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
#elif HAS_HOTEND
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
#endif
}
#endif
#if HAS_TEMP_HOTEND || HAS_HEATED_BED
//
// Cooldown
//
if (TERN0(HAS_HEATED_BED, thermalManager.degTargetBed())) has_heat = true;
if (has_heat) ACTION_ITEM(MSG_COOLDOWN, lcd_cooldown);
#endif
END_MENU();
}
#if ENABLED(PREHEAT_SHORTCUT_MENU_ITEM)
void menu_preheat_only() {
START_MENU();
BACK_ITEM(MSG_MAIN);
LOOP_L_N(m, PREHEAT_COUNT) {
editable.int8 = m;
#if HAS_MULTI_HOTEND || HAS_HEATED_BED
SUBMENU_f(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m);
#else
ACTION_ITEM_f(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m);
#endif
}
END_MENU();
}
#endif
#endif // HAS_MARLINUI_MENU && HAS_TEMPERATURE

181
src/lcd/menu/menu_tmc.cpp Normal file
View File

@ -0,0 +1,181 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// TMC Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU && HAS_TRINAMIC_CONFIG
#include "menu_item.h"
#include "../../module/stepper/indirection.h"
#include "../../feature/tmc_util.h"
#define TMC_EDIT_STORED_I_RMS(ST,STR) EDIT_ITEM_F(uint16_4, F(STR), &stepper##ST.val_mA, 100, 3000, []{ stepper##ST.refresh_stepper_current(); })
void menu_tmc_current() {
START_MENU();
BACK_ITEM(MSG_TMC_DRIVERS);
#if AXIS_IS_TMC(X)
TMC_EDIT_STORED_I_RMS(X, STR_A);
#endif
#if AXIS_IS_TMC(Y)
TMC_EDIT_STORED_I_RMS(Y, STR_B);
#endif
#if AXIS_IS_TMC(Z)
TMC_EDIT_STORED_I_RMS(Z, STR_C);
#endif
#if AXIS_IS_TMC(X2)
TMC_EDIT_STORED_I_RMS(X2, STR_X2);
#endif
#if AXIS_IS_TMC(Y2)
TMC_EDIT_STORED_I_RMS(Y2, STR_Y2);
#endif
#if AXIS_IS_TMC(Z2)
TMC_EDIT_STORED_I_RMS(Z2, STR_Z2);
#endif
#if AXIS_IS_TMC(Z3)
TMC_EDIT_STORED_I_RMS(Z3, STR_Z3);
#endif
#if AXIS_IS_TMC(Z4)
TMC_EDIT_STORED_I_RMS(Z4, STR_Z4);
#endif
#if AXIS_IS_TMC(E0)
TMC_EDIT_STORED_I_RMS(E0, STR_E0);
#endif
#if AXIS_IS_TMC(E1)
TMC_EDIT_STORED_I_RMS(E1, STR_E1);
#endif
#if AXIS_IS_TMC(E2)
TMC_EDIT_STORED_I_RMS(E2, STR_E2);
#endif
#if AXIS_IS_TMC(E3)
TMC_EDIT_STORED_I_RMS(E3, STR_E3);
#endif
#if AXIS_IS_TMC(E4)
TMC_EDIT_STORED_I_RMS(E4, STR_E4);
#endif
#if AXIS_IS_TMC(E5)
TMC_EDIT_STORED_I_RMS(E5, STR_E5);
#endif
#if AXIS_IS_TMC(E6)
TMC_EDIT_STORED_I_RMS(E6, STR_E6);
#endif
#if AXIS_IS_TMC(E7)
TMC_EDIT_STORED_I_RMS(E7, STR_E7);
#endif
END_MENU();
}
#if ENABLED(HYBRID_THRESHOLD)
#define TMC_EDIT_STORED_HYBRID_THRS(ST, STR) EDIT_ITEM_F(uint8, F(STR), &stepper##ST.stored.hybrid_thrs, 0, 255, []{ stepper##ST.refresh_hybrid_thrs(); });
void menu_tmc_hybrid_thrs() {
START_MENU();
BACK_ITEM(MSG_TMC_DRIVERS);
TERN_(X_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(X, STR_X));
TERN_(Y_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Y, STR_Y));
TERN_(Z_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z, STR_Z));
TERN_(X2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(X2, STR_X2));
TERN_(Y2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Y2, STR_Y2));
TERN_(Z2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z2, STR_Z2));
TERN_(Z3_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z3, STR_Z3));
TERN_(Z4_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z4, STR_Z4));
TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E0, STR_E0));
TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E1, STR_E1));
TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E2, STR_E2));
TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E3, STR_E3));
TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E4, STR_E4));
TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E5, STR_E5));
TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E6, STR_E6));
TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E7, STR_E7));
END_MENU();
}
#endif
#if ENABLED(SENSORLESS_HOMING)
#define TMC_EDIT_STORED_SGT(ST) EDIT_ITEM_F(int4, F(STR_##ST), &stepper##ST.stored.homing_thrs, stepper##ST.sgt_min, stepper##ST.sgt_max, []{ stepper##ST.refresh_homing_thrs(); });
void menu_tmc_homing_thrs() {
START_MENU();
BACK_ITEM(MSG_TMC_DRIVERS);
TERN_( X_SENSORLESS, TMC_EDIT_STORED_SGT(X));
TERN_(X2_SENSORLESS, TMC_EDIT_STORED_SGT(X2));
TERN_( Y_SENSORLESS, TMC_EDIT_STORED_SGT(Y));
TERN_(Y2_SENSORLESS, TMC_EDIT_STORED_SGT(Y2));
TERN_( Z_SENSORLESS, TMC_EDIT_STORED_SGT(Z));
TERN_(Z2_SENSORLESS, TMC_EDIT_STORED_SGT(Z2));
TERN_(Z3_SENSORLESS, TMC_EDIT_STORED_SGT(Z3));
TERN_(Z4_SENSORLESS, TMC_EDIT_STORED_SGT(Z4));
TERN_( I_SENSORLESS, TMC_EDIT_STORED_SGT(I));
TERN_( J_SENSORLESS, TMC_EDIT_STORED_SGT(J));
TERN_( K_SENSORLESS, TMC_EDIT_STORED_SGT(K));
END_MENU();
}
#endif
#if HAS_STEALTHCHOP
#define TMC_EDIT_STEP_MODE(ST, STR) EDIT_ITEM_F(bool, F(STR), &stepper##ST.stored.stealthChop_enabled, []{ stepper##ST.refresh_stepping_mode(); })
void menu_tmc_step_mode() {
START_MENU();
STATIC_ITEM(MSG_TMC_STEALTH_ENABLED);
BACK_ITEM(MSG_TMC_DRIVERS);
TERN_( X_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(X, STR_X));
TERN_(X2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(X2, STR_X2));
TERN_( Y_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Y, STR_Y));
TERN_(Y2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Y2, STR_Y2));
TERN_( Z_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z, STR_Z));
TERN_(Z2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z2, STR_Z2));
TERN_(Z3_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z3, STR_Z3));
TERN_(Z4_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z4, STR_Z4));
TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E0, STR_E0));
TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E1, STR_E1));
TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E2, STR_E2));
TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E3, STR_E3));
TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E4, STR_E4));
TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E5, STR_E5));
TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E6, STR_E6));
TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E7, STR_E7));
END_MENU();
}
#endif
void menu_tmc() {
START_MENU();
BACK_ITEM(MSG_ADVANCED_SETTINGS);
SUBMENU(MSG_TMC_CURRENT, menu_tmc_current);
TERN_(HYBRID_THRESHOLD, SUBMENU(MSG_TMC_HYBRID_THRS, menu_tmc_hybrid_thrs));
TERN_(SENSORLESS_HOMING, SUBMENU(MSG_TMC_HOMING_THRS, menu_tmc_homing_thrs));
TERN_(HAS_STEALTHCHOP, SUBMENU(MSG_TMC_STEPPING_MODE, menu_tmc_step_mode));
END_MENU();
}
#endif // HAS_TRINAMIC_CONFIG

View File

@ -0,0 +1,36 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, TOUCH_SCREEN_CALIBRATION)
#include "menu_item.h"
#include "../marlinui.h"
void touch_screen_calibration() {
ui.touch_calibration_screen();
}
#endif // TOUCH_SCREEN_CALIBRATION

View File

@ -0,0 +1,115 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Bed Tramming Wizard
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, ASSISTED_TRAMMING_WIZARD)
#include "menu_item.h"
#include "../../feature/tramming.h"
#include "../../module/motion.h"
#include "../../module/probe.h"
#include "../../gcode/queue.h"
#if ENABLED(BLTOUCH)
#include "../../feature/bltouch.h"
#endif
//#define DEBUG_OUT 1
#include "../../core/debug_out.h"
static float z_measured[G35_PROBE_COUNT];
static Flags<G35_PROBE_COUNT> z_isvalid;
static uint8_t tram_index = 0;
static int8_t reference_index; // = 0
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
static bool probe_single_point() {
do_blocking_move_to_z(TERN(BLTOUCH, Z_CLEARANCE_DEPLOY_PROBE, Z_CLEARANCE_BETWEEN_PROBES));
// Stow after each point with BLTouch "HIGH SPEED" mode for push-pin safety
const float z_probed_height = probe.probe_at_point(tramming_points[tram_index], TERN0(BLTOUCH, bltouch.high_speed_mode) ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true);
z_measured[tram_index] = z_probed_height;
if (reference_index < 0) reference_index = tram_index;
move_to_tramming_wait_pos();
DEBUG_ECHOLNPGM("probe_single_point(", tram_index, ") = ", z_probed_height, "mm");
const bool v = !isnan(z_probed_height);
z_isvalid.set(tram_index, v);
return v;
}
static void _menu_single_probe() {
DEBUG_ECHOLNPGM("Screen: single probe screen Arg:", tram_index);
START_MENU();
STATIC_ITEM(MSG_BED_TRAMMING, SS_LEFT);
STATIC_ITEM(MSG_LAST_VALUE_SP, SS_LEFT, z_isvalid[tram_index] ? ftostr42_52(z_measured[reference_index] - z_measured[tram_index]) : "---");
ACTION_ITEM(MSG_UBL_BC_INSERT2, []{ if (probe_single_point()) ui.refresh(); });
ACTION_ITEM(MSG_BUTTON_DONE, ui.goto_previous_screen);
END_MENU();
}
static void tramming_wizard_menu() {
START_MENU();
STATIC_ITEM(MSG_SELECT_ORIGIN);
// Draw a menu item for each tramming point
for (tram_index = 0; tram_index < G35_PROBE_COUNT; tram_index++)
SUBMENU_F(FPSTR(pgm_read_ptr(&tramming_point_name[tram_index])), _menu_single_probe);
ACTION_ITEM(MSG_BUTTON_DONE, []{
probe.stow(); // Stow before exiting Tramming Wizard
ui.goto_previous_screen_no_defer();
});
END_MENU();
}
// Init the wizard and enter the submenu
void goto_tramming_wizard() {
DEBUG_ECHOLNPGM("Screen: goto_tramming_wizard", 1);
ui.defer_status_screen();
// Initialize measured point flags
z_isvalid.reset();
reference_index = -1;
// Inject G28, wait for homing to complete,
set_all_unhomed();
queue.inject(TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR)));
ui.goto_screen([]{
_lcd_draw_homing();
if (all_axes_homed())
ui.goto_screen(tramming_wizard_menu);
});
}
#endif // HAS_MARLINUI_MENU && ASSISTED_TRAMMING_WIZARD

241
src/lcd/menu/menu_tune.cpp Normal file
View File

@ -0,0 +1,241 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Tune Menu
//
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_MENU
#include "menu_item.h"
#include "../../module/motion.h"
#include "../../module/planner.h"
#include "../../module/temperature.h"
#include "../../MarlinCore.h"
#if ENABLED(SINGLENOZZLE_STANDBY_TEMP)
#include "../../module/tool_change.h"
#endif
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
#if ENABLED(BABYSTEPPING)
#include "../../feature/babystep.h"
#include "../lcdprint.h"
#if HAS_MARLINUI_U8GLIB
#include "../dogm/marlinui_DOGM.h"
#endif
// TODO: Replace fmsg with MSG_BABYSTEP_N and index substitution
void _lcd_babystep(const AxisEnum axis, FSTR_P const fmsg) {
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
if (ui.encoderPosition) {
const int16_t steps = int16_t(ui.encoderPosition) * (
#if ENABLED(BABYSTEP_XY)
axis == X_AXIS ? BABYSTEP_SIZE_X :
axis == Y_AXIS ? BABYSTEP_SIZE_Y :
#endif
BABYSTEP_SIZE_Z
);
ui.encoderPosition = 0;
ui.refresh(LCDVIEW_REDRAW_NOW);
babystep.add_steps(axis, steps);
}
if (ui.should_draw()) {
const float mps = planner.mm_per_step[axis];
MenuEditItemBase::draw_edit_screen(fmsg, BABYSTEP_TO_STR(mps * babystep.accum));
#if ENABLED(BABYSTEP_DISPLAY_TOTAL)
const bool in_view = TERN1(HAS_MARLINUI_U8GLIB, PAGE_CONTAINS(LCD_PIXEL_HEIGHT - MENU_FONT_HEIGHT, LCD_PIXEL_HEIGHT - 1));
if (in_view) {
TERN_(HAS_MARLINUI_U8GLIB, ui.set_font(FONT_MENU));
#if ENABLED(TFT_COLOR_UI)
lcd_moveto(4, 3);
lcd_put_u8str(GET_TEXT_F(MSG_BABYSTEP_TOTAL));
lcd_put_lchar(':');
lcd_moveto(10, 3);
#else
lcd_moveto(0, TERN(HAS_MARLINUI_U8GLIB, LCD_PIXEL_HEIGHT - MENU_FONT_DESCENT, LCD_HEIGHT - 1));
lcd_put_u8str(GET_TEXT_F(MSG_BABYSTEP_TOTAL));
lcd_put_lchar(':');
#endif
lcd_put_u8str(BABYSTEP_TO_STR(mps * babystep.axis_total[BS_TOTAL_IND(axis)]));
}
#endif
}
}
inline void _lcd_babystep_go(const screenFunc_t screen) {
ui.goto_screen(screen);
ui.defer_status_screen();
babystep.accum = 0;
}
#if ENABLED(BABYSTEP_XY)
void _lcd_babystep_x() { _lcd_babystep(X_AXIS, GET_TEXT_F(MSG_BABYSTEP_X)); }
void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, GET_TEXT_F(MSG_BABYSTEP_Y)); }
#endif
#if DISABLED(BABYSTEP_ZPROBE_OFFSET)
void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, GET_TEXT_F(MSG_BABYSTEP_Z)); }
void lcd_babystep_z() { _lcd_babystep_go(_lcd_babystep_z); }
#endif
#endif // BABYSTEPPING
void menu_tune() {
START_MENU();
BACK_ITEM(MSG_MAIN);
//
// Speed:
//
EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999);
//
// Manual bed leveling, Bed Z:
//
#if BOTH(MESH_BED_LEVELING, LCD_BED_LEVELING)
EDIT_ITEM(float43, MSG_BED_Z, &bedlevel.z_offset, -1, 1);
#endif
//
// Nozzle:
// Nozzle [1-4]:
//
#if HOTENDS == 1
EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, thermalManager.hotend_max_target(0), []{ thermalManager.start_watching_hotend(0); });
#elif HAS_MULTI_HOTEND
HOTEND_LOOP()
EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_N, &thermalManager.temp_hotend[e].target, 0, thermalManager.hotend_max_target(e), []{ thermalManager.start_watching_hotend(MenuItemBase::itemIndex); });
#endif
#if ENABLED(SINGLENOZZLE_STANDBY_TEMP)
LOOP_S_L_N(e, 1, EXTRUDERS)
EDIT_ITEM_FAST_N(int3, e, MSG_NOZZLE_STANDBY, &thermalManager.singlenozzle_temp[e], 0, thermalManager.hotend_max_target(0));
#endif
//
// Bed:
//
#if HAS_HEATED_BED
EDIT_ITEM_FAST(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAX_TARGET, thermalManager.start_watching_bed);
#endif
//
// Fan Speed:
//
#if HAS_FAN
DEFINE_SINGLENOZZLE_ITEM();
#if HAS_FAN0
_FAN_EDIT_ITEMS(0,FIRST_FAN_SPEED);
#endif
#if HAS_FAN1
FAN_EDIT_ITEMS(1);
#elif SNFAN(1)
singlenozzle_item(1);
#endif
#if HAS_FAN2
FAN_EDIT_ITEMS(2);
#elif SNFAN(2)
singlenozzle_item(2);
#endif
#if HAS_FAN3
FAN_EDIT_ITEMS(3);
#elif SNFAN(3)
singlenozzle_item(3);
#endif
#if HAS_FAN4
FAN_EDIT_ITEMS(4);
#elif SNFAN(4)
singlenozzle_item(4);
#endif
#if HAS_FAN5
FAN_EDIT_ITEMS(5);
#elif SNFAN(5)
singlenozzle_item(5);
#endif
#if HAS_FAN6
FAN_EDIT_ITEMS(6);
#elif SNFAN(6)
singlenozzle_item(6);
#endif
#if HAS_FAN7
FAN_EDIT_ITEMS(7);
#elif SNFAN(7)
singlenozzle_item(7);
#endif
#endif // HAS_FAN
//
// Flow:
//
#if HAS_EXTRUDERS
EDIT_ITEM(int3, MSG_FLOW, &planner.flow_percentage[active_extruder], 10, 999, []{ planner.refresh_e_factor(active_extruder); });
// Flow En:
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_N(int3, e, MSG_FLOW_N, &planner.flow_percentage[e], 10, 999, []{ planner.refresh_e_factor(MenuItemBase::itemIndex); });
#endif
#endif
//
// Advance K:
//
#if ENABLED(LIN_ADVANCE) && DISABLED(SLIM_LCD_MENUS)
#if EXTRUDERS == 1
EDIT_ITEM(float42_52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 10);
#elif HAS_MULTI_EXTRUDER
EXTRUDER_LOOP()
EDIT_ITEM_N(float42_52, e, MSG_ADVANCE_K_E, &planner.extruder_advance_K[e], 0, 10);
#endif
#endif
//
// Babystep X:
// Babystep Y:
// Babystep Z:
//
#if ENABLED(BABYSTEPPING)
#if ENABLED(BABYSTEP_XY)
SUBMENU_N(X_AXIS, MSG_BABYSTEP_N, []{ _lcd_babystep_go(_lcd_babystep_x); });
SUBMENU_N(Y_AXIS, MSG_BABYSTEP_N, []{ _lcd_babystep_go(_lcd_babystep_y); });
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#else
SUBMENU_N(Z_AXIS, MSG_BABYSTEP_N, lcd_babystep_z);
#endif
#endif
END_MENU();
}
#endif // HAS_MARLINUI_MENU

674
src/lcd/menu/menu_ubl.cpp Normal file
View File

@ -0,0 +1,674 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
//
// Unified Bed Leveling Menus
//
#include "../../inc/MarlinConfigPre.h"
#if BOTH(HAS_MARLINUI_MENU, AUTO_BED_LEVELING_UBL)
#include "menu_item.h"
#include "../../gcode/gcode.h"
#include "../../gcode/queue.h"
#include "../../module/motion.h"
#include "../../module/planner.h"
#include "../../module/settings.h"
#include "../../feature/bedlevel/bedlevel.h"
static int16_t ubl_storage_slot = 0,
custom_hotend_temp = 150,
side_points = 3,
ubl_fillin_amount = 5,
ubl_height_amount = 1;
static uint8_t n_edit_pts = 1;
static int8_t x_plot = 0, y_plot = 0; // May be negative during move
#if HAS_HEATED_BED
static int16_t custom_bed_temp = 50;
#endif
float mesh_edit_accumulator; // Rounded to 2.5 decimal places on use
inline float rounded_mesh_value() {
const int32_t rounded = int32_t(mesh_edit_accumulator * 1000);
return float(rounded - (rounded % 5L)) / 1000;
}
/**
* This screen displays the temporary mesh value and updates it based on encoder
* movement. While this screen is active bedlevel.fine_tune_mesh sits in a loop getting
* the current value via ubl_mesh_value, moves the Z axis, and updates the mesh
* value until the encoder button is pressed.
*
* - Update the 'mesh_edit_accumulator' from encoder rotation
* - Draw the mesh value (with draw_edit_screen)
* - Draw the graphical overlay, if enabled.
* - Update the 'refresh' state according to the display type
*/
void _lcd_mesh_fine_tune(FSTR_P const fmsg) {
constexpr float mesh_edit_step = 1.0f / 200.0f;
ui.defer_status_screen();
if (bedlevel.encoder_diff) {
mesh_edit_accumulator += TERN(IS_TFTGLCD_PANEL,
bedlevel.encoder_diff * mesh_edit_step / ENCODER_PULSES_PER_STEP,
bedlevel.encoder_diff > 0 ? mesh_edit_step : -mesh_edit_step
);
bedlevel.encoder_diff = 0;
IF_DISABLED(IS_TFTGLCD_PANEL, ui.refresh(LCDVIEW_CALL_REDRAW_NEXT));
}
TERN_(IS_TFTGLCD_PANEL, ui.refresh(LCDVIEW_CALL_REDRAW_NEXT));
if (ui.should_draw()) {
const float rounded_f = rounded_mesh_value();
MenuEditItemBase::draw_edit_screen(fmsg, ftostr43sign(rounded_f));
TERN_(MESH_EDIT_GFX_OVERLAY, ui.zoffset_overlay(rounded_f));
TERN_(HAS_GRAPHICAL_TFT, ui.refresh(LCDVIEW_NONE));
}
}
//
// Init mesh editing and go to the fine tuning screen (bedlevel.fine_tune_mesh)
// To capture encoder events UBL will also call ui.capture and ui.release.
//
void MarlinUI::ubl_mesh_edit_start(const_float_t initial) {
TERN_(HAS_GRAPHICAL_TFT, clear_lcd());
mesh_edit_accumulator = initial;
goto_screen([]{ _lcd_mesh_fine_tune(GET_TEXT_F(MSG_MESH_EDIT_Z)); });
}
//
// Get the mesh value within a Z adjustment loop (bedlevel.fine_tune_mesh)
//
float MarlinUI::ubl_mesh_value() { return rounded_mesh_value(); }
/**
* UBL Build Custom Mesh Command
*/
void _lcd_ubl_build_custom_mesh() {
char ubl_lcd_gcode[64];
#if HAS_HEATED_BED
sprintf_P(ubl_lcd_gcode, PSTR("G28\nM190 S%i\nM109 S%i\nG29 P1"), custom_bed_temp, custom_hotend_temp);
#else
sprintf_P(ubl_lcd_gcode, PSTR("G28\nM109 S%i\nG29 P1"), custom_hotend_temp);
#endif
queue.inject(ubl_lcd_gcode);
}
/**
* UBL Custom Mesh submenu
*
* << Build Mesh
* Hotend Temp: ---
* Bed Temp: ---
* Build Custom Mesh
*/
void _lcd_ubl_custom_mesh() {
START_MENU();
BACK_ITEM(MSG_UBL_BUILD_MESH_MENU);
#if HAS_HOTEND
EDIT_ITEM(int3, MSG_UBL_HOTEND_TEMP_CUSTOM, &custom_hotend_temp, EXTRUDE_MINTEMP, thermalManager.hotend_max_target(0));
#endif
#if HAS_HEATED_BED
EDIT_ITEM(int3, MSG_UBL_BED_TEMP_CUSTOM, &custom_bed_temp, BED_MINTEMP, BED_MAX_TARGET);
#endif
ACTION_ITEM(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_build_custom_mesh);
END_MENU();
}
/**
* UBL Adjust Mesh Height Command
*/
void _lcd_ubl_adjust_height_cmd() {
char ubl_lcd_gcode[13];
const int ind = ubl_height_amount > 0 ? 6 : 7;
strcpy_P(ubl_lcd_gcode, PSTR("G29P6C-"));
sprintf_P(&ubl_lcd_gcode[ind], PSTR(".%i"), ABS(ubl_height_amount));
queue.inject(ubl_lcd_gcode);
}
/**
* UBL Adjust Mesh Height submenu
*
* << Edit Mesh
* Height Amount: ---
* Adjust Mesh Height
* << Info Screen
*/
void _menu_ubl_height_adjust() {
START_MENU();
BACK_ITEM(MSG_EDIT_MESH);
EDIT_ITEM(int3, MSG_UBL_MESH_HEIGHT_AMOUNT, &ubl_height_amount, -9, 9, _lcd_ubl_adjust_height_cmd);
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
/**
* UBL Edit Mesh submenu
*
* << UBL Tools
* Fine Tune All
* Fine Tune Closest
* - Adjust Mesh Height >>
* << Info Screen
*/
void _lcd_ubl_edit_mesh() {
START_MENU();
BACK_ITEM(MSG_UBL_TOOLS);
GCODES_ITEM(MSG_UBL_FINE_TUNE_ALL, F("G29P4RT"));
GCODES_ITEM(MSG_UBL_FINE_TUNE_CLOSEST, F("G29P4T"));
SUBMENU(MSG_UBL_MESH_HEIGHT_ADJUST, _menu_ubl_height_adjust);
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
#if ENABLED(G26_MESH_VALIDATION)
/**
* UBL Validate Custom Mesh Command
*/
void _lcd_ubl_validate_custom_mesh() {
char ubl_lcd_gcode[20];
sprintf_P(ubl_lcd_gcode, PSTR("G28\nG26CPH%" PRIi16 TERN_(HAS_HEATED_BED, "B%" PRIi16))
, custom_hotend_temp
OPTARG(HAS_HEATED_BED, custom_bed_temp)
);
queue.inject(ubl_lcd_gcode);
}
/**
* UBL Validate Mesh submenu
*
* << UBL Tools
* Mesh Validation with Material 1 up to 5
* Validate Custom Mesh
* << Info Screen
*/
void _lcd_ubl_validate_mesh() {
START_MENU();
BACK_ITEM(MSG_UBL_TOOLS);
#if HAS_PREHEAT
#if HAS_HEATED_BED
#define VALIDATE_MESH_GCODE_ITEM(M) \
GCODES_ITEM_N_f(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPI" STRINGIFY(M)));
#else
#define VALIDATE_MESH_GCODE_ITEM(M) \
GCODES_ITEM_N_f(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, F("G28\nG26CPB0I" STRINGIFY(M)));
#endif
REPEAT(PREHEAT_COUNT, VALIDATE_MESH_GCODE_ITEM)
#endif
ACTION_ITEM(MSG_UBL_VALIDATE_CUSTOM_MESH, _lcd_ubl_validate_custom_mesh);
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
#endif
/**
* UBL Grid Leveling submenu
*
* << UBL Tools
* Side points: ---
* Level Mesh
*/
void _lcd_ubl_grid_level() {
START_MENU();
BACK_ITEM(MSG_UBL_TOOLS);
EDIT_ITEM(int3, MSG_UBL_SIDE_POINTS, &side_points, 2, 6);
ACTION_ITEM(MSG_UBL_MESH_LEVEL, []{
char ubl_lcd_gcode[12];
sprintf_P(ubl_lcd_gcode, PSTR("G29J%i"), side_points);
queue.inject(ubl_lcd_gcode);
});
END_MENU();
}
/**
* UBL Mesh Leveling submenu
*
* << UBL Tools
* 3-Point Mesh Leveling
* - Grid Mesh Leveling >>
* << Info Screen
*/
void _lcd_ubl_mesh_leveling() {
START_MENU();
BACK_ITEM(MSG_UBL_TOOLS);
GCODES_ITEM(MSG_UBL_3POINT_MESH_LEVELING, F("G29J0"));
SUBMENU(MSG_UBL_GRID_MESH_LEVELING, _lcd_ubl_grid_level);
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
/**
* UBL Fill-in Amount Mesh Command
*/
void _lcd_ubl_fillin_amount_cmd() {
char ubl_lcd_gcode[18];
sprintf_P(ubl_lcd_gcode, PSTR("G29P3RC.%i"), ubl_fillin_amount);
gcode.process_subcommands_now(ubl_lcd_gcode);
}
/**
* UBL Fill-in Mesh submenu
*
* << Build Mesh
* Fill-in Amount: ---
* Fill-in Mesh
* Smart Fill-in
* Manual Fill-in
* << Info Screen
*/
void _menu_ubl_fillin() {
START_MENU();
BACK_ITEM(MSG_UBL_BUILD_MESH_MENU);
EDIT_ITEM(int3, MSG_UBL_FILLIN_AMOUNT, &ubl_fillin_amount, 0, 9, _lcd_ubl_fillin_amount_cmd);
GCODES_ITEM(MSG_UBL_SMART_FILLIN, F("G29P3T0"));
GCODES_ITEM(MSG_UBL_MANUAL_FILLIN, F("G29P2BT0"));
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
void _lcd_ubl_invalidate() {
bedlevel.invalidate();
SERIAL_ECHOLNPGM("Mesh invalidated.");
}
/**
* UBL Build Mesh submenu
*
* << UBL Tools
* Build Mesh with Material 1 up to 5
* - Build Custom Mesh >>
* Build Cold Mesh
* - Fill-in Mesh >>
* Continue Bed Mesh
* Invalidate All
* Invalidate Closest
* << Info Screen
*/
void _lcd_ubl_build_mesh() {
START_MENU();
BACK_ITEM(MSG_UBL_TOOLS);
#if HAS_PREHEAT
#if HAS_HEATED_BED
#define PREHEAT_BED_GCODE(M) "M190I" STRINGIFY(M) "\n"
#else
#define PREHEAT_BED_GCODE(M) ""
#endif
#define BUILD_MESH_GCODE_ITEM(M) GCODES_ITEM_f(ui.get_preheat_label(M), MSG_UBL_BUILD_MESH_M, \
F( \
"G28\n" \
PREHEAT_BED_GCODE(M) \
"M109I" STRINGIFY(M) "\n" \
"G29P1\n" \
"M104S0\n" \
"M140S0" \
) )
BUILD_MESH_GCODE_ITEM(0);
#if PREHEAT_COUNT > 1
BUILD_MESH_GCODE_ITEM(1);
#if PREHEAT_COUNT > 2
BUILD_MESH_GCODE_ITEM(2);
#if PREHEAT_COUNT > 3
BUILD_MESH_GCODE_ITEM(3);
#if PREHEAT_COUNT > 4
BUILD_MESH_GCODE_ITEM(4);
#endif
#endif
#endif
#endif
#endif // HAS_PREHEAT
SUBMENU(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
GCODES_ITEM(MSG_UBL_BUILD_COLD_MESH, F("G29NP1"));
SUBMENU(MSG_UBL_FILLIN_MESH, _menu_ubl_fillin);
GCODES_ITEM(MSG_UBL_CONTINUE_MESH, F("G29P1C"));
ACTION_ITEM(MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
GCODES_ITEM(MSG_UBL_INVALIDATE_CLOSEST, F("G29I"));
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
/**
* UBL Load / Save Mesh Commands
*/
inline void _lcd_ubl_load_save_cmd(const char loadsave, FSTR_P const fmsg) {
char ubl_lcd_gcode[40];
sprintf_P(ubl_lcd_gcode, PSTR("G29%c%i\nM117 "), loadsave, ubl_storage_slot);
sprintf_P(&ubl_lcd_gcode[strlen(ubl_lcd_gcode)], FTOP(fmsg), ubl_storage_slot);
gcode.process_subcommands_now(ubl_lcd_gcode);
}
void _lcd_ubl_load_mesh_cmd() { _lcd_ubl_load_save_cmd('L', GET_TEXT_F(MSG_MESH_LOADED)); }
void _lcd_ubl_save_mesh_cmd() { _lcd_ubl_load_save_cmd('S', GET_TEXT_F(MSG_MESH_SAVED)); }
/**
* UBL Mesh Storage submenu
*
* << Unified Bed Leveling
* Memory Slot: ---
* Load Bed Mesh
* Save Bed Mesh
*/
void _lcd_ubl_storage_mesh() {
int16_t a = settings.calc_num_meshes();
START_MENU();
BACK_ITEM(MSG_UBL_LEVEL_BED);
if (!WITHIN(ubl_storage_slot, 0, a - 1))
STATIC_ITEM(MSG_UBL_NO_STORAGE);
else {
EDIT_ITEM(int3, MSG_UBL_STORAGE_SLOT, &ubl_storage_slot, 0, a - 1);
ACTION_ITEM(MSG_UBL_LOAD_MESH, _lcd_ubl_load_mesh_cmd);
ACTION_ITEM(MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
}
END_MENU();
}
/**
* UBL LCD "radar" map point editing
*/
void _lcd_ubl_map_edit_cmd() {
char ubl_lcd_gcode[50], str[10], str2[10];
dtostrf(bedlevel.get_mesh_x(x_plot), 0, 2, str);
dtostrf(bedlevel.get_mesh_y(y_plot), 0, 2, str2);
snprintf_P(ubl_lcd_gcode, sizeof(ubl_lcd_gcode), PSTR("G29P4X%sY%sR%i"), str, str2, int(n_edit_pts));
queue.inject(ubl_lcd_gcode);
}
/**
* UBL LCD Map Movement
*/
void ubl_map_move_to_xy() {
const xy_pos_t xy = { bedlevel.get_mesh_x(x_plot), bedlevel.get_mesh_y(y_plot) };
// Some printers have unreachable areas in the mesh. Skip the move if unreachable.
if (!position_is_reachable(xy)) return;
#if ENABLED(DELTA)
if (current_position.z > delta_clip_start_height) { // Make sure the delta has fully free motion
destination = current_position;
destination.z = delta_clip_start_height;
prepare_internal_fast_move_to_destination(homing_feedrate(Z_AXIS)); // Set current_position from destination
}
#endif
// Use the built-in manual move handler to move to the mesh point.
ui.manual_move.set_destination(xy);
ui.manual_move.soon(ALL_AXES_ENUM);
}
inline int32_t grid_index(const uint8_t x, const uint8_t y) {
return (GRID_MAX_POINTS_X) * y + x;
}
/**
* UBL LCD "radar" map
*/
void ubl_map_screen() {
// static millis_t next_move = 0;
// const millis_t ms = millis();
uint8_t x, y;
if (ui.first_page) {
// On click send "G29 P4 ..." to edit the Z value
if (ui.use_click()) {
_lcd_ubl_map_edit_cmd();
return;
}
ui.defer_status_screen();
#if IS_KINEMATIC
// Index of the mesh point upon entry
const int32_t old_pos_index = grid_index(x_plot, y_plot);
// Direction from new (unconstrained) encoder value
const int8_t step_dir = int32_t(ui.encoderPosition) < old_pos_index ? -1 : 1;
#endif
do {
// Now, keep the encoder position within range
if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = GRID_MAX_POINTS + TERN(TOUCH_SCREEN, ui.encoderPosition, -1);
if (int32_t(ui.encoderPosition) > GRID_MAX_POINTS - 1) ui.encoderPosition = TERN(TOUCH_SCREEN, ui.encoderPosition - GRID_MAX_POINTS, 0);
// Draw the grid point based on the encoder
x = ui.encoderPosition % (GRID_MAX_POINTS_X);
y = ui.encoderPosition / (GRID_MAX_POINTS_X);
// Validate if needed
#if IS_KINEMATIC
const xy_pos_t xy = { bedlevel.get_mesh_x(x), bedlevel.get_mesh_y(y) };
if (position_is_reachable(xy)) break; // Found a valid point
ui.encoderPosition += step_dir; // Test the next point
#endif
} while (ENABLED(IS_KINEMATIC));
// Determine number of points to edit
#if IS_KINEMATIC
n_edit_pts = 9; // TODO: Delta accessible edit points
#else
const bool xc = WITHIN(x, 1, (GRID_MAX_POINTS_X) - 2),
yc = WITHIN(y, 1, (GRID_MAX_POINTS_Y) - 2);
n_edit_pts = yc ? (xc ? 9 : 6) : (xc ? 6 : 4); // Corners
#endif
// Refresh is also set by encoder movement
//if (int32_t(ui.encoderPosition) != grid_index(x, y))
// ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
// Draw the grid point based on the encoder
x = ui.encoderPosition % (GRID_MAX_POINTS_X);
y = ui.encoderPosition / (GRID_MAX_POINTS_X);
if (ui.should_draw()) ui.ubl_plot(x, y);
// Add a move if needed to match the grid point
if (x != x_plot || y != y_plot) {
x_plot = x; y_plot = y; // The move is always posted, so update the grid point now
ubl_map_move_to_xy(); // Sets up a "manual move"
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); // Clean up a half drawn box
}
}
/**
* UBL LCD "radar" map homing
*/
void _ubl_map_screen_homing() {
ui.defer_status_screen();
_lcd_draw_homing();
if (all_axes_homed()) {
bedlevel.lcd_map_control = true; // Return to the map screen after editing Z
ui.goto_screen(ubl_map_screen, grid_index(x_plot, y_plot)); // Pre-set the encoder value
ui.manual_move.menu_scale = 0; // Immediate move
ubl_map_move_to_xy(); // Move to current mesh point
ui.manual_move.menu_scale = 1; // Delayed moves
}
}
/**
* UBL Homing before LCD map
*/
void _ubl_goto_map_screen() {
if (planner.movesplanned()) return; // The ACTION_ITEM will do nothing
if (!all_axes_trusted()) {
set_all_unhomed();
queue.inject_P(G28_STR);
}
ui.goto_screen(_ubl_map_screen_homing); // Go to the "Homing" screen
}
/**
* UBL Output map submenu
*
* << Unified Bed Leveling
* Output for Host
* Output for CSV
* Off Printer Backup
*/
void _lcd_ubl_output_map() {
START_MENU();
BACK_ITEM(MSG_UBL_LEVEL_BED);
GCODES_ITEM(MSG_UBL_OUTPUT_MAP_HOST, F("G29T0"));
GCODES_ITEM(MSG_UBL_OUTPUT_MAP_CSV, F("G29T1"));
GCODES_ITEM(MSG_UBL_OUTPUT_MAP_BACKUP, F("G29S-1"));
END_MENU();
}
/**
* UBL Tools submenu
*
* << Unified Bed Leveling
* - Build Mesh >>
* - Validate Mesh >>
* - Edit Mesh >>
* - Mesh Leveling >>
*/
void _menu_ubl_tools() {
START_MENU();
BACK_ITEM(MSG_UBL_LEVEL_BED);
SUBMENU(MSG_UBL_BUILD_MESH_MENU, _lcd_ubl_build_mesh);
GCODES_ITEM(MSG_UBL_MANUAL_MESH, F("G29I999\nG29P2BT0"));
#if ENABLED(G26_MESH_VALIDATION)
SUBMENU(MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
#endif
SUBMENU(MSG_EDIT_MESH, _lcd_ubl_edit_mesh);
SUBMENU(MSG_UBL_MESH_LEVELING, _lcd_ubl_mesh_leveling);
END_MENU();
}
#if ENABLED(G26_MESH_VALIDATION)
/**
* UBL Step-By-Step submenu
*
* << Unified Bed Leveling
* 1 Build Cold Mesh
* 2 Smart Fill-in
* - 3 Validate Mesh >>
* 4 Fine Tune All
* - 5 Validate Mesh >>
* 6 Fine Tune All
* 7 Save Bed Mesh
*/
void _lcd_ubl_step_by_step() {
START_MENU();
BACK_ITEM(MSG_UBL_LEVEL_BED);
GCODES_ITEM(MSG_UBL_1_BUILD_COLD_MESH, F("G29NP1"));
GCODES_ITEM(MSG_UBL_2_SMART_FILLIN, F("G29P3T0"));
SUBMENU(MSG_UBL_3_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
GCODES_ITEM(MSG_UBL_4_FINE_TUNE_ALL, F("G29P4RT"));
SUBMENU(MSG_UBL_5_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
GCODES_ITEM(MSG_UBL_6_FINE_TUNE_ALL, F("G29P4RT"));
ACTION_ITEM(MSG_UBL_7_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
END_MENU();
}
#endif
#if ENABLED(UBL_MESH_WIZARD)
/**
* UBL Mesh Wizard - One-click mesh creation with or without a probe
*/
void _lcd_ubl_mesh_wizard() {
char ubl_lcd_gcode[30];
#if HAS_HEATED_BED && HAS_HOTEND
sprintf_P(ubl_lcd_gcode, PSTR("M1004B%iH%iS%i"), custom_bed_temp, custom_hotend_temp, ubl_storage_slot);
#elif HAS_HOTEND
sprintf_P(ubl_lcd_gcode, PSTR("M1004H%iS%i"), custom_hotend_temp, ubl_storage_slot);
#else
sprintf_P(ubl_lcd_gcode, PSTR("M1004S%i"), ubl_storage_slot);
#endif
queue.inject(ubl_lcd_gcode);
ui.return_to_status();
}
void _menu_ubl_mesh_wizard() {
const int16_t total_slots = settings.calc_num_meshes();
START_MENU();
BACK_ITEM(MSG_UBL_LEVEL_BED);
#if HAS_HOTEND
EDIT_ITEM(int3, MSG_UBL_HOTEND_TEMP_CUSTOM, &custom_hotend_temp, HEATER_0_MINTEMP + 20, thermalManager.hotend_max_target(0));
#endif
#if HAS_HEATED_BED
EDIT_ITEM(int3, MSG_UBL_BED_TEMP_CUSTOM, &custom_bed_temp, BED_MINTEMP + 20, BED_MAX_TARGET);
#endif
EDIT_ITEM(int3, MSG_UBL_STORAGE_SLOT, &ubl_storage_slot, 0, total_slots);
ACTION_ITEM(MSG_UBL_MESH_WIZARD, _lcd_ubl_mesh_wizard);
#if ENABLED(G26_MESH_VALIDATION)
SUBMENU(MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
#endif
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
END_MENU();
}
#endif
/**
* UBL System submenu
*
* << Motion
* - Manually Build Mesh >>
* - Activate UBL >>
* - Deactivate UBL >>
* - Step-By-Step UBL >>
* - Mesh Storage >>
* - Output Map >>
* - UBL Tools >>
* - Output UBL Info >>
*/
void _lcd_ubl_level_bed() {
START_MENU();
BACK_ITEM(MSG_MOTION);
if (planner.leveling_active)
GCODES_ITEM(MSG_UBL_DEACTIVATE_MESH, F("G29D"));
else
GCODES_ITEM(MSG_UBL_ACTIVATE_MESH, F("G29A"));
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
editable.decimal = planner.z_fade_height;
EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, []{ set_z_fade_height(editable.decimal); });
#endif
#if ENABLED(G26_MESH_VALIDATION)
SUBMENU(MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
#endif
#if ENABLED(UBL_MESH_WIZARD)
SUBMENU(MSG_UBL_MESH_WIZARD, _menu_ubl_mesh_wizard);
#endif
ACTION_ITEM(MSG_UBL_MESH_EDIT, _ubl_goto_map_screen);
SUBMENU(MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
SUBMENU(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
SUBMENU(MSG_UBL_TOOLS, _menu_ubl_tools);
GCODES_ITEM(MSG_UBL_INFO_UBL, F("G29W"));
END_MENU();
}
#endif // HAS_MARLINUI_MENU && AUTO_BED_LEVELING_UBL

View File

@ -0,0 +1,213 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(X_AXIS_TWIST_COMPENSATION)
#include "menu_item.h"
#include "menu_addon.h"
#include "../../module/planner.h"
#include "../../feature/bedlevel/bedlevel.h"
#include "../../feature/x_twist.h"
#include "../../module/motion.h"
#include "../../gcode/queue.h"
#include "../../module/probe.h"
#ifndef XATC_Y_POSITION
#define XATC_Y_POSITION ((probe.max_y() - probe.min_y())/2)
#endif
void _goto_manual_move_z(const_float_t);
float measured_z, z_offset;
//
// Step 9: X Axis Twist Compensation Wizard is finished.
//
void xatc_wizard_done() {
if (!ui.wait_for_move) {
xatc.print_points();
set_bed_leveling_enabled(leveling_was_active);
SET_SOFT_ENDSTOP_LOOSE(false);
ui.goto_screen(menu_advanced_settings);
}
if (ui.should_draw())
MenuItem_static::draw(LCD_HEIGHT >= 4, GET_TEXT_F(MSG_XATC_DONE));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
void xatc_wizard_goto_next_point();
//
// Step 8: Ask the user if he wants to update the z-offset of the probe
//
void xatc_wizard_update_z_offset() {
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_YES), GET_TEXT_F(MSG_NO)
, []{
probe.offset.z = z_offset;
ui.goto_screen(xatc_wizard_done);
}
, xatc_wizard_done
, GET_TEXT_F(MSG_XATC_UPDATE_Z_OFFSET)
, ftostr42_52(z_offset), F("?")
);
}
//
// Step 7: Set the Z-offset for this point and go to the next one.
//
void xatc_wizard_set_offset_and_go_to_next_point() {
// Set Z-offset at probed point
xatc.z_offset[manual_probe_index++] = probe.offset.z + current_position.z - measured_z;
// Go to next point
ui.goto_screen(xatc_wizard_goto_next_point);
}
//
// Step 6: Wizard Menu. Move the nozzle down until it touches the bed.
//
void xatc_wizard_menu() {
START_MENU();
float calculated_z_offset = probe.offset.z + current_position.z - measured_z;
if (LCD_HEIGHT >= 4)
STATIC_ITEM(MSG_MOVE_NOZZLE_TO_BED, SS_CENTER|SS_INVERT);
STATIC_ITEM_F(F("Z="), SS_CENTER, ftostr42_52(current_position.z));
STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_LEFT, ftostr42_52(calculated_z_offset));
SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move_z( 1); });
SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
ACTION_ITEM(MSG_BUTTON_DONE, xatc_wizard_set_offset_and_go_to_next_point);
END_MENU();
}
//
// Step 5: Display "Next point: 1 / 9" while waiting for move to finish
//
void xatc_wizard_moving() {
if (ui.should_draw()) {
char msg[10];
sprintf_P(msg, PSTR("%i / %u"), manual_probe_index + 1, XATC_MAX_POINTS);
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_LEVEL_BED_NEXT_POINT), msg);
}
ui.refresh(LCDVIEW_CALL_NO_REDRAW);
if (!ui.wait_for_move) ui.goto_screen(xatc_wizard_menu);
}
//
// Step 4: Initiate a move to the next point
//
void xatc_wizard_goto_next_point() {
if (manual_probe_index < XATC_MAX_POINTS) {
const float x = xatc.start + manual_probe_index * xatc.spacing;
// Avoid probing outside the round or hexagonal area
if (!TERN0(IS_KINEMATIC, !probe.can_reach(x, XATC_Y_POSITION))) {
ui.wait_for_move = true;
ui.goto_screen(xatc_wizard_moving);
// Deploy certain probes before starting probing
TERN_(BLTOUCH, do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE));
xatc.set_enabled(false);
measured_z = probe.probe_at_point(x, XATC_Y_POSITION, PROBE_PT_STOW);
xatc.set_enabled(true);
current_position += probe.offset_xy;
current_position.z = (XATC_START_Z) - probe.offset.z + measured_z;
line_to_current_position(MMM_TO_MMS(XY_PROBE_FEEDRATE));
ui.wait_for_move = false;
}
else
manual_probe_index++; // Go to next point
}
else {
// Compute the z-offset by averaging the values found with this wizard
z_offset = 0;
LOOP_L_N(i, XATC_MAX_POINTS) z_offset += xatc.z_offset[i];
z_offset /= XATC_MAX_POINTS;
// Subtract the average from the values found with this wizard.
// This way they are indipendent from the z-offset
LOOP_L_N(i, XATC_MAX_POINTS) xatc.z_offset[i] -= z_offset;
ui.goto_screen(xatc_wizard_update_z_offset);
}
}
//
// Step 3: Display "Click to Begin", wait for click
// Move to the first probe position
//
void xatc_wizard_homing_done() {
if (ui.should_draw()) {
MenuItem_static::draw(1, GET_TEXT_F(MSG_LEVEL_BED_WAITING));
// Color UI needs a control to detect a touch
#if BOTH(TOUCH_SCREEN, HAS_GRAPHICAL_TFT)
touch.add_control(CLICK, 0, 0, TFT_WIDTH, TFT_HEIGHT);
#endif
}
if (ui.use_click()) {
xatc.reset();
SET_SOFT_ENDSTOP_LOOSE(true); // Disable soft endstops for free Z movement
ui.goto_screen(xatc_wizard_goto_next_point);
}
}
//
// Step 2: Display "Homing XYZ" - Wait for homing to finish
//
void xatc_wizard_homing() {
_lcd_draw_homing();
if (all_axes_homed())
ui.goto_screen(xatc_wizard_homing_done);
}
//
// Step 1: Prepare for the wizard...
//
void xatc_wizard_continue() {
// Store Bed-Leveling-State and disable
#if HAS_LEVELING
leveling_was_active = planner.leveling_active;
set_bed_leveling_enabled(false);
#endif
// Home all axes
ui.defer_status_screen();
set_all_unhomed();
ui.goto_screen(xatc_wizard_homing);
queue.inject_P(G28_STR);
}
#endif // X_AXIS_TWIST_COMPENSATION