diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 7aad723cf..352191024 100755 --- a/Firmware/menu.cpp +++ b/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 static void menu_draw_P(char chr, const char* str, int16_t val); @@ -423,7 +423,7 @@ void menu_draw_P(char chr, const char* str, int16_t val) float factor = 1.0f + static_cast(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 { diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index 5b102f42b..710b135ec 100644 --- a/Firmware/stepper.cpp +++ b/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 } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0abdf1b59..77af6d5f4 100755 --- a/Firmware/ultralcd.cpp +++ b/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. - */ +//! @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 + 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; diff --git a/README.md b/README.md index dc8379f85..782ed6f7d 100644 --- a/README.md +++ b/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//Downloads/Prusa-Firmware-MK3` will be on a German Windows`/mnt/c/Anwender//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//Downloads/Prusa-Firmware-MK3` will be on a German Windows`/mnt/c/Anwender//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 diff --git a/lang/lang-import.sh b/lang/lang-import.sh index d78283b13..aefd57b12 100755 --- a/lang/lang-import.sh +++ b/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' - sed -i 's/\xc3\xa9/e/g' $LNG'_filtered.po' - #replace '' with 'E' - sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po' - #replace '' with 'e' (left) - sed -i 's/\xc3\xa8/e/g' $LNG'_filtered.po' - #replace '' with 'a' (left) + #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' (right) + sed -i 's/\xc3\x89/E/g' $LNG'_filtered.po' + #replace 'è' with 'e' (left) + sed -i 's/\xc3\xa8/e/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 diff --git a/lang/lang_en.txt b/lang/lang_en.txt index 272c800c8..7661c3b80 100755 --- a/lang/lang_en.txt +++ b/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]" diff --git a/lang/lang_en_cz.txt b/lang/lang_en_cz.txt index 659a93723..2b5c5540c 100755 --- a/lang/lang_en_cz.txt +++ b/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]" diff --git a/lang/lang_en_de.txt b/lang/lang_en_de.txt index a426c13a9..266d3c26d 100755 --- a/lang/lang_en_de.txt +++ b/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]" diff --git a/lang/lang_en_es.txt b/lang/lang_en_es.txt index dd4db925f..d8d68fe2e 100755 --- a/lang/lang_en_es.txt +++ b/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]" diff --git a/lang/lang_en_fr.txt b/lang/lang_en_fr.txt index 5c4f7e9d8..d3256935a 100755 --- a/lang/lang_en_fr.txt +++ b/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]" + diff --git a/lang/lang_en_it.txt b/lang/lang_en_it.txt index 0ee9dbec9..6537f78ed 100755 --- a/lang/lang_en_it.txt +++ b/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]" diff --git a/lang/lang_en_pl.txt b/lang/lang_en_pl.txt index 602775ff9..e3d434d7c 100755 --- a/lang/lang_en_pl.txt +++ b/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]" diff --git a/lang/translations.md b/lang/translations.md new file mode 100644 index 000000000..6c787787c --- /dev/null +++ b/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=` + -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 ` 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: `.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 translations` to all known special characters the LCD display with Japanese ROM cannot display + - move `lang_en_.txt` to folder `/lang` + - cleanup `_filtered.po`, `_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