Fixes in phrases

This commit is contained in:
Lukas Matena 2024-06-18 14:48:05 +02:00
parent 2b667ffb6b
commit 5998e2f78d
17 changed files with 95 additions and 85 deletions

View File

@ -532,6 +532,7 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionInts { 0 }); def->set_default_value(new ConfigOptionInts { 0 });
def = this->add("chamber_temperature", coInts); def = this->add("chamber_temperature", coInts);
// TRN: Label of a configuration parameter: Nominal chamber temperature.
def->label = L("Nominal"); def->label = L("Nominal");
def->full_label = L("Chamber temperature"); def->full_label = L("Chamber temperature");
def->tooltip = L("Required chamber temperature for the print.\nWhen set to zero, " def->tooltip = L("Required chamber temperature for the print.\nWhen set to zero, "
@ -543,6 +544,7 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionInts{ 0 }); def->set_default_value(new ConfigOptionInts{ 0 });
def = this->add("chamber_minimal_temperature", coInts); def = this->add("chamber_minimal_temperature", coInts);
// TRN: Label of a configuration parameter: Minimal chamber temperature
def->label = L("Minimal"); def->label = L("Minimal");
def->full_label = L("Chamber minimal temperature"); def->full_label = L("Chamber minimal temperature");
def->tooltip = L("Minimal chamber temperature that the printer waits for before the print starts. This allows " def->tooltip = L("Minimal chamber temperature that the printer waits for before the print starts. This allows "
@ -635,12 +637,12 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionFloat(1)); def->set_default_value(new ConfigOptionFloat(1));
def = this->add("top_one_perimeter_type", coEnum); def = this->add("top_one_perimeter_type", coEnum);
def->label = L("Only one perimeter type"); def->label = L("Single perimeter on top surfaces");
def->category = L("Layers and Perimeters"); def->category = L("Layers and Perimeters");
def->tooltip = L("Use only one perimeter on flat top surface, to give more space to the top infill pattern. Could be applied on topmost surface or all top surface."); def->tooltip = L("Use only one perimeter on flat top surface, to give more space to the top infill pattern. Could be applied on topmost surface or all top surfaces.");
def->mode = comExpert; def->mode = comExpert;
def->set_enum<TopOnePerimeterType>({ def->set_enum<TopOnePerimeterType>({
{ "none", L("None surfaces") }, { "none", L("Disabled") },
{ "top", L("All top surfaces") }, { "top", L("All top surfaces") },
{ "topmost", L("Topmost surface only") } { "topmost", L("Topmost surface only") }
}); });
@ -649,7 +651,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("only_one_perimeter_first_layer", coBool); def = this->add("only_one_perimeter_first_layer", coBool);
def->label = L("Only one perimeter on first layer"); def->label = L("Only one perimeter on first layer");
def->category = L("Layers and Perimeters"); def->category = L("Layers and Perimeters");
def->tooltip = L("Use only one perimeter on the first layer of model."); def->tooltip = L("Use only one perimeter on the first layer.");
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));
@ -1138,9 +1140,9 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionFloats { 0. }); def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("filament_infill_max_speed", coFloats); def = this->add("filament_infill_max_speed", coFloats);
def->label = L("Max simple infill speed"); def->label = L("Max non-crossing infill speed");
def->tooltip = L("Maximum speed allowed for this filament while printing simple infill. " def->tooltip = L("Maximum speed allowed for this filament while printing infill without "
"The term \"simple infill\" means infill without any self intersections in a single layer. " "any self intersections in a single layer. "
"Set to zero for no limit."); "Set to zero for no limit.");
def->sidetext = L("mm/s"); def->sidetext = L("mm/s");
def->min = 0; def->min = 0;
@ -1149,8 +1151,8 @@ void PrintConfigDef::init_fff_params()
def = this->add("filament_infill_max_crossing_speed", coFloats); def = this->add("filament_infill_max_crossing_speed", coFloats);
def->label = L("Max crossing infill speed"); def->label = L("Max crossing infill speed");
def->tooltip = L("Maximum speed allowed for this filament while printing crossing infill. " def->tooltip = L("Maximum speed allowed for this filament while printing infill with "
"The term \"crossing infill\" means infill with self intersections in a single layer. " "self intersections in a single layer. "
"Set to zero for no limit."); "Set to zero for no limit.");
def->sidetext = L("mm/s"); def->sidetext = L("mm/s");
def->min = 0; def->min = 0;
@ -1388,10 +1390,10 @@ void PrintConfigDef::init_fff_params()
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
def = this->add("filament_shrinkage_compensation_xy", coPercents); def = this->add("filament_shrinkage_compensation_xy", coPercents);
def->label = L("Shrinkage XY"); def->label = L("Shrinkage compensation XY");
def->tooltip = L("Enter your filament shrinkage percentages for the X and Y axes here to apply scaling of the object to " def->tooltip = L("Enter your filament shrinkage percentages for the X and Y axes here to apply scaling of the object to "
"compensate for shrinkage in the X and Y axes. For example, if you measured 99mm instead of 100mm, " "compensate for shrinkage in the X and Y axes. For example, if you measured 99mm instead of 100mm, "
"then you should put here 1%."); "enter 1%.");
def->sidetext = L("%"); def->sidetext = L("%");
def->mode = comAdvanced; def->mode = comAdvanced;
def->min = -10.; def->min = -10.;
@ -1399,10 +1401,10 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionPercents { 0 }); def->set_default_value(new ConfigOptionPercents { 0 });
def = this->add("filament_shrinkage_compensation_z", coPercents); def = this->add("filament_shrinkage_compensation_z", coPercents);
def->label = L("Shrinkage Z"); def->label = L("Shrinkage compensation Z");
def->tooltip = L("Enter your filament shrinkage percentages for the Z axis here to apply scaling of the object to " def->tooltip = L("Enter your filament shrinkage percentages for the Z axis here to apply scaling of the object to "
"compensate for shrinkage in the Z axis. For example, if you measured 99mm instead of 100mm, " "compensate for shrinkage in the Z axis. For example, if you measured 99mm instead of 100mm, "
"then you should put here 1%."); "enter 1%.");
def->sidetext = L("%"); def->sidetext = L("%");
def->mode = comAdvanced; def->mode = comAdvanced;
def->min = -10.; def->min = -10.;
@ -5453,8 +5455,8 @@ CLIActionsConfigDef::CLIActionsConfigDef()
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));
def = this->add("opengl-aa", coBool); def = this->add("opengl-aa", coBool);
def->label = L("Automatic OpenGL antialising samples number selection"); def->label = L("Automatic OpenGL antialiasing samples number selection");
def->tooltip = L("Automatically select the highest number of samples for OpenGL antialising."); def->tooltip = L("Automatically select the highest number of samples for OpenGL antialiasing.");
def->cli = "opengl-aa"; def->cli = "opengl-aa";
def->set_default_value(new ConfigOptionBool(false)); def->set_default_value(new ConfigOptionBool(false));

View File

@ -1888,7 +1888,7 @@ wxString repo_title(const std::string& repo_id, const std::string& repo_name)
{ {
if (repo_name.empty()) if (repo_name.empty())
{ {
return repo_id.empty() ? _L("Other Vendors") : format_wxstr(_L("%1% Vendors"), repo_id); return repo_id.empty() ? wxString::FromUTF8("Unknown repo") : format_wxstr("Unnamed repo (ID %1%)", repo_id);
} }
return repo_name; return repo_name;
} }
@ -1947,12 +1947,12 @@ PageVendors::PageVendors(ConfigWizard* parent, std::string repo_id /*= wxEmptySt
} }
if (!user_presets_list.IsEmpty()) { if (!user_presets_list.IsEmpty()) {
wxString message = format_wxstr(_L_PLURAL("Following user preset has a same name as one of added system presets from '%1%' vendor:\n" wxString message = format_wxstr(_L_PLURAL("Existing user preset '%2%' has the same name as one of new system presets from vendor '%1%'.\n"
"%2%Please note that this user preset will be rewrite by system preset.\n\n" "Please note that this user preset will be rewritten by the system preset.\n\n"
"Do you still wish to add presets from '%1%'?", "Do you still wish to add presets from vendor '%1%'?",
"Following user presets have same names as some of added system presets from '%1%' vendor:\n" "Existing user presets (%2%) have the same names as some of new system presets from vendor '%1%'.\n"
"%2%Please note that these user presets will be rewrite by system presets.\n\n" "Please note that these user presets will be rewritten by the system presets.\n\n"
"Do you still wish to add presets from '%1%'?", "Do you still wish to add presets from vendor '%1%'?",
user_presets_cnt), vendor->name, user_presets_list); user_presets_cnt), vendor->name, user_presets_list);
MessageDialog msg(this->GetParent(), message, _L("Notice"), wxYES_NO); MessageDialog msg(this->GetParent(), message, _L("Notice"), wxYES_NO);
@ -3775,9 +3775,10 @@ bool ConfigWizard::priv::can_clear_printer_pages()
if (msg.IsEmpty()) if (msg.IsEmpty())
return true; return true;
wxString message = format_wxstr( _L("Next pages will be deleted after configuration update:%1%\n" // TRN: %1% contains list of pages to be removed, each on its own line and ending with a line break.
"Installed presets will be uninstalled.\n" wxString message = format_wxstr( _L("Following Configuration Wizard pages will be removed after the configuration update:\n\n%1%\n"
"Would you like to process it?"), "\n\n"+ msg); "Installed presets for the respective printers will also be removed.\n"
"Do you want to continue?"), msg);
MessageDialog msg_dlg(this->q, message, _L("Notice"), wxYES_NO); MessageDialog msg_dlg(this->q, message, _L("Notice"), wxYES_NO);
return msg_dlg.ShowModal() == wxID_YES; return msg_dlg.ShowModal() == wxID_YES;

View File

@ -504,7 +504,7 @@ bool DSForLayers::render_multi_extruders_menu(bool switch_current_code/* = false
void DSForLayers::render_color_picker() void DSForLayers::render_color_picker()
{ {
ImGuiContext& context = *GImGui; ImGuiContext& context = *GImGui;
const std::string title = _u8L("Select color for color change"); const std::string title = _u8L("Select color for Color Change");
if (m_show_color_picker) { if (m_show_color_picker) {
ImGuiPureWrap::set_next_window_pos(1200, 200, ImGuiCond_Always, 0.5f, 0.0f); ImGuiPureWrap::set_next_window_pos(1200, 200, ImGuiCond_Always, 0.5f, 0.0f);
@ -532,7 +532,7 @@ void DSForLayers::render_cog_menu()
if (ImGuiPureWrap::menu_item_with_icon(_u8L("Jump to height").c_str(), "Shift+G")) { if (ImGuiPureWrap::menu_item_with_icon(_u8L("Jump to height").c_str(), "Shift+G")) {
jump_to_value(); jump_to_value();
} }
if (ImGuiPureWrap::menu_item_with_icon(_u8L("Show estimated print time on mouse moving").c_str(), "", icon_sz, 0, m_show_estimated_times)) { if (ImGuiPureWrap::menu_item_with_icon(_u8L("Show estimated print time on hover").c_str(), "", icon_sz, 0, m_show_estimated_times)) {
m_show_estimated_times = !m_show_estimated_times; m_show_estimated_times = !m_show_estimated_times;
} }
if (m_mode == MultiAsSingle && m_draw_mode == dmRegular && if (m_mode == MultiAsSingle && m_draw_mode == dmRegular &&

View File

@ -256,6 +256,7 @@ static std::string to_string(libvgcode::EMoveType type)
{ {
switch (type) switch (type)
{ {
// TRN: Following strings are labels in the G-code Viewer legend.
case libvgcode::EMoveType::Noop: { return _u8L("Noop"); } case libvgcode::EMoveType::Noop: { return _u8L("Noop"); }
case libvgcode::EMoveType::Retract: { return _u8L("Retract"); } case libvgcode::EMoveType::Retract: { return _u8L("Retract"); }
case libvgcode::EMoveType::Unretract: { return _u8L("Unretract"); } case libvgcode::EMoveType::Unretract: { return _u8L("Unretract"); }
@ -275,6 +276,7 @@ static std::string to_string(libvgcode::EGCodeExtrusionRole role)
{ {
switch (role) switch (role)
{ {
// TRN: Following strings are labels in the G-code Viewer legend.
case libvgcode::EGCodeExtrusionRole::None: { return _u8L("Unknown"); } case libvgcode::EGCodeExtrusionRole::None: { return _u8L("Unknown"); }
case libvgcode::EGCodeExtrusionRole::Perimeter: { return _u8L("Perimeter"); } case libvgcode::EGCodeExtrusionRole::Perimeter: { return _u8L("Perimeter"); }
case libvgcode::EGCodeExtrusionRole::ExternalPerimeter: { return _u8L("External perimeter"); } case libvgcode::EGCodeExtrusionRole::ExternalPerimeter: { return _u8L("External perimeter"); }
@ -326,6 +328,7 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode
ImGuiPureWrap::text(std::string(buf)); ImGuiPureWrap::text(std::string(buf));
ImGui::SameLine(); ImGui::SameLine();
// TRN: Show/hide properties is a tooltip on a button which toggles an extra window in the G-code Viewer, showing properties of current G-code segment.
if (imgui.image_button(properties_shown ? ImGui::HorizontalHide : ImGui::HorizontalShow, properties_shown ? _u8L("Hide properties") : _u8L("Show properties"))) { if (imgui.image_button(properties_shown ? ImGui::HorizontalHide : ImGui::HorizontalShow, properties_shown ? _u8L("Hide properties") : _u8L("Show properties"))) {
properties_shown = !properties_shown; properties_shown = !properties_shown;
imgui.requires_extra_frame(); imgui.requires_extra_frame();

View File

@ -3268,6 +3268,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
// ConfigWizard can take some time to start. Because it is a wxWidgets window, it has to be done // ConfigWizard can take some time to start. Because it is a wxWidgets window, it has to be done
// in UI thread, so displaying a nice modal dialog and letting the CW start in a worker thread // in UI thread, so displaying a nice modal dialog and letting the CW start in a worker thread
// is not an option. Let's at least show a modeless dialog before the UI thread freezes. // is not an option. Let's at least show a modeless dialog before the UI thread freezes.
// TRN: Text showing while the ConfigWizard is loading, so the user knows something is happening.
auto cw_loading_dlg = new ConfigWizardLoadingDialog(mainframe, _L("Loading Configuration Wizard...")); auto cw_loading_dlg = new ConfigWizardLoadingDialog(mainframe, _L("Loading Configuration Wizard..."));
cw_loading_dlg->CenterOnParent(); cw_loading_dlg->CenterOnParent();
cw_loading_dlg->Show(); cw_loading_dlg->Show();
@ -3516,10 +3517,13 @@ bool GUI_App::check_updates(const bool invoked_by_user)
// for preset_updater sync we need to sync archive database first // for preset_updater sync we need to sync archive database first
plater()->get_preset_archive_database()->sync_blocking(); plater()->get_preset_archive_database()->sync_blocking();
// Now re-extract offline repos // Now re-extract offline repos
std::string extract_msg; std::string failed_paths;
if (!plater()->get_preset_archive_database()->extract_archives_with_check(extract_msg)) { if (!plater()->get_preset_archive_database()->extract_archives_with_check(failed_paths)) {
extract_msg = GUI::format("%1%\n\n%2%", _L("Following repositories won't be updated:"), extract_msg); int cnt = std::count(failed_paths.begin(), failed_paths.end(), '\n') + 1;
show_error(nullptr, extract_msg); // TRN: %1% contains paths from which loading failed. They are separated by \n, there is no \n at the end.
failed_paths = GUI::format(_L_PLURAL("It was not possible to extract data from %1%. The repository will not be updated.",
"It was not possible to extract data for following local repositories. They will not be updated.\n\n %1%", cnt), failed_paths);
show_error(nullptr, failed_paths);
} }
// then its time for preset_updater sync // then its time for preset_updater sync
preset_updater->sync_blocking(preset_bundle, this, plater()->get_preset_archive_database()->get_selected_archive_repositories()); preset_updater->sync_blocking(preset_bundle, this, plater()->get_preset_archive_database()->get_selected_archive_repositories());
@ -3592,7 +3596,7 @@ bool GUI_App::open_login_browser_with_dialog(const wxString& url, wxWindow* pare
{ {
bool auth_login_dialog_confirmed = app_config->get_bool("auth_login_dialog_confirmed"); bool auth_login_dialog_confirmed = app_config->get_bool("auth_login_dialog_confirmed");
if (!auth_login_dialog_confirmed) { if (!auth_login_dialog_confirmed) {
RichMessageDialog dialog(parent, _L("Open default browser with Prusa Account Log in page?\n(On Yes, You will not be asked again.)"), _L("PrusaSlicer: Open Log in page"), wxICON_QUESTION | wxYES_NO); RichMessageDialog dialog(parent, _L("Open default browser with Prusa Account Log in page?\n(If you select 'Yes', you will not be asked again.)"), _L("PrusaSlicer: Open Log in page"), wxICON_QUESTION | wxYES_NO);
if (dialog.ShowModal() != wxID_YES) if (dialog.ShowModal() != wxID_YES)
return false; return false;
app_config->set("auth_login_dialog_confirmed", "1"); app_config->set("auth_login_dialog_confirmed", "1");
@ -3852,8 +3856,8 @@ bool GUI_App::select_printer_from_connect(const std::string& msg)
bool is_installed = printer_preset && select_printer_preset(printer_preset); bool is_installed = printer_preset && select_printer_preset(printer_preset);
// notification // notification
std::string out = printer_preset ? std::string out = printer_preset ?
(is_installed ? GUI::format(_L("Installed and Selected Printer:\n%1%"), printer_preset->name) : (is_installed ? GUI::format(_L("Installed and selected printer:\n%1%"), printer_preset->name) :
GUI::format(_L("Selected Printer:\n%1%"), printer_preset->name)) : GUI::format(_L("Selected printer:\n%1%"), printer_preset->name)) :
GUI::format(_L("Printer not found:\n%1%"), model_name); GUI::format(_L("Printer not found:\n%1%"), model_name);
this->plater()->get_notification_manager()->close_notification_of_type(NotificationType::SelectPrinterFromConnect); this->plater()->get_notification_manager()->close_notification_of_type(NotificationType::SelectPrinterFromConnect);
this->plater()->get_notification_manager()->push_notification( this->plater()->get_notification_manager()->push_notification(
@ -3898,7 +3902,7 @@ void GUI_App::search_and_select_filaments(const std::string& material, size_t ex
{ {
out_message += /*(extruder_count == 1) out_message += /*(extruder_count == 1)
? GUI::format(_L("Selected Filament:\n%1%"), filament_preset.preset->name) ? GUI::format(_L("Selected Filament:\n%1%"), filament_preset.preset->name)
: */GUI::format(_L("Extruder %1%: Selected Filament %2%\n"), extruder_index + 1, filament.preset->name); : */GUI::format(_L("Extruder %1%: Selected filament %2%\n"), extruder_index + 1, filament.preset->name);
return; return;
} }
} }
@ -3930,11 +3934,11 @@ void GUI_App::search_and_select_filaments(const std::string& material, size_t ex
&& filament.preset->name.compare(0, 9, "Prusament") == 0 && filament.preset->name.compare(0, 9, "Prusament") == 0
&& select_filament_preset(filament.preset, extruder_index)) && select_filament_preset(filament.preset, extruder_index))
{ {
out_message += GUI::format(_L("Extruder %1%: Selected and Installed Filament %2%\n"), extruder_index + 1, filament.preset->name); out_message += GUI::format(_L("Extruder %1%: Selected and installed filament %2%\n"), extruder_index + 1, filament.preset->name);
return; return;
} }
} }
out_message += GUI::format(_L("Extruder %2%: Failed to Find and Select Filament type: %1%\n"), material, extruder_index + 1); out_message += GUI::format(_L("Extruder %2%: Failed to find and select filament type: %1%\n"), material, extruder_index + 1);
} }
void GUI_App::select_filament_from_connect(const std::string& msg) void GUI_App::select_filament_from_connect(const std::string& msg)

View File

@ -1867,9 +1867,8 @@ void MainFrame::export_configbundle(bool export_physical_printers /*= false*/)
#if wxUSE_SECRETSTORE #if wxUSE_SECRETSTORE
// First password prompts user with dialog // First password prompts user with dialog
if (!passwords_dialog_shown) { if (!passwords_dialog_shown) {
//wxString msg = GUI::format_wxstr(L"%1%\n%2%", _L("Some of the exported printers contains passwords, which are stored in the system password store."), _L("Do you wish to include the passwords to the exported file in the plain text form?")); wxString msg = _L("Some of the exported printers contain passwords, which are stored in the system password store."
wxString msg = _L("Some of the exported printers contains passwords, which are stored in the system password store." " Do you want to include the passwords in the plain text form in the exported file?");
" Do you wish to include the passwords in the plain text form to the exported file?");
MessageDialog dlg_psswd(this, msg, wxMessageBoxCaptionStr, wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION); MessageDialog dlg_psswd(this, msg, wxMessageBoxCaptionStr, wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION);
if (dlg_psswd.ShowModal() == wxID_YES) if (dlg_psswd.ShowModal() == wxID_YES)
passwords_to_plain = true; passwords_to_plain = true;
@ -1891,7 +1890,7 @@ void MainFrame::export_configbundle(bool export_physical_printers /*= false*/)
wxString username; wxString username;
wxSecretValue password; wxSecretValue password;
if (!store.Load(service, username, password)) { if (!store.Load(service, username, password)) {
std::string msg = GUI::format(_u8L("Failed to load credentials from the system secret store for the printer %1%."), printer_id); std::string msg = GUI::format(_u8L("Failed to load credentials from the system secret store for printer %1%."), printer_id);
BOOST_LOG_TRIVIAL(error) << msg; BOOST_LOG_TRIVIAL(error) << msg;
show_error(nullptr, msg); show_error(nullptr, msg);
return false; return false;

View File

@ -917,7 +917,8 @@ private:
{NotificationType::URLNotRegistered {NotificationType::URLNotRegistered
, NotificationLevel::RegularNotificationLevel , NotificationLevel::RegularNotificationLevel
, 10 , 10
, _u8L("PrusaSlicer recieved a download request from Printables.com, but it's not allowed. You can allow it") // TRN: The text is followed by a hyperlink saying "here." It is necessary to split it in two phrases, sorry.
, _u8L("PrusaSlicer received a download request from Printables.com, but it's not allowed. You can allow it")
, _u8L("here.") , _u8L("here.")
, [](wxEvtHandler* evnthndlr) { , [](wxEvtHandler* evnthndlr) {
wxGetApp().open_preferences("downloader_url_registered", "Other"); wxGetApp().open_preferences("downloader_url_registered", "Other");

View File

@ -381,10 +381,10 @@ bool OpenGLManager::init_gl()
wxString message = format_wxstr( wxString message = format_wxstr(
#if SLIC3R_OPENGL_ES #if SLIC3R_OPENGL_ES
_L("PrusaSlicer requires OpenGL ES 3.0 capable graphics driver to run correctly, \n" _L("PrusaSlicer requires OpenGL ES 3.0 capable graphics driver to run correctly, \n"
"while OpenGL version %s, render %s, vendor %s was detected."), s_gl_info.get_version_string(), s_gl_info.get_renderer(), s_gl_info.get_vendor()); "while OpenGL version %s, renderer %s, vendor %s was detected."), s_gl_info.get_version_string(), s_gl_info.get_renderer(), s_gl_info.get_vendor());
#else #else
_L("PrusaSlicer requires OpenGL 3.2 capable graphics driver to run correctly,\n" _L("PrusaSlicer requires OpenGL 3.2 capable graphics driver to run correctly,\n"
"while OpenGL version %s, render %s, vendor %s was detected."), s_gl_info.get_version_string(), s_gl_info.get_renderer(), s_gl_info.get_vendor()); "while OpenGL version %s, renderer %s, vendor %s was detected."), s_gl_info.get_version_string(), s_gl_info.get_renderer(), s_gl_info.get_vendor());
#endif // SLIC3R_OPENGL_ES #endif // SLIC3R_OPENGL_ES
message += "\n"; message += "\n";
message += _L("You may need to update your graphics card driver."); message += _L("You may need to update your graphics card driver.");

View File

@ -1461,8 +1461,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
if (!found) { if (!found) {
// return to original print profile // return to original print profile
wxGetApp().get_tab(Preset::Type::TYPE_SLA_PRINT)->select_preset(edited_print_name, false); wxGetApp().get_tab(Preset::Type::TYPE_SLA_PRINT)->select_preset(edited_print_name, false);
std::string notif_text = into_u8(_L("Material preset was not loaded:")); std::string notif_text = GUI::format(_L("Material preset was not loaded:\n - %1%"), preset_name);
notif_text += "\n - " + preset_name;
q->get_notification_manager()->push_notification(NotificationType::CustomNotification, q->get_notification_manager()->push_notification(NotificationType::CustomNotification,
NotificationManager::NotificationLevel::PrintInfoNotificationLevel, notif_text); NotificationManager::NotificationLevel::PrintInfoNotificationLevel, notif_text);
break; break;
@ -5987,7 +5986,7 @@ void Plater::connect_gcode()
} }
} }
if (dialog_msg.empty()) { if (dialog_msg.empty()) {
show_error(this, _L("Failed to select a printer. PrusaConnect did not return a value.")); show_error(this, _L("Failed to select a printer."));
return; return;
} }
BOOST_LOG_TRIVIAL(debug) << "Message from Printer pick webview: " << dialog_msg; BOOST_LOG_TRIVIAL(debug) << "Message from Printer pick webview: " << dialog_msg;
@ -6008,7 +6007,7 @@ void Plater::connect_gcode()
std::string data_subtree = p->user_account->get_print_data_from_json(dialog_msg, "data"); std::string data_subtree = p->user_account->get_print_data_from_json(dialog_msg, "data");
if (filename.empty() || team_id.empty() || data_subtree.empty()) { if (filename.empty() || team_id.empty() || data_subtree.empty()) {
std::string msg = _u8L("Failed to read response from Connect server. Upload is canceled."); std::string msg = _u8L("Failed to read response from Prusa Connect server. Upload is cancelled.");
BOOST_LOG_TRIVIAL(error) << msg; BOOST_LOG_TRIVIAL(error) << msg;
BOOST_LOG_TRIVIAL(error) << "Response: " << dialog_msg; BOOST_LOG_TRIVIAL(error) << "Response: " << dialog_msg;
show_error(this, msg); show_error(this, msg);

View File

@ -353,7 +353,7 @@ bool PresetArchiveDatabase::set_selected_repositories(const std::vector<std::str
if (!archive->is_extracted()) { if (!archive->is_extracted()) {
// non existent local repo since start selected // non existent local repo since start selected
msg = GUI::format( msg = GUI::format(
_L("Cannot select offline repository from path: %1%. It was not extracted."), _L("Cannot select local repository from path: %1%. It was not extracted."),
archive->get_manifest().source_path archive->get_manifest().source_path
); );
return false; return false;
@ -380,12 +380,12 @@ bool PresetArchiveDatabase::set_selected_repositories(const std::vector<std::str
bool PresetArchiveDatabase::extract_archives_with_check(std::string &msg) bool PresetArchiveDatabase::extract_archives_with_check(std::string &msg)
{ {
extract_local_archives(); extract_local_archives();
for (auto &pair : m_selected_repositories_uuid) { for (const std::pair<std::string, bool>& pair : m_selected_repositories_uuid) {
if (!pair.second) { if (!pair.second) {
continue; continue;
} }
std::string uuid = pair.first; const std::string uuid = pair.first;
auto compare_repo = [uuid](const std::unique_ptr<ArchiveRepository> &repo) { auto compare_repo = [&uuid](const std::unique_ptr<ArchiveRepository> &repo) {
return repo->get_uuid() == uuid; return repo->get_uuid() == uuid;
}; };
@ -393,10 +393,7 @@ bool PresetArchiveDatabase::extract_archives_with_check(std::string &msg)
assert(archives_it != m_archive_repositories.end()); assert(archives_it != m_archive_repositories.end());
if (!archives_it->get()->is_extracted()) { if (!archives_it->get()->is_extracted()) {
// non existent local repo since start selected // non existent local repo since start selected
msg += GUI::format( msg += std::string(msg.empty() ? "" : "\n") + archives_it->get()->get_manifest().source_path.string();
_L("Offline repository from path: %1% was not extracted.\n"),
archives_it->get()->get_manifest().source_path
);
} }
} }
return msg.empty(); return msg.empty();

View File

@ -740,14 +740,17 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset
connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#5CD800")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1); connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#5CD800")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1);
connect_info_sizer->Add(connect_available_info, 0, wxALIGN_CENTER_VERTICAL); connect_info_sizer->Add(connect_available_info, 0, wxALIGN_CENTER_VERTICAL);
// TRN: this is part of the infoline below Printer Settings dropdown, informing about number of printers available/offline/printing in Prusa Connect.
connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("available")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("available")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#FB3636")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1); connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#FB3636")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1);
connect_info_sizer->Add(connect_offline_info, 0, wxALIGN_CENTER_VERTICAL); connect_info_sizer->Add(connect_offline_info, 0, wxALIGN_CENTER_VERTICAL);
// TRN: this is part of the infoline below Printer Settings dropdown, informing about number of printers available/offline/printing in Prusa Connect.
connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("offline")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("offline")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#2E9BFF")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1); connect_info_sizer->Add(new wxStaticBitmap(parent, wxID_ANY, *get_bmp_bundle("connect_status", 14, 14, "#2E9BFF")), 0, wxALIGN_CENTER_VERTICAL | wxTOP, 1);
connect_info_sizer->Add(connect_printing_info, 0, wxALIGN_CENTER_VERTICAL); connect_info_sizer->Add(connect_printing_info, 0, wxALIGN_CENTER_VERTICAL);
// TRN: this is part of the infoline below Printer Settings dropdown, informing about number of printers available/offline/printing in Prusa Connect.
connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("printing")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); connect_info_sizer->Add(new wxStaticText(parent, wxID_ANY, _L("printing")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
#endif #endif
} }

View File

@ -471,7 +471,7 @@ TopBarItemsCtrl::TopBarItemsCtrl(wxWindow *parent, TopBarMenus* menus/* = nullpt
wxBoxSizer* right_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* right_sizer = new wxBoxSizer(wxHORIZONTAL);
m_workspace_btn = new ButtonWithPopup(this, _L("Workspace"), "mode_simple"); m_workspace_btn = new ButtonWithPopup(this, "Workspace", "mode_simple");
right_sizer->AddStretchSpacer(20); right_sizer->AddStretchSpacer(20);
right_sizer->Add(m_workspace_btn, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, m_btn_margin); right_sizer->Add(m_workspace_btn, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, m_btn_margin);

View File

@ -40,7 +40,7 @@ RepositoryUpdateUIManager::RepositoryUpdateUIManager(wxWindow* parent, PresetArc
m_main_sizer->AddSpacer(em); m_main_sizer->AddSpacer(em);
auto offline_label = new wxStaticText(m_parent, wxID_ANY, _L("Offline Repositories")); auto offline_label = new wxStaticText(m_parent, wxID_ANY, _L("Local Repositories"));
offline_label->SetFont(wxGetApp().bold_font()); offline_label->SetFont(wxGetApp().bold_font());
m_main_sizer->Add(offline_label, 0, wxTOP | wxLEFT, 2 * em); m_main_sizer->Add(offline_label, 0, wxTOP | wxLEFT, 2 * em);
@ -97,7 +97,8 @@ void RepositoryUpdateUIManager::fill_grids()
// header // header
for (const wxString& l : std::initializer_list<wxString>{ _L("Use"), "", _L("Name"), _L("Descrition") }) { // TRN: This string appears in Configuration Wizard in the 'Configuration Manager' step.
for (const wxString& l : std::initializer_list<wxString>{ _L("Use"), "", _L("Name"), _L("Description") }) {
auto text = new wxStaticText(m_parent, wxID_ANY, l); auto text = new wxStaticText(m_parent, wxID_ANY, l);
text->SetFont(wxGetApp().bold_font()); text->SetFont(wxGetApp().bold_font());
add(text); add(text);
@ -165,7 +166,7 @@ void RepositoryUpdateUIManager::fill_grids()
{ {
wxStaticBitmap* bmp = new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle(entry.is_ok ? "tick_mark" : "exclamation")); wxStaticBitmap* bmp = new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle(entry.is_ok ? "tick_mark" : "exclamation"));
bmp->SetToolTip(entry.is_ok ? _L("Exists") : _L("Doesn't exist")); bmp->SetToolTip(entry.is_ok ? _L("File exists") : _L("File does NOT exist"));
add(bmp); add(bmp);
} }
@ -240,7 +241,7 @@ void RepositoryUpdateUIManager::remove_offline_repos(const std::string& id)
void RepositoryUpdateUIManager::load_offline_repos() void RepositoryUpdateUIManager::load_offline_repos()
{ {
wxArrayString input_files; wxArrayString input_files;
wxFileDialog dialog(m_parent, _L("Choose one or more ZIP-files") + ":", wxFileDialog dialog(m_parent, _L("Choose one or more ZIP files") + ":",
from_u8(wxGetApp().app_config->get_last_dir()), "", from_u8(wxGetApp().app_config->get_last_dir()), "",
file_wildcards(FT_ZIP), wxFD_OPEN | /*wxFD_MULTIPLE | */wxFD_FILE_MUST_EXIST); file_wildcards(FT_ZIP), wxFD_OPEN | /*wxFD_MULTIPLE | */wxFD_FILE_MUST_EXIST);

View File

@ -86,19 +86,19 @@ WebViewPanel::WebViewPanel(wxWindow *parent, const wxString& default_url, const
#ifdef DEBUG_URL_PANEL #ifdef DEBUG_URL_PANEL
// Create the Tools menu // Create the Tools menu
m_tools_menu = new wxMenu(); m_tools_menu = new wxMenu();
wxMenuItem* viewSource = m_tools_menu->Append(wxID_ANY, _L("View Source")); wxMenuItem* viewSource = m_tools_menu->Append(wxID_ANY, "View Source");
wxMenuItem* viewText = m_tools_menu->Append(wxID_ANY, _L("View Text")); wxMenuItem* viewText = m_tools_menu->Append(wxID_ANY, "View Text");
m_tools_menu->AppendSeparator(); m_tools_menu->AppendSeparator();
wxMenu* script_menu = new wxMenu; wxMenu* script_menu = new wxMenu;
m_script_custom = script_menu->Append(wxID_ANY, "Custom script"); m_script_custom = script_menu->Append(wxID_ANY, "Custom script");
m_tools_menu->AppendSubMenu(script_menu, _L("Run Script")); m_tools_menu->AppendSubMenu(script_menu, "Run Script");
wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, _L("Add user script")); wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, "Add user script");
wxMenuItem* setCustomUserAgent = m_tools_menu->Append(wxID_ANY, _L("Set custom user agent")); wxMenuItem* setCustomUserAgent = m_tools_menu->Append(wxID_ANY, "Set custom user agent");
m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, _L("Enable Context Menu")); m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, "Enable Context Menu");
m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, _L("Enable Dev Tools")); m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, "Enable Dev Tools");
#endif #endif
@ -443,7 +443,7 @@ case type: \
BOOST_LOG_TRIVIAL(error) << "WebViewPanel error: " << category; BOOST_LOG_TRIVIAL(error) << "WebViewPanel error: " << category;
load_error_page(); load_error_page();
#ifdef DEBUG_URL_PANEL #ifdef DEBUG_URL_PANEL
m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() + "\n" + m_info->ShowMessage(wxString("An error occurred loading ") + evt.GetURL() + "\n" +
"'" + category + "'", wxICON_ERROR); "'" + category + "'", wxICON_ERROR);
#endif #endif
} }
@ -637,7 +637,7 @@ void ConnectWebViewPanel::on_user_token(UserAccountSuccessEvent& e)
void ConnectWebViewPanel::on_script_message(wxWebViewEvent& evt) void ConnectWebViewPanel::on_script_message(wxWebViewEvent& evt)
{ {
BOOST_LOG_TRIVIAL(debug) << "recieved message from PrusaConnect FE: " << evt.GetString(); BOOST_LOG_TRIVIAL(debug) << "received message from Prusa Connect FE: " << evt.GetString();
handle_message(into_u8(evt.GetString())); handle_message(into_u8(evt.GetString()));
} }
void ConnectWebViewPanel::on_navigation_request(wxWebViewEvent &evt) void ConnectWebViewPanel::on_navigation_request(wxWebViewEvent &evt)
@ -819,19 +819,19 @@ WebViewDialog::WebViewDialog(wxWindow* parent, const wxString& url, const wxStri
#ifdef DEBUG_URL_PANEL #ifdef DEBUG_URL_PANEL
// Create the Tools menu // Create the Tools menu
m_tools_menu = new wxMenu(); m_tools_menu = new wxMenu();
wxMenuItem* viewSource = m_tools_menu->Append(wxID_ANY, _L("View Source")); wxMenuItem* viewSource = m_tools_menu->Append(wxID_ANY, "View Source");
wxMenuItem* viewText = m_tools_menu->Append(wxID_ANY, _L("View Text")); wxMenuItem* viewText = m_tools_menu->Append(wxID_ANY, "View Text");
m_tools_menu->AppendSeparator(); m_tools_menu->AppendSeparator();
wxMenu* script_menu = new wxMenu; wxMenu* script_menu = new wxMenu;
m_script_custom = script_menu->Append(wxID_ANY, "Custom script"); m_script_custom = script_menu->Append(wxID_ANY, "Custom script");
m_tools_menu->AppendSubMenu(script_menu, _L("Run Script")); m_tools_menu->AppendSubMenu(script_menu, "Run Script");
wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, _L("Add user script")); wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, "Add user script");
wxMenuItem* setCustomUserAgent = m_tools_menu->Append(wxID_ANY, _L("Set custom user agent")); wxMenuItem* setCustomUserAgent = m_tools_menu->Append(wxID_ANY, "Set custom user agent");
m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, _L("Enable Context Menu")); m_context_menu = m_tools_menu->AppendCheckItem(wxID_ANY, "Enable Context Menu");
m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, _L("Enable Dev Tools")); m_dev_tools = m_tools_menu->AppendCheckItem(wxID_ANY, "Enable Dev Tools");
#endif #endif

View File

@ -136,7 +136,7 @@ bool PrusaConnectNew::upload(PrintHostUpload upload_data, ProgressFn progress_fn
std::string init_out; std::string init_out;
if (!init_upload(upload_data, init_out)) if (!init_upload(upload_data, init_out))
{ {
error_fn(std::move(GUI::from_u8(init_out))); error_fn(GUI::from_u8(init_out));
return false; return false;
} }
@ -149,14 +149,14 @@ bool PrusaConnectNew::upload(PrintHostUpload upload_data, ProgressFn progress_fn
pt::read_json(ss, ptree); pt::read_json(ss, ptree);
const auto id_opt = ptree.get_optional<std::string>("id"); const auto id_opt = ptree.get_optional<std::string>("id");
if (!id_opt) { if (!id_opt) {
error_fn(std::move(_L("Failed to extract upload id from server reply."))); error_fn(wxString("Failed to extract upload id from server reply."));
return false; return false;
} }
upload_id = *id_opt; upload_id = *id_opt;
} }
catch (const std::exception&) catch (const std::exception&)
{ {
error_fn(std::move(_L("Failed to extract upload id from server reply."))); error_fn(wxString("Failed to extract upload id from server reply."));
return false; return false;
} }
const std::string name = get_name(); const std::string name = get_name();