Procházet zdrojové kódy

New ML support - migration - fix_source_1.sh script (replace 'MSG_xx' with '_T(MSG_xx)')
+ output + fixed source

Robert Pelnar před 6 roky
rodič
revize
2cf20c8c99

+ 77 - 77
Firmware/Marlin_main.cpp

@@ -664,11 +664,11 @@ void crashdet_detected(uint8_t mask)
 #ifdef AUTOMATIC_RECOVERY_AFTER_CRASH
     bool yesno = true;
 #else
-    bool yesno = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_CRASH_DETECTED, false);
+    bool yesno = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_CRASH_DETECTED), false);
 #endif
 	lcd_update_enable(true);
 	lcd_update(2);
-	lcd_setstatuspgm(MSG_CRASH_DETECTED);
+	lcd_setstatuspgm(_T(MSG_CRASH_DETECTED));
 	if (yesno)
 	{
 		enquecommand_P(PSTR("G28 X Y"));
@@ -1008,12 +1008,12 @@ void setup()
 
 	// Check startup - does nothing if bootloader sets MCUSR to 0
 	byte mcu = MCUSR;
-/*	if (mcu & 1) SERIAL_ECHOLNRPGM(MSG_POWERUP);
+/*	if (mcu & 1) SERIAL_ECHOLNRPGM(_T(MSG_POWERUP));
 	if (mcu & 2) SERIAL_ECHOLNRPGM(MSG_EXTERNAL_RESET);
 	if (mcu & 4) SERIAL_ECHOLNRPGM(MSG_BROWNOUT_RESET);
 	if (mcu & 8) SERIAL_ECHOLNRPGM(MSG_WATCHDOG_RESET);
 	if (mcu & 32) SERIAL_ECHOLNRPGM(MSG_SOFTWARE_RESET);*/
-	if (mcu & 1) puts_P(MSG_POWERUP);
+	if (mcu & 1) puts_P(_T(MSG_POWERUP));
 	if (mcu & 2) puts_P(MSG_EXTERNAL_RESET);
 	if (mcu & 4) puts_P(MSG_BROWNOUT_RESET);
 	if (mcu & 8) puts_P(MSG_WATCHDOG_RESET);
@@ -1348,11 +1348,11 @@ void setup()
 		  // Reset the babystepping values, so the printer will not move the Z axis up when the babystepping is enabled.
 		  eeprom_update_word((uint16_t*)EEPROM_BABYSTEP_Z, 0);
 		  // Show the message.
-		  lcd_show_fullscreen_message_and_wait_P(MSG_FOLLOW_CALIBRATION_FLOW);
+		  lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_CALIBRATION_FLOW));
 	  }
 	  else if (calibration_status() == CALIBRATION_STATUS_LIVE_ADJUST) {
 		  // Show the message.
-		  lcd_show_fullscreen_message_and_wait_P(MSG_BABYSTEP_Z_NOT_SET);
+		  lcd_show_fullscreen_message_and_wait_P(_T(MSG_BABYSTEP_Z_NOT_SET));
 		  lcd_update_enable(true);
 	  }
 	  else if (calibration_status() == CALIBRATION_STATUS_CALIBRATED && temp_cal_active == true && calibration_status_pinda() == false) {
@@ -1361,7 +1361,7 @@ void setup()
 	  }
 	  else if (calibration_status() == CALIBRATION_STATUS_Z_CALIBRATION) {
 		  // Show the message.
-		  lcd_show_fullscreen_message_and_wait_P(MSG_FOLLOW_CALIBRATION_FLOW);
+		  lcd_show_fullscreen_message_and_wait_P(_T(MSG_FOLLOW_CALIBRATION_FLOW));
 	  }
   }
 
@@ -1404,12 +1404,12 @@ void setup()
 #ifdef UVLO_SUPPORT
   if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 1) { //previous print was terminated by UVLO
 /*
-	  if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT, false))	recover_print();
+	  if (lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false))	recover_print();
 	  else {
 		  eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0);
 		  lcd_update_enable(true);
 		  lcd_update(2);
-		  lcd_setstatuspgm(WELCOME_MSG);
+		  lcd_setstatuspgm(_T(WELCOME_MSG));
 	  }
 */
       manage_heater(); // Update temperatures 
@@ -1430,12 +1430,12 @@ void setup()
           #ifdef DEBUG_UVLO_AUTOMATIC_RECOVER 
         MYSERIAL.println("Normal recovery!"); 
           #endif 
-          if ( lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT, false) ) recover_print(0); 
+          if ( lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false) ) recover_print(0); 
           else { 
               eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); 
               lcd_update_enable(true); 
               lcd_update(2); 
-              lcd_setstatuspgm(WELCOME_MSG); 
+              lcd_setstatuspgm(_T(WELCOME_MSG)); 
           } 
            
       } 
@@ -1630,7 +1630,7 @@ void loop()
           if(card.logging)
             process_commands();
           else
-           SERIAL_PROTOCOLLNRPGM(MSG_OK);
+           SERIAL_PROTOCOLLNRPGM(_T(MSG_OK));
         } else {
           card.closefile();
           SERIAL_PROTOCOLLNRPGM(MSG_FILE_SAVED);
@@ -1880,7 +1880,7 @@ static float probe_pt(float x, float y, float z_before) {
   run_z_probe();
   float measured_z = current_position[Z_AXIS];
 
-  SERIAL_PROTOCOLRPGM(MSG_BED);
+  SERIAL_PROTOCOLRPGM(_T(MSG_BED));
   SERIAL_PROTOCOLPGM(" x: ");
   SERIAL_PROTOCOL(x);
   SERIAL_PROTOCOLPGM(" y: ");
@@ -1943,9 +1943,9 @@ bool check_commands() {
 #ifdef TMC2130
 bool calibrate_z_auto()
 {
-	//lcd_display_message_fullscreen_P(MSG_CALIBRATE_Z_AUTO);
+	//lcd_display_message_fullscreen_P(_T(MSG_CALIBRATE_Z_AUTO));
 	lcd_implementation_clear();
-	lcd_print_at_PGM(0,1, MSG_CALIBRATE_Z_AUTO);
+	lcd_print_at_PGM(0,1, _T(MSG_CALIBRATE_Z_AUTO));
 	bool endstops_enabled  = enable_endstops(true);
 	int axis_up_dir = -home_dir(Z_AXIS);
 	tmc2130_home_enter(Z_AXIS_MASK);
@@ -2299,7 +2299,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
 	// Home in the XY plane.
 	//set_destination_to_current();
 	setup_for_endstop_move();
-	lcd_display_message_fullscreen_P(MSG_AUTO_HOME);
+	lcd_display_message_fullscreen_P(_T(MSG_AUTO_HOME));
 	home_xy();
 
 	enable_endstops(false);
@@ -2327,15 +2327,15 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
 		{
 			KEEPALIVE_STATE(PAUSED_FOR_USER);
 			#ifdef STEEL_SHEET
-			bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false);
-			if(result) lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET);
+			bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false);
+			if(result) lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET));
 			#endif //STEEL_SHEET
-			lcd_show_fullscreen_message_and_wait_P(MSG_CONFIRM_NOZZLE_CLEAN);
-		    lcd_show_fullscreen_message_and_wait_P(MSG_PAPER);
+			lcd_show_fullscreen_message_and_wait_P(_T(MSG_CONFIRM_NOZZLE_CLEAN));
+		    lcd_show_fullscreen_message_and_wait_P(_T(MSG_PAPER));
 			KEEPALIVE_STATE(IN_HANDLER);
-			lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1);
+			lcd_display_message_fullscreen_P(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1));
 			lcd_implementation_print_at(0, 2, 1);
-			lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2);
+			lcd_printPGM(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2));
 		}
 		// Move the print head close to the bed.
 		current_position[Z_AXIS] = MESH_HOME_Z_SEARCH;
@@ -2428,7 +2428,7 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
 				{
 					// Calibration valid, the machine should be able to print. Advise the user to run the V2Calibration.gcode.
 					calibration_status_store(CALIBRATION_STATUS_LIVE_ADJUST);
-					if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) != 1) lcd_show_fullscreen_message_and_wait_P(MSG_BABYSTEP_Z_NOT_SET);
+					if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) != 1) lcd_show_fullscreen_message_and_wait_P(_T(MSG_BABYSTEP_Z_NOT_SET));
 					final_result = true;
 				}
 			}
@@ -2485,7 +2485,7 @@ void gcode_M701()
 	custom_message = true;
 	custom_message_type = 2;
 
-	lcd_setstatuspgm(MSG_LOADING_FILAMENT);
+	lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT));
 	current_position[E_AXIS] += 70;
 	plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence
 
@@ -2498,7 +2498,7 @@ void gcode_M701()
 	noTone(BEEPER);
 
 	if (!farm_mode && loading_flag) {
-		bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true);
+		bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_CLEAN), false, true);
 
 		while (!clean) {
 			lcd_update_enable(true);
@@ -2506,14 +2506,14 @@ void gcode_M701()
 			current_position[E_AXIS] += 25;
 			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 100 / 60, active_extruder); //slow sequence
 			st_synchronize();
-			clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true);
+			clean = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_FILAMENT_CLEAN), false, true);
 
 		}
 
 	}
 	lcd_update_enable(true);
 	lcd_update(2);
-	lcd_setstatuspgm(WELCOME_MSG);
+	lcd_setstatuspgm(_T(WELCOME_MSG));
 	disable_z();
 	loading_flag = false;
 	custom_message = false;
@@ -2777,7 +2777,7 @@ void process_commands()
                         disable_e2();
                         delay(100);
                         
-                        //LCD_ALERTMESSAGEPGM(MSG_FILAMENTCHANGE);
+                        //LCD_ALERTMESSAGEPGM(_T(MSG_FILAMENTCHANGE));
                         uint8_t cnt=0;
                         int counterBeep = 0;
                         lcd_wait_interact();
@@ -3405,7 +3405,7 @@ void process_commands()
             feedrate = homing_feedrate[Z_AXIS];
 
             run_z_probe();
-            SERIAL_PROTOCOLPGM(MSG_BED);
+            SERIAL_PROTOCOLPGM(_T(MSG_BED));
             SERIAL_PROTOCOLPGM(" X: ");
             SERIAL_PROTOCOL(current_position[X_AXIS]);
             SERIAL_PROTOCOLPGM(" Y: ");
@@ -3437,7 +3437,7 @@ void process_commands()
             feedrate = homing_feedrate[Z_AXIS];
 
             find_bed_induction_sensor_point_z(-10.f, 3);
-            SERIAL_PROTOCOLRPGM(MSG_BED);
+            SERIAL_PROTOCOLRPGM(_T(MSG_BED));
             SERIAL_PROTOCOLPGM(" X: ");
             MYSERIAL.print(current_position[X_AXIS], 5);
             SERIAL_PROTOCOLPGM(" Y: ");
@@ -3475,7 +3475,7 @@ void process_commands()
 				break;
 			}
 			lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4
-			bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false);
+			bool result = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false);
 			
 			if (result)
 			{
@@ -3483,7 +3483,7 @@ void process_commands()
 				current_position[Y_AXIS] += 180;
 				plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
 				st_synchronize();
-				lcd_show_fullscreen_message_and_wait_P(MSG_REMOVE_STEEL_SHEET);
+				lcd_show_fullscreen_message_and_wait_P(_T(MSG_REMOVE_STEEL_SHEET));
 				current_position[Y_AXIS] -= 180;
 				plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder);
 				st_synchronize();
@@ -3521,7 +3521,7 @@ void process_commands()
 			custom_message = true;
 			custom_message_type = 4;
 			custom_message_state = 1;
-			custom_message = MSG_TEMP_CALIBRATION;
+			custom_message = _T(MSG_TEMP_CALIBRATION);
 			current_position[X_AXIS] = PINDA_PREHEAT_X;
 			current_position[Y_AXIS] = PINDA_PREHEAT_Y;
 			current_position[Z_AXIS] = PINDA_PREHEAT_Z;
@@ -3637,7 +3637,7 @@ void process_commands()
 		custom_message = true;
 		custom_message_type = 4;
 		custom_message_state = 1;
-		custom_message = MSG_TEMP_CALIBRATION;
+		custom_message = _T(MSG_TEMP_CALIBRATION);
 		current_position[X_AXIS] = PINDA_PREHEAT_X;
 		current_position[Y_AXIS] = PINDA_PREHEAT_Y;
 		current_position[Z_AXIS] = PINDA_PREHEAT_Z;
@@ -3726,7 +3726,7 @@ void process_commands()
 			disable_e1();
 			disable_e2();
 			setTargetBed(0); //set bed target temperature back to 0
-		lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CALIBRATION_DONE);
+		lcd_show_fullscreen_message_and_wait_P(_T(MSG_TEMP_CALIBRATION_DONE));
 		temp_cal_active = true;
 		eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, 1);
 		lcd_update_enable(true);
@@ -3803,7 +3803,7 @@ void process_commands()
 		//previously enqueued "G28 W0" failed (crash Z)
 		if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && !axis_known_position[Z_AXIS] && (READ(Z_TMC2130_DIAG) != 0))
 		{
-			kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
+			kill(_T(MSG_BED_LEVELING_FAILED_POINT_LOW));
 			break;
 		}
 #endif //TMC2130
@@ -3955,7 +3955,7 @@ void process_commands()
 			// Go down until endstop is hit
 			const float Z_CALIBRATION_THRESHOLD = 1.f;
 			if (!find_bed_induction_sensor_point_z((has_z && mesh_point > 0) ? z0 - Z_CALIBRATION_THRESHOLD : -10.f)) { //if we have data from z calibration max allowed difference is 1mm for each point, if we dont have data max difference is 10mm from initial point  
-				kill_message = MSG_BED_LEVELING_FAILED_POINT_LOW;
+				kill_message = _T(MSG_BED_LEVELING_FAILED_POINT_LOW);
 				break;
 			}
 			if (MESH_HOME_Z_SEARCH - current_position[Z_AXIS] < 0.1f) {
@@ -4317,7 +4317,7 @@ void process_commands()
       if (IS_SD_PRINTING)
         LCD_MESSAGERPGM(_i("Resuming print"));////MSG_RESUMING c=0 r=0
       else
-        LCD_MESSAGERPGM(WELCOME_MSG);
+        LCD_MESSAGERPGM(_T(WELCOME_MSG));
     }
     break;
 #endif
@@ -4945,7 +4945,7 @@ Sigma_Exit:
       if(setTargetedHotend(109)){
         break;
       }
-      LCD_MESSAGERPGM(MSG_HEATING);
+      LCD_MESSAGERPGM(_T(MSG_HEATING));
 	  heating_status = 1;
 	  if (farm_mode) { prusa_statistics(1); };
 
@@ -4981,7 +4981,7 @@ Sigma_Exit:
 
 	  wait_for_heater(codenum); //loops until target temperature is reached
 
-        LCD_MESSAGERPGM(MSG_HEATING_COMPLETE);
+        LCD_MESSAGERPGM(_T(MSG_HEATING_COMPLETE));
 		KEEPALIVE_STATE(IN_HANDLER);
 		heating_status = 2;
 		if (farm_mode) { prusa_statistics(2); };
@@ -4992,7 +4992,7 @@ Sigma_Exit:
       break;
     case 190: // M190 - Wait for bed heater to reach target.
     #if defined(TEMP_BED_PIN) && TEMP_BED_PIN > -1
-        LCD_MESSAGERPGM(MSG_BED_HEATING);
+        LCD_MESSAGERPGM(_T(MSG_BED_HEATING));
 		heating_status = 3;
 		if (farm_mode) { prusa_statistics(1); };
         if (code_seen('S')) 
@@ -5032,7 +5032,7 @@ Sigma_Exit:
           manage_inactivity();
           lcd_update();
         }
-        LCD_MESSAGERPGM(MSG_BED_DONE);
+        LCD_MESSAGERPGM(_T(MSG_BED_DONE));
 		KEEPALIVE_STATE(IN_HANDLER);
 		heating_status = 4;
 
@@ -5069,7 +5069,7 @@ Sigma_Exit:
 
         #ifdef ULTIPANEL
           powersupply = true;
-          LCD_MESSAGERPGM(WELCOME_MSG);
+          LCD_MESSAGERPGM(_T(WELCOME_MSG));
           lcd_update();
         #endif
         break;
@@ -5100,7 +5100,7 @@ Sigma_Exit:
         MSGOFF = "Vypnuto"
         "Prusai3"" ""vypnuto""."
         
-        "Prusa i3"" "MSG_ALL[lang_selected][50]"."
+        "Prusa i3"" "_T(MSG_ALL)[lang_selected][50]"."
         */
         lcd_update();
       #endif
@@ -5230,54 +5230,54 @@ Sigma_Exit:
       #if defined(X_MIN_PIN) && X_MIN_PIN > -1
         SERIAL_PROTOCOLRPGM(_n("x_min: "));////MSG_X_MIN c=0 r=0
         if(READ(X_MIN_PIN)^X_MIN_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
       #if defined(X_MAX_PIN) && X_MAX_PIN > -1
         SERIAL_PROTOCOLRPGM(_n("x_max: "));////MSG_X_MAX c=0 r=0
         if(READ(X_MAX_PIN)^X_MAX_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
       #if defined(Y_MIN_PIN) && Y_MIN_PIN > -1
         SERIAL_PROTOCOLRPGM(_n("y_min: "));////MSG_Y_MIN c=0 r=0
         if(READ(Y_MIN_PIN)^Y_MIN_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
       #if defined(Y_MAX_PIN) && Y_MAX_PIN > -1
         SERIAL_PROTOCOLRPGM(_n("y_max: "));////MSG_Y_MAX c=0 r=0
         if(READ(Y_MAX_PIN)^Y_MAX_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
       #if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
         SERIAL_PROTOCOLRPGM(MSG_Z_MIN);
         if(READ(Z_MIN_PIN)^Z_MIN_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
       #if defined(Z_MAX_PIN) && Z_MAX_PIN > -1
         SERIAL_PROTOCOLRPGM(MSG_Z_MAX);
         if(READ(Z_MAX_PIN)^Z_MAX_ENDSTOP_INVERTING){
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_HIT));
         }else{
-          SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
+          SERIAL_PROTOCOLRPGM(_T(MSG_ENDSTOP_OPEN));
         }
         SERIAL_PROTOCOLLN("");
       #endif
@@ -5588,7 +5588,7 @@ Sigma_Exit:
           }
         }
         else if (servo_index >= 0) {
-          SERIAL_PROTOCOL(MSG_OK);
+          SERIAL_PROTOCOL(_T(MSG_OK));
           SERIAL_PROTOCOL(" Servo ");
           SERIAL_PROTOCOL(servo_index);
           SERIAL_PROTOCOL(": ");
@@ -5636,7 +5636,7 @@ Sigma_Exit:
         #endif
 
         updatePID();
-        SERIAL_PROTOCOLRPGM(MSG_OK);
+        SERIAL_PROTOCOLRPGM(_T(MSG_OK));
         SERIAL_PROTOCOL(" p:");
         SERIAL_PROTOCOL(Kp);
         SERIAL_PROTOCOL(" i:");
@@ -5660,7 +5660,7 @@ Sigma_Exit:
         if(code_seen('D')) bedKd = scalePID_d(code_value());
 
         updatePID();
-       	SERIAL_PROTOCOLRPGM(MSG_OK);
+       	SERIAL_PROTOCOLRPGM(_T(MSG_OK));
         SERIAL_PROTOCOL(" p:");
         SERIAL_PROTOCOL(bedKp);
         SERIAL_PROTOCOL(" i:");
@@ -5788,7 +5788,7 @@ Sigma_Exit:
         {
           zprobe_zoffset = -value; // compare w/ line 278 of ConfigurationStore.cpp
           SERIAL_ECHO_START;
-          SERIAL_ECHOLNRPGM(CAT4(MSG_ZPROBE_ZOFFSET, " ", MSG_OK,PSTR("")));
+          SERIAL_ECHOLNRPGM(CAT4(MSG_ZPROBE_ZOFFSET, " ", _T(MSG_OK),PSTR("")));
           SERIAL_PROTOCOLLN("");
         }
         else
@@ -5911,7 +5911,7 @@ Sigma_Exit:
 		fanSpeed = 0;
 		unsigned long waiting_start_time = millis();
 		uint8_t wait_for_user_state = 0;
-		lcd_display_message_fullscreen_P(MSG_PRESS_TO_UNLOAD);
+		lcd_display_message_fullscreen_P(_T(MSG_PRESS_TO_UNLOAD));
 		while (!(wait_for_user_state == 0 && lcd_clicked())){
 
 			//cnt++;
@@ -5977,7 +5977,7 @@ Sigma_Exit:
 			case 2:
 
 				if (abs(degTargetHotend(active_extruder) - degHotend(active_extruder)) < 1) {
-					lcd_display_message_fullscreen_P(MSG_PRESS_TO_UNLOAD);
+					lcd_display_message_fullscreen_P(_T(MSG_PRESS_TO_UNLOAD));
 					waiting_start_time = millis();
 					wait_for_user_state = 0;
 				}
@@ -5997,10 +5997,10 @@ Sigma_Exit:
 		
 
 		// Unload filament
-			lcd_display_message_fullscreen_P(MSG_UNLOADING_FILAMENT);
+			lcd_display_message_fullscreen_P(_T(MSG_UNLOADING_FILAMENT));
 			KEEPALIVE_STATE(IN_HANDLER);
 			custom_message = true;
-			lcd_setstatuspgm(MSG_UNLOADING_FILAMENT);
+			lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT));
 
 			if (code_seen('L'))
 			{
@@ -6074,7 +6074,7 @@ Sigma_Exit:
 			//finish moves
 			st_synchronize();
 
-			lcd_display_message_fullscreen_P(MSG_PULL_OUT_FILAMENT);
+			lcd_display_message_fullscreen_P(_T(MSG_PULL_OUT_FILAMENT));
 			
 			//disable extruder steppers so filament can be removed
 			disable_e0();
@@ -6268,7 +6268,7 @@ Sigma_Exit:
       sprintf_P(cmd, PSTR("M220 S%i"), feedmultiplyBckp);
       enquecommand(cmd);
       
-	  lcd_setstatuspgm(WELCOME_MSG);
+	  lcd_setstatuspgm(_T(WELCOME_MSG));
 	  custom_message = false;
 	  custom_message_type = 0;
 
@@ -6315,7 +6315,7 @@ Sigma_Exit:
 			break;
 		}
 
-		LCD_MESSAGERPGM(MSG_PLEASE_WAIT);
+		LCD_MESSAGERPGM(_T(MSG_PLEASE_WAIT));
 
 		SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:");
 		SERIAL_PROTOCOL(setTargetPinda);
@@ -6340,7 +6340,7 @@ Sigma_Exit:
 			manage_inactivity();
 			lcd_update();
 		}
-		LCD_MESSAGERPGM(MSG_OK);
+		LCD_MESSAGERPGM(_T(MSG_OK));
 
 		break;
 	}
@@ -6612,7 +6612,7 @@ Sigma_Exit:
 #endif //PAT9125
 		custom_message = true;
 		custom_message_type = 2;
-		lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); 
+		lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT)); 
 
 //		extr_unload2();
 		
@@ -6626,7 +6626,7 @@ Sigma_Exit:
         plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 1000 / 60, active_extruder);
 		st_synchronize();
 
-		lcd_display_message_fullscreen_P(MSG_PULL_OUT_FILAMENT);
+		lcd_display_message_fullscreen_P(_T(MSG_PULL_OUT_FILAMENT));
 
 		//disable extruder steppers so filament can be removed
 		disable_e0();
@@ -6648,7 +6648,7 @@ Sigma_Exit:
 
 		lcd_update_enable(true);
 	
-		lcd_setstatuspgm(WELCOME_MSG);
+		lcd_setstatuspgm(_T(WELCOME_MSG));
 		custom_message = false;
 		custom_message_type = 0;
 #ifdef PAT9125
@@ -6844,7 +6844,7 @@ void FlushSerialRequestResend()
   SERIAL_PROTOCOLRPGM(_i("Resend: "));////MSG_RESEND c=0 r=0
   SERIAL_PROTOCOLLN(gcode_LastN + 1);
   previous_millis_cmd = millis();
-  SERIAL_PROTOCOLLNRPGM(MSG_OK);
+  SERIAL_PROTOCOLLNRPGM(_T(MSG_OK));
 }
 
 // Confirm the execution of a command, if sent from a serial line.
@@ -6853,7 +6853,7 @@ void ClearToSend()
 {
     previous_millis_cmd = millis();
     if (CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_USB)
-        SERIAL_PROTOCOLLNRPGM(MSG_OK);
+        SERIAL_PROTOCOLLNRPGM(_T(MSG_OK));
 }
 
 #if MOTHERBOARD == BOARD_RAMBO_MINI_1_0 || MOTHERBOARD == BOARD_RAMBO_MINI_1_3
@@ -7191,9 +7191,9 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s
                     lcd_update_enable(false);
                     lcd_implementation_clear();
                     lcd.setCursor(0, 0);
-                    lcd_printPGM(MSG_ERROR);
+                    lcd_printPGM(_T(MSG_ERROR));
                     lcd.setCursor(0, 2);
-                    lcd_printPGM(MSG_PREHEAT_NOZZLE);
+                    lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
                     delay(2000);
                     lcd_implementation_clear();
                     lcd_update_enable(true);
@@ -7351,8 +7351,8 @@ void Stop()
     Stopped = true;
     Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
     SERIAL_ERROR_START;
-    SERIAL_ERRORLNRPGM(MSG_ERR_STOPPED);
-    LCD_MESSAGERPGM(MSG_STOPPED);
+    SERIAL_ERRORLNRPGM(_T(MSG_ERR_STOPPED));
+    LCD_MESSAGERPGM(_T(MSG_STOPPED));
   }
 }
 

+ 7 - 7
Firmware/cardreader.cpp

@@ -211,7 +211,7 @@ void CardReader::initsd()
   /*
   if(!workDir.openRoot(&volume))
   {
-    SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL);
+    SERIAL_ECHOLNPGM(_T(MSG_SD_WORKDIR_FAIL));
   }
   */
   
@@ -221,7 +221,7 @@ void CardReader::setroot()
 {
   /*if(!workDir.openRoot(&volume))
   {
-    SERIAL_ECHOLNPGM(MSG_SD_WORKDIR_FAIL);
+    SERIAL_ECHOLNPGM(_T(MSG_SD_WORKDIR_FAIL));
   }*/
   workDir=root;
   
@@ -360,7 +360,7 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/)
         SERIAL_ECHOLN(subdirname);
         if(!myDir.open(curDir,subdirname,O_READ))
         {
-          SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
+          SERIAL_PROTOCOLRPGM(_T(MSG_SD_OPEN_FILE_FAIL));
           SERIAL_PROTOCOL(subdirname);
           SERIAL_PROTOCOLLNPGM(".");
           return;
@@ -405,7 +405,7 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/)
     }
     else
     {
-      SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
+      SERIAL_PROTOCOLRPGM(_T(MSG_SD_OPEN_FILE_FAIL));
       SERIAL_PROTOCOL(fname);
       SERIAL_PROTOCOLLNPGM(".");
     }
@@ -414,7 +414,7 @@ void CardReader::openFile(char* name,bool read, bool replace_current/*=true*/)
   { //write
     if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC))
     {
-      SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
+      SERIAL_PROTOCOLRPGM(_T(MSG_SD_OPEN_FILE_FAIL));
       SERIAL_PROTOCOL(fname);
       SERIAL_PROTOCOLLNPGM(".");
     }
@@ -546,7 +546,7 @@ void CardReader::write_command(char *buf)
   if (file.writeError)
   {
     SERIAL_ERROR_START;
-    SERIAL_ERRORLNRPGM(MSG_SD_ERR_WRITE_TO_FILE);
+    SERIAL_ERRORLNRPGM(_T(MSG_SD_ERR_WRITE_TO_FILE));
   }
 }
 
@@ -558,7 +558,7 @@ void CardReader::write_command_no_newline(char *buf)
   if (file.writeError)
   {
     SERIAL_ERROR_START;
-    SERIAL_ERRORLNRPGM(MSG_SD_ERR_WRITE_TO_FILE);
+    SERIAL_ERRORLNRPGM(_T(MSG_SD_ERR_WRITE_TO_FILE));
     MYSERIAL.println("An error while writing to the SD Card.");
   }
 }

+ 4 - 4
Firmware/cmdqueue.cpp

@@ -286,7 +286,7 @@ void enquecommand(const char *cmd, bool from_progmem)
         else
             strcpy(cmdbuffer + bufindw + CMDHDRSIZE, cmd);
         SERIAL_ECHO_START;
-        SERIAL_ECHORPGM(MSG_Enqueing);
+        SERIAL_ECHORPGM(_T(MSG_Enqueing));
         SERIAL_ECHO(cmdbuffer + bufindw + CMDHDRSIZE);
         SERIAL_ECHOLNPGM("\"");
         bufindw += len + (CMDHDRSIZE + 1);
@@ -298,7 +298,7 @@ void enquecommand(const char *cmd, bool from_progmem)
 #endif /* CMDBUFFER_DEBUG */
     } else {
         SERIAL_ERROR_START;
-        SERIAL_ECHORPGM(MSG_Enqueing);
+        SERIAL_ECHORPGM(_T(MSG_Enqueing));
         if (from_progmem)
             SERIAL_PROTOCOLRPGM(cmd);
         else
@@ -483,8 +483,8 @@ void get_command()
             if (Stopped == true) {
                 int gcode = strtol(strchr_pointer+1, NULL, 10);
                 if (gcode >= 0 && gcode <= 3) {
-                    SERIAL_ERRORLNRPGM(MSG_ERR_STOPPED);
-                    LCD_MESSAGERPGM(MSG_STOPPED);
+                    SERIAL_ERRORLNRPGM(_T(MSG_ERR_STOPPED));
+                    LCD_MESSAGERPGM(_T(MSG_STOPPED));
                 }
             }
         } // end of 'G' command

+ 9 - 9
Firmware/mesh_bed_calibration.cpp

@@ -2182,7 +2182,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
 		#endif // SUPPORT_VERBOSITY
 #ifdef MESH_BED_CALIBRATION_SHOW_LCD
     uint8_t next_line;
-    lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1, next_line);
+    lcd_display_message_fullscreen_P(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1), next_line);
     if (next_line > 3)
         next_line = 3;
 #endif /* MESH_BED_CALIBRATION_SHOW_LCD */
@@ -2194,7 +2194,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
 		refresh_cmd_timeout();
 #ifdef MESH_BED_CALIBRATION_SHOW_LCD
 		lcd_implementation_print_at(0, next_line, k + 1);
-		lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2);
+		lcd_printPGM(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2));
 
 		if (iteration > 0) {
 			lcd_print_at_PGM(0, next_line + 1, _i("Iteration "));////MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION c=20 r=0
@@ -2725,7 +2725,7 @@ bool sample_z() {
 	go_to_current(homing_feedrate[Z_AXIS] / 60);
 	//plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder););
 
-	lcd_show_fullscreen_message_and_wait_P(MSG_PLACE_STEEL_SHEET);
+	lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET));
 
 	// Sample Z heights for the mesh bed leveling.
 	// In addition, store the results into an eeprom, to be used later for verification of the bed leveling process.
@@ -2767,12 +2767,12 @@ bool sample_mesh_and_store_reference()
 
 #ifdef MESH_BED_CALIBRATION_SHOW_LCD
     uint8_t next_line;
-    lcd_display_message_fullscreen_P(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1, next_line);
+    lcd_display_message_fullscreen_P(_T(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1), next_line);
     if (next_line > 3)
         next_line = 3;
     // display "point xx of yy"
     lcd_implementation_print_at(0, next_line, 1);
-    lcd_printPGM(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2);
+    lcd_printPGM(_T(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2));
 #endif /* MESH_BED_CALIBRATION_SHOW_LCD */
 
     // Sample Z heights for the mesh bed leveling.
@@ -2792,7 +2792,7 @@ bool sample_mesh_and_store_reference()
 #ifdef TMC2130
 		if (!axis_known_position[Z_AXIS] && (READ(Z_TMC2130_DIAG) != 0)) //Z crash
 		{
-			kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
+			kill(_T(MSG_BED_LEVELING_FAILED_POINT_LOW));
 			return false;
 		}
 #endif //TMC2130
@@ -2800,7 +2800,7 @@ bool sample_mesh_and_store_reference()
         enable_endstops(false);
 		if (!find_bed_induction_sensor_point_z()) //Z crash or deviation > 50um
 		{
-			kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
+			kill(_T(MSG_BED_LEVELING_FAILED_POINT_LOW));
 			return false;
 		}
         mbl.set_z(0, 0, current_position[Z_AXIS]);
@@ -2818,11 +2818,11 @@ bool sample_mesh_and_store_reference()
 #ifdef MESH_BED_CALIBRATION_SHOW_LCD
         // display "point xx of yy"
         lcd_implementation_print_at(0, next_line, mesh_point+1);
-        lcd_printPGM(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2);
+        lcd_printPGM(_T(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2));
 #endif /* MESH_BED_CALIBRATION_SHOW_LCD */
 		if (!find_bed_induction_sensor_point_z()) //Z crash or deviation > 50um
 		{
-			kill(MSG_BED_LEVELING_FAILED_POINT_LOW);
+			kill(_T(MSG_BED_LEVELING_FAILED_POINT_LOW));
 			return false;
 		}
         // Get cords of measuring point

+ 4 - 4
Firmware/stepper.cpp

@@ -227,18 +227,18 @@ void checkHitEndstops()
 {
  if( endstop_x_hit || endstop_y_hit || endstop_z_hit) {
    SERIAL_ECHO_START;
-   SERIAL_ECHORPGM(MSG_ENDSTOPS_HIT);
+   SERIAL_ECHORPGM(_T(MSG_ENDSTOPS_HIT));
    if(endstop_x_hit) {
      SERIAL_ECHOPAIR(" X:",(float)endstops_trigsteps[X_AXIS]/axis_steps_per_unit[X_AXIS]);
-     LCD_MESSAGERPGM(CAT2(MSG_ENDSTOPS_HIT, PSTR("X")));
+     LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("X")));
    }
    if(endstop_y_hit) {
      SERIAL_ECHOPAIR(" Y:",(float)endstops_trigsteps[Y_AXIS]/axis_steps_per_unit[Y_AXIS]);
-     LCD_MESSAGERPGM(CAT2(MSG_ENDSTOPS_HIT, PSTR("Y")));
+     LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT), PSTR("Y")));
    }
    if(endstop_z_hit) {
      SERIAL_ECHOPAIR(" Z:",(float)endstops_trigsteps[Z_AXIS]/axis_steps_per_unit[Z_AXIS]);
-     LCD_MESSAGERPGM(CAT2(MSG_ENDSTOPS_HIT,PSTR("Z")));
+     LCD_MESSAGERPGM(CAT2(_T(MSG_ENDSTOPS_HIT),PSTR("Z")));
    }
    SERIAL_ECHOLN("");
    endstop_x_hit=false;

+ 204 - 204
Firmware/ultralcd.cpp

@@ -447,7 +447,7 @@ static void lcd_status_screen()
     set_language_from_EEPROM();
      
       if(lcd_status_message_level == 0){
-          strncpy_P(lcd_status_message, WELCOME_MSG, LCD_WIDTH);
+          strncpy_P(lcd_status_message, _T(WELCOME_MSG), LCD_WIDTH);
 		lcd_finishstatus();
       }
 	if (eeprom_read_byte((uint8_t *)EEPROM_TOTALTIME) == 255 && eeprom_read_byte((uint8_t *)EEPROM_TOTALTIME + 1) == 255 && eeprom_read_byte((uint8_t *)EEPROM_TOTALTIME + 2) == 255 && eeprom_read_byte((uint8_t *)EEPROM_TOTALTIME + 3) == 255)
@@ -630,7 +630,7 @@ void lcd_commands()
 		if(lcd_commands_step == 0) {
 			if (card.sdprinting) {
 				card.pauseSDPrint();
-				lcd_setstatuspgm(MSG_FINISHING_MOVEMENTS);
+				lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS));
 				lcdDrawUpdate = 3;
 				lcd_commands_step = 1;
 			}
@@ -730,7 +730,7 @@ void lcd_commands()
 			enquecommand_P(PSTR("M190 S" STRINGIFY(PLA_PREHEAT_HPB_TEMP)));
 			enquecommand_P(PSTR("M109 S" STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)));
 			enquecommand_P(PSTR("T0"));
-			enquecommand_P(MSG_M117_V2_CALIBRATION);
+			enquecommand_P(_T(MSG_M117_V2_CALIBRATION));
 			enquecommand_P(PSTR("G87")); //sets calibration status
 			enquecommand_P(PSTR("G28"));
 			enquecommand_P(PSTR("G21")); //set units to millimeters
@@ -962,7 +962,7 @@ void lcd_commands()
 
 		if (lcd_commands_step == 1 && !blocks_queued() && cmd_buffer_empty())
 		{
-			lcd_setstatuspgm(WELCOME_MSG);
+			lcd_setstatuspgm(_T(WELCOME_MSG));
 			lcd_commands_step = 0;
 			lcd_commands_type = 0;
 			if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) {
@@ -993,7 +993,7 @@ void lcd_commands()
 			enquecommand_P(PSTR("M140 S" STRINGIFY(PLA_PREHEAT_HPB_TEMP)));
 			enquecommand_P(PSTR("M190 S" STRINGIFY(PLA_PREHEAT_HPB_TEMP)));
 			enquecommand_P(PSTR("M109 S" STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)));
-			enquecommand_P(MSG_M117_V2_CALIBRATION);
+			enquecommand_P(_T(MSG_M117_V2_CALIBRATION));
 			enquecommand_P(PSTR("G28"));
 			enquecommand_P(PSTR("G92 E0.0"));
 			lcd_commands_step = 8;
@@ -1196,7 +1196,7 @@ void lcd_commands()
 		}
 		if (lcd_commands_step == 1 && !blocks_queued() && cmd_buffer_empty())
 		{
-			lcd_setstatuspgm(WELCOME_MSG);
+			lcd_setstatuspgm(_T(WELCOME_MSG));
 			lcd_commands_step = 0;
 			lcd_commands_type = 0;			
 			if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) {
@@ -1222,7 +1222,7 @@ void lcd_commands()
 		{
 			lcd_commands_step = 0;
 			lcd_commands_type = 0;
-			lcd_setstatuspgm(WELCOME_MSG);
+			lcd_setstatuspgm(_T(WELCOME_MSG));
 			custom_message_type = 0;
 			custom_message = false;
 			isPrintPaused = false;
@@ -1233,7 +1233,7 @@ void lcd_commands()
 			enquecommand_P(PSTR("M104 S0")); //set hotend temp to 0
 
 			manage_heater();
-			lcd_setstatuspgm(WELCOME_MSG);
+			lcd_setstatuspgm(_T(WELCOME_MSG));
 			cancel_heatup = false;
 			lcd_commands_step = 1;
 		}
@@ -1246,7 +1246,7 @@ void lcd_commands()
 		}
 		if (lcd_commands_step == 4 && !blocks_queued())
 		{
-			lcd_setstatuspgm(MSG_PLEASE_WAIT);
+			lcd_setstatuspgm(_T(MSG_PLEASE_WAIT));
       // G90: Absolute positioning.
 			enquecommand_P(PSTR("G90"));
       // M83: Set extruder to relative mode.
@@ -1265,7 +1265,7 @@ void lcd_commands()
 		}
 		if (lcd_commands_step == 5 && !blocks_queued())
 		{
-			lcd_setstatuspgm(MSG_PRINT_ABORTED);
+			lcd_setstatuspgm(_T(MSG_PRINT_ABORTED));
       // G91: Set to relative positioning.
 			enquecommand_P(PSTR("G91"));
       // Lift up.
@@ -1275,7 +1275,7 @@ void lcd_commands()
 		}
 		if (lcd_commands_step == 6 && !blocks_queued())
 		{
-			lcd_setstatuspgm(MSG_PRINT_ABORTED);
+			lcd_setstatuspgm(_T(MSG_PRINT_ABORTED));
 			cancel_heatup = true;
 			setTargetBed(0);
 			#ifndef SNMM
@@ -1387,7 +1387,7 @@ void lcd_commands()
 			lcd_commands_step = 1;
 		}
 		if ((lcd_commands_step == 1) && ((millis()- display_time)>2000)) { //calibration finished message
-			lcd_setstatuspgm(WELCOME_MSG);
+			lcd_setstatuspgm(_T(WELCOME_MSG));
 			custom_message_type = 0;
 			custom_message = false;
 			pid_temp = DEFAULT_PID_TEMP;
@@ -1644,7 +1644,7 @@ static void lcd_menu_fails_stats_print()
 static void lcd_menu_fails_stats()
 {
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0);
+	MENU_ITEM(back, _T(MSG_MAIN), 0);
 	MENU_ITEM(submenu, PSTR("Last print"), lcd_menu_fails_stats_print);
 	MENU_ITEM(submenu, PSTR("Total"), lcd_menu_fails_stats_total);
 	END_MENU();
@@ -1760,12 +1760,12 @@ static void lcd_preheat_menu()
 {
   START_MENU();
 
-  MENU_ITEM(back, MSG_MAIN, 0);
+  MENU_ITEM(back, _T(MSG_MAIN), 0);
 
   if (farm_mode) {
 	  MENU_ITEM(function, PSTR("farm   -  " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FARM_PREHEAT_HPB_TEMP)), lcd_preheat_farm);
 	  MENU_ITEM(function, PSTR("nozzle -  " STRINGIFY(FARM_PREHEAT_HOTEND_TEMP) "/0"), lcd_preheat_farm_nozzle);
-	  MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown);
+	  MENU_ITEM(function, _T(MSG_COOLDOWN), lcd_cooldown);
 	  MENU_ITEM(function, PSTR("ABS    -  " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs);
   } else {
 	  MENU_ITEM(function, PSTR("PLA  -  " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)), lcd_preheat_pla);
@@ -1774,7 +1774,7 @@ static void lcd_preheat_menu()
 	  MENU_ITEM(function, PSTR("HIPS -  " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), lcd_preheat_hips);
 	  MENU_ITEM(function, PSTR("PP   -  " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)), lcd_preheat_pp);
 	  MENU_ITEM(function, PSTR("FLEX -  " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)), lcd_preheat_flex);
-	  MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown);
+	  MENU_ITEM(function, _T(MSG_COOLDOWN), lcd_cooldown);
   }
   
 
@@ -1802,7 +1802,7 @@ static void lcd_support_menu()
 
   START_MENU();
 
-  MENU_ITEM(back, MSG_MAIN, 0);
+  MENU_ITEM(back, _T(MSG_MAIN), 0);
 
   MENU_ITEM(back, PSTR("Firmware:"), 0);
   MENU_ITEM(back, PSTR(" " FW_VERSION_FULL), 0);
@@ -1880,9 +1880,9 @@ void lcd_unLoadFilament()
 
     lcd_implementation_clear();
     lcd.setCursor(0, 0);
-    lcd_printPGM(MSG_ERROR);
+    lcd_printPGM(_T(MSG_ERROR));
     lcd.setCursor(0, 2);
-    lcd_printPGM(MSG_PREHEAT_NOZZLE);
+    lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 
     delay(2000);
     lcd_implementation_clear();
@@ -1939,7 +1939,7 @@ void lcd_loading_color() {
 
   lcd_printPGM(_i("Loading color"));////MSG_LOADING_COLOR c=0 r=0
   lcd.setCursor(0, 2);
-  lcd_printPGM(MSG_PLEASE_WAIT);
+  lcd_printPGM(_T(MSG_PLEASE_WAIT));
 
 
   for (int i = 0; i < 20; i++) {
@@ -1966,9 +1966,9 @@ void lcd_loading_filament() {
 
   lcd.setCursor(0, 0);
 
-  lcd_printPGM(MSG_LOADING_FILAMENT);
+  lcd_printPGM(_T(MSG_LOADING_FILAMENT));
   lcd.setCursor(0, 2);
-  lcd_printPGM(MSG_PLEASE_WAIT);
+  lcd_printPGM(_T(MSG_PLEASE_WAIT));
 
   for (int i = 0; i < 20; i++) {
 
@@ -2008,7 +2008,7 @@ void lcd_alright() {
 
   lcd.setCursor(1, 1);
 
-  lcd_printPGM(MSG_YES);
+  lcd_printPGM(_T(MSG_YES));
 
   lcd.setCursor(1, 2);
 
@@ -2094,9 +2094,9 @@ static void lcd_menu_AutoLoadFilament()
 		Timer* ptimer = (Timer*)&(menuData.autoLoadFilamentMenu.dummy);
         if (!ptimer->running()) ptimer->start();
         lcd.setCursor(0, 0);
-        lcd_printPGM(MSG_ERROR);
+        lcd_printPGM(_T(MSG_ERROR));
         lcd.setCursor(0, 2);
-        lcd_printPGM(MSG_PREHEAT_NOZZLE);
+        lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
         if (ptimer->expired(2000ul)) menu_action_back();
     }
     if (lcd_clicked()) menu_action_back();
@@ -2118,9 +2118,9 @@ static void lcd_LoadFilament()
 
     lcd_implementation_clear();
     lcd.setCursor(0, 0);
-    lcd_printPGM(MSG_ERROR);
+    lcd_printPGM(_T(MSG_ERROR));
     lcd.setCursor(0, 2);
-    lcd_printPGM(MSG_PREHEAT_NOZZLE);
+    lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
     delay(2000);
     lcd_implementation_clear();
   }
@@ -2287,9 +2287,9 @@ static void lcd_move_e()
 	else {
 		lcd_implementation_clear();
 		lcd.setCursor(0, 0);
-		lcd_printPGM(MSG_ERROR);
+		lcd_printPGM(_T(MSG_ERROR));
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_PREHEAT_NOZZLE);
+		lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 
 		delay(2000);
 		lcd_return_to_status();
@@ -2560,7 +2560,7 @@ static void lcd_adjust_bed()
         eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR,  menuData.adjustBed.rear  = menuData.adjustBed.rear2);
 
     START_MENU();
-    MENU_ITEM(back, MSG_SETTINGS, 0);
+    MENU_ITEM(back, _T(MSG_SETTINGS), 0);
     MENU_ITEM_EDIT(int3, _i("Left side [um]"),  &menuData.adjustBed.left2,  -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_LEFT c=14 r=1
     MENU_ITEM_EDIT(int3, _i("Right side[um]"), &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_RIGHT c=14 r=1
     MENU_ITEM_EDIT(int3, _i("Front side[um]"), &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);////MSG_BED_CORRECTION_FRONT c=14 r=1
@@ -2600,11 +2600,11 @@ void lcd_adjust_z() {
   lcd.setCursor(0, 0);
   lcd_printPGM(_i("Auto adjust Z?"));////MSG_ADJUSTZ c=0 r=0
   lcd.setCursor(1, 1);
-  lcd_printPGM(MSG_YES);
+  lcd_printPGM(_T(MSG_YES));
 
   lcd.setCursor(1, 2);
 
-  lcd_printPGM(MSG_NO);
+  lcd_printPGM(_T(MSG_NO));
 
   lcd.setCursor(0, 1);
 
@@ -2702,7 +2702,7 @@ bool lcd_wait_for_pinda(float temp) {
 }
 
 void lcd_wait_for_heater() {
-	lcd_display_message_fullscreen_P(MSG_WIZARD_HEATING);
+	lcd_display_message_fullscreen_P(_T(MSG_WIZARD_HEATING));
 
 		lcd.setCursor(0, 4);
 		lcd.print(LCD_STR_THERMOMETER[0]);
@@ -2795,7 +2795,7 @@ bool lcd_calibrate_z_end_stop_manual(bool only_z)
         }
 
         if (! clean_nozzle_asked) {
-            lcd_show_fullscreen_message_and_wait_P(MSG_CONFIRM_NOZZLE_CLEAN);
+            lcd_show_fullscreen_message_and_wait_P(_T(MSG_CONFIRM_NOZZLE_CLEAN));
             clean_nozzle_asked = true;
         }
 		
@@ -2817,14 +2817,14 @@ calibrated:
     
     
     if(only_z){
-        lcd_display_message_fullscreen_P(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1);
+        lcd_display_message_fullscreen_P(_T(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1));
         lcd_implementation_print_at(0, 3, 1);
-        lcd_printPGM(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2);
+        lcd_printPGM(_T(MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2));
     }else{
-		//lcd_show_fullscreen_message_and_wait_P(MSG_PAPER);
-        lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1);
+		//lcd_show_fullscreen_message_and_wait_P(_T(MSG_PAPER));
+        lcd_display_message_fullscreen_P(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1));
         lcd_implementation_print_at(0, 2, 1);
-        lcd_printPGM(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2);
+        lcd_printPGM(_T(MSG_FIND_BED_OFFSET_AND_SKEW_LINE2));
     }
     
     
@@ -3048,11 +3048,11 @@ int8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool allo
 			lcd.setCursor(0, 3);
 			if (yes) lcd_printPGM(PSTR(">"));
 			lcd.setCursor(1, 3);
-			lcd_printPGM(MSG_YES);
+			lcd_printPGM(_T(MSG_YES));
 			lcd.setCursor(7, 3);
 			if (!yes) lcd_printPGM(PSTR(">"));
 			lcd.setCursor(8, 3);
-			lcd_printPGM(MSG_NO);
+			lcd_printPGM(_T(MSG_NO));
 		}
 	}
 }
@@ -3065,16 +3065,16 @@ int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow
 	if (default_yes) {
 		lcd.setCursor(0, 2);
 		lcd_printPGM(PSTR(">"));
-		lcd_printPGM(MSG_YES);
+		lcd_printPGM(_T(MSG_YES));
 		lcd.setCursor(1, 3);
-		lcd_printPGM(MSG_NO);
+		lcd_printPGM(_T(MSG_NO));
 	}
 	else {
 		lcd.setCursor(1, 2);
-		lcd_printPGM(MSG_YES);
+		lcd_printPGM(_T(MSG_YES));
 		lcd.setCursor(0, 3);
 		lcd_printPGM(PSTR(">"));
-		lcd_printPGM(MSG_NO);
+		lcd_printPGM(_T(MSG_NO));
 	}
 	bool yes = default_yes ? true : false;
 
@@ -3120,7 +3120,7 @@ void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, ui
         lcd_show_fullscreen_message_and_wait_P(_i("XYZ calibration failed. Bed calibration point was not found."));////MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND c=20 r=8
     } else if (result == BED_SKEW_OFFSET_DETECTION_FITTING_FAILED) {
         if (point_too_far_mask == 0)
-            msg = MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED;
+            msg = _T(MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED);
         else if (point_too_far_mask == 2 || point_too_far_mask == 7)
             // Only the center point or all the three front points.
             msg = _i("XYZ calibration failed. Front calibration points not reachable.");////MSG_BED_SKEW_OFFSET_DETECTION_FAILED_FRONT_BOTH_FAR c=20 r=8
@@ -3148,7 +3148,7 @@ void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, ui
             switch (result) {
                 default:
                     // should not happen
-                    msg = MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED;
+                    msg = _T(MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED);
                     break;
                 case BED_SKEW_OFFSET_DETECTION_PERFECT:
                     msg = _i("XYZ calibration ok. X/Y axes are perpendicular. Congratulations!");////MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
@@ -3180,7 +3180,7 @@ void lcd_temp_cal_show_result(bool result) {
 	if (result == true) {
 		eeprom_update_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, 1);
 		SERIAL_ECHOLNPGM("Temperature calibration done. Continue with pressing the knob.");
-		lcd_show_fullscreen_message_and_wait_P(MSG_TEMP_CALIBRATION_DONE);
+		lcd_show_fullscreen_message_and_wait_P(_T(MSG_TEMP_CALIBRATION_DONE));
 		temp_cal_active = true;
 		eeprom_update_byte((unsigned char *)EEPROM_TEMP_CAL_ACTIVE, 1);
 	}
@@ -3554,7 +3554,7 @@ void lcd_pick_babystep(){
 void lcd_move_menu_axis()
 {
 	START_MENU();
-	MENU_ITEM(back, MSG_SETTINGS, 0);
+	MENU_ITEM(back, _T(MSG_SETTINGS), 0);
 	MENU_ITEM(submenu, _i("Move X"), lcd_move_x);////MSG_MOVE_X c=0 r=0
 	MENU_ITEM(submenu, _i("Move Y"), lcd_move_y);////MSG_MOVE_Y c=0 r=0
 	MENU_ITEM(submenu, _i("Move Z"), lcd_move_z);////MSG_MOVE_Z c=0 r=0
@@ -3749,9 +3749,9 @@ static void lcd_language_menu()
 {
   START_MENU();
   if (langsel == LANGSEL_OFF) {
-    MENU_ITEM(back, MSG_SETTINGS, 0);
+    MENU_ITEM(back, _T(MSG_SETTINGS), 0);
   } else if (langsel == LANGSEL_ACTIVE) {
-    MENU_ITEM(back, MSG_WATCH, 0);
+    MENU_ITEM(back, _T(MSG_WATCH), 0);
   }
   for (int i=0;i<LANG_NUM;i++){
     MENU_ITEM(setlang, MSG_LANGUAGE_NAME_EXPLICIT(i), i);
@@ -3781,7 +3781,7 @@ void lcd_mesh_calibration_z()
 void lcd_pinda_calibration_menu()
 {
 	START_MENU();
-		MENU_ITEM(back, MSG_MENU_CALIBRATION, 0);
+		MENU_ITEM(back, _T(MSG_MENU_CALIBRATION), 0);
 		MENU_ITEM(submenu, _i("Calibrate"), lcd_calibrate_pinda);////MSG_CALIBRATE_PINDA c=17 r=1
 	END_MENU();
 }
@@ -3832,7 +3832,7 @@ void lcd_calibrate_pinda() {
 		lcd_implementation_clear();
 		
 		
-		lcd.setCursor(0, 1); lcd_printPGM(MSG_PLEASE_WAIT);
+		lcd.setCursor(0, 1); lcd_printPGM(_T(MSG_PLEASE_WAIT));
 		current_position[E_AXIS] += e_shift_calibration;
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate, active_extruder);
 		st_synchronize();
@@ -3887,9 +3887,9 @@ void lcd_calibrate_pinda() {
 	{
 		lcd_implementation_clear();
 		lcd.setCursor(0, 0);
-		lcd_printPGM(MSG_ERROR);
+		lcd_printPGM(_T(MSG_ERROR));
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_PREHEAT_NOZZLE);
+		lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 		delay(2000);
 		lcd_implementation_clear();
 	}
@@ -3993,8 +3993,8 @@ void lcd_wizard(int state) {
 			break;
 		case 4: //z cal.
 			lcd_show_fullscreen_message_and_wait_P(_i("I will run z calibration now."));////MSG_WIZARD_Z_CAL c=20 r=8
-			wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_STEEL_SHEET_CHECK, false, false);
-			if (!wizard_event) lcd_show_fullscreen_message_and_wait_P(MSG_PLACE_STEEL_SHEET);
+			wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_STEEL_SHEET_CHECK), false, false);
+			if (!wizard_event) lcd_show_fullscreen_message_and_wait_P(_T(MSG_PLACE_STEEL_SHEET));
 			wizard_event = gcode_M45(true, 0);
 			if (wizard_event) state = 11; //shipped, no need to set first layer, go to final message directly
 			else end = true;
@@ -4014,9 +4014,9 @@ void lcd_wizard(int state) {
 			current_position[Z_AXIS] = 100; //move in z axis to make space for loading filament
 			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[Z_AXIS] / 60, active_extruder);
 			delay_keep_alive(2000);
-			lcd_display_message_fullscreen_P(MSG_WIZARD_HEATING);
+			lcd_display_message_fullscreen_P(_T(MSG_WIZARD_HEATING));
 			while (abs(degHotend(0) - PLA_PREHEAT_HOTEND_TEMP) > 3) {
-				lcd_display_message_fullscreen_P(MSG_WIZARD_HEATING);
+				lcd_display_message_fullscreen_P(_T(MSG_WIZARD_HEATING));
 
 				lcd.setCursor(0, 4);
 				lcd.print(LCD_STR_THERMOMETER[0]);
@@ -4037,7 +4037,7 @@ void lcd_wizard(int state) {
 			lcd_show_fullscreen_message_and_wait_P(_i("Please insert PLA filament to the extruder, then press knob to load it."));////MSG_WIZARD_LOAD_FILAMENT c=20 r=8
 			lcd_update_enable(false);
 			lcd_implementation_clear();
-			lcd_print_at_PGM(0, 2, MSG_LOADING_FILAMENT);
+			lcd_print_at_PGM(0, 2, _T(MSG_LOADING_FILAMENT));
 #ifdef SNMM
 			change_extr(0);
 #endif
@@ -4081,20 +4081,20 @@ void lcd_wizard(int state) {
 	MYSERIAL.println(state);
 	switch (state) { //final message
 	case 0: //user dont want to use wizard
-		msg = MSG_WIZARD_QUIT;
+		msg = _T(MSG_WIZARD_QUIT);
 		break;
 
 	case 1: //printer was already calibrated
-		msg = MSG_WIZARD_DONE;
+		msg = _T(MSG_WIZARD_DONE);
 		break;
 	case 2: //selftest
-		msg = MSG_WIZARD_CALIBRATION_FAILED;
+		msg = _T(MSG_WIZARD_CALIBRATION_FAILED);
 		break;
 	case 3: //xyz cal.
-		msg = MSG_WIZARD_CALIBRATION_FAILED;
+		msg = _T(MSG_WIZARD_CALIBRATION_FAILED);
 		break;
 	case 4: //z cal.
-		msg = MSG_WIZARD_CALIBRATION_FAILED;
+		msg = _T(MSG_WIZARD_CALIBRATION_FAILED);
 		break;
 	case 8:
 		msg = _i("Please load PLA filament and then resume Wizard by rebooting the printer.");////MSG_WIZARD_INSERT_CORRECT_FILAMENT c=20 r=8
@@ -4102,13 +4102,13 @@ void lcd_wizard(int state) {
 	case 9: break; //exit wizard for v2 calibration, which is implemted in lcd_commands (we need lcd_update running)
 	case 11: //we are finished
 
-		msg = MSG_WIZARD_DONE;
+		msg = _T(MSG_WIZARD_DONE);
 		lcd_reset_alert_level();
-		lcd_setstatuspgm(WELCOME_MSG);
+		lcd_setstatuspgm(_T(WELCOME_MSG));
 		break;
 
 	default:
-		msg = MSG_WIZARD_QUIT;
+		msg = _T(MSG_WIZARD_QUIT);
 		break;
 
 	}
@@ -4125,7 +4125,7 @@ static void lcd_settings_menu()
   EEPROM_read(EEPROM_SILENT, (uint8_t*)&SilentModeMenu, sizeof(SilentModeMenu));
   START_MENU();
 
-  MENU_ITEM(back, MSG_MAIN, lcd_settings_menu_back);
+  MENU_ITEM(back, _T(MSG_MAIN), lcd_settings_menu_back);
 
   MENU_ITEM(submenu, _i("Temperature"), lcd_control_temperature_menu);////MSG_TEMPERATURE c=0 r=0
   if (!homing_flag)
@@ -4139,10 +4139,10 @@ static void lcd_settings_menu()
 #ifndef TMC2130
   if (!farm_mode) { //dont show in menu if we are in farm mode
 	  switch (SilentModeMenu) {
-	  case SILENT_MODE_POWER: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break;
-	  case SILENT_MODE_SILENT: MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set); break;
-	  case SILENT_MODE_AUTO: MENU_ITEM(function, MSG_AUTO_MODE_ON, lcd_silent_mode_set); break;
-	  default: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break; // (probably) not needed
+	  case SILENT_MODE_POWER: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break;
+	  case SILENT_MODE_SILENT: MENU_ITEM(function, _T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break;
+	  case SILENT_MODE_AUTO: MENU_ITEM(function, _T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break;
+	  default: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed
 	  }
   }
 #endif //TMC2130
@@ -4153,16 +4153,16 @@ static void lcd_settings_menu()
       if (fsensor_not_responding){
           // Filament sensor not working
           MENU_ITEM(function, _i("Fil. sensor [N/A]"), lcd_fsensor_state_set);////MSG_FSENSOR_NA c=0 r=0
-          MENU_ITEM(function, MSG_FSENS_AUTOLOAD_NA, lcd_fsensor_fail);
+          MENU_ITEM(function, _T(MSG_FSENS_AUTOLOAD_NA), lcd_fsensor_fail);
       }
       else{
           // Filament sensor turned off, working, no problems
-          MENU_ITEM(function, MSG_FSENSOR_OFF, lcd_fsensor_state_set);
-          MENU_ITEM(function, MSG_FSENS_AUTOLOAD_NA, lcd_filament_autoload_info);
+          MENU_ITEM(function, _T(MSG_FSENSOR_OFF), lcd_fsensor_state_set);
+          MENU_ITEM(function, _T(MSG_FSENS_AUTOLOAD_NA), lcd_filament_autoload_info);
       }
   } else {
       // Filament sensor turned on, working, no problems
-      MENU_ITEM(function, MSG_FSENSOR_ON, lcd_fsensor_state_set);
+      MENU_ITEM(function, _T(MSG_FSENSOR_ON), lcd_fsensor_state_set);
       
       if ((filament_autoload_enabled == true)) {
           MENU_ITEM(function, _i("F. autoload  [on]"), lcd_set_filament_autoload);////MSG_FSENS_AUTOLOAD_ON c=17 r=1
@@ -4186,14 +4186,14 @@ static void lcd_settings_menu()
   if(!farm_mode)
   {
 //*** MaR::180416_01a
-    if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, MSG_STEALTH_MODE_OFF, lcd_silent_mode_set);
-    else MENU_ITEM(function, MSG_STEALTH_MODE_ON, lcd_silent_mode_set);
+    if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);
+    else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);
     if (SilentModeMenu == SILENT_MODE_NORMAL)
     {
-      if (CrashDetectMenu == 0) MENU_ITEM(function, MSG_CRASHDETECT_OFF, lcd_crash_mode_set);
-      else MENU_ITEM(function, MSG_CRASHDETECT_ON, lcd_crash_mode_set);
+      if (CrashDetectMenu == 0) MENU_ITEM(function, _T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set);
+      else MENU_ITEM(function, _T(MSG_CRASHDETECT_ON), lcd_crash_mode_set);
     }
-    else MENU_ITEM(submenu, MSG_CRASHDETECT_NA, lcd_crash_mode_info);
+    else MENU_ITEM(submenu, _T(MSG_CRASHDETECT_NA), lcd_crash_mode_info);
   }
   MENU_ITEM_EDIT(wfac, _i("E-correct"),  &tmc2130_wave_fac[E_AXIS],  TMC2130_WAVE_FAC1000_MIN-TMC2130_WAVE_FAC1000_STP, TMC2130_WAVE_FAC1000_MAX);////MSG_EXTRUDER_CORRECTION c=9 r=0
 #endif //TMC2130
@@ -4215,7 +4215,7 @@ static void lcd_settings_menu()
 
   if (!isPrintPaused && !homing_flag)
 	{
-		MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);
+		MENU_ITEM(submenu, _T(MSG_BABYSTEP_Z), lcd_babystep_z);
 	}
 	MENU_ITEM(submenu, _i("Select language"), lcd_language_menu);////MSG_LANGUAGE_SELECT c=0 r=0
 
@@ -4472,7 +4472,7 @@ static void lcd_experimantal_menu_disable_all()
 static void lcd_experimantal_menu()
 {
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0);
+	MENU_ITEM(back, _T(MSG_MAIN), 0);
 	MENU_ITEM(function, PSTR("All Xfeatures off"), lcd_experimantal_menu_disable_all);
 	MENU_ITEM(submenu, PSTR("Homing accuracy"), lcd_homing_accuracy_menu);
 	MENU_ITEM(submenu, PSTR("uStep resolution"), lcd_ustep_resolution_menu);
@@ -4485,22 +4485,22 @@ static void lcd_experimantal_menu()
 static void lcd_calibration_menu()
 {
   START_MENU();
-  MENU_ITEM(back, MSG_MAIN, 0);
+  MENU_ITEM(back, _T(MSG_MAIN), 0);
   if (!isPrintPaused)
   {
 	MENU_ITEM(function, _i("Wizard"), lcd_wizard);////MSG_WIZARD c=17 r=1
 	MENU_ITEM(submenu, _i("First layer cal."), lcd_v2_calibration);////MSG_V2_CALIBRATION c=17 r=1
-	MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28 W"));
+	MENU_ITEM(gcode, _T(MSG_AUTO_HOME), PSTR("G28 W"));
 	MENU_ITEM(function, _i("Selftest         "), lcd_selftest_v);////MSG_SELFTEST c=0 r=0
 #ifdef MK1BP
     // MK1
     // "Calibrate Z"
-    MENU_ITEM(gcode, MSG_HOMEYZ, PSTR("G28 Z"));
+    MENU_ITEM(gcode, _T(MSG_HOMEYZ), PSTR("G28 Z"));
 #else //MK1BP
     // MK2
     MENU_ITEM(function, _i("Calibrate XYZ"), lcd_mesh_calibration);////MSG_CALIBRATE_BED c=0 r=0
     // "Calibrate Z" with storing the reference values to EEPROM.
-    MENU_ITEM(submenu, MSG_HOMEYZ, lcd_mesh_calibration_z);
+    MENU_ITEM(submenu, _T(MSG_HOMEYZ), lcd_mesh_calibration_z);
 #ifndef SNMM
 	//MENU_ITEM(function, _i("Calibrate E"), lcd_calibrate_extruder);////MSG_CALIBRATE_E c=20 r=1
 #endif
@@ -4529,7 +4529,7 @@ void lcd_mylang_top(int hlaska) {
     lcd.setCursor(0,0);
     lcd.print("                    ");
     lcd.setCursor(0,0);
-    lcd_printPGM(MSG_ALL[hlaska-1][LANGUAGE_SELECT]);   
+    lcd_printPGM(_T(MSG_ALL)[hlaska-1][LANGUAGE_SELECT]);   
 }
 
 void lcd_mylang_drawmenu(int cursor) {
@@ -4539,17 +4539,17 @@ void lcd_mylang_drawmenu(int cursor) {
   lcd.setCursor(0, 1);
   lcd.print("                    ");
   lcd.setCursor(1, 1);
-  lcd_printPGM(MSG_ALL[first][LANGUAGE_NAME]);
+  lcd_printPGM(_T(MSG_ALL)[first][LANGUAGE_NAME]);
 
   lcd.setCursor(0, 2);
   lcd.print("                    ");
   lcd.setCursor(1, 2);
-  lcd_printPGM(MSG_ALL[first+1][LANGUAGE_NAME]);
+  lcd_printPGM(_T(MSG_ALL)[first+1][LANGUAGE_NAME]);
 
   lcd.setCursor(0, 3);
   lcd.print("                    ");
   lcd.setCursor(1, 3);
-  lcd_printPGM(MSG_ALL[first+2][LANGUAGE_NAME]);  
+  lcd_printPGM(_T(MSG_ALL)[first+2][LANGUAGE_NAME]);  
   
   if (cursor==1) lcd.setCursor(0, 1);
   if (cursor>1 && cursor<LANG_NUM) lcd.setCursor(0, 2);
@@ -4824,9 +4824,9 @@ void bowden_menu() {
 
 static char snmm_stop_print_menu() { //menu for choosing which filaments will be unloaded in stop print
 	lcd_implementation_clear();
-	lcd_print_at_PGM(0,0,MSG_UNLOAD_FILAMENT); lcd.print(":");
+	lcd_print_at_PGM(0,0,_T(MSG_UNLOAD_FILAMENT)); lcd.print(":");
 	lcd.setCursor(0, 1); lcd.print(">");
-	lcd_print_at_PGM(1,1,MSG_ALL);
+	lcd_print_at_PGM(1,1,_T(MSG_ALL));
 	lcd_print_at_PGM(1,2,_i("Used during print"));////MSG_USED c=19 r=1
 	lcd_print_at_PGM(1,3,_i("Current"));////MSG_CURRENT c=19 r=1
 	char cursor_pos = 1;
@@ -4876,17 +4876,17 @@ char choose_extruder_menu() {
 	enc_dif = encoderDiff;
 	lcd_implementation_clear();
 	
-	lcd_printPGM(MSG_CHOOSE_EXTRUDER);
+	lcd_printPGM(_T(MSG_CHOOSE_EXTRUDER));
 	lcd.setCursor(0, 1);
 	lcd.print(">");
 	for (int i = 0; i < 3; i++) {
-		lcd_print_at_PGM(1, i + 1, MSG_EXTRUDER);
+		lcd_print_at_PGM(1, i + 1, _T(MSG_EXTRUDER));
 	}
 	KEEPALIVE_STATE(PAUSED_FOR_USER);
 	while (1) {
 
 		for (int i = 0; i < 3; i++) {
-			lcd.setCursor(2 + strlen_P(MSG_EXTRUDER), i+1);
+			lcd.setCursor(2 + strlen_P(_T(MSG_EXTRUDER)), i+1);
 			lcd.print(first + i + 1);
 		}
 
@@ -4909,9 +4909,9 @@ char choose_extruder_menu() {
 					if (first < items_no - 3) {
 						first++;
 						lcd_implementation_clear();
-						lcd_printPGM(MSG_CHOOSE_EXTRUDER);
+						lcd_printPGM(_T(MSG_CHOOSE_EXTRUDER));
 						for (int i = 0; i < 3; i++) {
-							lcd_print_at_PGM(1, i + 1, MSG_EXTRUDER);
+							lcd_print_at_PGM(1, i + 1, _T(MSG_EXTRUDER));
 						}
 					}
 				}
@@ -4921,9 +4921,9 @@ char choose_extruder_menu() {
 					if (first > 0) {
 						first--;
 						lcd_implementation_clear();
-						lcd_printPGM(MSG_CHOOSE_EXTRUDER);
+						lcd_printPGM(_T(MSG_CHOOSE_EXTRUDER));
 						for (int i = 0; i < 3; i++) {
-							lcd_print_at_PGM(1, i + 1, MSG_EXTRUDER);
+							lcd_print_at_PGM(1, i + 1, _T(MSG_EXTRUDER));
 						}
 					}
 				}
@@ -5127,10 +5127,10 @@ static int get_ext_nr() { //reads multiplexer input pins and return current extr
 
 void display_loading() {
 	switch (snmm_extruder) {
-	case 1: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T1); break;
-	case 2: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T2); break;
-	case 3: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T3); break;
-	default: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T0); break;
+	case 1: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T1)); break;
+	case 2: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T2)); break;
+	case 3: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T3)); break;
+	default: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T0)); break;
 	}
 }
 
@@ -5143,10 +5143,10 @@ void extr_adj(int extruder) //loading filament for SNMM
 	lcd_implementation_clear();
 	lcd.setCursor(0, 0); 
 	switch (extruder) {
-	case 1: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T1); break;
-	case 2: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T2); break;
-	case 3: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T3); break;
-	default: lcd_display_message_fullscreen_P(MSG_FILAMENT_LOADING_T0); break;   
+	case 1: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T1)); break;
+	case 2: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T2)); break;
+	case 3: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T3)); break;
+	default: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T0)); break;   
 	}
 	KEEPALIVE_STATE(PAUSED_FOR_USER);
 	do{
@@ -5162,11 +5162,11 @@ void extr_adj(int extruder) //loading filament for SNMM
 	//extr_mov(BOWDEN_LENGTH/2.f, 500);
 	extr_mov(bowden_length[extruder], 500);
 	lcd_implementation_clear();
-	lcd.setCursor(0, 0); lcd_printPGM(MSG_LOADING_FILAMENT);
-	if(strlen(MSG_LOADING_FILAMENT)>18) lcd.setCursor(0, 1);
+	lcd.setCursor(0, 0); lcd_printPGM(_T(MSG_LOADING_FILAMENT));
+	if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd.setCursor(0, 1);
 	else lcd.print(" ");
 	lcd.print(snmm_extruder + 1);
-	lcd.setCursor(0, 2); lcd_printPGM(MSG_PLEASE_WAIT);
+	lcd.setCursor(0, 2); lcd_printPGM(_T(MSG_PLEASE_WAIT));
 	st_synchronize();
 	max_feedrate[E_AXIS] = 50;
 	lcd_update_enable(true);
@@ -5184,10 +5184,10 @@ void extr_unload() { //unloads filament
 		lcd_implementation_clear();
 		lcd_display_message_fullscreen_P(PSTR(""));
 		max_feedrate[E_AXIS] = 50;
-		lcd.setCursor(0, 0); lcd_printPGM(MSG_UNLOADING_FILAMENT);
+		lcd.setCursor(0, 0); lcd_printPGM(_T(MSG_UNLOADING_FILAMENT));
 		lcd.print(" ");
 		lcd.print(snmm_extruder + 1);
-		lcd.setCursor(0, 2); lcd_printPGM(MSG_PLEASE_WAIT);
+		lcd.setCursor(0, 2); lcd_printPGM(_T(MSG_PLEASE_WAIT));
 		if (current_position[Z_AXIS] < 15) {
 			current_position[Z_AXIS] += 15; //lifting in Z direction to make space for extrusion
 			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 25, active_extruder);
@@ -5235,9 +5235,9 @@ void extr_unload() { //unloads filament
 
 		lcd_implementation_clear();
 		lcd.setCursor(0, 0);
-		lcd_printPGM(MSG_ERROR);
+		lcd_printPGM(_T(MSG_ERROR));
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_PREHEAT_NOZZLE);
+		lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 
 		delay(2000);
 		lcd_implementation_clear();
@@ -5304,9 +5304,9 @@ void extr_unload_all() {
 	else {
 		lcd_implementation_clear();
 		lcd.setCursor(0, 0);
-		lcd_printPGM(MSG_ERROR);
+		lcd_printPGM(_T(MSG_ERROR));
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_PREHEAT_NOZZLE);
+		lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 		delay(2000);
 		lcd_implementation_clear();
 		lcd_return_to_status();
@@ -5328,9 +5328,9 @@ void extr_unload_used() {
 	else {
 		lcd_implementation_clear();
 		lcd.setCursor(0, 0);
-		lcd_printPGM(MSG_ERROR);
+		lcd_printPGM(_T(MSG_ERROR));
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_PREHEAT_NOZZLE);
+		lcd_printPGM(_T(MSG_PREHEAT_NOZZLE));
 		delay(2000);
 		lcd_implementation_clear();
 		lcd_return_to_status();
@@ -5360,7 +5360,7 @@ static void extr_unload_3() {
 static void fil_load_menu()
 {
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0);
+	MENU_ITEM(back, _T(MSG_MAIN), 0);
 	MENU_ITEM(function, _i("Load all"), load_all);////MSG_LOAD_ALL c=0 r=0
 	MENU_ITEM(function, _i("Load filament 1"), extr_adj_0);////MSG_LOAD_FILAMENT_1 c=17 r=0
 	MENU_ITEM(function, _i("Load filament 2"), extr_adj_1);////MSG_LOAD_FILAMENT_2 c=17 r=0
@@ -5373,7 +5373,7 @@ static void fil_load_menu()
 static void fil_unload_menu()
 {
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0);
+	MENU_ITEM(back, _T(MSG_MAIN), 0);
 	MENU_ITEM(function, _i("Unload all"), extr_unload_all);////MSG_UNLOAD_ALL c=0 r=0
 	MENU_ITEM(function, _i("Unload filament 1"), extr_unload_0);////MSG_UNLOAD_FILAMENT_1 c=17 r=0
 	MENU_ITEM(function, _i("Unload filament 2"), extr_unload_1);////MSG_UNLOAD_FILAMENT_2 c=17 r=0
@@ -5385,7 +5385,7 @@ static void fil_unload_menu()
 
 static void change_extr_menu(){
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0);
+	MENU_ITEM(back, _T(MSG_MAIN), 0);
 	MENU_ITEM(function, _i("Extruder 1"), extr_change_0);////MSG_EXTRUDER_1 c=17 r=1
 	MENU_ITEM(function, _i("Extruder 2"), extr_change_1);////MSG_EXTRUDER_2 c=17 r=1
 	MENU_ITEM(function, _i("Extruder 3"), extr_change_2);////MSG_EXTRUDER_3 c=17 r=1
@@ -5580,9 +5580,9 @@ void lcd_confirm_print()
 		lcd.setCursor(0, 2); lcd.print("          ");
 		lcd.setCursor(0, 3); lcd.print("          ");
 		lcd.setCursor(2, 2);
-		lcd_printPGM(MSG_YES);
+		lcd_printPGM(_T(MSG_YES));
 		lcd.setCursor(2, 3);
-		lcd_printPGM(MSG_NO);
+		lcd_printPGM(_T(MSG_NO));
 		lcd.setCursor(0, 1 + cursor_pos);
 		lcd.print(">");
 		delay(100);
@@ -5636,7 +5636,7 @@ static void lcd_main_menu()
   // Majkl superawesome menu
 
 
- MENU_ITEM(back, MSG_WATCH, 0);
+ MENU_ITEM(back, _T(MSG_WATCH), 0);
 
 #ifdef RESUME_DEBUG 
  if (!saved_printing) 
@@ -5663,7 +5663,7 @@ static void lcd_main_menu()
         if (card.filename[0] == '/')
         {
 #if SDCARDDETECT == -1
-            MENU_ITEM(function, MSG_REFRESH, lcd_sd_refresh);
+            MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh);
 #endif
         } else {
             MENU_ITEM(function, PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir);
@@ -5680,10 +5680,10 @@ static void lcd_main_menu()
 #endif
                 if (card.filenameIsDir)
                 {
-                    MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
+                    MENU_ITEM(sddirectory, _T(MSG_CARD_MENU), card.filename, card.longFilename);
                 } else {
                     
-                    MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
+                    MENU_ITEM(sdfile, _T(MSG_CARD_MENU), card.filename, card.longFilename);
                     
                     
                     
@@ -5701,7 +5701,7 @@ static void lcd_main_menu()
     
   if ( ( IS_SD_PRINTING || is_usb_printing || (lcd_commands_type == LCD_COMMAND_V2_CAL)) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag)
   {
-	MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);//8
+	MENU_ITEM(submenu, _T(MSG_BABYSTEP_Z), lcd_babystep_z);//8
   }
 
 
@@ -5727,18 +5727,18 @@ static void lcd_main_menu()
 			{
 				MENU_ITEM(function, _i("Resume print"), lcd_sdcard_resume);////MSG_RESUME_PRINT c=0 r=0
 			}
-			MENU_ITEM(submenu, MSG_STOP_PRINT, lcd_sdcard_stop);
+			MENU_ITEM(submenu, _T(MSG_STOP_PRINT), lcd_sdcard_stop);
 		}
 	}
 	else if (lcd_commands_type == LCD_COMMAND_V2_CAL && mesh_bed_leveling_flag == false && homing_flag == false) {
-		//MENU_ITEM(submenu, MSG_STOP_PRINT, lcd_sdcard_stop);
+		//MENU_ITEM(submenu, _T(MSG_STOP_PRINT), lcd_sdcard_stop);
 	}
 	else
 	{
 		if (!is_usb_printing && (lcd_commands_type != LCD_COMMAND_V2_CAL))
 		{
 			//if (farm_mode) MENU_ITEM(submenu, MSG_FARM_CARD_MENU, lcd_farm_sdcard_menu);
-			/*else*/ MENU_ITEM(submenu, MSG_CARD_MENU, lcd_sdcard_menu);
+			/*else*/ MENU_ITEM(submenu, _T(MSG_CARD_MENU), lcd_sdcard_menu);
 		}
 #if SDCARDDETECT < 1
       MENU_ITEM(gcode, _i("Change SD card"), PSTR("M21"));  // SD-card changed by user////MSG_CNG_SDCARD c=0 r=0
@@ -5770,16 +5770,16 @@ static void lcd_main_menu()
         MENU_ITEM(submenu, _i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=17 r=0
 	else
 #endif //PAT9125
-		MENU_ITEM(function, MSG_LOAD_FILAMENT, lcd_LoadFilament);
-	MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, lcd_unLoadFilament);
+		MENU_ITEM(function, _T(MSG_LOAD_FILAMENT), lcd_LoadFilament);
+	MENU_ITEM(submenu, _T(MSG_UNLOAD_FILAMENT), lcd_unLoadFilament);
 	#endif
 	#ifdef SNMM
-	MENU_ITEM(submenu, MSG_LOAD_FILAMENT, fil_load_menu);
-	MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, fil_unload_menu);
+	MENU_ITEM(submenu, _T(MSG_LOAD_FILAMENT), fil_load_menu);
+	MENU_ITEM(submenu, _T(MSG_UNLOAD_FILAMENT), fil_unload_menu);
 	MENU_ITEM(submenu, _i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20 r=1
 	#endif
-	MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu);
-    if(!isPrintPaused) MENU_ITEM(submenu, MSG_MENU_CALIBRATION, lcd_calibration_menu);
+	MENU_ITEM(submenu, _T(MSG_SETTINGS), lcd_settings_menu);
+    if(!isPrintPaused) MENU_ITEM(submenu, _T(MSG_MENU_CALIBRATION), lcd_calibration_menu);
 
 #ifdef EXPERIMENTAL_FEATURES
 	MENU_ITEM(submenu, PSTR("Experimantal"), lcd_experimantal_menu);
@@ -5866,7 +5866,7 @@ static void lcd_colorprint_change() {
 	
 	custom_message = true;
 	custom_message_type = 2; //just print status message
-	lcd_setstatuspgm(MSG_FINISHING_MOVEMENTS);
+	lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS));
 	lcd_return_to_status();
 	lcdDrawUpdate = 3;
 }
@@ -5888,25 +5888,25 @@ static void lcd_tune_menu()
 
 
 	START_MENU();
-	MENU_ITEM(back, MSG_MAIN, 0); //1
+	MENU_ITEM(back, _T(MSG_MAIN), 0); //1
 	MENU_ITEM_EDIT(int3, _i("Speed"), &feedmultiply, 10, 999);//2////MSG_SPEED c=0 r=0
 
-	MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3
-	MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 10);//4
+	MENU_ITEM_EDIT(int3, _T(MSG_NOZZLE), &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);//3
+	MENU_ITEM_EDIT(int3, _T(MSG_BED), &target_temperature_bed, 0, BED_MAXTEMP - 10);//4
 
-	MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);//5
+	MENU_ITEM_EDIT(int3, _T(MSG_FAN_SPEED), &fanSpeed, 0, 255);//5
 	MENU_ITEM_EDIT(int3, _i("Flow"), &extrudemultiply, 10, 999);//6////MSG_FLOW c=0 r=0
 #ifdef FILAMENTCHANGEENABLE
-	MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_colorprint_change);//7
+	MENU_ITEM(function, _T(MSG_FILAMENTCHANGE), lcd_colorprint_change);//7
 #endif
 
 #ifndef DEBUG_DISABLE_FSENSORCHECK
 #ifdef PAT9125
 	if (FSensorStateMenu == 0) {
-		MENU_ITEM(function, MSG_FSENSOR_OFF, lcd_fsensor_state_set);
+		MENU_ITEM(function, _T(MSG_FSENSOR_OFF), lcd_fsensor_state_set);
 	}
 	else {
-		MENU_ITEM(function, MSG_FSENSOR_ON, lcd_fsensor_state_set);
+		MENU_ITEM(function, _T(MSG_FSENSOR_ON), lcd_fsensor_state_set);
 	}
 #endif //PAT9125
 #endif //DEBUG_DISABLE_FSENSORCHECK
@@ -5915,23 +5915,23 @@ static void lcd_tune_menu()
      if(!farm_mode)
      {
 //*** MaR::180416_01b
-          if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, MSG_STEALTH_MODE_OFF, lcd_silent_mode_set);
-          else MENU_ITEM(function, MSG_STEALTH_MODE_ON, lcd_silent_mode_set);
+          if (SilentModeMenu == SILENT_MODE_NORMAL) MENU_ITEM(function, _T(MSG_STEALTH_MODE_OFF), lcd_silent_mode_set);
+          else MENU_ITEM(function, _T(MSG_STEALTH_MODE_ON), lcd_silent_mode_set);
 
           if (SilentModeMenu == SILENT_MODE_NORMAL)
           {
-               if (CrashDetectMenu == 0) MENU_ITEM(function, MSG_CRASHDETECT_OFF, lcd_crash_mode_set);
-               else MENU_ITEM(function, MSG_CRASHDETECT_ON, lcd_crash_mode_set);
+               if (CrashDetectMenu == 0) MENU_ITEM(function, _T(MSG_CRASHDETECT_OFF), lcd_crash_mode_set);
+               else MENU_ITEM(function, _T(MSG_CRASHDETECT_ON), lcd_crash_mode_set);
           }
-          else MENU_ITEM(submenu, MSG_CRASHDETECT_NA, lcd_crash_mode_info);
+          else MENU_ITEM(submenu, _T(MSG_CRASHDETECT_NA), lcd_crash_mode_info);
      }
 #else //TMC2130
 	if (!farm_mode) { //dont show in menu if we are in farm mode
 		switch (SilentModeMenu) {
-		case SILENT_MODE_POWER: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break;
-		case SILENT_MODE_SILENT: MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set); break;
-		case SILENT_MODE_AUTO: MENU_ITEM(function, MSG_AUTO_MODE_ON, lcd_silent_mode_set); break;
-		default: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break; // (probably) not needed
+		case SILENT_MODE_POWER: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break;
+		case SILENT_MODE_SILENT: MENU_ITEM(function, _T(MSG_SILENT_MODE_ON), lcd_silent_mode_set); break;
+		case SILENT_MODE_AUTO: MENU_ITEM(function, _T(MSG_AUTO_MODE_ON), lcd_silent_mode_set); break;
+		default: MENU_ITEM(function, _T(MSG_SILENT_MODE_OFF), lcd_silent_mode_set); break; // (probably) not needed
 		}
 	}
 #endif //TMC2130
@@ -5953,9 +5953,9 @@ static void lcd_control_temperature_menu()
 #endif
 
   START_MENU();
-  MENU_ITEM(back, MSG_SETTINGS, 0);
+  MENU_ITEM(back, _T(MSG_SETTINGS), 0);
 #if TEMP_SENSOR_0 != 0
-  MENU_ITEM_EDIT(int3, MSG_NOZZLE, &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);
+  MENU_ITEM_EDIT(int3, _T(MSG_NOZZLE), &target_temperature[0], 0, HEATER_0_MAXTEMP - 10);
 #endif
 #if TEMP_SENSOR_1 != 0
   MENU_ITEM_EDIT(int3, _i("Nozzle2"), &target_temperature[1], 0, HEATER_1_MAXTEMP - 10);////MSG_NOZZLE1 c=0 r=0
@@ -5964,9 +5964,9 @@ static void lcd_control_temperature_menu()
   MENU_ITEM_EDIT(int3, _i("Nozzle3"), &target_temperature[2], 0, HEATER_2_MAXTEMP - 10);////MSG_NOZZLE2 c=0 r=0
 #endif
 #if TEMP_SENSOR_BED != 0
-  MENU_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 3);
+  MENU_ITEM_EDIT(int3, _T(MSG_BED), &target_temperature_bed, 0, BED_MAXTEMP - 3);
 #endif
-  MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);
+  MENU_ITEM_EDIT(int3, _T(MSG_FAN_SPEED), &fanSpeed, 0, 255);
 #if defined AUTOTEMP && (TEMP_SENSOR_0 != 0)
   MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &autotemp_enabled);
   MENU_ITEM_EDIT(float3, _i("   MENU_ITEM_EDIT(float3, MSG_MIN, &autotemp_min, 0, HEATER_0_MAXTEMP - 10);02 Min"), &autotemp_min, 0, HEATER_0_MAXTEMP - 10);////MSG_MIN c=0 r=0
@@ -6006,7 +6006,7 @@ void lcd_print_stop() {
 	}
 	// Clean the input command queue.
 	cmdqueue_reset();
-	lcd_setstatuspgm(MSG_PRINT_ABORTED);
+	lcd_setstatuspgm(_T(MSG_PRINT_ABORTED));
 	lcd_update(2);
 	card.sdprinting = false;
 	card.closefile();
@@ -6031,11 +6031,11 @@ void lcd_sdcard_stop()
 {
 	
 	lcd.setCursor(0, 0);
-	lcd_printPGM(MSG_STOP_PRINT);
+	lcd_printPGM(_T(MSG_STOP_PRINT));
 	lcd.setCursor(2, 2);
-	lcd_printPGM(MSG_NO);
+	lcd_printPGM(_T(MSG_NO));
 	lcd.setCursor(2, 3);
-	lcd_printPGM(MSG_YES);
+	lcd_printPGM(_T(MSG_YES));
 	lcd.setCursor(0, 2); lcd.print(" ");
 	lcd.setCursor(0, 3); lcd.print(" ");
 
@@ -6102,12 +6102,12 @@ void lcd_sdcard_menu()
   uint16_t fileCnt = card.getnrfilenames();
 
   START_MENU();
-  MENU_ITEM(back, MSG_MAIN, 0);
+  MENU_ITEM(back, _T(MSG_MAIN), 0);
   card.getWorkDirName();
   if (card.filename[0] == '/')
   {
 #if SDCARDDETECT == -1
-    MENU_ITEM(function, MSG_REFRESH, lcd_sd_refresh);
+    MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh);
 #endif
   } else {
     MENU_ITEM(function, PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir);
@@ -6132,9 +6132,9 @@ void lcd_sdcard_menu()
 		#endif
 			
 		if (card.filenameIsDir)
-			MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
+			MENU_ITEM(sddirectory, _T(MSG_CARD_MENU), card.filename, card.longFilename);
 		else
-			MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
+			MENU_ITEM(sdfile, _T(MSG_CARD_MENU), card.filename, card.longFilename);
     } else {
       MENU_ITEM_DUMMY();
     }
@@ -6169,12 +6169,12 @@ void lcd_sdcard_menu()
 		uint16_t fileCnt = card.getnrfilenames();
 
 		START_MENU();
-		MENU_ITEM(back, MSG_MAIN, 0);
+		MENU_ITEM(back, _T(MSG_MAIN), 0);
 		card.getWorkDirName();
 		if (card.filename[0] == '/')
 		{
 #if SDCARDDETECT == -1
-			MENU_ITEM(function, MSG_REFRESH, lcd_sd_refresh);
+			MENU_ITEM(function, _T(MSG_REFRESH), lcd_sd_refresh);
 #endif
 		}
 		else {
@@ -6194,11 +6194,11 @@ void lcd_sdcard_menu()
 #endif
 				if (card.filenameIsDir)
 				{
-					MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
+					MENU_ITEM(sddirectory, _T(MSG_CARD_MENU), card.filename, card.longFilename);
 				}
 				else {
 					
-					MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, description[i]);
+					MENU_ITEM(sdfile, _T(MSG_CARD_MENU), card.filename, description[i]);
 				}
 			}
 			else {
@@ -6472,7 +6472,7 @@ bool lcd_selftest()
 	}
 	else
 	{
-		LCD_ALERTMESSAGERPGM(MSG_SELFTEST_FAILED);
+		LCD_ALERTMESSAGERPGM(_T(MSG_SELFTEST_FAILED));
 	}
 	#ifdef TMC2130
 	  FORCE_HIGH_POWER_END;
@@ -6916,19 +6916,19 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char *
 		lcd.setCursor(0, 2);
 		lcd_printPGM(_i("Bed / Heater"));////MSG_SELFTEST_BEDHEATER c=0 r=0
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_WIRINGERROR);
+		lcd_printPGM(_T(MSG_SELFTEST_WIRINGERROR));
 		break;
 	case 3:
 		lcd.setCursor(0, 2);
 		lcd_printPGM(_i("Endstops"));////MSG_SELFTEST_ENDSTOPS c=0 r=0
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_WIRINGERROR);
+		lcd_printPGM(_T(MSG_SELFTEST_WIRINGERROR));
 		lcd.setCursor(17, 3);
 		lcd.print(_error_1);
 		break;
 	case 4:
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_SELFTEST_MOTOR);
+		lcd_printPGM(_T(MSG_SELFTEST_MOTOR));
 		lcd.setCursor(18, 2);
 		lcd.print(_error_1);
 		lcd.setCursor(0, 3);
@@ -6940,23 +6940,23 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char *
 		lcd.setCursor(0, 2);
 		lcd_printPGM(_i("Endstop not hit"));////MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_MOTOR);
+		lcd_printPGM(_T(MSG_SELFTEST_MOTOR));
 		lcd.setCursor(18, 3);
 		lcd.print(_error_1);
 		break;
 	case 6:
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_SELFTEST_COOLING_FAN);
+		lcd_printPGM(_T(MSG_SELFTEST_COOLING_FAN));
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_WIRINGERROR);
+		lcd_printPGM(_T(MSG_SELFTEST_WIRINGERROR));
 		lcd.setCursor(18, 3);
 		lcd.print(_error_1);
 		break;
 	case 7:
 		lcd.setCursor(0, 2);
-		lcd_printPGM(MSG_SELFTEST_EXTRUDER_FAN);
+		lcd_printPGM(_T(MSG_SELFTEST_EXTRUDER_FAN));
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_WIRINGERROR);
+		lcd_printPGM(_T(MSG_SELFTEST_WIRINGERROR));
 		lcd.setCursor(18, 3);
 		lcd.print(_error_1);
 		break;
@@ -6964,7 +6964,7 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char *
 		lcd.setCursor(0, 2);
 		lcd_printPGM(_i("Loose pulley"));////MSG_LOOSE_PULLEY c=20 r=1
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_MOTOR);
+		lcd_printPGM(_T(MSG_SELFTEST_MOTOR));
 		lcd.setCursor(18, 3);
 		lcd.print(_error_1);
 		break;
@@ -6988,7 +6988,7 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char *
 		lcd.setCursor(0, 2);
 		lcd_printPGM(_i("Filament sensor"));////MSG_FILAMENT_SENSOR c=20 r=0
 		lcd.setCursor(0, 3);
-		lcd_printPGM(MSG_SELFTEST_WIRINGERROR);
+		lcd_printPGM(_T(MSG_SELFTEST_WIRINGERROR));
 		break;
 	}
 
@@ -7001,7 +7001,7 @@ static void lcd_selftest_error(int _error_no, const char *_error_1, const char *
 		manage_inactivity();
 	} while (!lcd_clicked());
 
-	LCD_ALERTMESSAGERPGM(MSG_SELFTEST_FAILED);
+	LCD_ALERTMESSAGERPGM(_T(MSG_SELFTEST_FAILED));
 	lcd_return_to_status();
 
 }
@@ -7024,32 +7024,32 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite)
 	bool _result = check_opposite;
 	lcd_implementation_clear();
 
-	lcd.setCursor(0, 0); lcd_printPGM(MSG_SELFTEST_FAN);
+	lcd.setCursor(0, 0); lcd_printPGM(_T(MSG_SELFTEST_FAN));
 	
 	switch (_fan)
 	{
 	case 0:
 		// extruder cooling fan
 		lcd.setCursor(0, 1); 
-		if(check_opposite == true) lcd_printPGM(MSG_SELFTEST_COOLING_FAN); 
-		else lcd_printPGM(MSG_SELFTEST_EXTRUDER_FAN);
+		if(check_opposite == true) lcd_printPGM(_T(MSG_SELFTEST_COOLING_FAN)); 
+		else lcd_printPGM(_T(MSG_SELFTEST_EXTRUDER_FAN));
 		SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN);
 		WRITE(EXTRUDER_0_AUTO_FAN_PIN, 1);
 		break;
 	case 1:
 		// object cooling fan
 		lcd.setCursor(0, 1);
-		if (check_opposite == true) lcd_printPGM(MSG_SELFTEST_EXTRUDER_FAN);
-		else lcd_printPGM(MSG_SELFTEST_COOLING_FAN);
+		if (check_opposite == true) lcd_printPGM(_T(MSG_SELFTEST_EXTRUDER_FAN));
+		else lcd_printPGM(_T(MSG_SELFTEST_COOLING_FAN));
 		SET_OUTPUT(FAN_PIN);
 		analogWrite(FAN_PIN, 255);
 		break;
 	}
 	delay(500);
 
-	lcd.setCursor(1, 2); lcd_printPGM(MSG_SELFTEST_FAN_YES);
+	lcd.setCursor(1, 2); lcd_printPGM(_T(MSG_SELFTEST_FAN_YES));
 	lcd.setCursor(0, 3); lcd.print(">");
-	lcd.setCursor(1, 3); lcd_printPGM(MSG_SELFTEST_FAN_NO);
+	lcd.setCursor(1, 3); lcd_printPGM(_T(MSG_SELFTEST_FAN_NO));
 
 	int8_t enc_dif = 0;
 	KEEPALIVE_STATE(PAUSED_FOR_USER);
@@ -7075,17 +7075,17 @@ static bool lcd_selftest_manual_fan_check(int _fan, bool check_opposite)
 			if (enc_dif > encoderDiff) {
 				_result = !check_opposite;
 				lcd.setCursor(0, 2); lcd.print(">");
-				lcd.setCursor(1, 2); lcd_printPGM(MSG_SELFTEST_FAN_YES);
+				lcd.setCursor(1, 2); lcd_printPGM(_T(MSG_SELFTEST_FAN_YES));
 				lcd.setCursor(0, 3); lcd.print(" ");
-				lcd.setCursor(1, 3); lcd_printPGM(MSG_SELFTEST_FAN_NO);
+				lcd.setCursor(1, 3); lcd_printPGM(_T(MSG_SELFTEST_FAN_NO));
 			}
 
 			if (enc_dif < encoderDiff) {
 				_result = check_opposite;
 				lcd.setCursor(0, 2); lcd.print(" ");
-				lcd.setCursor(1, 2); lcd_printPGM(MSG_SELFTEST_FAN_YES);
+				lcd.setCursor(1, 2); lcd_printPGM(_T(MSG_SELFTEST_FAN_YES));
 				lcd.setCursor(0, 3); lcd.print(">");
-				lcd.setCursor(1, 3); lcd_printPGM(MSG_SELFTEST_FAN_NO);
+				lcd.setCursor(1, 3); lcd_printPGM(_T(MSG_SELFTEST_FAN_NO));
 			}
 			enc_dif = 0;
 			encoderDiff = 0;
@@ -7186,20 +7186,20 @@ static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bo
 
 	lcd.setCursor(0, 0);
 
-	if (_step == -1) lcd_printPGM(MSG_SELFTEST_FAN);
-	if (_step == 0) lcd_printPGM(MSG_SELFTEST_FAN);
-	if (_step == 1) lcd_printPGM(MSG_SELFTEST_FAN);
+	if (_step == -1) lcd_printPGM(_T(MSG_SELFTEST_FAN));
+	if (_step == 0) lcd_printPGM(_T(MSG_SELFTEST_FAN));
+	if (_step == 1) lcd_printPGM(_T(MSG_SELFTEST_FAN));
 	if (_step == 2) lcd_printPGM(_i("Checking endstops"));////MSG_SELFTEST_CHECK_ENDSTOPS c=20 r=0
 	if (_step == 3) lcd_printPGM(_i("Checking hotend  "));////MSG_SELFTEST_CHECK_HOTEND c=20 r=0
 	if (_step == 4) lcd_printPGM(_i("Checking X axis  "));////MSG_SELFTEST_CHECK_X c=20 r=0
 	if (_step == 5) lcd_printPGM(_i("Checking Y axis  "));////MSG_SELFTEST_CHECK_Y c=20 r=0
 	if (_step == 6) lcd_printPGM(_i("Checking Z axis  "));////MSG_SELFTEST_CHECK_Z c=20 r=0
-	if (_step == 7) lcd_printPGM(MSG_SELFTEST_CHECK_BED);
-	if (_step == 8) lcd_printPGM(MSG_SELFTEST_CHECK_BED);
-	if (_step == 9) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR);
-	if (_step == 10) lcd_printPGM(MSG_SELFTEST_CHECK_FSENSOR);
+	if (_step == 7) lcd_printPGM(_T(MSG_SELFTEST_CHECK_BED));
+	if (_step == 8) lcd_printPGM(_T(MSG_SELFTEST_CHECK_BED));
+	if (_step == 9) lcd_printPGM(_T(MSG_SELFTEST_CHECK_FSENSOR));
+	if (_step == 10) lcd_printPGM(_T(MSG_SELFTEST_CHECK_FSENSOR));
 	if (_step == 11) lcd_printPGM(_i("All correct      "));////MSG_SELFTEST_CHECK_ALLCORRECT c=20 r=0
-	if (_step == 12) lcd_printPGM(MSG_SELFTEST_FAILED);
+	if (_step == 12) lcd_printPGM(_T(MSG_SELFTEST_FAILED));
 	if (_step == 13) lcd_printPGM(PSTR("Calibrating home"));
 
 	lcd.setCursor(0, 1);
@@ -7329,7 +7329,7 @@ static bool check_file(const char* filename) {
 		
 	}
 	card.printingHasFinished();
-	strncpy_P(lcd_status_message, WELCOME_MSG, LCD_WIDTH);
+	strncpy_P(lcd_status_message, _T(WELCOME_MSG), LCD_WIDTH);
 	lcd_finishstatus();
 	return result;
 	

+ 7 - 7
Firmware/ultralcd_implementation_hitachi_HD44780.h

@@ -934,22 +934,22 @@ if (print_sd_status)
 				{
 				case 1:
 					lcd.setCursor(0, 3);
-					lcd_printPGM(MSG_HEATING);
+					lcd_printPGM(_T(MSG_HEATING));
 					break;
 				case 2:
 					lcd.setCursor(0, 3);
-					lcd_printPGM(MSG_HEATING_COMPLETE);
+					lcd_printPGM(_T(MSG_HEATING_COMPLETE));
 					heating_status = 0;
 					heating_status_counter = 0;
 					custom_message = false;
 					break;
 				case 3:
 					lcd.setCursor(0, 3);
-					lcd_printPGM(MSG_BED_HEATING);
+					lcd_printPGM(_T(MSG_BED_HEATING));
 					break;
 				case 4:
 					lcd.setCursor(0, 3);
-					lcd_printPGM(MSG_BED_DONE);
+					lcd_printPGM(_T(MSG_BED_DONE));
 					heating_status = 0;
 					heating_status_counter = 0;
 					custom_message = false;
@@ -976,8 +976,8 @@ if (print_sd_status)
 				{
 					if (custom_message_state == 3)
 					{
-						lcd_printPGM(WELCOME_MSG);
-						lcd_setstatuspgm(WELCOME_MSG);
+						lcd_printPGM(_T(WELCOME_MSG));
+						lcd_setstatuspgm(_T(WELCOME_MSG));
 						custom_message = false;
 						custom_message_type = 0;
 					}
@@ -1012,7 +1012,7 @@ if (print_sd_status)
 			if (custom_message_type == 4) {
 				char progress[4];
 				lcd.setCursor(0, 3);
-				lcd_printPGM(MSG_TEMP_CALIBRATION);
+				lcd_printPGM(_T(MSG_TEMP_CALIBRATION));
 				lcd.setCursor(12, 3);
 				sprintf(progress, "%d/6", custom_message_state);
 				lcd.print(progress);

+ 96 - 0
lang_upgrade/fix_1.out

@@ -0,0 +1,96 @@
+MSG_ALL OK
+MSG_AUTO_HOME OK
+MSG_AUTO_MODE_ON OK
+MSG_BABYSTEP_Z OK
+MSG_BABYSTEP_Z_NOT_SET OK
+MSG_BED OK
+MSG_BED_DONE OK
+MSG_BED_HEATING OK
+MSG_BED_LEVELING_FAILED_POINT_LOW OK
+MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED OK
+MSG_CALIBRATE_Z_AUTO OK
+MSG_CARD_MENU OK
+MSG_CONFIRM_NOZZLE_CLEAN OK
+MSG_COOLDOWN OK
+MSG_CRASH_DETECTED OK
+MSG_CRASHDETECT_NA OK
+MSG_CRASHDETECT_OFF OK
+MSG_CRASHDETECT_ON OK
+MSG_ENDSTOP_HIT OK
+MSG_ENDSTOP_OPEN OK
+MSG_ENDSTOPS_HIT OK
+MSG_Enqueing OK
+MSG_ERR_STOPPED OK
+MSG_ERROR OK
+MSG_EXTRUDER OK
+MSG_FAN_SPEED OK
+MSG_FILAMENT_CLEAN OK
+MSG_FILAMENT_LOADING_T0 OK
+MSG_FILAMENT_LOADING_T1 OK
+MSG_FILAMENT_LOADING_T2 OK
+MSG_FILAMENT_LOADING_T3 OK
+MSG_FILAMENTCHANGE OK
+MSG_FIND_BED_OFFSET_AND_SKEW_LINE1 OK
+MSG_FIND_BED_OFFSET_AND_SKEW_LINE2 OK
+MSG_FINISHING_MOVEMENTS OK
+MSG_FOLLOW_CALIBRATION_FLOW OK
+MSG_FSENS_AUTOLOAD_NA OK
+MSG_FSENSOR_OFF OK
+MSG_FSENSOR_ON OK
+MSG_HEATING OK
+MSG_HEATING_COMPLETE OK
+MSG_HOMEYZ OK
+MSG_CHOOSE_EXTRUDER OK
+MSG_LOAD_FILAMENT OK
+MSG_LOADING_FILAMENT OK
+MSG_M117_V2_CALIBRATION OK
+MSG_MAIN OK
+MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 OK
+MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2 OK
+MSG_MENU_CALIBRATION OK
+MSG_NO OK
+MSG_NOZZLE OK
+MSG_OK OK
+MSG_PAPER OK
+MSG_PLACE_STEEL_SHEET OK
+MSG_PLEASE_WAIT OK
+MSG_POWERUP OK
+MSG_PREHEAT_NOZZLE OK
+MSG_PRESS_TO_UNLOAD OK
+MSG_PRINT_ABORTED OK
+MSG_PULL_OUT_FILAMENT OK
+MSG_RECOVER_PRINT OK
+MSG_REFRESH OK
+MSG_REMOVE_STEEL_SHEET OK
+MSG_SD_ERR_WRITE_TO_FILE OK
+MSG_SD_OPEN_FILE_FAIL OK
+MSG_SD_WORKDIR_FAIL OK
+MSG_SELFTEST_COOLING_FAN OK
+MSG_SELFTEST_EXTRUDER_FAN OK
+MSG_SELFTEST_FAILED OK
+MSG_SELFTEST_FAN OK
+MSG_SELFTEST_FAN_NO OK
+MSG_SELFTEST_FAN_YES OK
+MSG_SELFTEST_CHECK_BED OK
+MSG_SELFTEST_CHECK_FSENSOR OK
+MSG_SELFTEST_MOTOR OK
+MSG_SELFTEST_WIRINGERROR OK
+MSG_SETTINGS OK
+MSG_SILENT_MODE_OFF OK
+MSG_SILENT_MODE_ON OK
+MSG_STEALTH_MODE_OFF OK
+MSG_STEALTH_MODE_ON OK
+MSG_STEEL_SHEET_CHECK OK
+MSG_STOP_PRINT OK
+MSG_STOPPED OK
+MSG_TEMP_CALIBRATION OK
+MSG_TEMP_CALIBRATION_DONE OK
+MSG_UNLOAD_FILAMENT OK
+MSG_UNLOADING_FILAMENT OK
+MSG_WATCH OK
+MSG_WIZARD_CALIBRATION_FAILED OK
+MSG_WIZARD_DONE OK
+MSG_WIZARD_HEATING OK
+MSG_WIZARD_QUIT OK
+MSG_YES OK
+WELCOME_MSG OK

+ 33 - 0
lang_upgrade/fix_source_1.sh

@@ -0,0 +1,33 @@
+#!/bin/sh
+# fix_source_1.sh - replace in code all usage of localized message constant from messages.h as _T(MSG_xxx)
+
+if [ -e ./source ]; then
+ echo 'folder ./source already exists.'
+ read
+ exit
+fi
+
+#create target folder
+echo 'creating target folder...'
+mkdir ./source
+#list all source files except *language* and *messages*
+files=$(ls ../Firmware/*.c* | grep -v 'language' | grep -v 'messages'; ls ../Firmware/*.h | grep -v 'language' | grep -v 'messages' )
+echo 'copying files...'
+cp $files ./source/
+#list all source files in target folder
+files=$(ls ./source/*.c*; ls ./source/*.h )
+
+#replace source - internatinalized messages used once with _i("TEXT")
+echo 'processing msgs_en_used_once.txt'
+cat msgs_en_used_more.txt | sed "s/\\\\/\\\\\\\\/g;s/\//\\\\\\\\\//g" | while read name cols rows text; do
+ if sed -i -E "s/\b$name\b/_T\($name\)/g" $files; then
+  echo "$name OK"
+ else
+  echo "$name NG!"
+ fi
+done | tee fix_1.out
+
+echo "fix1 finished... press key"
+
+read
+exit