fix un-localizable strings (step 2)

This commit is contained in:
remi durand 2021-06-16 21:14:57 +02:00
parent 467b1feaa7
commit 532ecec73a
23 changed files with 117 additions and 101 deletions

View File

@ -1728,7 +1728,7 @@ namespace Slic3r {
{ {
// std::string msg = _(L("The selected 3mf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible.")); // std::string msg = _(L("The selected 3mf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible."));
// throw version_error(msg.c_str()); // throw version_error(msg.c_str());
const std::string msg = (boost::format(_(L("The selected 3mf file has been saved with a newer version of %1% and is not compatible."))) % std::string(SLIC3R_APP_NAME)).str(); const std::string msg = (boost::format("The selected 3mf file has been saved with a newer version of %1% and is not compatible.") % std::string(SLIC3R_APP_NAME)).str();
throw version_error(msg); throw version_error(msg);
} }
} }

View File

@ -977,7 +977,7 @@ bool extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_fi
{ {
// std::string msg = _(L("The selected amf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible.")); // std::string msg = _(L("The selected amf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible."));
// throw Slic3r::FileIOError(msg.c_str()); // throw Slic3r::FileIOError(msg.c_str());
const std::string msg = (boost::format(_(L("The selected amf file has been saved with a newer version of %1% and is not compatible."))) % std::string(SLIC3R_APP_NAME)).str(); const std::string msg = (boost::format("The selected amf file has been saved with a newer version of %1% and is not compatible.") % std::string(SLIC3R_APP_NAME)).str();
throw Slic3r::FileIOError(msg); throw Slic3r::FileIOError(msg);
} }

View File

@ -830,8 +830,8 @@ void PrintConfigDef::init_fff_params()
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for external perimeters. " def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for external perimeters. "
"If left zero, default extrusion width will be used if set, otherwise 1.05 x nozzle diameter will be used. " "If left zero, default extrusion width will be used if set, otherwise 1.05 x nozzle diameter will be used. "
"If expressed as percentage (for example 112.5%), it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example 112.5%), it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -846,8 +846,8 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("External perimeters spacing"); def->full_label = L("External perimeters spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like the External perimeters width, but this value is the distance between the edge and the 'frontier' to the next perimeter." def->tooltip = L("Like the External perimeters width, but this value is the distance between the edge and the 'frontier' to the next perimeter."
"\nSetting the spacing will deactivate the width setting, and vice versa.") + std::string("\n") + "\nSetting the spacing will deactivate the width setting, and vice versa."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -1166,8 +1166,8 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Set this to a non-zero value to allow a manual extrusion width. " def->tooltip = L("Set this to a non-zero value to allow a manual extrusion width. "
"If left to zero, Slic3r derives extrusion widths from the nozzle diameter " "If left to zero, Slic3r derives extrusion widths from the nozzle diameter "
"(see the tooltips for perimeter extrusion width, infill extrusion width etc). " "(see the tooltips for perimeter extrusion width, infill extrusion width etc). "
"If expressed as percentage (for example: 105%), it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example: 105%), it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -1180,8 +1180,8 @@ void PrintConfigDef::init_fff_params()
def = this->add("extrusion_spacing", coFloatOrPercent); def = this->add("extrusion_spacing", coFloatOrPercent);
def->label = L("Default extrusion spacing"); def->label = L("Default extrusion spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like Default extrusion width but spacing is the distance between two lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like Default extrusion width but spacing is the distance between two lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -1753,8 +1753,8 @@ void PrintConfigDef::init_fff_params()
"You can use this to force fatter extrudates for better adhesion. If expressed " "You can use this to force fatter extrudates for better adhesion. If expressed "
"as percentage (for example 140%) it will be computed over the nozzle diameter " "as percentage (for example 140%) it will be computed over the nozzle diameter "
"of the nozzle used for the type of extrusion. " "of the nozzle used for the type of extrusion. "
"If set to zero, it will use the default extrusion width.") + std::string("\n") + "If set to zero, it will use the default extrusion width."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -1768,8 +1768,8 @@ void PrintConfigDef::init_fff_params()
def->label = L("First layer"); def->label = L("First layer");
def->full_label = L("First layer spacing"); def->full_label = L("First layer spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like First layer width but spacing is the distance between two lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like First layer width but spacing is the distance between two lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -2149,8 +2149,8 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill. " def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill. "
"If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. "
"You may want to use fatter extrudates to speed up the infill and make your parts stronger. " "You may want to use fatter extrudates to speed up the infill and make your parts stronger. "
"If expressed as percentage (for example 110%) it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example 110%) it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -2164,8 +2164,8 @@ void PrintConfigDef::init_fff_params()
def->label = L("Infill"); def->label = L("Infill");
def->full_label = L("Infill spacing"); def->full_label = L("Infill spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like First layer width but spacing is the distance between two lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like First layer width but spacing is the distance between two lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -2891,8 +2891,8 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for perimeters. " def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for perimeters. "
"You may want to use thinner extrudates to get more accurate surfaces. " "You may want to use thinner extrudates to get more accurate surfaces. "
"If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. "
"If expressed as percentage (for example 105%) it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example 105%) it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->aliases = { "perimeters_extrusion_width" }; def->aliases = { "perimeters_extrusion_width" };
def->min = 0; def->min = 0;
@ -2906,8 +2906,8 @@ void PrintConfigDef::init_fff_params()
def->label = L("Perimeters"); def->label = L("Perimeters");
def->full_label = L("Perimeter spacing"); def->full_label = L("Perimeter spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like Perimeter width but spacing is the distance between two perimeter lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like Perimeter width but spacing is the distance between two perimeter lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using the perimeter 'Overlap' percentages and default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->aliases = { "perimeters_extrusion_width" }; def->aliases = { "perimeters_extrusion_width" };
def->min = 0; def->min = 0;
@ -3423,8 +3423,8 @@ void PrintConfigDef::init_fff_params()
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. " def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. "
"If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. " "If left zero, default extrusion width will be used if set, otherwise 1.125 x nozzle diameter will be used. "
"If expressed as percentage (for example 110%) it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example 110%) it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -3438,8 +3438,8 @@ void PrintConfigDef::init_fff_params()
def->label = L("Solid spacing"); def->label = L("Solid spacing");
def->full_label = L("Solid infill spacing"); def->full_label = L("Solid infill spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like Solid infill width but spacing is the distance between two lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like Solid infill width but spacing is the distance between two lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -4006,8 +4006,8 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. " def->tooltip = L("Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. "
"You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. " "You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. "
"If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. " "If left zero, default extrusion width will be used if set, otherwise nozzle diameter will be used. "
"If expressed as percentage (for example 110%) it will be computed over nozzle diameter.") + std::string("\n") + "If expressed as percentage (for example 110%) it will be computed over nozzle diameter."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -4020,8 +4020,8 @@ void PrintConfigDef::init_fff_params()
def = this->add("top_infill_extrusion_spacing", coFloatOrPercent); def = this->add("top_infill_extrusion_spacing", coFloatOrPercent);
def->label = L("Top solid spacing"); def->label = L("Top solid spacing");
def->category = OptionCategory::width; def->category = OptionCategory::width;
def->tooltip = L("Like Top solid infill width but spacing is the distance between two lines (as they overlap a bit, it's not the same).") + std::string("\n") + def->tooltip = L("Like Top solid infill width but spacing is the distance between two lines (as they overlap a bit, it's not the same)."
L("You can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height."); "\nYou can set either 'Spacing', or 'Width'; the other will be calculated, using default layer height.");
def->sidetext = L("mm or %"); def->sidetext = L("mm or %");
def->ratio_over = "nozzle_diameter"; def->ratio_over = "nozzle_diameter";
def->min = 0; def->min = 0;
@ -4798,7 +4798,7 @@ void PrintConfigDef::init_sla_params()
def->set_default_value(new ConfigOptionFloat(15)); def->set_default_value(new ConfigOptionFloat(15));
def = this->add("material_correction", coFloats); def = this->add("material_correction", coFloats);
def->full_label = L("Correction for expansion"); def->label = L("Correction for expansion");
def->tooltip = L("Correction for expansion"); def->tooltip = L("Correction for expansion");
def->min = 0; def->min = 0;
def->mode = comExpert; def->mode = comExpert;

View File

@ -40,14 +40,31 @@ namespace GUI {
} }
void CalibrationAbstractDialog::create(std::string html_path, wxSize dialog_size){ void CalibrationAbstractDialog::create(std::string html_path, std::string html_name, wxSize dialog_size){
auto main_sizer = new wxBoxSizer(wxVERTICAL); auto main_sizer = new wxBoxSizer(wxVERTICAL);
//language
wxString language = wxGetApp().current_language_code();
std::string full_file_path = Slic3r::resources_dir() + html_path+"/"+ into_u8(language)+"_"+ html_name;
if (language == "en") {
full_file_path = Slic3r::resources_dir() + html_path + "/" + html_name;
}else if (!boost::filesystem::exists(full_file_path)) {
language = wxGetApp().current_language_code_safe();
full_file_path = Slic3r::resources_dir() + html_path + "/" + into_u8(language) + "_" + html_name;
if (!boost::filesystem::exists(full_file_path)) {
language = language.IsEmpty() ? "en" : language.BeforeFirst('_');
full_file_path = Slic3r::resources_dir() + html_path + "/" + into_u8(language) + "_" + html_name;
if (!boost::filesystem::exists(full_file_path)) {
full_file_path = Slic3r::resources_dir() + html_path + "/" + html_name;
}
}
}
//html //html
html_viewer = new wxHtmlWindow(this, wxID_ANY, html_viewer = new wxHtmlWindow(this, wxID_ANY,
wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO); wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO);
html_viewer->LoadPage(Slic3r::resources_dir()+ html_path); html_viewer->LoadPage(full_file_path);
main_sizer->Add(html_viewer, 1, wxEXPAND | wxALL, 5); main_sizer->Add(html_viewer, 1, wxEXPAND | wxALL, 5);
wxDisplay display(wxDisplay::GetFromWindow(main_frame)); wxDisplay display(wxDisplay::GetFromWindow(main_frame));

View File

@ -25,7 +25,7 @@ public:
private: private:
wxPanel* create_header(wxWindow* parent, const wxFont& bold_font); wxPanel* create_header(wxWindow* parent, const wxFont& bold_font);
protected: protected:
void create(std::string html_path, wxSize dialogsize = wxSize(850, 550)); void create(std::string html_path, std::string html_name, wxSize dialogsize = wxSize(850, 550));
virtual void create_buttons(wxStdDialogButtonSizer*) = 0; virtual void create_buttons(wxStdDialogButtonSizer*) = 0;
void on_dpi_changed(const wxRect& suggested_rect) override; void on_dpi_changed(const wxRect& suggested_rect) override;
void close_me(wxCommandEvent& event_args); void close_me(wxCommandEvent& event_args);
@ -42,7 +42,7 @@ class HtmlDialog : public CalibrationAbstractDialog
{ {
public: public:
HtmlDialog(GUI_App* app, MainFrame* mainframe, std::string title, std::string html_path) : CalibrationAbstractDialog(app, mainframe, title) { create(html_path); } HtmlDialog(GUI_App* app, MainFrame* mainframe, std::string title, std::string html_path, std::string html_name) : CalibrationAbstractDialog(app, mainframe, title) { create(html_path, html_name); }
virtual ~HtmlDialog() {} virtual ~HtmlDialog() {}
protected: protected:
void create_buttons(wxStdDialogButtonSizer* sizer) override {} void create_buttons(wxStdDialogButtonSizer* sizer) override {}

View File

@ -10,7 +10,7 @@ class CalibrationBedDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationBedDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Bed leveling calibration") { create("/calibration/bed_leveling/bed_leveling.html"); } CalibrationBedDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Bed leveling calibration") { create("/calibration/bed_leveling", "bed_leveling.html"); }
virtual ~CalibrationBedDialog() {} virtual ~CalibrationBedDialog() {}
protected: protected:
void create_buttons(wxStdDialogButtonSizer* sizer) override; void create_buttons(wxStdDialogButtonSizer* sizer) override;

View File

@ -10,7 +10,7 @@ class CalibrationBridgeDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationBridgeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Bridge calibration") { create("/calibration/bridge_flow/bridge_flow.html", wxSize(850, 400)); } CalibrationBridgeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Bridge calibration") { create("/calibration/bridge_flow", "bridge_flow.html", wxSize(850, 400)); }
virtual ~CalibrationBridgeDialog() { } virtual ~CalibrationBridgeDialog() { }
protected: protected:

View File

@ -10,7 +10,7 @@ class CalibrationCubeDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationCubeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Calibration cube") { create("/calibration/cube/cube.html"); } CalibrationCubeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Calibration cube") { create("/calibration/cube", "cube.html"); }
virtual ~CalibrationCubeDialog(){ } virtual ~CalibrationCubeDialog(){ }
protected: protected:

View File

@ -10,7 +10,7 @@ class CalibrationFlowDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationFlowDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Flow calibration") { create("/calibration/filament_flow/filament_flow.html", wxSize(900, 500)); } CalibrationFlowDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Flow calibration") { create("/calibration/filament_flow","filament_flow.html", wxSize(900, 500)); }
virtual ~CalibrationFlowDialog() {} virtual ~CalibrationFlowDialog() {}
protected: protected:

View File

@ -10,7 +10,7 @@ class CalibrationOverBridgeDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationOverBridgeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Ironing pattern calibration") { create("/calibration/over-bridge_tuning/over-bridge_tuning.html", wxSize(900, 500)); } CalibrationOverBridgeDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Ironing pattern calibration") { create("/calibration/over-bridge_tuning", "over-bridge_tuning.html", wxSize(900, 500)); }
virtual ~CalibrationOverBridgeDialog() { } virtual ~CalibrationOverBridgeDialog() { }
protected: protected:

View File

@ -10,7 +10,7 @@ class CalibrationRetractionDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationRetractionDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Flow calibration") { create("/calibration/retraction/retraction.html", wxSize(900, 500)); } CalibrationRetractionDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Flow calibration") { create("/calibration/retraction", "retraction.html", wxSize(900, 500)); }
virtual ~CalibrationRetractionDialog() {} virtual ~CalibrationRetractionDialog() {}
protected: protected:

View File

@ -10,7 +10,7 @@ class CalibrationTempDialog : public CalibrationAbstractDialog
{ {
public: public:
CalibrationTempDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Temperature calibration") { create("/calibration/filament_temp/filament_temp.html"); } CalibrationTempDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Temperature calibration") { create("/calibration/filament_temp", "filament_temp.html"); }
virtual ~CalibrationTempDialog(){ } virtual ~CalibrationTempDialog(){ }
protected: protected:

View File

@ -48,28 +48,28 @@ static wxString generate_html_row(const Config::Snapshot &snapshot, bool row_eve
text += " (" + wxString::FromUTF8(snapshot.comment.data()) + ")"; text += " (" + wxString::FromUTF8(snapshot.comment.data()) + ")";
text += "</b></font><br>"; text += "</b></font><br>";
// End of row header. // End of row header.
text += _(L(SLIC3R_APP_NAME " version")) + ": " + snapshot.slic3r_version_captured.to_string() + "<br>"; text += wxString::Format( _L( "%s version"), SLIC3R_APP_NAME) + ": " + snapshot.slic3r_version_captured.to_string() + "<br>";
bool has_fff = ! snapshot.print.empty() || ! snapshot.filaments.empty(); bool has_fff = ! snapshot.print.empty() || ! snapshot.filaments.empty();
bool has_sla = ! snapshot.sla_print.empty() || ! snapshot.sla_material.empty(); bool has_sla = ! snapshot.sla_print.empty() || ! snapshot.sla_material.empty();
if (has_fff || ! has_sla) { if (has_fff || ! has_sla) {
text += _(L("print")) + ": " + snapshot.print + "<br>"; text += _L("print") + ": " + snapshot.print + "<br>";
text += _(L("filaments")) + ": " + snapshot.filaments.front() + "<br>"; text += _L("filaments") + ": " + snapshot.filaments.front() + "<br>";
} }
if (has_sla) { if (has_sla) {
text += _(L("SLA print")) + ": " + snapshot.sla_print + "<br>"; text += _L("SLA print") + ": " + snapshot.sla_print + "<br>";
text += _(L("SLA material")) + ": " + snapshot.sla_material + "<br>"; text += _L("SLA material") + ": " + snapshot.sla_material + "<br>";
} }
text += _(L("printer")) + ": " + (snapshot.physical_printer.empty() ? snapshot.printer : snapshot.physical_printer) + "<br>"; text += _(L("printer")) + ": " + (snapshot.physical_printer.empty() ? snapshot.printer : snapshot.physical_printer) + "<br>";
bool compatible = true; bool compatible = true;
for (const Config::Snapshot::VendorConfig &vc : snapshot.vendor_configs) { for (const Config::Snapshot::VendorConfig &vc : snapshot.vendor_configs) {
text += _(L("vendor")) + ": " + vc.name +", " + _(L("version")) + ": " + vc.version.config_version.to_string() + text += _L("vendor") + ": " + vc.name +", " + _L("version") + ": " + vc.version.config_version.to_string() +
", " + _(L("min " SLIC3R_APP_NAME " version")) + ": " + vc.version.min_slic3r_version.to_string(); ", " + wxString::Format(_L("min %s version"), SLIC3R_APP_NAME) + ": " + vc.version.min_slic3r_version.to_string();
if (vc.version.max_slic3r_version != Semver::inf()) if (vc.version.max_slic3r_version != Semver::inf())
text += ", " + _(L("max " SLIC3R_APP_NAME " version")) + ": " + vc.version.max_slic3r_version.to_string(); text += ", " + wxString::Format(_L("max %s version"), SLIC3R_APP_NAME) + ": " + vc.version.max_slic3r_version.to_string();
text += "<br>"; text += "<br>";
for (const std::pair<std::string, std::set<std::string>> &model : vc.models_variants_installed) { for (const std::pair<std::string, std::set<std::string>> &model : vc.models_variants_installed) {
text += _(L("model")) + ": " + model.first + ", " + _(L("variants")) + ": "; text += _L("model") + ": " + model.first + ", " + _L("variants") + ": ";
for (const std::string &variant : model.second) { for (const std::string &variant : model.second) {
if (&variant != &*model.second.begin()) if (&variant != &*model.second.begin())
text += ", "; text += ", ";
@ -81,10 +81,10 @@ static wxString generate_html_row(const Config::Snapshot &snapshot, bool row_eve
} }
if (! compatible) { if (! compatible) {
text += "<p align=\"right\">" + from_u8((boost::format(_utf8(L("Incompatible with this %s"))) % SLIC3R_APP_NAME).str()) + "</p>"; text += "<p align=\"right\">" + wxString::Format(_L("Incompatible with this %s"), SLIC3R_APP_NAME) + "</p>";
} }
else if (! snapshot_active) else if (! snapshot_active)
text += "<p align=\"right\"><a href=\"" + snapshot.id + "\">" + _(L("Activate")) + "</a></p>"; text += "<p align=\"right\"><a href=\"" + snapshot.id + "\">" + _L("Activate") + "</a></p>";
text += "</td>"; text += "</td>";
text += "</tr>"; text += "</tr>";
return text; return text;

View File

@ -1200,8 +1200,8 @@ PageReloadFromDisk::PageReloadFromDisk(ConfigWizard* parent)
PageFilesAssociation::PageFilesAssociation(ConfigWizard* parent) PageFilesAssociation::PageFilesAssociation(ConfigWizard* parent)
: ConfigWizardPage(parent, _L("Files association"), _L("Files association")) : ConfigWizardPage(parent, _L("Files association"), _L("Files association"))
{ {
cb_3mf = new wxCheckBox(this, wxID_ANY, _L("Associate .3mf files to " SLIC3R_APP_NAME)); cb_3mf = new wxCheckBox(this, wxID_ANY, from_u8((boost::format(_u8L("Associate .3mf files to %1%")) % SLIC3R_APP_NAME).str()));
cb_stl = new wxCheckBox(this, wxID_ANY, _L("Associate .stl files to " SLIC3R_APP_NAME)); cb_stl = new wxCheckBox(this, wxID_ANY, from_u8((boost::format(_u8L("Associate .stl files to %1%")) % SLIC3R_APP_NAME).str()));
// cb_gcode = new wxCheckBox(this, wxID_ANY, _L("Associate .gcode files to PrusaSlicer G-code Viewer")); // cb_gcode = new wxCheckBox(this, wxID_ANY, _L("Associate .gcode files to PrusaSlicer G-code Viewer"));
append(cb_3mf); append(cb_3mf);
@ -1214,10 +1214,10 @@ PageFilesAssociation::PageFilesAssociation(ConfigWizard* parent)
PageMode::PageMode(ConfigWizard *parent) PageMode::PageMode(ConfigWizard *parent)
: ConfigWizardPage(parent, _L("View mode"), _L("View mode")) : ConfigWizardPage(parent, _L("View mode"), _L("View mode"))
{ {
append_text(_L(SLIC3R_APP_NAME "'s user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n" append_text(wxString::Format(_L("%s's user interfaces comes in three variants:\nSimple, Advanced, and Expert.\n"
"The Simple mode shows only the most frequently used settings relevant for regular 3D printing. " "The Simple mode shows only the most frequently used settings relevant for regular 3D printing. "
"The other two offer progressively more sophisticated fine-tuning, " "The other two offer progressively more sophisticated fine-tuning, "
"they are suitable for advanced and expert users, respectively.")); "they are suitable for advanced and expert users, respectively."), SLIC3R_APP_NAME));
radio_simple = new wxRadioButton(this, wxID_ANY, _L("Simple mode")); radio_simple = new wxRadioButton(this, wxID_ANY, _L("Simple mode"));
radio_advanced = new wxRadioButton(this, wxID_ANY, _L("Advanced mode")); radio_advanced = new wxRadioButton(this, wxID_ANY, _L("Advanced mode"));

View File

@ -168,7 +168,7 @@ FreeCADDialog::~FreeCADDialog() {
} }
FreeCADDialog::FreeCADDialog(GUI_App* app, MainFrame* mainframe) FreeCADDialog::FreeCADDialog(GUI_App* app, MainFrame* mainframe)
: DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("FreePySCAD : script engine for FreeCAD")), : DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("FreePySCAD : script engine for FreeCAD"),
//#if ENABLE_SCROLLABLE //#if ENABLE_SCROLLABLE
wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
//#else //#else

View File

@ -609,9 +609,9 @@ static void generic_exception_handle()
BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what(); BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what();
std::terminate(); std::terminate();
} catch (const boost::io::bad_format_string& ex) { } catch (const boost::io::bad_format_string& ex) {
wxString errmsg = _L(SLIC3R_APP_NAME " has encountered a localization error. " wxString errmsg = wxString::Format(_L( "%s has encountered a localization error. "
"Please report to " SLIC3R_APP_NAME " team, what language was active and in which scenario " "Please report to %s team, what language was active and in which scenario "
"this issue happened. Thank you.\n\nThe application will now terminate."); "this issue happened. Thank you.\n\nThe application will now terminate."), SLIC3R_APP_NAME, SLIC3R_APP_NAME);
wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Critical error"), wxOK | wxICON_ERROR); wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Critical error"), wxOK | wxICON_ERROR);
BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what();
std::terminate(); std::terminate();
@ -744,14 +744,14 @@ void GUI_App::init_app_config()
// Error while parsing config file. We'll customize the error message and rethrow to be displayed. // Error while parsing config file. We'll customize the error message and rethrow to be displayed.
if (is_editor()) { if (is_editor()) {
throw Slic3r::RuntimeError( throw Slic3r::RuntimeError(
_u8L("Error parsing " SLIC3R_APP_NAME " config file, it is probably corrupted. " (boost::format(_u8L("Error parsing %1% config file, it is probably corrupted. "
"Try to manually delete the file to recover from the error. Your user profiles will not be affected.") + "Try to manually delete the file to recover from the error. Your user profiles will not be affected.")) % std::string(SLIC3R_APP_NAME)).str() +
"\n\n" + app_config->config_path() + "\n\n" + error); "\n\n" + app_config->config_path() + "\n\n" + error);
} }
else { else {
throw Slic3r::RuntimeError( throw Slic3r::RuntimeError(
_u8L("Error parsing " GCODEVIEWER_APP_NAME " config file, it is probably corrupted. " (boost::format(_u8L("Error parsing %1% config file, it is probably corrupted. "
"Try to manually delete the file to recover from the error.") + "Try to manually delete the file to recover from the error.")) % std::string(GCODEVIEWER_APP_NAME)).str() +
"\n\n" + app_config->config_path() + "\n\n" + error); "\n\n" + app_config->config_path() + "\n\n" + error);
} }
} }
@ -1218,8 +1218,8 @@ void GUI_App::check_printer_presets()
for (const std::string& preset_name : preset_names) for (const std::string& preset_name : preset_names)
msg_text += "\n \"" + from_u8(preset_name) + "\","; msg_text += "\n \"" + from_u8(preset_name) + "\",";
msg_text.RemoveLast(); msg_text.RemoveLast();
msg_text += "\n\n" + _L("But since this version of " SLIC3R_APP_NAME " we don't show this information in Printer Settings anymore.\n" msg_text += "\n\n" + wxString::Format(_L("But since this version of %s we don't show this information in Printer Settings anymore.\n"
"Settings will be available in physical printers settings.") + "\n\n" + "Settings will be available in physical printers settings."), SLIC3R_APP_NAME) + "\n\n" +
_L("By default new Printer devices will be named as \"Printer N\" during its creation.\n" _L("By default new Printer devices will be named as \"Printer N\" during its creation.\n"
"Note: This name can be changed later from the physical printers settings"); "Note: This name can be changed later from the physical printers settings");
@ -1319,7 +1319,7 @@ void GUI_App::change_calibration_dialog(const wxDialog* have_to_destroy, wxDialo
void GUI_App::html_dialog() void GUI_App::html_dialog()
{ {
change_calibration_dialog(nullptr, new HtmlDialog(this, mainframe,"Introduction to calibrations", "/calibration/introduction.html")); change_calibration_dialog(nullptr, new HtmlDialog(this, mainframe,"Introduction to calibrations", "/calibration", "introduction.html"));
} }
void GUI_App::bed_leveling_dialog() void GUI_App::bed_leveling_dialog()
{ {

View File

@ -85,10 +85,10 @@ int GUI_Run(GUI_InitParams &params)
return result; return result;
} catch (const Slic3r::Exception &ex) { } catch (const Slic3r::Exception &ex) {
boost::nowide::cerr << ex.what() << std::endl; boost::nowide::cerr << ex.what() << std::endl;
wxMessageBox(boost::nowide::widen(ex.what()), _L(SLIC3R_APP_NAME " GUI initialization failed"), wxICON_STOP); wxMessageBox(boost::nowide::widen(ex.what()), wxString::Format(_L("%s GUI initialization failed"), SLIC3R_APP_NAME), wxICON_STOP);
} catch (const std::exception &ex) { } catch (const std::exception &ex) {
boost::nowide::cerr << SLIC3R_APP_NAME << " GUI initialization failed: " << ex.what() << std::endl; boost::nowide::cerr << SLIC3R_APP_NAME << " GUI initialization failed: " << ex.what() << std::endl;
wxMessageBox(format_wxstr(_L("Fatal error, exception catched: %1%"), ex.what()), _L(SLIC3R_APP_NAME " GUI initialization failed"), wxICON_STOP); wxMessageBox(format_wxstr(_L("Fatal error, exception catched: %1%"), ex.what()), wxString::Format(_L("%s GUI initialization failed"), SLIC3R_APP_NAME), wxICON_STOP);
} }
// error // error

View File

@ -241,19 +241,19 @@ bool Preview::init(wxWindow* parent, Model* model)
m_bottom_toolbar_panel = new wxPanel(this); m_bottom_toolbar_panel = new wxPanel(this);
m_label_view_type = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("View")); m_label_view_type = new wxStaticText(m_bottom_toolbar_panel, wxID_ANY, _L("View"));
m_choice_view_type = new wxChoice(m_bottom_toolbar_panel, wxID_ANY); m_choice_view_type = new wxChoice(m_bottom_toolbar_panel, wxID_ANY);
m_choice_view_label[GCodeViewer::EViewType::FeatureType] = wxString(_L(m_width_screen == tiny ? "Feature" : "Feature type")); m_choice_view_label[GCodeViewer::EViewType::FeatureType] = m_width_screen == tiny ? _L("Feature") : _L("Feature type");
m_choice_view_label[GCodeViewer::EViewType::Height] = wxString(_L("Height")); m_choice_view_label[GCodeViewer::EViewType::Height] = _L("Height");
m_choice_view_label[GCodeViewer::EViewType::Width] = wxString(_L("Width")); m_choice_view_label[GCodeViewer::EViewType::Width] = _L("Width");
m_choice_view_label[GCodeViewer::EViewType::Feedrate] = wxString(_L("Speed")); m_choice_view_label[GCodeViewer::EViewType::Feedrate] = _L("Speed");
m_choice_view_label[GCodeViewer::EViewType::FanSpeed] = wxString(_L(m_width_screen == tiny ? "Fan" : "Fan speed")); m_choice_view_label[GCodeViewer::EViewType::FanSpeed] = m_width_screen == tiny ? _L("Fan") : _L("Fan speed");
m_choice_view_label[GCodeViewer::EViewType::LayerTime] = wxString(_L(m_width_screen == tiny ? "time" : "Layer time")); m_choice_view_label[GCodeViewer::EViewType::LayerTime] = m_width_screen == tiny ? _L("time") : _L("Layer time");
m_choice_view_label[GCodeViewer::EViewType::LayerTimeLog] = wxString(_L(m_width_screen == tiny ? "Log time" : "Layer time (log)")); m_choice_view_label[GCodeViewer::EViewType::LayerTimeLog] = m_width_screen == tiny ? _L("Log time") : _L("Layer time (log)");
m_choice_view_label[GCodeViewer::EViewType::Chronology] = wxString(_L(m_width_screen == tiny ? "Chrono" : "Chronology")); m_choice_view_label[GCodeViewer::EViewType::Chronology] = m_width_screen == tiny ? _L("Chrono") : _L("Chronology");
m_choice_view_label[GCodeViewer::EViewType::VolumetricRate] = wxString(_L(m_width_screen == tiny ? "Vol. flow" : "Volumetric flow rate")); m_choice_view_label[GCodeViewer::EViewType::VolumetricRate] = m_width_screen == tiny ? _L("Vol. flow") : _L("Volumetric flow rate");
m_choice_view_label[GCodeViewer::EViewType::Tool] = wxString(_L("Tool")); m_choice_view_label[GCodeViewer::EViewType::Tool] = _L("Tool");
m_choice_view_label[GCodeViewer::EViewType::Filament] = wxString(_L("Filament")); m_choice_view_label[GCodeViewer::EViewType::Filament] = _L("Filament");
m_choice_view_label[GCodeViewer::EViewType::ColorPrint] = wxString(_L(m_width_screen == tiny ? "Color" : "Color Print")); m_choice_view_label[GCodeViewer::EViewType::ColorPrint] = m_width_screen == tiny ? _L("Color") : _L("Color Print");
m_choice_view_label[GCodeViewer::EViewType::ExtruderTemp] = wxString(_L((m_width_screen == tiny ? "Temp" : "Temperature"))); m_choice_view_label[GCodeViewer::EViewType::ExtruderTemp] = m_width_screen == tiny ? _L("Temp") : _L("Temperature");
for(int i=0; i < (int)GCodeViewer::EViewType::Count; i++) for(int i=0; i < (int)GCodeViewer::EViewType::Count; i++)
m_choice_view_type->Append(m_choice_view_label[(GCodeViewer::EViewType)i]); m_choice_view_type->Append(m_choice_view_label[(GCodeViewer::EViewType)i]);
m_choice_view_type->SetSelection(0); m_choice_view_type->SetSelection(0);

View File

@ -1086,11 +1086,11 @@ static const wxString sep_space = "";
static wxMenu* generate_help_menu() static wxMenu* generate_help_menu()
{ {
wxMenu* helpMenu = new wxMenu(); wxMenu* helpMenu = new wxMenu();
append_menu_item(helpMenu, wxID_ANY, _L(SLIC3R_APP_NAME " Releases"), wxString::Format(_L("Open the %s releases page in your browser"), SLIC3R_APP_NAME), append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s Releases"), SLIC3R_APP_NAME), wxString::Format(_L("Open the %s releases page in your browser"), SLIC3R_APP_NAME),
[](wxCommandEvent&) { wxLaunchDefaultBrowser(SLIC3R_DOWNLOAD); }); [](wxCommandEvent&) { wxLaunchDefaultBrowser(SLIC3R_DOWNLOAD); });
append_menu_item(helpMenu, wxID_ANY, _L(SLIC3R_APP_NAME " wiki"), wxString::Format(_L("Open the %s wiki in your browser"), SLIC3R_APP_NAME), append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s wiki"), SLIC3R_APP_NAME), wxString::Format(_L("Open the %s wiki in your browser"), SLIC3R_APP_NAME),
[](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/" SLIC3R_GITHUB "/wiki"); }); [](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/" SLIC3R_GITHUB "/wiki"); });
append_menu_item(helpMenu, wxID_ANY, _L(SLIC3R_APP_NAME " website"), _L("Open the Slic3r website in your browser"), append_menu_item(helpMenu, wxID_ANY, wxString::Format(_L("%s website"), SLIC3R_APP_NAME), _L("Open the Slic3r website in your browser"),
[](wxCommandEvent&) { wxLaunchDefaultBrowser("http://slic3r.org"); }); [](wxCommandEvent&) { wxLaunchDefaultBrowser("http://slic3r.org"); });
//# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{ //# my $versioncheck = $self->_append_menu_item($helpMenu, "Check for &Updates...", "Check for new Slic3r versions", sub{
//# wxTheApp->check_version(1); //# wxTheApp->check_version(1);
@ -1417,7 +1417,7 @@ void MainFrame::init_menubar_as_editor()
[this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this); [this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue", nullptr, []() {return true; }, this);
windowMenu->AppendSeparator(); windowMenu->AppendSeparator();
append_menu_item(windowMenu, wxID_ANY, _L("Open new instance") + "\tCtrl+Shift+" + "I", _L("Open a new " SLIC3R_APP_NAME " instance"), append_menu_item(windowMenu, wxID_ANY, _L("Open new instance") + "\tCtrl+Shift+" + "I", wxString::Format(_L("Open a new %s instance"), SLIC3R_APP_NAME),
[this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this]() {return m_plater != nullptr && wxGetApp().app_config->get("single_instance") != "1"; }, this); [this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this]() {return m_plater != nullptr && wxGetApp().app_config->get("single_instance") != "1"; }, this);
} }
@ -1527,7 +1527,7 @@ void MainFrame::init_menubar_as_gcodeviewer()
append_menu_item(fileMenu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"), append_menu_item(fileMenu, wxID_ANY, _L("Export &toolpaths as OBJ") + dots, _L("Export toolpaths as OBJ"),
[this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr, [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->export_toolpaths_to_obj(); }, "export_plater", nullptr,
[this]() {return can_export_toolpaths(); }, this); [this]() {return can_export_toolpaths(); }, this);
append_menu_item(fileMenu, wxID_ANY, _L("O&pen " SLIC3R_APP_NAME) + dots, _L("Open " SLIC3R_APP_NAME), append_menu_item(fileMenu, wxID_ANY, wxString::Format(_L("O&pen %s"), SLIC3R_APP_NAME) + dots, wxString::Format(_L("Open %s"), SLIC3R_APP_NAME),
[this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, [this](wxCommandEvent&) { start_new_slicer(); }, "", nullptr,
[this]() {return true; }, this); [this]() {return true; }, this);
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();

View File

@ -176,11 +176,9 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
// add label if any // add label if any
if (!option.label.empty()) { if (!option.label.empty()) {
std::string opt_label = (option.label.empty() || option.label.back() != '_') ? option.label : option.label.substr(0, option.label.size() - 1); std::string opt_label = (option.label.empty() || option.label.back() != '_') ? option.label : option.label.substr(0, option.label.size() - 1);
std::cout << "translate '" << opt_label << "' to '";
//! To correct translation by context have to use wxGETTEXT_IN_CONTEXT macro from wxWidget 3.1.1 //! To correct translation by context have to use wxGETTEXT_IN_CONTEXT macro from wxWidget 3.1.1
label = /*(opt_label == L_CONTEXT("Top", "Layers") || opt_label == L_CONTEXT("Bottom", "Layers")) ? label = /*(opt_label == L_CONTEXT("Top", "Layers") || opt_label == L_CONTEXT("Bottom", "Layers")) ?
_CTX(opt_label, "Layers") :*/ _(opt_label); _CTX(opt_label, "Layers") :*/ _(opt_label);
std::cout << label << "'\n";
bool no_dots = label.empty() || option.label.back() == '_'; bool no_dots = label.empty() || option.label.back() == '_';
if (!no_dots) if (!no_dots)
label += ":"; label += ":";
@ -820,11 +818,11 @@ RememberChoiceDialog::RememberChoiceDialog(wxWindow* parent, const wxString& msg
return; return;
wxString preferences_item = _L("Suppress to open hyperlink in browser"); wxString preferences_item = _L("Suppress to open hyperlink in browser");
wxString msg = wxString msg =
_L(SLIC3R_APP_NAME " will remember your choice.") + "\n\n" + wxString::Format(_L("%s will remember your choice."), SLIC3R_APP_NAME) + "\n\n" +
_L("You will not be asked about it again on label hovering.") + "\n\n" + _L("You will not be asked about it again on label hovering.") + "\n\n" +
format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choice."), preferences_item); format_wxstr(_L("Visit \"Preferences\" and check \"%1%\"\nto changes your choice."), preferences_item);
wxMessageDialog dialog(nullptr, msg, _L(SLIC3R_APP_NAME ": Don't ask me again"), wxOK | wxCANCEL | wxICON_INFORMATION); wxMessageDialog dialog(nullptr, msg, wxString::Format(_L("%s: Don't ask me again"), SLIC3R_APP_NAME), wxOK | wxCANCEL | wxICON_INFORMATION);
if (dialog.ShowModal() == wxID_CANCEL) if (dialog.ShowModal() == wxID_CANCEL)
m_remember_choice->SetValue(false); m_remember_choice->SetValue(false);
}); });

View File

@ -257,14 +257,15 @@ bool OpenGLManager::init_gl()
bool valid_version = s_gl_info.is_version_greater_or_equal_to(2, 0); bool valid_version = s_gl_info.is_version_greater_or_equal_to(2, 0);
if (!valid_version) { if (!valid_version) {
// Complain about the OpenGL version. // Complain about the OpenGL version.
wxString message = from_u8((boost::format( wxString message = wxString::Format(
_utf8(L(SLIC3R_APP_NAME " requires OpenGL 2.0 capable graphics driver to run correctly, \n" _L( "%s requires OpenGL 2.0 capable graphics driver to run correctly, \n"
"while OpenGL version %s, render %s, vendor %s was detected."))) % s_gl_info.get_version() % s_gl_info.get_renderer() % s_gl_info.get_vendor()).str()); "while OpenGL version %s, render %s, vendor %s was detected."),
SLIC3R_APP_NAME, s_gl_info.get_version(), s_gl_info.get_renderer(), s_gl_info.get_vendor());
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.");
#ifdef _WIN32 #ifdef _WIN32
message += "\n"; message += "\n";
message += _L("As a workaround, you may run " SLIC3R_APP_NAME " with a software rendered 3D graphics by running " SLIC3R_APP_CMD ".exe with the --sw-renderer parameter."); message += wxString::Format(_L("As a workaround, you may run %s with a software rendered 3D graphics by running %s.exe with the --sw-renderer parameter."), SLIC3R_APP_NAME, SLIC3R_APP_CMD);
#endif #endif
wxMessageBox(message, wxString(SLIC3R_APP_NAME " - ") + _L("Unsupported OpenGL version"), wxOK | wxICON_ERROR); wxMessageBox(message, wxString(SLIC3R_APP_NAME " - ") + _L("Unsupported OpenGL version"), wxOK | wxICON_ERROR);
} }

View File

@ -96,7 +96,7 @@ void PreferencesDialog::build()
// Please keep in sync with ConfigWizard // Please keep in sync with ConfigWizard
def.label = L("Check for application updates"); def.label = L("Check for application updates");
def.type = coBool; def.type = coBool;
def.tooltip = L("If enabled, " SLIC3R_APP_NAME " will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."); def.tooltip = L("If enabled, Slic3r will check for the new versions of itself online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done.");
def.set_default_value(new ConfigOptionBool(app_config->get("version_check") == "1")); def.set_default_value(new ConfigOptionBool(app_config->get("version_check") == "1"));
option = Option(def, "version_check"); option = Option(def, "version_check");
m_optgroup_general->append_single_option_line(option); m_optgroup_general->append_single_option_line(option);
@ -380,8 +380,8 @@ void PreferencesDialog::build()
def.label = L("Tab icon size"); def.label = L("Tab icon size");
def.type = coInt; def.type = coInt;
def.tooltip = std::string(L("Size of the tab icons, in pixels. Set to 0 to remove icons.")) def.tooltip = L("Size of the tab icons, in pixels. Set to 0 to remove icons."
+ std::string(L("\nYou have to restart the application before any change will be taken into account.")); "\nYou have to restart the application before any change will be taken into account.");
def.set_default_value(new ConfigOptionInt{ atoi(app_config->get("tab_icon_size").c_str()) }); def.set_default_value(new ConfigOptionInt{ atoi(app_config->get("tab_icon_size").c_str()) });
option = Option(def, "tab_icon_size"); option = Option(def, "tab_icon_size");
option.opt.width = 6; option.opt.width = 6;

View File

@ -1956,12 +1956,12 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
} else if (boost::starts_with(full_line, "print_host_upload_description")) { } else if (boost::starts_with(full_line, "print_host_upload_description")) {
TabPrinter* tab = nullptr; TabPrinter* tab = nullptr;
if ((tab = dynamic_cast<TabPrinter*>(this)) == nullptr) continue; if ((tab = dynamic_cast<TabPrinter*>(this)) == nullptr) continue;
wxString description_line_text = _L("" wxString description_line_text = wxString::Format(_L(""
"Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n\n" "Note: All parameters from this group are moved to the Physical Printer settings (see changelog).\n\n"
"A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, " "A new Physical Printer profile is created by clicking on the \"cog\" icon right of the Printer profiles combo box, "
"by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens " "by selecting the \"Add physical printer\" item in the Printer combo box. The Physical Printer profile editor opens "
"also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored " "also when clicking on the \"cog\" icon in the Printer settings tab. The Physical Printer profiles are being stored "
"into " SLIC3R_APP_NAME "/physical_printer directory."); "into %s/physical_printer directory."), SLIC3R_APP_KEY);
current_line = { "", "" }; current_line = { "", "" };
current_line.full_width = 1; current_line.full_width = 1;