Explorar o código

Merge branch 'MK3' into MK3_Dutch

Merge with MK3 and fix merge issues
3d-gussner %!s(int64=5) %!d(string=hai) anos
pai
achega
049cca297b
Modificáronse 13 ficheiros con 997 adicións e 428 borrados
  1. 2 2
      Firmware/menu.cpp
  2. 7 4
      Firmware/stepper.cpp
  3. 412 150
      Firmware/ultralcd.cpp
  4. 10 5
      README.md
  5. 55 35
      lang/lang-import.sh
  6. 6 3
      lang/lang_en.txt
  7. 16 12
      lang/lang_en_cz.txt
  8. 30 26
      lang/lang_en_de.txt
  9. 17 13
      lang/lang_en_es.txt
  10. 122 117
      lang/lang_en_fr.txt
  11. 28 24
      lang/lang_en_it.txt
  12. 40 37
      lang/lang_en_pl.txt
  13. 252 0
      lang/translations.md

+ 2 - 2
Firmware/menu.cpp

@@ -399,7 +399,7 @@ const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
 
 const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
 
-const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6s";
+const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6S";
 
 template<typename T>
 static void menu_draw_P(char chr, const char* str, int16_t val);
@@ -423,7 +423,7 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
     float factor = 1.0f + static_cast<float>(val) / 1000.0f;
     if (val <= _md->minEditValue)
     {
-        lcd_printf_P(menu_fmt_float13off, chr, str, " [off]");
+        lcd_printf_P(menu_fmt_float13off, chr, str, _i(" [off]"));
     }
     else
     {

+ 7 - 4
Firmware/stepper.cpp

@@ -1561,11 +1561,14 @@ void EEPROM_read_st(int pos, uint8_t* value, uint8_t size)
 
 
 void st_current_init() //Initialize Digipot Motor Current
-{  
+{
+#ifdef MOTOR_CURRENT_PWM_XY_PIN
   uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
-  if (SilentMode == 0xff) SilentMode = 0; //set power to High Power (MK2.5) or Normal Power (MK3, unused)
+  if (SilentMode == 0xff){ //set power to High Power (MK2.5) or Normal Power (MK3, unused)
+    SilentMode = SILENT_MODE_POWER;
+    eeprom_update_byte((uint8_t*)EEPROM_SILENT, SilentMode);
+  }
   SilentModeMenu = SilentMode;
-  #ifdef MOTOR_CURRENT_PWM_XY_PIN
     pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
     pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);
     pinMode(MOTOR_CURRENT_PWM_E_PIN, OUTPUT);
@@ -1587,7 +1590,7 @@ void st_current_init() //Initialize Digipot Motor Current
     st_current_set(2, motor_current_setting[2]);
     //Set timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise)
     TCCR5B = (TCCR5B & ~(_BV(CS50) | _BV(CS51) | _BV(CS52))) | _BV(CS50);
-  #endif
+#endif
 }
 
 

+ 412 - 150
Firmware/ultralcd.cpp

@@ -1,4 +1,7 @@
 //! @file
+//! @date Aug 28, 2019
+//! @author mkbel
+//! @brief LCD
 
 #include "temperature.h"
 #include "ultralcd.h"
@@ -857,18 +860,23 @@ void lcdui_print_status_line(void)
 			lcd_print(' ');
 }
 
+//! @brief Show Status Screen
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |N 000/000D  Z000.0  |
+//! |B 000/000D  F100%   |
+//! |USB100% T0  t--:--  |
+//! |Status line.........|
+//! ----------------------
+//! N - nozzle temp symbol	LCD_STR_THERMOMETER
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! B - bed temp symbol 	LCD_STR_BEDTEMP
+//! F - feedrate symbol 	LCD_STR_FEEDRATE
+//! t - clock symbol 		LCD_STR_THERMOMETER
+//! @endcode
 void lcdui_print_status_screen(void)
 {
-//|01234567890123456789|
-//|N 000/000D  Z000.0  |
-//|B 000/000D  F100%   |
-//|USB100% T0  t--:--  |
-//|Status line.........|
-//----------------------
-//N - nozzle temp symbol LCD_STR_THERMOMETER
-//B - bed temp symbol LCD_STR_BEDTEMP
-//F - feedrate symbol LCD_STR_FEEDRATE
-//t - clock symbol LCD_STR_THERMOMETER
 
     lcd_set_cursor(0, 0); //line 0
 
@@ -1670,32 +1678,50 @@ static void lcd_cooldown()
   lcd_return_to_status();
 }
 
+//! @brief append text label with a colon and format it into a fixed size output buffer
+//! It would have been much easier if there was a ':' in the labels.
+//! But since the texts like Bed, Nozzle and PINDA are used in other places
+//! it is better to reuse these texts even though it requires some extra formatting code.
+//! @param [in] ipgmLabel pointer to string in PROGMEM
+//! @param [out] pointer to string in RAM which will receive the formatted text. Must be allocated to appropriate size
+//! @param [in] dstSize allocated length of dst
+static void pgmtext_with_colon(const char *ipgmLabel, char *dst, uint8_t dstSize){
+    uint8_t i = 0;
+    for(; i < dstSize - 2; ++i){ // 2 byte less than buffer, we'd be adding a ':' to the end
+        uint8_t b = pgm_read_byte(ipgmLabel + i);
+        if( ! b )
+            break;
+        dst[i] = b;
+    }
+    dst[i] = ':';               // append the colon
+    ++i;
+    for(; i < dstSize - 1; ++i) // fill the rest with spaces
+        dst[i] = ' ';
+    dst[dstSize-1] = '\0';      // terminate the string properly
+}
 
+//! @brief Show Extruder Info
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Nozzle FAN: 0000 RPM|	FAN c=10 r=1  SPEED c=3 r=1
+//! |Print FAN:  0000 RPM|	FAN c=10 r=1  SPEED c=3 r=1
+//! |Fil. Xd:000 Yd:000  |	Fil. c=4 r=1
+//! |Int:  000 Shut: 000 |	Int: c=4 r=1  Shut: c=4 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 void lcd_menu_extruder_info()                     // NOT static due to using inside "Marlin_main" module ("manage_inactivity()")
 {
-//|01234567890123456789|
-//|Nozzle FAN:      RPM|
-//|Print FAN:       RPM|
-//|Fil. Xd:    Yd:     |
-//|Int:      Shut:     |
-//----------------------
-	int fan_speed_RPM[2];
-	// Display Nozzle fan RPM
-	fan_speed_RPM[0] = 60*fan_speed[0];
-	fan_speed_RPM[1] = 60*fan_speed[1];
-
-	lcd_timeoutToStatus.stop(); //infinite timeout
 
-	lcd_home();
-	lcd_printf_P(_N(
-	  "%S: %4d RPM\n"
-	  "%S:  %4d RPM\n"
-	 ),
-	 _i("Nozzle FAN"),
-	 fan_speed_RPM[0],
-	 _i("Print FAN"),
-	 fan_speed_RPM[1]
-	);
+    // Display Nozzle fan RPM
+    lcd_timeoutToStatus.stop(); //infinite timeout
+    lcd_home();
+    static const size_t maxChars = 12;
+    char nozzle[maxChars], print[maxChars];
+    pgmtext_with_colon(_i("Nozzle FAN"), nozzle, maxChars);  ////c=10 r=1
+    pgmtext_with_colon(_i("Print FAN"), print, maxChars);  ////c=10 r=1
+    lcd_printf_P(_N("%s %4d RPM\n" "%s %4d RPM\n"), nozzle, 60*fan_speed[0], print, 60*fan_speed[1] ); 
 
 #ifdef PAT9125
 	// Display X and Y difference from Filament sensor    
@@ -1715,8 +1741,9 @@ void lcd_menu_extruder_info()                     // NOT static due to using ins
 			if (!moves_planned() && !IS_SD_PRINTING && !is_usb_printing && (lcd_commands_type != LcdCommands::Layer1Cal))
 				pat9125_update();
 			lcd_printf_P(_N(
-				"Fil. Xd:%3d Yd:%3d\n"
-				"Int: %3d  Shut: %3d"
+				"Fil. Xd:%3d Yd:%3d\n" ////c=4 r=1
+				"Int: %3d  " ////c=4 r=1
+				"Shut: %3d"  ////c=4 r=1
 			),
 				pat9125_x, pat9125_y,
 				pat9125_b, pat9125_s
@@ -1728,124 +1755,183 @@ void lcd_menu_extruder_info()                     // NOT static due to using ins
     menu_back_if_clicked();
 }
 
+//! @brief Show Fails Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |	c=18 r=1
+//! | Last print         |	c=18 r=1
+//! | Total              |	c=18 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
 static void lcd_menu_fails_stats_mmu()
 {
 	MENU_BEGIN();
 	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_mmu_print);
-	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_mmu_total);
+	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_mmu_print); ////c=18 r=1
+	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_mmu_total); ////c=18 r=1
 	MENU_END();
 }
 
+//! @brief Show Last Print Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | MMU fails:      000|	c=14 r=1
+//! | MMU load fails: 000|	c=14 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_mmu_print()
 {
-//01234567890123456789
-//Last print failures
-// MMU fails  000
-// MMU load fails  000
-//
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL);
     uint16_t load_fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL);
-	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d"), _i("Last print failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails);
-	menu_back_if_clicked_fb();
+    lcd_home();
+    lcd_printf_P(PSTR("%S\n" " %-16.16S%-3d\n" " %-16.16S%-3d"), 
+        _i("Last print failures"), ////c=20 r=1
+        _i("MMU fails"), fails, ////c=14 r=1
+        _i("MMU load fails"), load_fails); ////c=14 r=1
+    menu_back_if_clicked_fb();
 }
 
+//! @brief Show Total Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Total failures      |	c=20 r=1
+//! | MMU fails:      000|	c=14 r=1
+//! | MMU load fails: 000|	c=14 r=1
+//! | MMU power fails:000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_mmu_total()
 {
-//01234567890123456789
-//Last print failures
-// MMU fails  000
-// MMU load fails  000
-//
-//////////////////////
 	mmu_command(MmuCmd::S3);
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_FAIL_TOT);
     uint16_t load_fails = eeprom_read_byte((uint8_t*)EEPROM_MMU_LOAD_FAIL_TOT);
-	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S %-3d"), _i("Total failures"), _i("MMU fails"), fails, _i("MMU load fails"), load_fails, _i("MMU power fails"), mmu_power_failures);
-	menu_back_if_clicked_fb();
+    lcd_home();
+    lcd_printf_P(PSTR("%S\n" " %-16.16S%-3d\n" " %-16.16S%-3d\n" " %-16.16S%-3d"), 
+        _i("Total failures"), ////c=20 r=1
+        _i("MMU fails"), fails, ////c=14 r=1
+        _i("MMU load fails"), load_fails, ////c=14 r=1
+        _i("MMU power fails"), mmu_power_failures); ////c=14 r=1
+    menu_back_if_clicked_fb();
 }
 
 #if defined(TMC2130) && defined(FILAMENT_SENSOR)
+static const char failStatsFmt[] PROGMEM = "%S\n" " %-16.16S%-3d\n" " %-16.16S%-3d\n" " %-7.7SX %-3d  Y %-3d";
+
+//! @brief Show Total Failures Statistics MMU
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Total failures      |	c=20 r=1
+//! | Power failures: 000|	c=14 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! | Crash   X:000 Y:000|	c=7 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_total()
 {
-//01234567890123456789
-//Total failures
-// Power failures  000
-// Filam. runouts  000
-// Crash  X 000  Y 000
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint16_t power = eeprom_read_word((uint16_t*)EEPROM_POWER_COUNT_TOT);
     uint16_t filam = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
     uint16_t crashX = eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_X_TOT);
     uint16_t crashY = eeprom_read_word((uint16_t*)EEPROM_CRASH_COUNT_Y_TOT);
-	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Total failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);
-	menu_back_if_clicked_fb();
+    lcd_home();
+    lcd_printf_P(failStatsFmt, 
+        _i("Total failures"),   ////c=20 r=1
+        _i("Power failures"), power,   ////c=14 r=1
+        _i("Filam. runouts"), filam,   ////c=14 r=1
+        _i("Crash"), crashX, crashY);  ////c=7 r=1
+    menu_back_if_clicked_fb();
 }
 
+//! @brief Show Last Print Failures Statistics
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | Power failures: 000|	c=14 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! | Crash   X:000 Y:000|	c=7 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats_print()
 {
-//01234567890123456789
-//Last print failures
-// Power failures  000
-// Filam. runouts  000
-// Crash  X 000  Y 000
-//////////////////////
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t power = eeprom_read_byte((uint8_t*)EEPROM_POWER_COUNT);
     uint8_t filam = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint8_t crashX = eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_X);
     uint8_t crashY = eeprom_read_byte((uint8_t*)EEPROM_CRASH_COUNT_Y);
-	lcd_home();
-	lcd_printf_P(PSTR("%S\n" " %S  %-3d\n" " %S  %-3d\n" " %S  X %-3d  Y %-3d"), _i("Last print failures"), _i("Power failures"), power, _i("Filam. runouts"), filam, _i("Crash"), crashX, crashY);
-	menu_back_if_clicked_fb();
-}
+    lcd_home();
+    lcd_printf_P(failStatsFmt,
+        _i("Last print failures"),  ////c=20 r=1
+        _i("Power failures"), power,  ////c=14 r=1
+        _i("Filam. runouts"), filam,  ////c=14 r=1
+        _i("Crash"), crashX, crashY);  ////c=7 r=1
+    menu_back_if_clicked_fb();
+}
+
+//! @brief Open fail statistics menu
+//! 
+//! This version of function is used, when there is filament sensor,
+//! power failure and crash detection.
+//! There are Last print and Total menu items.
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |	c=18 r=1
+//! | Last print         |	c=18 r=1
+//! | Total              |	c=18 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
 
-/**
- * @brief Open fail statistics menu
- *
- * This version of function is used, when there is filament sensor,
- * power failure and crash detection.
- * There are Last print and Total menu items.
- */
 static void lcd_menu_fails_stats()
 {
 	MENU_BEGIN();
 	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_print);
-	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_total);
+	MENU_ITEM_SUBMENU_P(_i("Last print"), lcd_menu_fails_stats_print);  ////c=18 r=1
+	MENU_ITEM_SUBMENU_P(_i("Total"), lcd_menu_fails_stats_total);  ////c=18 r=1
 	MENU_END();
 }
 
 #elif defined(FILAMENT_SENSOR)
-/**
- * @brief Print last print and total filament run outs
- *
- * This version of function is used, when there is filament sensor,
- * but no other sensors (e.g. power failure, crash detection).
- *
- * Example screen:
- * @code
- * 01234567890123456789
- * Last print failures
- *  Filam. runouts  0
- * Total failures
- *  Filam. runouts  5
- * @endcode
- */
+//! 
+//! @brief Print last print and total filament run outs
+//! 
+//! This version of function is used, when there is filament sensor,
+//! but no other sensors (e.g. power failure, crash detection).
+//! 
+//! Example screen:
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Last print failures |	c=20 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! |Total failures      |	c=20 r=1
+//! | Filam. runouts: 000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_fails_stats()
 {
 	lcd_timeoutToStatus.stop(); //infinite timeout
     uint8_t filamentLast = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint16_t filamentTotal = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
 	lcd_home();
-    lcd_printf_P(PSTR("Last print failures\n" " Filam. runouts  %-3d\n" "Total failures\n" " Filam. runouts  %-3d"), filamentLast, filamentTotal);
+    lcd_printf_P(PSTR("Last print failures\n"  ////c=20 r=1 
+        " Filam. runouts  %-3d\n"   ////c=14 r=1
+        "Total failures\n"  ////c=20 r=1
+        " Filam. runouts  %-3d"), filamentLast, filamentTotal);  ////c=14 r=1
     menu_back_if_clicked();
 }
 #else
@@ -1866,27 +1952,64 @@ extern char* __malloc_heap_start;
 extern char* __malloc_heap_end;
 #endif //DEBUG_STACK_MONITOR
 
+//! @brief Show Debug Information
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |RAM statistics      |	c=20 r=1
+//! | SP_min:        0000|	c=14 r=1
+//! | heap_start:    0000|	c=14 r=1
+//! | heap_end:      0000|	c=14 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_debug()
 {
 #ifdef DEBUG_STACK_MONITOR
 	lcd_home();
-	lcd_printf_P(PSTR("RAM statistics\n" " SP_min: 0x%04x\n" " heap_start: 0x%04x\n" " heap_end: 0x%04x"), SP_min, __malloc_heap_start, __malloc_heap_end);
+	lcd_printf_P(PSTR("RAM statistics\n"  ////c=20 r=1
+        " SP_min: 0x%04x\n"   ////c=14 r=1
+        " heap_start: 0x%04x\n"   ////c=14 r=1
+        " heap_end: 0x%04x"), SP_min, __malloc_heap_start, __malloc_heap_end);  ////c=14 r=1
 #endif //DEBUG_STACK_MONITOR
 
 	menu_back_if_clicked_fb();
 }
 #endif /* DEBUG_BUILD */
 
+//! @brief common line print for lcd_menu_temperatures
+//! @param [in] ipgmLabel pointer to string in PROGMEM
+//! @param [in] value to be printed behind the label
+static void lcd_menu_temperatures_line(const char *ipgmLabel, int value){
+    static const size_t maxChars = 15;    
+    char tmp[maxChars];
+    pgmtext_with_colon(ipgmLabel, tmp, maxChars);
+    lcd_printf_P(PSTR(" %s%3d\x01 \n"), tmp, value); // no need to add -14.14 to string alignment
+}
+
+//! @brief Show Temperatures
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Nozzle:        000D|	c=14 r=1
+//! | Bed:           000D|	c=14 r=1
+//! | Ambient:       000D|	c=14 r=1
+//! | PINDA:         000D|	c=14 r=1
+//! ----------------------
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_temperatures()
 {
-	lcd_timeoutToStatus.stop(); //infinite timeout
-	lcd_home();
-	lcd_printf_P(PSTR(" %S:   %d%c \n" " %S:      %d%c \n"), _i("Nozzle"), (int)current_temperature[0], '\x01', _i("Bed"), (int)current_temperature_bed, '\x01');
+    lcd_timeoutToStatus.stop(); //infinite timeout
+    lcd_home();
+    lcd_menu_temperatures_line( _T(MSG_NOZZLE), (int)current_temperature[0] ); ////c=14 r=1
+    lcd_menu_temperatures_line( _T(MSG_BED), (int)current_temperature_bed );  ////c=14 r=1
 #ifdef AMBIENT_THERMISTOR
-	lcd_printf_P(PSTR(" %S:  %d%c\n" " PINDA:    %d%c"), _i("Ambient"), (int)current_temperature_ambient, '\x01', (int)current_temperature_pinda, '\x01');
-#else //AMBIENT_THERMISTOR
-	lcd_printf_P(PSTR(" PINDA:    %d%c"), (int)current_temperature_pinda, '\x01');
-#endif //AMBIENT_THERMISTOR
+    lcd_menu_temperatures_line( _i("Ambient"), (int)current_temperature_ambient );  ////c=14 r=1
+#endif
+    lcd_menu_temperatures_line( _i("PINDA"), (int)current_temperature_pinda );  ////c=14 r=1
+
 
     menu_back_if_clicked();
 }
@@ -1896,6 +2019,17 @@ static void lcd_menu_temperatures()
 #define VOLT_DIV_R2 2370
 #define VOLT_DIV_FAC ((float)VOLT_DIV_R2 / (VOLT_DIV_R2 + VOLT_DIV_R1))
 #define VOLT_DIV_REF 5
+//! @brief Show Voltages
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |                    |
+//! | PWR:         00.0V |	c=12 r=1
+//! | Bed:         00.0V |	c=12 r=1
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_voltages()
 {
 	lcd_timeoutToStatus.stop(); //infinite timeout
@@ -1908,6 +2042,17 @@ static void lcd_menu_voltages()
 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN
 
 #ifdef TMC2130
+//! @brief Show Belt Status
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Belt status        |	c=18 r=1
+//! |  X:            000 |
+//! |  Y:            000 |
+//! |                    |
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_belt_status()
 {
 	lcd_home();
@@ -1931,12 +2076,85 @@ static void lcd_menu_test_restore()
 }
 #endif //RESUME_DEBUG 
 
+//! @brief Show Preheat Menu
 static void lcd_preheat_menu()
 {
     eFilamentAction = FilamentAction::Preheat;
     mFilamentMenu();
 }
 
+//! @brief Show Support Menu
+//!
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Main               |
+//! | Firmware:          |	c=18 r=1
+//! |  3.7.2.-2363       |	c=16 r=1
+//! | prusa3d.com        |	MSG_PRUSA3D
+//! | forum.prusa3d.com  |	MSG_PRUSA3D_FORUM
+//! | howto.prusa3d.com  |	MSG_PRUSA3D_HOWTO
+//! | --------------     |	STR_SEPARATOR
+//! | 1_75mm_MK3         |	FILAMENT_SIZE
+//! | howto.prusa3d.com  |	ELECTRONICS
+//! | howto.prusa3d.com  |	NOZZLE_TYPE
+//! | --------------     |	STR_SEPARATOR
+//! | Date:              |	c=17 r=1
+//! | MMM DD YYYY        |	__DATE__
+//! | --------------     |	STR_SEPARATOR
+//! @endcode
+//! 
+//! If MMU is connected
+//! 
+//! 	@code{.unparsed}
+//! 	| MMU2 connected     |	c=18 r=1
+//! 	|  FW: 1.0.6-7064523 |
+//! 	@endcode
+//! 
+//! If MMU is not connected
+//! 
+//! 	@code{.unparsed}
+//! 	| MMU2       N/A     |	c=18 r=1
+//! 	@endcode
+//! 
+//! If Flash Air is connected
+//! 
+//! 	@code{.unparsed}
+//! 	| --------------     |	STR_SEPARATOR
+//! 	| FlashAir IP Addr:  |	c=18 r=1
+//! 	|  192.168.1.100     |
+//! 	@endcode
+//! 
+//! @code{.unparsed}
+//! | --------------     |	STR_SEPARATOR
+//! | XYZ cal. details   |	MSG_XYZ_DETAILS
+//! | Extruder info      |	MSG_INFO_EXTRUDER
+//! | XYZ cal. details   |	MSG_INFO_SENSORS
+//! @endcode
+//! 
+//! If TMC2130 defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Belt status        |	MSG_MENU_BELT_STATUS
+//! @endcode
+//! 
+//! @code{.unparsed}
+//! | Temperatures       |	MSG_MENU_TEMPERATURES
+//! @endcode
+//! 
+//! If Voltage Bed and PWR Pin are defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Voltages           |	MSG_MENU_VOLTAGES
+//! 	@endcode
+//! 
+//! 
+//! If DEBUG_BUILD is defined
+//! 
+//! 	@code{.unparsed}
+//! 	| Debug              |	c=18 r=1
+//! 	@endcode
+//! ----------------------
+//! @endcode
 static void lcd_support_menu()
 {
 	typedef struct
@@ -1998,8 +2216,8 @@ static void lcd_support_menu()
 	MENU_ITEM_BACK_P(STR_SEPARATOR);
 	if (mmu_enabled)
 	{
-		MENU_ITEM_BACK_P(_i("MMU2 connected"));
-		MENU_ITEM_BACK_P(PSTR(" FW:"));
+		MENU_ITEM_BACK_P(_i("MMU2 connected"));  ////c=18 r=1
+		MENU_ITEM_BACK_P(PSTR(" FW:"));  ////c=17 r=1
 		if (((menu_item - 1) == menu_line) && lcd_draw_update)
 		{
 		    lcd_set_cursor(6, menu_row);
@@ -2016,7 +2234,7 @@ static void lcd_support_menu()
   // Show the FlashAir IP address, if the card is available.
   if (_md->is_flash_air) {
       MENU_ITEM_BACK_P(STR_SEPARATOR);
-      MENU_ITEM_BACK_P(PSTR("FlashAir IP Addr:"));
+      MENU_ITEM_BACK_P(PSTR("FlashAir IP Addr:"));  //c=18 r=1
 ///!      MENU_ITEM(back_RAM, _md->ip_str, 0);
   }
 
@@ -2037,7 +2255,7 @@ static void lcd_support_menu()
 #endif //defined VOLT_BED_PIN || defined VOLT_PWR_PIN
 
 #ifdef DEBUG_BUILD
-  MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);
+  MENU_ITEM_SUBMENU_P(PSTR("Debug"), lcd_menu_debug);////c=18 r=1
 #endif /* DEBUG_BUILD */
 
   #endif //MK1BP
@@ -2629,9 +2847,9 @@ if(0)
 //!
 //! @code{.unparsed}
 //! |01234567890123456789|
-//! |Filament used:      |
+//! |Filament used:      | c=18 r=1
 //! |         00.00m     |
-//! |Print time:         |
+//! |Print time:         | c=18 r=1
 //! |        00h 00m 00s |
 //! ----------------------
 //! @endcode
@@ -2640,12 +2858,13 @@ if(0)
 //!
 //! @code{.unparsed}
 //! |01234567890123456789|
-//! |Total filament :    |
+//! |Total filament :    | c=18 r=1
 //! |           000.00 m |
-//! |Total print time :  |
+//! |Total print time :  | c=18 r=1
 //! |     00d :00h :00 m |
 //! ----------------------
 //! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations. Translations missing for "d"days, "h"ours, "m"inutes", "s"seconds".
 void lcd_menu_statistics()
 {
 	if (IS_SD_PRINTING)
@@ -2659,10 +2878,12 @@ void lcd_menu_statistics()
 		lcd_clear();
 		lcd_printf_P(_N(
 			"%S:\n"
-			"%8.2fm\n"
+			"%17.2fm  \n"
 			"%S:\n"
 			"%2dh %02dm %02ds"
-		),_i("Filament used"), _met, _i("Print time"), _h, _m, _s);
+		    ),
+            _i("Filament used"), _met,  ////c=18 r=1
+            _i("Print time"), _h, _m, _s);  ////c=18 r=1
 		menu_back_if_clicked_fb();
 	}
 	else
@@ -2681,7 +2902,7 @@ void lcd_menu_statistics()
 		lcd_clear();
 		lcd_printf_P(_N(
 			"%S:\n"
-			"%8.2fm\n"
+			"%17.2fm  \n"
 			"%S:\n"
 			"%7ldd :%2hhdh :%02hhdm"
 		), _i("Total filament"), _filament_m, _i("Total print time"), _days, _hours, _minutes);
@@ -2769,17 +2990,20 @@ static void lcd_move_e()
 }
 
 
-//@brief Show measured Y distance of front calibration points from Y_MIN_POS
-//If those points are detected too close to edge of reachable area, their confidence is lowered.
-//This functionality is applied more often for MK2 printers.
+//! @brief Show measured Y distance of front calibration points from Y_MIN_POS
+//! If those points are detected too close to edge of reachable area, their confidence is lowered.
+//! This functionality is applied more often for MK2 printers.
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Y distance from min |	c=19 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |Left:       00.00mm |	c=11 r=1
+//! |Right:      00.00mm |	c=11 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_y_min()
 {
-//|01234567890123456789|
-//|Y distance from min:|
-//|--------------------|
-//|Left:      N/A      |
-//|Right:     N/A      |
-//----------------------
 	float distanceMin[2];
     count_xyz_details(distanceMin);
 	lcd_home();
@@ -2789,15 +3013,15 @@ static void lcd_menu_xyz_y_min()
 	  "%S:\n"
 	  "%S:"
 	 ),
-	 _i("Y distance from min"),
+	 _i("Y distance from min"),  ////c=19 r=1
 	 separator,
-	 _i("Left"),
-	 _i("Right")
+	 _i("Left"),  ////c=11 r=1
+	 _i("Right")  ////c=11 r=1
 	);
 	for (uint8_t i = 0; i < 2; i++)
 	{
 		lcd_set_cursor(11,2+i);
-		if (distanceMin[i] >= 200) lcd_puts_P(_N("N/A"));
+		if (distanceMin[i] >= 200) lcd_puts_P(_N("N/A"));  ////c=3 r=1
 		else lcd_printf_P(_N("%6.2fmm"), distanceMin[i]);
 	}
     if (lcd_clicked())
@@ -2810,30 +3034,36 @@ float _deg(float rad)
 	return rad * 180 / M_PI;
 }
 
+//! @brief Show Measured XYZ Skew
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Measured skew: 0.00D|	c=13 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |Slight skew:   0.12D|	c=13 r=1  c=4 r=1
+//! |Severe skew:   0.25D|	c=13 r=1  c=4 r=1
+//! ----------------------
+//! D - Degree sysmbol		LCD_STR_DEGREE
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_skew()
 {
-//|01234567890123456789|
-//|Measured skew:  N/A |
-//|--------------------|
-//|Slight skew:   0.12d|
-//|Severe skew:   0.25d|
-//----------------------
     float angleDiff = eeprom_read_float((float*)(EEPROM_XYZ_CAL_SKEW));
 	lcd_home();
 	lcd_printf_P(_N(
 	  "%S:\n"
 	  "%S\n"
-	  "%S:  %5.2f\x01\n"
-	  "%S:  %5.2f\x01"
+	  "%-15.15S%3.2f\x01\n"
+	  "%-15.15S%3.2f\x01"
 	 ),
-	 _i("Measured skew"),
+	 _i("Measured skew"),  ////c=13 r=1
 	 separator,
-	 _i("Slight skew"), _deg(bed_skew_angle_mild),
-	 _i("Severe skew"), _deg(bed_skew_angle_extreme)
+	 _i("Slight skew:"), _deg(bed_skew_angle_mild),  ////c=13 r=1  c=4 r=1
+	 _i("Severe skew:"), _deg(bed_skew_angle_extreme)  ////c=13 r=1  c=4 r=1
 	);
 	if (angleDiff < 100){
 		lcd_set_cursor(15,0);
-		lcd_printf_P(_N("%4.2f\x01"), _deg(angleDiff));
+		lcd_printf_P(_N("%3.2f\x01"), _deg(angleDiff));
 	}
 	else{
 		lcd_set_cursor(15,0);
@@ -2842,16 +3072,24 @@ static void lcd_menu_xyz_skew()
     if (lcd_clicked())
         menu_goto(lcd_menu_xyz_offset, 0, true, true);
 }
-/**
- * @brief Show measured bed offset from expected position
- */
+//! @brief Show measured bed offset from expected position
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |[0;0] point offset  |	c=20 r=1
+//! | --------------     |	STR_SEPARATOR
+//! |X:          000.00mm|	c=10 r=1
+//! |Y:          000.00mm|	c=10 r=1
+//! ----------------------
+//! @endcode
+//! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 static void lcd_menu_xyz_offset()
 {
     lcd_set_cursor(0,0);
     lcd_puts_P(_i("[0;0] point offset"));////MSG_MEASURED_OFFSET
     lcd_puts_at_P(0, 1, separator);
-    lcd_puts_at_P(0, 2, PSTR("X"));
-    lcd_puts_at_P(0, 3, PSTR("Y"));
+    lcd_puts_at_P(0, 2, PSTR("X"));  ////c=10 r=1
+    lcd_puts_at_P(0, 3, PSTR("Y"));  ////c=10 r=1
 
     float vec_x[2];
     float vec_y[2];
@@ -2860,9 +3098,9 @@ static void lcd_menu_xyz_offset()
 
     for (uint_least8_t i = 0; i < 2; i++)
     {
-        lcd_puts_at_P(11, i + 2, PSTR(""));
+        lcd_set_cursor((cntr[i] < 0) ? 10 : 11, i+2);
         lcd_print(cntr[i]);
-        lcd_puts_at_P((cntr[i] < 0) ? 17 : 16, i + 2, PSTR("mm"));
+        lcd_puts_at_P(16, i + 2, PSTR("mm"));
     }
     menu_back_if_clicked();
 }
@@ -3010,6 +3248,18 @@ void lcd_adjust_bed_reset(void)
 	_md->status = 0;
 }
 
+//! @brief Show Bed level correct
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! |Settings:           |	MSG_SETTINGS
+//! |Left side [um]:     |	MSG_BED_CORRECTION_LEFT
+//! |Right side[um]:     |	MSG_BED_CORRECTION_RIGHT
+//! |Front side[um]:     |	MSG_BED_CORRECTION_FRONT
+//! |Rear side [um]:     |	MSG_BED_CORRECTION_REAR
+//! |Reset               |	MSG_BED_CORRECTION_RESET
+//! ----------------------
+//! @endcode
 void lcd_adjust_bed(void)
 {
 	_menu_data_adjust_bed_t* _md = (_menu_data_adjust_bed_t*)&(menu_data[0]);
@@ -3047,6 +3297,16 @@ void lcd_adjust_bed(void)
     MENU_END();
 }
 
+//! @brief Show PID Extruder
+//! 
+//! @code{.unparsed}
+//! |01234567890123456789|
+//! | Set temperature:   |	MSG_SET_TEMPERATURE
+//! |                    |
+//! | 210                |
+//! |                    |
+//! ----------------------
+//! @endcode
 void pid_extruder()
 {
 	lcd_clear();
@@ -4516,7 +4776,9 @@ void lcd_v2_calibration()
 {
 	if (mmu_enabled)
 	{
-	    const uint8_t filament = choose_menu_P(_i("Select PLA filament:"),_T(MSG_FILAMENT),_i("Cancel")); ////c=20 r=1  ////c=19 r=1
+	    const uint8_t filament = choose_menu_P(
+            _i("Select PLA filament:"), ////c=20 r=1
+            _T(MSG_FILAMENT),_i("Cancel"));  ////c=19 r=1
 	    if (filament < 5)
 	    {
 	        lcd_commands_step = 20 + filament;

+ 10 - 5
README.md

@@ -111,7 +111,9 @@ Now your Ubuntu subsystem is ready to use the automatic `PF-build.sh` script and
 - Unix and windows have different line endings (LF vs CRLF), try dos2unix to convert
   - This should fix the `"$'\r': command not found"` error
   - to install run `apt-get install dos2unix`
-
+- If your Windows isn't in English the Paths may look different
+  Example in other languages
+  - English `/mnt/c/Users/<your-username>/Downloads/Prusa-Firmware-MK3` will be on a German Windows`/mnt/c/Anwender/<your-username>/Downloads/Prusa-Firmware-MK3`
 #### Compile Prusa-firmware with Ubuntu Linux subsystem installed
 - open Ubuntu bash
 - change to your source code folder (case sensitive)
@@ -123,11 +125,14 @@ _notes: Script and instructions contributed by 3d-gussner. Use at your own risk.
 - Download and install the 64bit Git version https://git-scm.com/download/win
 - Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058
 - Download and install 7z-zip from its official website https://www.7-zip.org/
-  By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10
+  By default, it is installed under the directory /c/Program\ Files/7-Zip in Windows 10
 - Run `Git-Bash` under Administrator privilege
-- navigate to the directory /c/Program Files/Git/mingw64/bin
-- run `ln -s /c/Program Files/7-Zip/7z.exe zip.exe`
-
+- navigate to the directory /c/Program\ Files/Git/mingw64/bin
+- run `ln -s /c/Program\ Files/7-Zip/7z.exe zip.exe`
+- If your Windows isn't in English the Paths may look different
+  Example in other languages
+  - English `/mnt/c/Users/<your-username>/Downloads/Prusa-Firmware-MK3` will be on a German Windows`/mnt/c/Anwender/<your-username>/Downloads/Prusa-Firmware-MK3`
+  - English `ln -s /c/Program\ Files/7-Zip/7z.exe zip.exe` will be on a Spanish Windows `ln -s /c/Archivos\ de\ programa/7-Zip/7z.exe zip.exe`
 #### Compile Prusa-firmware with Git-bash installed
 - open Git-bash
 - change to your source code folder

+ 55 - 35
lang/lang-import.sh

@@ -4,7 +4,19 @@
 #  for importing translated xx.po
 
 LNG=$1
-if [ -z "$LNG" ]; then exit -1; fi
+# if no arguments, 'all' is selected (all po and also pot will be generated)
+if [ -z "$LNG" ]; then LNG=all; fi
+
+# if 'all' is selected, script will generate all po files and also pot file
+if [ "$LNG" = "all" ]; then
+ ./lang-import.sh cz
+ ./lang-import.sh de
+ ./lang-import.sh es
+ ./lang-import.sh fr
+ ./lang-import.sh it
+ ./lang-import.sh pl
+ exit 0
+fi
 
 # language code (iso639-1) is equal to LNG
 LNGISO=$LNG
@@ -28,51 +40,51 @@ sed -i 's/ \\n/ /g;s/\\n/ /g' $LNG'_filtered.po'
 
 #replace in czech translation
 if [ "$LNG" = "cz" ]; then
- #replace 'ž' with 'z'
+ #replace 'ž' with 'z'
  sed -i 's/\xc5\xbe/z/g' $LNG'_filtered.po'
- #replace 'ì' with 'e'
+ #replace 'ì' with 'e'
  sed -i 's/\xc4\x9b/e/g' $LNG'_filtered.po'
- #replace 'í' with 'i'
+ #replace 'í' with 'i'
  sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
- #replace 'ø' with 'r'
+ #replace 'ø' with 'r'
  sed -i 's/\xc5\x99/r/g' $LNG'_filtered.po'
- #replace 'è' with 'c'
+ #replace 'è' with 'c'
  sed -i 's/\xc4\x8d/c/g' $LNG'_filtered.po'
- #replace 'á' with 'a'
+ #replace 'á' with 'a'
  sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
- #replace 'é' with 'e'
+ #replace 'é' with 'e'
  sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
 fi
 
-#replace in german translation
+#replace in german translation https://en.wikipedia.org/wiki/German_orthography
 if [ "$LNG" = "de" ]; then
- #replace 'ä' with 'ae'
+ #replace 'ä' with 'ae'
  sed -i 's/\xc3\xa4/ae/g' $LNG'_filtered.po'
- #replace 'ü' with 'ue'
- sed -i 's/\xc3\xbc/ue/g' $LNG'_filtered.po'
- #replace 'ö' with 'oe'
- sed -i 's/\xc3\xb6/oe/g' $LNG'_filtered.po'
- #replace 'Ä' with 'Ae'
+ #replace 'Ä' with 'Ae'
  sed -i 's/\xc3\x84/Ae/g' $LNG'_filtered.po'
- #replace 'Ü' with 'Ue'
+ #replace 'ü' with 'ue'
+ sed -i 's/\xc3\xbc/ue/g' $LNG'_filtered.po'
+ #replace 'Ü' with 'Ue'
  sed -i 's/\xc3\x9c/Ue/g' $LNG'_filtered.po'
- #replace 'Ö' with 'Oe'
+ #replace 'ö' with 'oe'
+ sed -i 's/\xc3\xb6/oe/g' $LNG'_filtered.po'
+ #replace 'Ö' with 'Oe'
  sed -i 's/\xc3\x96/Oe/g' $LNG'_filtered.po'
- #replace 'ß' with 'ss'
+ #replace 'ß' with 'ss'
  sed -i 's/\xc3\x9f/ss/g' $LNG'_filtered.po'
 fi
 
 #replace in spain translation
 if [ "$LNG" = "es" ]; then
- #replace 'á' with 'a'
+ #replace 'á' with 'a'
  sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
- #replace '?' with '?'
+ #replace '¿' with '?'
  sed -i 's/\xc2\xbf/?/g' $LNG'_filtered.po'
- #replace 'ó' with 'o'
+ #replace 'ó' with 'o'
  sed -i 's/\xc3\xb3/o/g' $LNG'_filtered.po'
- #replace 'é' with 'e'
+ #replace 'é' with 'e'
  sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
- #replace 'í' with 'i'
+ #replace 'í' with 'i'
  sed -i 's/\xc3\xad/i/g' $LNG'_filtered.po'
  #replace '!' with '!'
  sed -i 's/\xc2\xa1/!/g' $LNG'_filtered.po'
@@ -80,31 +92,39 @@ if [ "$LNG" = "es" ]; then
  sed -i 's/\xc3\xb1/n/g' $LNG'_filtered.po'
 fi
 
-#replace in french translation
+#replace in french translation https://en.wikipedia.org/wiki/French_orthography
 if [ "$LNG" = "fr" ]; then
- #replace 'é' with 'e'
+ #replace 'á' with 'a' (right)
+ sed -i 's/\xc3\xa1/a/g' $LNG'_filtered.po'
+ #replace '�' with 'A' (right)
+ sed -i 's/\xc3\x81/A/g' $LNG'_filtered.po'
+ #replace 'à' with 'a' (left)
+ sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
+ #replace 'À' with 'A' (left)
+ sed -i 's/\xc3\x80/A/g' $LNG'_filtered.po'
+ #replace 'é' with 'e' (right)
  sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
- #replace 'É' with 'E'
+ #replace 'É' with 'E' (right)
  sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po'
- #replace 'é' with 'e' (left)
+ #replace 'è' with 'e' (left)
  sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po'
- #replace 'á' with 'a' (left)
- sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
+ #replace 'È' with 'E' (left)
+ sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po'
 fi
 
 #replace in italian translation
 if [ "$LNG" = "it" ]; then
- #replace 'é' with 'e' (left)
+ #replace 'é' with 'e' (left)
  sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po'
- #replace 'á' with 'a' (left)
+ #replace 'á' with 'a' (left)
  sed -i 's/\xc3\xa0/a/g' $LNG'_filtered.po'
- #replace 'ó' with 'o' (left)
+ #replace 'ó' with 'o' (left)
  sed -i 's/\xc3\xb2/o/g' $LNG'_filtered.po'
- #replace 'ú' with 'u' (left)
+ #replace 'ú' with 'u' (left)
  sed -i 's/\xc3\xb9/u/g' $LNG'_filtered.po'
- #replace 'é' with 'e'
+ #replace 'é' with 'e'
  sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po'
- #replace 'É' with 'E' (left)
+ #replace 'É' with 'E' (left)
  sed -i 's/\xc3\x88/E/g' $LNG'_filtered.po'
 fi
 

+ 6 - 3
lang/lang_en.txt

@@ -734,7 +734,7 @@
 "Sort       [time]"
 
 #
-"Severe skew"
+"Severe skew:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -746,7 +746,7 @@
 "Sound      [loud]"
 
 #
-"Slight skew"
+"Slight skew:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1061,7 +1061,7 @@
 "Sheet"
 
 #
-"Sound     [assist]"
+"Sound    [assist]"
 
 #
 "Steel sheets"
@@ -1074,3 +1074,6 @@
 
 #
 "Z-probe nr.    [3]"
+
+#
+"Z-probe nr.    [5]"

+ 16 - 12
lang/lang_en_cz.txt

@@ -92,7 +92,7 @@
 
 #MSG_BED_HEATING
 "Bed Heating"
-"Zahrivani bed"
+"Zahrivani bedu"
 
 #MSG_BED_CORRECTION_MENU
 "Bed level correct"
@@ -508,7 +508,7 @@
 
 #
 "Left"
-"Vlevo:"
+"Vlevo"
 
 #MSG_BED_CORRECTION_LEFT c=14 r=1
 "Left side [um]"
@@ -688,7 +688,7 @@
 
 #
 "Nozzle FAN"
-"Tryska V."
+"Vent. trysky"
 
 #MSG_PAUSE_PRINT
 "Pause print"
@@ -819,8 +819,8 @@
 "Predehrev k vyjmuti"
 
 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
-"Print fan:"
-"Tiskovy v:"
+"Print fan"
+"Tiskovy vent."
 
 #MSG_CARD_MENU
 "Print from SD"
@@ -844,7 +844,7 @@
 
 #
 "Print FAN"
-"Tiskovy v"
+"Tiskovy vent."
 
 #MSG_PRUSA3D
 "prusa3d.com"
@@ -979,8 +979,8 @@
 "Trideni     [cas]"
 
 #
-"Severe skew"
-"Tezke zkoseni"
+"Severe skew:"
+"Tezke zkoseni:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -995,8 +995,8 @@
 "Zvuk    [hlasity]"
 
 #
-"Slight skew"
-"Lehke zkoseni"
+"Slight skew:"
+"Lehke zkoseni:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1415,8 +1415,8 @@
 "Plat"
 
 #
-"Sound     [assist]"
-"Zvuk      [Asist.]"
+"Sound    [assist]"
+"Zvuk     [Asist.]"
 
 #
 "Steel sheets"
@@ -1433,3 +1433,7 @@
 #
 "Z-probe nr.    [3]"
 "Pocet mereni Z [3]"
+
+#
+"Z-probe nr.    [5]"
+"Pocet mereni Z [5]"

+ 30 - 26
lang/lang_en_de.txt

@@ -64,7 +64,7 @@
 
 #MSG_AUTOLOAD_FILAMENT c=17
 "AutoLoad filament"
-"Auto-Laden Filament"
+"AutoLaden Filament"
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
@@ -320,7 +320,7 @@
 
 #MSG_FILAMENT_CLEAN c=20 r=2
 "Filament extruding & with correct color?"
-"Filament extrudiert + richtige Farbe?"
+"Filament extrudiert mit richtiger Farbe?"
 
 #MSG_NOT_LOADED c=19
 "Filament not loaded"
@@ -556,11 +556,11 @@
 
 #MSG_MESH_BED_LEVELING
 "Mesh Bed Leveling"
-"Mesh Bett Ausgleich"
+"MeshBett Ausgleich"
 
 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
 "MMU OK. Resuming position..."
-"MMU OK. Position    wiederherstellen... "
+"MMU OK. Position wiederherstellen..."
 
 #MSG_MMU_OK_RESUMING_TEMPERATURE c=20 r=4
 "MMU OK. Resuming temperature..."
@@ -828,7 +828,7 @@
 
 #
 "Press the knob"
-"Knopf druecken"
+"Knopf druecken zum"
 
 #MSG_PRINT_PAUSED c=20 r=1
 "Print paused"
@@ -844,7 +844,7 @@
 
 #
 "Print FAN"
-"Druckvent"
+"Druckvent."
 
 #MSG_PRUSA3D
 "prusa3d.com"
@@ -868,7 +868,7 @@
 
 #MSG_CALIBRATE_BED_RESET
 "Reset XYZ calibr."
-"XYZ Kalibr. zuruecksetzen."
+"Reset XYZ Kalibr."
 
 #MSG_BED_CORRECTION_RESET
 "Reset"
@@ -936,7 +936,7 @@
 
 #MSG_SELFTEST_FAILED c=20
 "Selftest failed  "
-"Selbsttest misslang  "
+"Selbsttest Error "
 
 #MSG_FORCE_SELFTEST c=20 r=8
 "Selftest will be run to calibrate accurate sensorless rehoming."
@@ -979,8 +979,8 @@
 "Sort.      [Zeit]"
 
 #
-"Severe skew"
-"Schwer.Schr"
+"Severe skew:"
+"Schwer.Schr:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -995,8 +995,8 @@
 "Sound      [laut]"
 
 #
-"Slight skew"
-"Leicht.Schr"
+"Slight skew:"
+"Leicht.Schr:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1104,11 +1104,11 @@
 
 #
 "to load filament"
-"zum Filament laden"
+"Filament laden"
 
 #
 "to unload filament"
-"zum Filament entladen"
+"Filament entladen"
 
 #MSG_UNLOAD_FILAMENT c=17
 "Unload filament"
@@ -1249,7 +1249,7 @@
 
 #
 "Checks"
-"\x00"
+"Kontrolle"
 
 #
 "False triggering"
@@ -1265,11 +1265,11 @@
 
 #
 "Firmware [strict]"
-"Firmware [streng]"
+"Firmware [strikt]"
 
 #
 "Firmware   [warn]"
-"\x00"
+"Firmware [warnen]"
 
 #
 "HW Setup"
@@ -1293,15 +1293,15 @@
 
 #
 "Mesh         [3x3]"
-"\x00"
+"Gitter       [3x3]"
 
 #
 "Mesh         [7x7]"
-"\x00"
+"Gitter       [7x7]"
 
 #
 "Mesh bed leveling"
-"Mesh Bett Ausgleich"
+"MeshBett Ausgleich"
 
 #
 "MK3S firmware detected on MK3 printer"
@@ -1325,11 +1325,11 @@
 
 #
 "Model    [strict]"
-"Modell   [streng]"
+"Modell   [strikt]"
 
 #
 "Model      [warn]"
-"Modell     [warn]"
+"Modell   [warnen]"
 
 #
 "Nozzle d.  [0.25]"
@@ -1349,11 +1349,11 @@
 
 #
 "Nozzle   [strict]"
-"Duese    [streng]"
+"Duese    [strikt]"
 
 #
 "Nozzle     [warn]"
-"Duese      [warn]"
+"Duese    [warnen]"
 
 #
 "G-code sliced for a different level. Continue?"
@@ -1416,8 +1416,8 @@
 "Blech"
 
 #
-"Sound     [assist]"
-"Sound     [Assist]"
+"Sound    [assist]"
+"Sound    [Assist]"
 
 #
 "Steel sheets"
@@ -1434,3 +1434,7 @@
 #
 "Z-probe nr.    [3]"
 "Z-Probe Nr.    [3]"
+
+#
+"Z-probe nr.    [5]"
+"Z-Probe Nr.    [5]"

+ 17 - 13
lang/lang_en_es.txt

@@ -24,7 +24,7 @@
 
 #MSG_BABYSTEPPING_Z c=15
 "Adjusting Z:"
-"Ajustando Z:"
+"Ajustar-Z:"
 
 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
 "All correct      "
@@ -216,7 +216,7 @@
 
 #MSG_EXTRUDER_CORRECTION c=10
 "E-correct:"
-"Correccion-E:"
+"Corregir-E:"
 
 #MSG_EJECT_FILAMENT c=17 r=1
 "Eject filament"
@@ -976,11 +976,11 @@
 
 #MSG_SORT_TIME c=17 r=1
 "Sort       [time]"
-"Ordenar  [tiempo]"
+"Ordenar   [fecha]"
 
 #
-"Severe skew"
-"Incl.severa"
+"Severe skew:"
+"Incl.severa:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -995,8 +995,8 @@
 "Sonido     [alto]"
 
 #
-"Slight skew"
-"Liger.incl."
+"Slight skew:"
+"Liger.incl.:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1200,7 +1200,7 @@
 
 #
 "X-correct:"
-"Correccion-X:"
+"Corregir-X:"
 
 #MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
 "XYZ calibration ok. X/Y axes are perpendicular. Congratulations!"
@@ -1236,11 +1236,11 @@
 
 #
 "Y-correct:"
-"Correccion-Y:"
+"Corregir-Y:"
 
 #MSG_OFF
 " [off]"
-" [apagado]"
+"[apag]"
 
 #
 "Back"
@@ -1415,8 +1415,8 @@
 "Lamina"
 
 #
-"Sound     [assist]"
-"Sonido  [asistido]"
+"Sound    [assist]"
+"Sonido [asistido]"
 
 #
 "Steel sheets"
@@ -1424,7 +1424,7 @@
 
 #
 "Z-correct:"
-"Correccion-Z:"
+"Corregir-Z:"
 
 #
 "Z-probe nr.    [1]"
@@ -1433,3 +1433,7 @@
 #
 "Z-probe nr.    [3]"
 "Z-sensor nr.   [3]"
+
+#
+"Z-probe nr.    [5]"
+"Z-sensor nr.   [5]"

+ 122 - 117
lang/lang_en_fr.txt

@@ -16,7 +16,7 @@
 
 #MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
 "WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
-"ATTENTION:\x0aDetection de crash\x0adesactivee en\x0amode Furtif"
+"ATTENTION:\x0aDetection de crash\x0adesactivee en\x0amode feutre"
 
 #
 ">Cancel"
@@ -24,7 +24,7 @@
 
 #MSG_BABYSTEPPING_Z c=15
 "Adjusting Z:"
-"Ajuster Z :"
+"Ajuster Z:"
 
 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
 "All correct      "
@@ -32,7 +32,7 @@
 
 #MSG_WIZARD_DONE c=20 r=8
 "All is done. Happy printing!"
-"Tout est pret. Bonne impression !"
+"Tout est pret. Bonne impression!"
 
 #
 "Ambient"
@@ -62,9 +62,9 @@
 "Auto home"
 "Mise a 0 des axes"
 
-#MSG_AUTOLOAD_FILAMENT c=17
+#MSG_AUTOLOAD_FILAMENT c=18
 "AutoLoad filament"
-"AutoCharge du filament"
+"Autocharge du fil."
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
@@ -72,7 +72,7 @@
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
-"Chargement auto du filament actif, appuyez sur le btn et inserez le fil."
+"Chargement auto. du fil. active, appuyez sur le bouton et inserez le fil."
 
 #MSG_SELFTEST_AXIS_LENGTH
 "Axis length"
@@ -100,7 +100,7 @@
 
 #MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4
 "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
-"Echec bed leveling. Capt. non declenche. Debris sur buse ? En attente d'un reset."
+"Echec bed leveling. Capt. non declenche. Debris sur buse? En attente d'un reset."
 
 #MSG_BED
 "Bed"
@@ -112,7 +112,7 @@
 
 #MSG_RECOVER_PRINT c=20 r=2
 "Blackout occurred. Recover print?"
-"Coupure detectee. Recup. impression ?"
+"Coupure detectee. Reprendre impression?"
 
 #
 "Calibrating home"
@@ -132,15 +132,15 @@
 
 #MSG_MOVE_CARRIAGE_TO_THE_TOP c=20 r=8
 "Calibrating XYZ. Rotate the knob to move the Z carriage up to the end stoppers. Click when done."
-"Calibration de XYZ. Tournez le bouton pour monter le chariot de l'axe Z jusqu'aux butees. Cliquez une fois fait."
+"Calibration de XYZ. Tournez le bouton pour faire monter l'extrudeur dans l'axe Z jusqu'aux butees. Cliquez une fois fait."
 
 #MSG_CALIBRATE_Z_AUTO c=20 r=2
 "Calibrating Z"
-"Calibration de Z"
+"Calibration Z"
 
 #MSG_MOVE_CARRIAGE_TO_THE_TOP_Z c=20 r=8
 "Calibrating Z. Rotate the knob to move the Z carriage up to the end stoppers. Click when done."
-"Calibration de Z. Tournez le bouton pour monter le chariot de l'axe Z jusqu'aux butees. Cliquez une fois fait."
+"Calibration de Z. Tournez le bouton pour faire monter l'extrudeur dans l'axe Z jusqu'aux butees. Cliquez une fois fait."
 
 #MSG_HOMEYZ_DONE
 "Calibration done"
@@ -168,7 +168,7 @@
 
 #
 "Copy selected language?"
-"Copier la langue selectionne ?"
+"Copier la langue selectionne?"
 
 #MSG_CRASHDETECT_ON
 "Crash det.   [on]"
@@ -188,7 +188,7 @@
 
 #
 "Crash detected. Resume print?"
-"Crash detecte. Poursuivre l'impression ?"
+"Crash detecte. Poursuivre l'impression?"
 
 #
 "Crash"
@@ -200,7 +200,7 @@
 
 #MSG_DATE c=17 r=1
 "Date:"
-"Date :"
+"Date:"
 
 #MSG_DISABLE_STEPPERS
 "Disable steppers"
@@ -212,7 +212,7 @@
 
 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
 "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
-"Voulez-vous repeter la derniere etape pour reajuster la distance entre la buse et le plateau chauffant ?"
+"Voulez-vous repeter la derniere etape pour reajuster la distance entre la buse et le plateau chauffant?"
 
 #MSG_EXTRUDER_CORRECTION c=10
 "E-correct:"
@@ -220,15 +220,15 @@
 
 #MSG_EJECT_FILAMENT c=17 r=1
 "Eject filament"
-"Ejecter le fil."
+"Remonter le fil."
 
 #
 "Eject"
-"Ejecter"
+"Remonter"
 
 #MSG_EJECTING_FILAMENT c=20 r=1
 "Ejecting filament"
-"Ejection filament"
+"Le fil. remonte"
 
 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1
 "Endstop not hit"
@@ -248,11 +248,11 @@
 
 #MSG_FSENS_NOT_RESPONDING c=20 r=4
 "ERROR: Filament sensor is not responding, please check connection."
-"ERREUR : Le capteur de filament ne repond pas, verifiez le branchement."
+"ERREUR: Le capteur de filament ne repond pas, verifiez le branchement."
 
 #MSG_ERROR
 "ERROR:"
-"ERREUR :"
+"ERREUR:"
 
 #MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
 "Extruder fan:"
@@ -268,23 +268,23 @@
 
 #
 "Fail stats MMU"
-"Stat. echecs MMU"
+"Stat. d'echec MMU"
 
 #MSG_FSENS_AUTOLOAD_ON c=17 r=1
 "F. autoload  [on]"
-"ChargAuto f. [on]"
+"Autochargeur [on]"
 
 #MSG_FSENS_AUTOLOAD_NA c=17 r=1
 "F. autoload [N/A]"
-"AutoCharg F [N/A]"
+"Autochargeur[N/A]"
 
 #MSG_FSENS_AUTOLOAD_OFF c=17 r=1
 "F. autoload [off]"
-"AutoCharg F [off]"
+"Autochargeur[off]"
 
 #
 "Fail stats"
-"Statist. d'echec"
+"Stat. d'echec"
 
 #MSG_FAN_SPEED c=14
 "Fan speed"
@@ -292,15 +292,15 @@
 
 #MSG_SELFTEST_FAN c=20
 "Fan test"
-"Test ventilateur"
+"Test du ventilateur"
 
 #MSG_FANS_CHECK_ON c=17 r=1
 "Fans check   [on]"
-"Verif ventilo[on]"
+"Verif vent.  [on]"
 
 #MSG_FANS_CHECK_OFF c=17 r=1
 "Fans check  [off]"
-"Verif venti [off]"
+"Verif vent. [off]"
 
 #MSG_FSENSOR_ON
 "Fil. sensor  [on]"
@@ -308,7 +308,7 @@
 
 #MSG_FSENSOR_NA
 "Fil. sensor [N/A]"
-"Capteur Fil. [N/A]"
+"Capteur Fil.[N/A]"
 
 #MSG_FSENSOR_OFF
 "Fil. sensor [off]"
@@ -320,7 +320,7 @@
 
 #MSG_FILAMENT_CLEAN c=20 r=2
 "Filament extruding & with correct color?"
-"Filament extrude et avec bonne couleur ?"
+"Filament extrude et avec bonne couleur?"
 
 #MSG_NOT_LOADED c=19
 "Filament not loaded"
@@ -340,11 +340,11 @@
 
 #MSG_FILE_INCOMPLETE c=20 r=2
 "File incomplete. Continue anyway?"
-"Fichier incomplet. Continuer qd meme ?"
+"Fichier incomplet. Continuer qd meme?"
 
 #MSG_FINISHING_MOVEMENTS c=20 r=1
 "Finishing movements"
-"Mouvements de fin"
+"Mouvement final"
 
 #MSG_V2_CALIBRATION c=17 r=1
 "First layer cal."
@@ -352,11 +352,11 @@
 
 #MSG_WIZARD_SELFTEST c=20 r=8
 "First, I will run the selftest to check most common assembly problems."
-"D'abord, je vais lancer le Selftest pour verifier les problemes d'assemblage les plus communs."
+"D'abord, je vais lancer le Auto-test pour verifier les problemes d'assemblage les plus communs."
 
 #
 "Fix the issue and then press button on MMU unit."
-"Corrigez le probleme et appuyez sur le bouton de l'unite MMU."
+"Corrigez le probleme et appuyez sur le bouton sur la MMU."
 
 #MSG_FLOW
 "Flow"
@@ -368,7 +368,7 @@
 
 #MSG_SELFTEST_COOLING_FAN c=20
 "Front print fan?"
-"Ventilo impr avant ?"
+"Ventilo impr avant?"
 
 #MSG_BED_CORRECTION_FRONT c=14 r=1
 "Front side[um]"
@@ -384,7 +384,7 @@
 
 #MSG_BED_HEATING_SAFETY_DISABLED
 "Heating disabled by safety timer."
-"Chauffe desactivee par le compteur de securite."
+"Chauffage desactivee par le compteur de securite."
 
 #MSG_HEATING_COMPLETE c=20
 "Heating done."
@@ -396,7 +396,7 @@
 
 #MSG_WIZARD_WELCOME c=20 r=7
 "Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?"
-"Bonjour, je suis votre imprimante Original Prusa i3. Voulez-vous que je vous guide a travers le processus d'installation ?"
+"Bonjour, je suis votre imprimante Original Prusa i3. Voulez-vous que je vous guide a travers le processus d'installation?"
 
 #MSG_PRUSA3D_HOWTO
 "howto.prusa3d.com"
@@ -420,11 +420,11 @@
 
 #MSG_SELFTEST_CHECK_ENDSTOPS c=20
 "Checking endstops"
-"Verifications butees"
+"Verification butees"
 
 #MSG_SELFTEST_CHECK_HOTEND c=20
 "Checking hotend  "
-"Verif. tete impr."
+"Verif. du hotend"
 
 #MSG_SELFTEST_CHECK_FSENSOR c=20
 "Checking sensors "
@@ -444,11 +444,11 @@
 
 #MSG_CHOOSE_EXTRUDER c=20 r=1
 "Choose extruder:"
-"Choisir extrudeur :"
+"Choisir extrudeur:"
 
 #MSG_CHOOSE_FILAMENT c=20 r=1
 "Choose filament:"
-"Choix du filament :"
+"Choix du filament:"
 
 #MSG_FILAMENT c=17 r=1
 "Filament"
@@ -456,11 +456,11 @@
 
 #MSG_WIZARD_XYZ_CAL c=20 r=8
 "I will run xyz calibration now. It will take approx. 12 mins."
-"Je vais maintenant lancer la calibration xyz. Cela prendra 12 min environ."
+"Je vais maintenant lancer la calibration XYZ. Cela prendra 12 min environ."
 
 #MSG_WIZARD_Z_CAL c=20 r=8
 "I will run z calibration now."
-"Je vais maintenant lancer la calibration z."
+"Je vais maintenant lancer la calibration Z."
 
 #MSG_WIZARD_V2_CAL_2 c=20 r=12
 "I will start to print line and you will gradually lower the nozzle by rotating the knob, until you reach optimal height. Check the pictures in our handbook in chapter Calibration."
@@ -472,7 +472,7 @@
 
 #
 "Is filament 1 loaded?"
-"Le filament 1 est-il charge ?"
+"Fil.1 est-il charge?"
 
 #MSG_INSERT_FILAMENT c=20
 "Insert filament"
@@ -480,27 +480,27 @@
 
 #MSG_WIZARD_FILAMENT_LOADED c=20 r=2
 "Is filament loaded?"
-"Le filament est-il charge ?"
+"Fil. est-il charge?"
 
 #MSG_WIZARD_PLA_FILAMENT c=20 r=2
 "Is it PLA filament?"
-"Est-ce du filament PLA ?"
+"Est-ce du filament PLA?"
 
 #MSG_PLA_FILAMENT_LOADED c=20 r=2
 "Is PLA filament loaded?"
-"Le filament PLA est-il charge ?"
+"Fil. PLA est-il charge?"
 
 #MSG_STEEL_SHEET_CHECK c=20 r=2
 "Is steel sheet on heatbed?"
-"Feuille d'acier sur plateau chauffant ?"
+"Plaque d'impression sur le lit chauffant?"
 
 #
 "Last print failures"
-"Echecs derniere impr"
+"Echecs derniere imp."
 
 #
 "Last print"
-"Derniere impression"
+"Derniere impres."
 
 #MSG_SELFTEST_EXTRUDER_FAN c=20
 "Left hotend fan?"
@@ -520,7 +520,7 @@
 
 #MSG_BABYSTEP_Z
 "Live adjust Z"
-"Ajuster Z en direct"
+"Ajuster Z en dir."
 
 #MSG_LOAD_FILAMENT c=17
 "Load filament"
@@ -528,11 +528,11 @@
 
 #MSG_LOADING_COLOR
 "Loading color"
-"Chargement couleur"
+"Charg. de la couleur"
 
 #MSG_LOADING_FILAMENT c=20
 "Loading filament"
-"Chargement filament"
+"Chargement du fil."
 
 #MSG_LOOSE_PULLEY c=20 r=1
 "Loose pulley"
@@ -540,7 +540,7 @@
 
 #
 "Load to nozzle"
-"Charger dans la buse"
+"Charger la buse"
 
 #MSG_M117_V2_CALIBRATION c=25 r=1
 "M117 First layer cal."
@@ -548,7 +548,7 @@
 
 #MSG_MAIN
 "Main"
-"Principal"
+"Menu principal"
 
 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
 "Measuring reference height of calibration point"
@@ -564,15 +564,15 @@
 
 #MSG_MMU_OK_RESUMING_TEMPERATURE c=20 r=4
 "MMU OK. Resuming temperature..."
-"MMU OK. Remontee en temperature..."
+"MMU OK. Rechauffage de la buse..."
 
 #
 "Measured skew"
-"Deviation mesuree"
+"Deviat.mesuree"
 
 #
 "MMU fails"
-"Echec MMU"
+"Echecs MMU"
 
 #
 "MMU load failed     "
@@ -592,7 +592,7 @@
 
 #MSG_SILENT_MODE_ON
 "Mode     [silent]"
-"Mode [silencieux]"
+"Mode     [feutre]"
 
 #
 "MMU needs user attention."
@@ -604,7 +604,7 @@
 
 #MSG_STEALTH_MODE_ON
 "Mode    [Stealth]"
-"Mode     [Furtif]"
+"Mode     [furtif]"
 
 #MSG_AUTO_MODE_ON
 "Mode [auto power]"
@@ -684,7 +684,7 @@
 
 #
 "Now remove the test print from steel sheet."
-"Retirez maintenant l'impression de test de la feuille d'acier."
+"Retirez maintenant l'impression de test de la plaque en acier."
 
 #
 "Nozzle FAN"
@@ -716,7 +716,7 @@
 
 #MSG_WIZARD_CLEAN_HEATBED c=20 r=8
 "Please clean heatbed and then press the knob."
-"Nettoyez le plateau chauffant et appuyez sur le bouton."
+"Nettoyez la plaque en acier et appuyez sur le bouton."
 
 #MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8
 "Please clean the nozzle for calibration. Click when done."
@@ -724,11 +724,11 @@
 
 #MSG_SELFTEST_PLEASECHECK
 "Please check :"
-"Verifiez :"
+"Verifiez:"
 
 #MSG_WIZARD_CALIBRATION_FAILED c=20 r=8
 "Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."
-"Merci de verifier notre manuel et de corriger le probleme. Poursuivez alors l'assistant en redemarrant l'imprimante."
+"Merci de consulter notre manuel et de corriger le probleme. Poursuivez alors l'assistant en redemarrant l'imprimante."
 
 #MSG_WIZARD_LOAD_FILAMENT c=20 r=8
 "Please insert PLA filament to the extruder, then press knob to load it."
@@ -744,7 +744,7 @@
 
 #MSG_PLACE_STEEL_SHEET c=20 r=4
 "Please place steel sheet on heatbed."
-"Placez la feuille d'acier sur le plateau chauffant."
+"Placez la plaque en acier sur le plateau chauffant."
 
 #MSG_PRESS_TO_UNLOAD c=20 r=4
 "Please press the knob to unload filament"
@@ -752,7 +752,7 @@
 
 #
 "Please insert PLA filament to the first tube of MMU, then press the knob to load it."
-"Veuillez inserer du filament PLA dans le premier tube du MMU, et pressez sur le bouton pour le charger."
+"Inserez du PLA dans le 1er tube du MMU, appuyez sur le bouton pour le charger."
 
 #MSG_PULL_OUT_FILAMENT c=20 r=4
 "Please pull out filament immediately"
@@ -764,7 +764,7 @@
 
 #MSG_REMOVE_STEEL_SHEET c=20 r=4
 "Please remove steel sheet from heatbed."
-"Retirez la feuille d'acier du plateau chauffant."
+"Retirez la plaque en acier du plateau chauffant."
 
 #MSG_RUN_XYZ c=20 r=4
 "Please run XYZ calibration first."
@@ -780,7 +780,7 @@
 
 #
 "Please remove shipping helpers first."
-"Veuillez retirer d'abord les protections d'envoi."
+"Retirez d'abord les protections de transport."
 
 #MSG_PREHEAT_NOZZLE c=20
 "Preheat the nozzle!"
@@ -810,21 +810,21 @@
 "Print aborted"
 "Impression annulee"
 
-#
+# c=20 r=1
 "Preheating to load"
 "Chauffe pour charger"
 
-#
+# c=20 r=1
 "Preheating to unload"
-"Chauffe pr decharger"
+"Chauf.pour decharger"
 
 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
 "Print fan:"
-"Vent.impr:"
+"Vent. impr:"
 
 #MSG_CARD_MENU
 "Print from SD"
-"Impr depuis la SD"
+"Impr. depuis la SD"
 
 #
 "Press the knob"
@@ -836,7 +836,7 @@
 
 #
 "Press the knob to resume nozzle temperature."
-"Appuyez sur le bouton pour poursuivre la mise en temperature de la buse."
+"Appuyez sur le bouton pour rechauffer la buse."
 
 #MSG_FOLLOW_CALIBRATION_FLOW c=20 r=8
 "Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."
@@ -844,7 +844,7 @@
 
 #
 "Print FAN"
-"Vent.impr"
+"Vent. impr"
 
 #MSG_PRUSA3D
 "prusa3d.com"
@@ -868,7 +868,7 @@
 
 #MSG_CALIBRATE_BED_RESET
 "Reset XYZ calibr."
-"Reinit.calibr. XYZ"
+"Reinit. calib. XYZ"
 
 #MSG_BED_CORRECTION_RESET
 "Reset"
@@ -896,7 +896,7 @@
 
 #MSG_WIZARD_RERUN c=20 r=7
 "Running Wizard will delete current calibration results and start from the beginning. Continue?"
-"Lancer l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer ?"
+"Lancement de l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer?"
 
 #MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
 "SD card  [normal]"
@@ -904,7 +904,7 @@
 
 #MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
 "SD card [flshAir]"
-"CarteSD[flashAir]"
+"CarteSD [flshAir]"
 
 #
 "Right"
@@ -932,7 +932,7 @@
 
 #MSG_SELFTEST_ERROR
 "Selftest error !"
-"Erreur auto-test !"
+"Erreur auto-test!"
 
 #MSG_SELFTEST_FAILED c=20
 "Selftest failed  "
@@ -948,11 +948,11 @@
 
 #
 "Select PLA filament:"
-"Selectionnez le filament PLA :"
+"Selectionnez le fil. PLA:"
 
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
-"Regler temp. :"
+"Regler temp.:"
 
 #MSG_SETTINGS
 "Settings"
@@ -979,8 +979,8 @@
 "Tri       [heure]"
 
 #
-"Severe skew"
-"Deviat.sev."
+"Severe skew:"
+"Deviat.sev.:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -995,8 +995,8 @@
 "Son        [fort]"
 
 #
-"Slight skew"
-"Deviat.leg."
+"Slight skew:"
+"Deviat.leg.:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1004,7 +1004,7 @@
 
 #
 "Some problem encountered, Z-leveling enforced ..."
-"Problemes rencontres, nivellement de l'axe Z applique..."
+"Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
 
 #MSG_SOUND_ONCE c=17 r=1
 "Sound      [once]"
@@ -1012,7 +1012,7 @@
 
 #MSG_SOUND_SILENT c=17 r=1
 "Sound    [silent]"
-"Son  [silencieux]"
+"Son      [feutre]"
 
 #MSG_SPEED
 "Speed"
@@ -1080,7 +1080,7 @@
 
 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4
 "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
-"Il y a encore besoin d'effectuer la calibration Z. Veuillez suivre le manuel, chapitre Premiers pas, section Processus de calibration."
+"Il faut toujours effectuer la Calibration Z. Veuillez suivre le manuel, chapitre Premiers pas, section Processus de calibration."
 
 #
 "Total filament"
@@ -1148,23 +1148,23 @@
 
 #
 "Use unload to remove filament 1 if it protrudes outside of the rear MMU tube. Use eject if it is hidden in tube."
-"Utilisez decharger pour retirer le filament 1 s'il depasse du  tube arriere du MMU. Utilisez ejecter s'il est cache dans le tube."
+"Utilisez Remonter le fil. pour retirer le filament 1 s'il depasse du tube arriere du MMU. Utilisez ejecter s'il est cache dans le tube."
 
 #MSG_CHANGED_BOTH c=20 r=4
 "Warning: both printer type and motherboard type changed."
-"Attention : Types d'imprimante et de carte mere modifies"
+"Attention: Types d'imprimante et de carte mere modifies"
 
 #MSG_CHANGED_MOTHERBOARD c=20 r=4
 "Warning: motherboard type changed."
-"Attention : Type de carte mere modifie."
+"Attention: Type de carte mere modifie."
 
 #MSG_CHANGED_PRINTER c=20 r=4
 "Warning: printer type changed."
-"Attention : Type d'imprimante modifie"
+"Attention: Type d'imprimante modifie"
 
 #MSG_UNLOAD_SUCCESSFUL c=20 r=2
 "Was filament unload successful?"
-"Dechargement du filament reussi ?"
+"Dechargement du filament reussi?"
 
 #MSG_SELFTEST_WIRINGERROR
 "Wiring error"
@@ -1188,7 +1188,7 @@
 
 #MSG_WIZARD_QUIT c=20 r=8
 "You can always resume the Wizard from Calibration -> Wizard."
-"Vous pouvez toujours relancer l'assistant dans Calibration-> Assistant."
+"Vous pouvez toujours relancer l'Assistant dans Calibration > Assistant."
 
 #MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME c=20 r=8
 "XYZ calibration all right. Skew will be corrected automatically."
@@ -1196,7 +1196,7 @@
 
 #MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8
 "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
-"Calibration XYZ OK. Les axes X/Y sont legerement non perpendiculaires. Bon boulot !"
+"Calibration XYZ OK. Les axes X/Y sont legerement non perpendiculaires. Bon boulot!"
 
 #
 "X-correct:"
@@ -1204,11 +1204,11 @@
 
 #MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
 "XYZ calibration ok. X/Y axes are perpendicular. Congratulations!"
-"Calibration XYZ OK. Les axes X/Y sont perpendiculaires. Felicitations !"
+"Calibration XYZ OK. Les axes X/Y sont perpendiculaires. Felicitations!"
 
 #MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR c=20 r=8
 "XYZ calibration compromised. Front calibration points not reachable."
-"Calibration XYZ compromise. Les points de calibration avant ne sont pas atteignables."
+"Calibration XYZ compromise. Les points de calibration en avant ne sont pas atteignables."
 
 #MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR c=20 r=8
 "XYZ calibration compromised. Right front calibration point not reachable."
@@ -1216,7 +1216,7 @@
 
 #MSG_LOAD_ALL c=17
 "Load all"
-"Tout charger"
+"Charger un par un"
 
 #
 "XYZ calibration failed. Bed calibration point was not found."
@@ -1224,7 +1224,7 @@
 
 #
 "XYZ calibration failed. Front calibration points not reachable."
-"Echec calibration XYZ. Les points de calibration avant ne sont pas atteignables."
+"Echec calibration XYZ. Les points de calibration en avant ne sont pas atteignables."
 
 #
 "XYZ calibration failed. Right front calibration point not reachable."
@@ -1280,15 +1280,15 @@
 
 #
 "Magnets comp.[N/A]"
-"Comp. aimants[N/A]"
+"Compens. aim.[N/A]"
 
 #
 "Magnets comp.[Off]"
-"Comp. aimants[Off]"
+"Compens. aim.[off]"
 
 #
 "Magnets comp. [On]"
-"Comp. aimants [On]"
+"Compens. aim. [on]"
 
 #
 "Mesh         [3x3]"
@@ -1308,11 +1308,11 @@
 
 #
 "MMU Mode [Normal]"
-"Mode MMU [Normal]"
+"Mode MMU [normal]"
 
 #
 "MMU Mode[Stealth]"
-"Mode MMU [Furtif]"
+"Mode MMU [feutre]"
 
 #
 "Mode change in progress ..."
@@ -1368,7 +1368,7 @@
 
 #
 "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
-"Le G-code a ete prepare pour une autre version de l'imprimante. Veuillez decouper le modele a nouveau. L'impression a ete annulee. "
+"Le G-code a ete prepare pour une autre version de l'imprimante. Veuillez decouper le modele a nouveau. L'impression a ete annulee."
 
 #
 "G-code sliced for a newer firmware. Continue?"
@@ -1376,27 +1376,27 @@
 
 #
 "G-code sliced for a newer firmware. Please update the firmware. Print cancelled."
-"Le G-code a ete prepare pour une version plus recente du firmware. Veuillez mettre a jour le firmware. L'impression  annulee."
+"Le G-code a ete prepare pour une version plus recente du firmware. Veuillez mettre a jour le firmware. L'impression annulee."
 
 #
 "PINDA:"
 "PINDA:"
 
-#
+# c=20 r=1
 "Preheating to cut"
-"Prechauffage pour couper"
+"Chauffe pour couper"
 
-#
+# c=20 r=1
 "Preheating to eject"
-"Prechauffage pour ejecter"
+"Chauf. pour remonter"
 
 #
 "Printer nozzle diameter differs from the G-code. Continue?"
-"Diametre de la  buse de l'imprimante different du G-Code. Continuer ?"
+"Diametre de la buse dans les reglages ne correspond pas a celui dans le G-Code. Continuer?"
 
 #
 "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
-"Diametre de la  buse de l'imprimante different du G-Code. Merci de verifier le parametre dans les reglages. Impression annulee."
+"Diametre de la buse dans les reglages ne correspond pas a celui dans le G-Code. Merci de verifier le parametre dans les reglages. Impression annulee."
 
 #
 "Rename"
@@ -1412,11 +1412,11 @@
 
 #
 "Sheet"
-"Feuille"
+"Plaque"
 
 #
-"Sound     [assist]"
-"Son       [Assist]"
+"Sound    [assist]"
+"Son      [assist]"
 
 #
 "Steel sheets"
@@ -1428,8 +1428,13 @@
 
 #
 "Z-probe nr.    [1]"
-"Sonde-Z num.   [1]"
+"Mesurer x-fois [1]"
 
 #
 "Z-probe nr.    [3]"
-"Sonde-Z num.   [3]"
+"Mesurer x-fois [3]"
+
+#
+"Z-probe nr.    [5]"
+"Mesurer x-fois [5]"
+ 

+ 28 - 24
lang/lang_en_it.txt

@@ -72,7 +72,7 @@
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
-"Il caricamento automatico e attivo, premete la manopola e inserite il filamento..."
+"Caricamento automatico attivo, premi la manopola e inserisci il filamento."
 
 #MSG_SELFTEST_AXIS_LENGTH
 "Axis length"
@@ -108,7 +108,7 @@
 
 #MSG_MENU_BELT_STATUS c=15 r=1
 "Belt status"
-"Stato delle cinghie"
+"Stato cinghie"
 
 #MSG_RECOVER_PRINT c=20 r=2
 "Blackout occurred. Recover print?"
@@ -172,15 +172,15 @@
 
 #MSG_CRASHDETECT_ON
 "Crash det.   [on]"
-"Rilevam.imp. [on]"
+"Rileva.crash [on]"
 
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
-"Rilevam.imp.[N/A]"
+"Rileva.crash[N/A]"
 
 #MSG_CRASHDETECT_OFF
 "Crash det.  [off]"
-"Rilevam.imp.[off]"
+"Rileva.crash[off]"
 
 #MSG_CRASH_DETECTED c=20 r=1
 "Crash detected."
@@ -272,7 +272,7 @@
 
 #MSG_FSENS_AUTOLOAD_ON c=17 r=1
 "F. autoload  [on]"
-"Autocar.filam[on]"
+"Autocar.fil. [on]"
 
 #MSG_FSENS_AUTOLOAD_NA c=17 r=1
 "F. autoload [N/A]"
@@ -304,15 +304,15 @@
 
 #MSG_FSENSOR_ON
 "Fil. sensor  [on]"
-"Sensor filam.[on]"
+"Sensore fil. [on]"
 
 #MSG_FSENSOR_NA
 "Fil. sensor [N/A]"
-"Sensor filam[N/A]"
+"Sensore fil.[N/A]"
 
 #MSG_FSENSOR_OFF
 "Fil. sensor [off]"
-"Sensor filam[off]"
+"Sensore fil.[off]"
 
 #
 "Filam. runouts"
@@ -348,7 +348,7 @@
 
 #MSG_V2_CALIBRATION c=17 r=1
 "First layer cal."
-"Calibrazione primo layer."
+"Cal. primo strato"
 
 #MSG_WIZARD_SELFTEST c=20 r=8
 "First, I will run the selftest to check most common assembly problems."
@@ -516,7 +516,7 @@
 
 #
 "Lin. correction"
-"Correzione lin."
+"Correzione lineare"
 
 #MSG_BABYSTEP_Z
 "Live adjust Z"
@@ -556,7 +556,7 @@
 
 #MSG_MESH_BED_LEVELING
 "Mesh Bed Leveling"
-"Mesh livel. letto"
+"Livel. piatto"
 
 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
 "MMU OK. Resuming position..."
@@ -588,11 +588,11 @@
 
 #MSG_STEALTH_MODE_OFF
 "Mode     [Normal]"
-"Modo    [normale]"
+"Mod.    [normale]"
 
 #MSG_SILENT_MODE_ON
 "Mode     [silent]"
-"Modo [silenzioso]"
+"Mod. [silenziosa]"
 
 #
 "MMU needs user attention."
@@ -604,15 +604,15 @@
 
 #MSG_STEALTH_MODE_ON
 "Mode    [Stealth]"
-"Modo [Silenziosa]"
+"Mod. [silenziosa]"
 
 #MSG_AUTO_MODE_ON
 "Mode [auto power]"
-"Modo       [auto]"
+"Mod.       [auto]"
 
 #MSG_SILENT_MODE_OFF
 "Mode [high power]"
-"Mode      [forte]"
+"Mod.      [forte]"
 
 #
 "MMU2 connected"
@@ -976,11 +976,11 @@
 
 #MSG_SORT_TIME c=17 r=1
 "Sort       [time]"
-"Ordina    [tempo]"
+"Ordina    [cron.]"
 
 #
-"Severe skew"
-"Devia.grave"
+"Severe skew:"
+"Devia.grave:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
@@ -995,8 +995,8 @@
 "Suono     [forte]"
 
 #
-"Slight skew"
-"Devia.lieve"
+"Slight skew:"
+"Devia.lieve:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
@@ -1415,8 +1415,8 @@
 "Piano"
 
 #
-"Sound     [assist]"
-"Suono  [assistito]"
+"Sound    [assist]"
+"Suono   [assist.]"
 
 #
 "Steel sheets"
@@ -1433,3 +1433,7 @@
 #
 "Z-probe nr.    [3]"
 "Z-probe nr.    [3]"
+
+#
+"Z-probe nr.    [5]"
+"Z-probe nr.    [5]"

+ 40 - 37
lang/lang_en_pl.txt

@@ -52,7 +52,7 @@
 
 #
 "SpoolJoin   [N/A]"
-"SpoolJoin    [nd]"
+"SpoolJoin   [N/D]"
 
 #MSG_AUTO_DEPLETE_OFF c=17 r=1
 "SpoolJoin   [off]"
@@ -64,7 +64,7 @@
 
 #MSG_AUTOLOAD_FILAMENT c=17
 "AutoLoad filament"
-"AutoLadowanie fil."
+"Autoladowanie fil."
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
@@ -96,7 +96,7 @@
 
 #MSG_BED_CORRECTION_MENU
 "Bed level correct"
-"Korekta poziomowania stolu"
+"Korekta stolu"
 
 #MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4
 "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
@@ -176,7 +176,7 @@
 
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
-"Wykr.zderzen[n/d]"
+"Wykr.zderzen[N/D]"
 
 #MSG_CRASHDETECT_OFF
 "Crash det.  [off]"
@@ -204,7 +204,7 @@
 
 #MSG_DISABLE_STEPPERS
 "Disable steppers"
-"Wylaczenie silnikow"
+"Wylacz silniki"
 
 #MSG_BABYSTEP_Z_NOT_SET c=20 r=12
 "Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."
@@ -256,11 +256,11 @@
 
 #MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
 "Extruder fan:"
-"Went. ekstr:"
+"WentHotend:"
 
 #MSG_INFO_EXTRUDER c=15 r=1
 "Extruder info"
-"Informacje o ekstruderze"
+"Ekstruder - info"
 
 #MSG_MOVE_E
 "Extruder"
@@ -272,7 +272,7 @@
 
 #MSG_FSENS_AUTOLOAD_ON c=17 r=1
 "F. autoload  [on]"
-"Autolad. fil [wl]"
+"Autolad.fil. [wl]"
 
 #MSG_FSENS_AUTOLOAD_NA c=17 r=1
 "F. autoload [N/A]"
@@ -320,7 +320,7 @@
 
 #MSG_FILAMENT_CLEAN c=20 r=2
 "Filament extruding & with correct color?"
-"Filament wychodzi z dyszy a kolor jest czysty?"
+"Filament wychodzi z dyszy, kolor jest ok?"
 
 #MSG_NOT_LOADED c=19
 "Filament not loaded"
@@ -516,7 +516,7 @@
 
 #
 "Lin. correction"
-"Korekcja lin."
+"Korekcja liniowa"
 
 #MSG_BABYSTEP_Z
 "Live adjust Z"
@@ -604,7 +604,7 @@
 
 #MSG_STEALTH_MODE_ON
 "Mode    [Stealth]"
-"Tryb    [Stealth]"
+"Tryb      [cichy]"
 
 #MSG_AUTO_MODE_ON
 "Mode [auto power]"
@@ -688,7 +688,7 @@
 
 #
 "Nozzle FAN"
-"Went. Hotend"
+"WentHotend"
 
 #MSG_PAUSE_PRINT
 "Pause print"
@@ -720,7 +720,7 @@
 
 #MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8
 "Please clean the nozzle for calibration. Click when done."
-"Dla prawidl. kalibracji nalezy oczyscic dysze. Potw. guzikiem."
+"Dla prawidlowej kalibracji nalezy oczyscic dysze. Potwierdz guzikiem."
 
 #MSG_SELFTEST_PLEASECHECK
 "Please check :"
@@ -820,7 +820,7 @@
 
 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
 "Print fan:"
-"Went.wydr:"
+"WentWydruk:"
 
 #MSG_CARD_MENU
 "Print from SD"
@@ -840,11 +840,11 @@
 
 #MSG_FOLLOW_CALIBRATION_FLOW c=20 r=8
 "Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."
-"Drukarka nie zostala jeszcze skalibrowana. Kieruj sie Samouczkiem: rozdzial Pierwsze Kroki, sekcja Konfiguracja przed drukowaniem."
+"Drukarka nie byla jeszcze kalibrowana. Kieruj sie Samouczkiem: rozdzial Pierwsze Kroki, sekcja Konfiguracja przed drukowaniem."
 
 #
 "Print FAN"
-"Went.wydr"
+"WentWydruk"
 
 #MSG_PRUSA3D
 "prusa3d.com"
@@ -924,7 +924,7 @@
 
 #MSG_SELFTEST_START c=20
 "Self test start  "
-"Rozpoczynanie Selftestu"
+"Selftest startuje"
 
 #MSG_SELFTEST
 "Selftest         "
@@ -932,7 +932,7 @@
 
 #MSG_SELFTEST_ERROR
 "Selftest error !"
-"Blad selftest !"
+"Blad selftest!"
 
 #MSG_SELFTEST_FAILED c=20
 "Selftest failed  "
@@ -952,7 +952,7 @@
 
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
-"Ustaw. temperatury:"
+"Ustaw temperature:"
 
 #MSG_SETTINGS
 "Settings"
@@ -979,12 +979,12 @@
 "Sortowanie [czas]"
 
 #
-"Severe skew"
-"ZnacznySkos"
+"Severe skew:"
+"Znaczny skos:"
 
 #MSG_SORT_ALPHA c=17 r=1
 "Sort   [alphabet]"
-"Sortowan[alfabet]"
+"Sortowanie[alfab]"
 
 #MSG_SORTING c=20 r=1
 "Sorting files"
@@ -992,19 +992,19 @@
 
 #MSG_SOUND_LOUD c=17 r=1
 "Sound      [loud]"
-"Dzwiek   [Glosny]"
+"Dzwiek   [glosny]"
 
 #
-"Slight skew"
-"Lekki skos"
+"Slight skew:"
+"Lekki skos:"
 
 #MSG_SOUND_MUTE c=17 r=1
 "Sound      [mute]"
-"Dzwiek[Wylaczony]"
+"Dzwiek[wylaczony]"
 
 #
 "Some problem encountered, Z-leveling enforced ..."
-"Wykryto problem, wymuszono poziomowanie osi Z ..."
+"Wykryto problem, wymuszono poziomowanie osi Z."
 
 #MSG_SOUND_ONCE c=17 r=1
 "Sound      [once]"
@@ -1012,7 +1012,7 @@
 
 #MSG_SOUND_SILENT c=17 r=1
 "Sound    [silent]"
-"Dzwiek    [Cichy]"
+"Dzwiek    [cichy]"
 
 #MSG_SPEED
 "Speed"
@@ -1084,11 +1084,11 @@
 
 #
 "Total filament"
-"Calkowita dlugosc filamentu"
+"Zuzycie filamentu"
 
 #
 "Total print time"
-"Calkowity czas druku"
+"Laczny czas druku"
 
 #MSG_TUNE
 "Tune"
@@ -1280,7 +1280,7 @@
 
 #
 "Magnets comp.[N/A]"
-"Kor. magnesow [nd]"
+"Kor. magnesow[N/D]"
 
 #
 "Magnets comp.[Off]"
@@ -1300,7 +1300,7 @@
 
 #
 "Mesh bed leveling"
-"Poziomowanie wg siatki"
+"Poziomowanie stolu"
 
 #
 "MK3S firmware detected on MK3 printer"
@@ -1413,10 +1413,9 @@
 #
 "Sheet"
 "Plyta"
-
 #
-"Sound     [assist]"
-"Dzwiek    [asyst.]"
+"Sound    [assist]"
+"Dzwiek   [asyst.]"
 
 #
 "Steel sheets"
@@ -1428,8 +1427,12 @@
 
 #
 "Z-probe nr.    [1]"
-"Pomiar-Z       [1]"
+"Ilosc Pomiarow [1]"
 
 #
 "Z-probe nr.    [3]"
-"Pomiar-Z       [3]"
+"Ilosc Pomiarow [3]"
+
+#
+"Z-probe nr.    [5]"
+"Ilosc Pomiarow [5]"

+ 252 - 0
lang/translations.md

@@ -0,0 +1,252 @@
+# Translations
+
+## Workflow
+
+- Build firmware
+  - using `build.sh`
+  - using `PF-build.sh` with a `break` before `# build languages`
+- change to `lang` folder
+- check if lang scripts being able to run with `config.sh`
+  - if you get `Arduino main folder: NG` message change in `config.sh` `export ARDUINO=C:/arduino-1.8.5` to `export ARDUINO=<Path to your Arduino IDE folder>`
+    -example: `export ARDUINO=D:/Github/Prusa-Firmware/PF-build-env-1.0.6/windows-64`
+- run `lang-build.sh en` to create english `lang_en.tmp`, `lang_en.dat` and `lang_en.bin` files
+- change in `fw-build.sh` `IGNORE_MISSING_TEXT=1` to `IGNORE_MISSING_TEXT=0` so it stops with error and generates `not_used.txt` and `not_tran.txt`
+- run modified `fw-build.sh`
+  - `not_tran.txt` should be reviewed and added as these are potential missing translations
+    - copy `not_tran.txt` as `lang_add.txt` 
+	  - check if there are things you don't want to translate or must be modifed
+	  - als check that the strings do not start with `spaces` as the scripts doesn't handle these well at this moment.
+	  - run `lang-add.sh lang_add.txt` to add the missing translations to `lang_en.txt` and `lang_en_??.txt`
+  - `not_used.txt` should only contain mesages that aren't used in this variant like MK2.5 vs MK3
+- run `fw-clean.sh` to cleanup firmware related files
+- delete `not_used.txt` and `not_tran.txt`
+- run `lang-clean.sh` to cleanup language related files
+- run `lang-export.sh all` to create PO files for translation these are stored in `/lang/po` folder
+  - Send them to translators and reviewers or
+  - copy these to `/lang/po/new` and 
+  - translate these with POEdit the newly added messages
+    - easiest way is to choose `Validate`in POEdit as it shows you `errors` and the `missing transalations` / most likely the newly added at the top.
+- The new translated files are expected in `/lang/po/new` folder so store the received files these
+- run `lang-import.sh <language code (iso639-1)>` for each newly translated language
+  - script improvement to import "all" and other things would be great.
+- Double check if something is missing or faulty
+  - run `lang-build.sh` to to create `lang_en.tmp/.dat/.bin` and `lang_en_??.tmp/.dat/.bin` files
+  - run `fw-build.sh` and check if there are still some messages in `not_tran.txt` that need attention
+- After approval
+  - run `fw-clean.sh` to cleanup firmware related files
+  - run `lang-clean.sh` to cleanup language related files
+  - change in `fw-build.sh` back to `IGNORE_MISSING_TEXT=1`
+  - remove `break` from `PF-build.sh` script if that has been modified
+  - build your firmware with `build.sh`, `PF-build.sh` or how you normally do it.
+  - Check/Test firmware on printer
+
+## Code / usage
+There are 2 modes of operation. If `LANG_MODE==0`, only one language is being used (the default compilation approach from plain Arduino IDE).
+The reset of this explanation is devoted to `LANG_MODE==1`:
+
+`language.h`:
+```C++
+// section .loc_sec (originaly .progmem0) will be used for localized translated strings
+#define PROGMEM_I2 __attribute__((section(".loc_sec")))
+// section .loc_pri (originaly .progmem1) will be used for localized strings in english
+#define PROGMEM_I1 __attribute__((section(".loc_pri")))
+// section .noloc (originaly progmem2) will be used for not localized strings in english
+#define PROGMEM_N1 __attribute__((section(".noloc")))
+#define _I(s) (__extension__({static const char __c[] PROGMEM_I1 = "\xff\xff" s; &__c[0];}))
+#define ISTR(s) "\xff\xff" s
+#define _i(s) lang_get_translation(_I(s))
+#define _T(s) lang_get_translation(s)
+```
+That explains the macros:
+- `_i` expands into `lang_get_translation((__extension__({static const char __c[] PROGMEM_I1 = "\xff\xff" s; &__c[0];})))` . Note the two 0xff's in the beginning of the string. `_i` allows for declaring a string directly inplace of C++ code, no string table is used. The downside of this approach is obvious - the compiler is not able/willing to merge duplicit strings into one.
+- `_T` expands into `lang_get_translation(s)` without the two 0xff's at the beginning. Must be used in conjunction with MSG tables in `messages.h`. Allows to declare a string only once and use many times.
+- `_N` means not-translated. These strings reside in a different segment of memory.
+
+The two 0xff's are somehow magically replaced by real string ID's where the translations are available (still don't know where).
+```C++
+const char* lang_get_translation(const char* s){
+	if (lang_selected == 0) return s + 2; //primary language selected, return orig. str.
+	if (lang_table == 0) return s + 2; //sec. lang table not found, return orig. str.
+	uint16_t ui = pgm_read_word(((uint16_t*)s)); //read string id
+	if (ui == 0xffff) return s + 2; //translation not found, return orig. str.
+	ui = pgm_read_word(((uint16_t*)(((char*)lang_table + 16 + ui*2)))); //read relative offset
+	if (pgm_read_byte(((uint8_t*)((char*)lang_table + ui))) == 0) //read first character
+		return s + 2;//zero length string == not translated, return orig. str.
+	return (const char*)((char*)lang_table + ui); //return calculated pointer
+}
+```
+
+## Files
+
+### `lang_en.txt`
+```
+#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
+"Crash detection can\x0abe turned on only in\x0aNormal mode"
+```
+
+### `lang_en_*.txt`
+```
+#MSG_CRASH_DET_ONLY_IN_NORMAL c=20 r=4
+"Crash detection can\x0abe turned on only in\x0aNormal mode"
+"Crash detekce muze\x0abyt zapnuta pouze v\x0aNormal modu"
+```
+1. a comment - usually a MSG define with number of characters (c) and rows (r)
+2. English text
+3. translated text
+
+### `not_tran.txt`
+A simple list of strings that are not translated yet.
+
+### `not_used.txt`
+A list os strings not currently used in this variant of the firmware or are obsolete.
+Example: There are MK2.5 specific messages that aren't used when you compile a MK3 variant and vice versa. So be carefull and double check the code if this message is obsolete or just not used due to the chosen variant.
+
+## Scripts
+
+### `config.sh`
+- Checks setup and sets auxiliary env vars used in many other scripts. 
+- Looks for env var `ARDUINO`. If not found/empty, a default `C:/arduino-1.8.5` is used.
+- Sets env var `CONFIG_OK=1` when all good, otherwise sets `CONFIG_OK=0`
+
+### `fw-build.sh`
+Joins firmware HEX and language binaries into one file.
+
+### `fw-clean.sh`
+
+### `lang-add.sh`
+Adds new messages into the dictionary regardless of whether there have been any older versions.
+
+### `lang-build.sh`
+Generates lang_xx.bin (language binary files) for the whole firmware build.
+
+Arguments:
+- `$1` : language code (`en`, `cz`, `de`, `es`, `fr`, `it`, `pl`) or `all`
+- empty/no arguments defaults to `all`
+
+Input: `lang_en.txt` or `lang_en_xx.txt`
+
+Output: `lang_xx.bin`
+
+Temporary files: `lang_xx.tmp` and `lang_xx.dat`
+
+Description of the process:
+The script first runs `lang-check.py $1` and removes empty lines and comments (and non-translated texts) into `lang_$1.tmp`.
+The tmp file now contains all translated texts (some of them empty, i.e. "").
+The tmp file is then transformed into `lang_$1.dat`, which is a simple dump of all texts together, each terminated with a `\x00`.
+Format of the `bin` file:
+- 00-01: `A5 5A`
+- 02-03: `B4 4B`
+- 04-05: 2B size
+- 06-07: 2B number of strings
+- 08-09: 2B checksum
+- 0A-0B: 2B lang code hex data: basically `en` converted into `ne`, i.e. characters swapped. Only `cz` is changed into `sc` (old `cs` ISO code).
+- 0C-0D: 2B signature low
+- 0E-0F: 2B signature high
+- 10-(10 + 2*number of strings): table of string offsets from the beginning of this file
+- after the table there are the strings themselves, each terminated with `\x00`
+
+The signature is composed of 2B number of strings and 2B checksum in lang_en.bin. Signature in lang_en.bin is zero.
+
+### `lang-check.sh` and `lang-check.py`
+Both do the same, only lang-check.py is newer, i.e. lang-check.sh is not used anymore.
+lang-check.py makes a binary comparison between what's in the dictionary and what's in the binary.
+
+### `lang-clean.sh`
+Removes all language output files from lang folder. That means deleting:
+-  if [ "$1" = "en" ]; then
+  rm_if_exists lang_$1.tmp
+ else
+  rm_if_exists lang_$1.tmp
+  rm_if_exists lang_en_$1.tmp
+  rm_if_exists lang_en_$1.dif
+  rm_if_exists lang_$1.ofs
+  rm_if_exists lang_$1.txt
+ fi
+ rm_if_exists lang_$1_check.dif
+ rm_if_exists lang_$1.bin
+ rm_if_exists lang_$1.dat
+ rm_if_exists lang_$1_1.tmp
+ rm_if_exists lang_$1_2.tmp
+
+### `lang-export.sh`
+Exports PO (gettext) for external translators.
+
+### `lang-import.sh`
+Import from PO.
+
+Arguments:
+- `$1` : language code (`en`, `cz`, `de`, `es`, `fr`, `it`, `pl`)
+- empty/no arguments quits the script
+
+Input files: `<language code>.po` files like `de.po`, `es.po`, etc.
+
+Input folder: ´/lang/po/new´
+
+Output files:
+
+Output foler: ´/lang/po/new´
+
+Needed improments to scrpit:
+ - add `all` argument
+ - update `replace in <language> translations` to all known special characters the LCD display with Japanese ROM cannot display
+ - move `lang_en_<language code>.txt` to folder `/lang`
+ - cleanup `<language code>_filtered.po`, `<language code>_new.po` and `nonasci.txt`
+
+### `progmem.sh`
+
+Examine content of progmem sections (default is progmem1).
+
+Input:
+- $OUTDIR/Firmware.ino.elf
+- $OUTDIR/sketch/*.o (all object files)
+
+Outputs:
+- text.sym     - formated symbol listing of section '.text'
+- $PROGMEM.sym - formated symbol listing of section '.progmemX'
+- $PROGMEM.lss - disassembly listing file
+- $PROGMEM.hex - variables - hex
+- $PROGMEM.chr - variables - char escape
+- $PROGMEM.var - variables - strings
+- $PROGMEM.txt - text data only (not used)
+
+Description of process:
+- check input files
+- remove output files
+- list symbol table of section '.text' from output elf file to text.sym (sorted by address)
+- calculate start and stop address of section '.$PROGMEM'
+- dump $PROGMEM data in hex format, cut disassembly (keep hex data only) into $PROGMEM.lss
+- convert $PROGMEM.lss to $PROGMEM.hex:
+ - replace empty lines with '|' (variables separated by empty lines)
+ - remove address from multiline variables (keep address at first variable line only)
+ - remove '<' and '>:', remove whitespace at end of lines
+ - remove line-endings, replace separator with '\n' (join hex data lines - each line will contain single variable)
+- convert $PROGMEM.hex to $PROGMEM.chr (prepare string data for character check and conversion)
+ - replace first space with tab
+ - replace second and third space with tab and space
+ - replace all remaining spaces with '\x'
+ - replace all tabs with spaces
+- convert $PROGMEM.chr to $PROGMEM.var (convert data to text) - a set of special characters is escaped here including `\x0a`
+
+
+### `textaddr.sh`
+
+Compiles `progmem1.var` and `lang_en.txt` files to `textaddr.txt` file (mapping of progmem addreses to text idenifiers).
+
+Description of process:
+- check if input files exists
+- create sorted list of strings from progmem1.var and lang_en.txt
+- lines from progmem1.var will contain addres (8 chars) and english text
+- lines from lang_en.txt will contain linenumber and english text
+- after sort this will generate pairs of lines (line from progmem1 first)
+- result of sort is compiled with simple script and stored into file textaddr.txt
+
+Input:
+- progmem1.var
+- lang_en.txt
+
+Output:
+- textaddr.txt
+
+
+
+update_lang.sh