From 43aa1680cb014ca1b558dd202a31e3565b5cd8e9 Mon Sep 17 00:00:00 2001 From: YuSanka <yusanka@gmail.com> Date: Thu, 8 Feb 2018 10:58:13 +0100 Subject: [PATCH] Added menu item for selection of application language from the list of installed languages. * m_Local and its functions moved to GUI.cpp. * Strings in some files(GUI.cpp, Tab.cpp, Tab.hpp & Field.cpp) marked by _L() macro. * Updated mo-files for En and Uk languages. --- lib/Slic3r/GUI/MainFrame.pm | 6 +- resources/localization/en_US/Slic3rPE.mo | Bin 1775 -> 7892 bytes resources/localization/uk/Slic3rPE.mo | Bin 2205 -> 10300 bytes xs/src/slic3r/GUI/BedShapeDialog.cpp | 70 ------- xs/src/slic3r/GUI/BedShapeDialog.hpp | 6 - xs/src/slic3r/GUI/Field.cpp | 6 +- xs/src/slic3r/GUI/GUI.cpp | 130 ++++++++++++- xs/src/slic3r/GUI/GUI.hpp | 11 +- xs/src/slic3r/GUI/Tab.cpp | 231 ++++++++++++----------- xs/src/slic3r/GUI/Tab.hpp | 8 +- 10 files changed, 260 insertions(+), 208 deletions(-) diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 1a06eb312..9f47b8d3e 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -410,9 +410,11 @@ sub _init_menubar { $menubar->Append($self->{object_menu}, "&Object") if $self->{object_menu}; $menubar->Append($windowMenu, "&Window"); $menubar->Append($self->{viewMenu}, "&View") if $self->{viewMenu}; - $menubar->Append($helpMenu, "&Help"); - # Add an optional debug menu. In production code, the add_debug_menu() call should do nothing. + # Add an optional debug menu + # (Select application language from the list of installed languages) + # In production code, the add_debug_menu() call should do nothing. Slic3r::GUI::add_debug_menu($menubar); + $menubar->Append($helpMenu, "&Help"); $self->SetMenuBar($menubar); } } diff --git a/resources/localization/en_US/Slic3rPE.mo b/resources/localization/en_US/Slic3rPE.mo index 46e2c85b9863630c7d7f68586a9d13c611be8f18..2b037fbb5969e75974cd135e997f759bc192e1c3 100644 GIT binary patch literal 7892 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 delta 614 zcmbW!KTASU7{~Eb{;5n$Z)O=4Iz&VWSHcFfF(V2J38EU}79oOH;i^L|PVK?LH_%!{ z5ft?r3L2cFH7H!7E$I7%MRN~4_w$^~x##@Q=6owqe=^(+MH%!ceMXPbnGPP*1<v6m zcH<j*@uR)|#C6u*PNj0Vja_(-5xhp(|A4*NL^<afJxbNp3xk^%Eu6x4oWyaLQcIXc zUa4a|;4+O8D8Scp&=Sf8x%PS!CD1NPpc|AxJ~l}p17-gdk6!LqCW9Q5LH4Qzlt9ZU zf!0t09ijv}K?(GV<WV8|r{sI704;m`w2zhm<o>N5Ciykg3>}o=PxUcN013q%-z9%f ze|y%qkws6fQZ3v1bm+?KIAtdu(>u{&W7R3-3ni7?->X`se646X`Y|}7y`vM_GMrA^ z*7pNjU8z_ynNFp2A{_V6#*${*Oii0f)6|XdQE0`gR1@otRjL%NYS~H0baZe--$k<j JxzT0Y>I=inSBU@s diff --git a/resources/localization/uk/Slic3rPE.mo b/resources/localization/uk/Slic3rPE.mo index 82aa2e48e4c875208f3f5500d4a13dd5bbf2269f..b0457326613f2fb8a7bce881e903d40642e39b62 100644 GIT binary patch literal 10300 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 AcmMzZ delta 718 zcmYk(OK1~87{KvKO<T3qCT(aFsm(?#B}!w`hll9FC`2mJhBRJ$92Tu@ArIN49=tRf zy{a%�Tl2M=jBS)|#d_4}vf&UV0IadJr!ncqsUvpyCJL{AOn7@$GIs`NX~OsoS|I zh;Fi<d`j*mk2+|GDjvb-xE;S?8~*$=-oiBFwiY2$cplqv1$*%&>h<rj13#iZ=QFkn zu^_(EaWe58gZKl7aA2Dd6BtLP#64W(GKm)BAiG`o7<J*#a5ug~iJN#Gv)r!NeZd3x z3j?^HDtozK#OZjMxQILP8g}9hJb`yGh99tu9?I7RKS1gcZt`z%XES!u>Z0{I`b@S8 z>i!oy=;^N^MoC@W|DoSPU!Xse{&YI@@9Apxc)K$lCtK$W#e7yC>#T(>D{lo1k;t2u zjl!&Xb=tUM<+H|AIuQzm#H2MhGnW&o=}Sd3H#46xEtzrck&j%1a?5SCWV3R%XQF+~ z7#WF<9hR#-fzELw5{ZtE9}GvrVQF}7yAx)iIGnc3Tp?o?^H$W5%br^@*>_>cIAly7 zKSdim9j8sE&Q8UGQK25%CA+L@s-a$}RrOjfdHuC>z5z#9g{eAIZ`7Kq8UeY{KkTT; z6`#LPs0y3z^0cAW?6Q4Rtv9#2{64Qx%c^0Qcvcl^i3P7z-M(*^<mSG(+!%c8tgE{C E4dSJkAOHXW diff --git a/xs/src/slic3r/GUI/BedShapeDialog.cpp b/xs/src/slic3r/GUI/BedShapeDialog.cpp index 591188443..35238654e 100644 --- a/xs/src/slic3r/GUI/BedShapeDialog.cpp +++ b/xs/src/slic3r/GUI/BedShapeDialog.cpp @@ -8,18 +8,12 @@ #include <wx/numformatter.h> #include "Model.hpp" #include "boost/nowide/iostream.hpp" -#include <wx/config.h> -#include <wx/dir.h> -#include <wx/filename.h> -#include "Utils.hpp" namespace Slic3r { namespace GUI { void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) { - m_App = get_app(); - LoadLanguage(); m_panel = new BedShapePanel(this); m_panel->build_panel(default_pt); @@ -38,70 +32,6 @@ void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) })); } -bool BedShapeDialog::LoadLanguage() -{ -// wxConfigBase config(m_App->GetAppName()); - long language; -// if (!config.Read(wxT("wxTranslation_Language"), -// &language, wxLANGUAGE_UNKNOWN)) -// { - language = wxLANGUAGE_UKRAINIAN;// wxLANGUAGE_UNKNOWN; -// } -// if (language == wxLANGUAGE_UNKNOWN) return false; - wxArrayString names; - wxArrayLong identifiers; - GetInstalledLanguages(names, identifiers); - for (size_t i = 0; i < identifiers.Count(); i++) - { - if (identifiers[i] == language) - { - m_Locale = new wxLocale; - m_Locale->Init(identifiers[i]); - m_Locale->AddCatalogLookupPathPrefix(wxPathOnly(m_local_dir)); - m_Locale->AddCatalog(m_App->GetAppName()); - return true; - } - } - return false; -} - -void BedShapeDialog::GetInstalledLanguages(wxArrayString & names, - wxArrayLong & identifiers) -{ - names.Clear(); - identifiers.Clear(); - m_local_dir = localization_dir(); - - wxDir dir(wxPathOnly(m_local_dir)); - wxString filename; - const wxLanguageInfo * langinfo; - wxString name = wxLocale::GetLanguageName(wxLANGUAGE_DEFAULT); - if (!name.IsEmpty()) - { - names.Add(_L("Default")); - identifiers.Add(wxLANGUAGE_DEFAULT); - } - for (bool cont = dir.GetFirst(&filename, wxEmptyString/*wxT("*.*")*/, wxDIR_DIRS); - cont; cont = dir.GetNext(&filename)) - { - wxLogTrace(wxTraceMask(), - _L("L10n: Directory found = \"%s\""), - filename.GetData()); - langinfo = wxLocale::FindLanguageInfo(filename); - if (langinfo != NULL) - { - auto full_file_name = dir.GetName() + wxFileName::GetPathSeparator() + - filename + wxFileName::GetPathSeparator() + - m_App->GetAppName() + wxT(".mo"); - if (wxFileExists(full_file_name)) - { - names.Add(langinfo->Description); - identifiers.Add(langinfo->Language); - } - } - } -} - void BedShapePanel::build_panel(ConfigOptionPoints* default_pt) { // on_change(nullptr); diff --git a/xs/src/slic3r/GUI/BedShapeDialog.hpp b/xs/src/slic3r/GUI/BedShapeDialog.hpp index 5bd7d68b9..81b0a41e3 100644 --- a/xs/src/slic3r/GUI/BedShapeDialog.hpp +++ b/xs/src/slic3r/GUI/BedShapeDialog.hpp @@ -38,9 +38,6 @@ public: class BedShapeDialog : public wxDialog { BedShapePanel* m_panel; - wxLocale* m_Locale; - wxApp* m_App; - std::string m_local_dir; public: BedShapeDialog(wxWindow* parent) : wxDialog(parent, wxID_ANY, _L("Bed Shape"), wxDefaultPosition, wxSize(350, 700), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER){} @@ -48,9 +45,6 @@ public: void build_dialog(ConfigOptionPoints* default_pt); std::vector<Pointf> GetValue() { return m_panel->GetValue(); } - - bool LoadLanguage(); - void GetInstalledLanguages(wxArrayString & names, wxArrayLong & identifiers); }; } // GUI diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp index 291a83e4f..5bb41f93e 100644 --- a/xs/src/slic3r/GUI/Field.cpp +++ b/xs/src/slic3r/GUI/Field.cpp @@ -32,9 +32,9 @@ namespace Slic3r { namespace GUI { wxString tooltip_text(""); wxString tooltip = wxString::FromUTF8(m_opt.tooltip.c_str()); if (tooltip.length() > 0) - tooltip_text = boost::iends_with(m_opt_id, "_gcode") ? - tooltip + "(" + _L("default") + ": \n" + default_string + ")" : - tooltip + "(" + _L("default") + ": " + default_string + ")"; + tooltip_text = tooltip + "(" + _L("default") + ": " + + (boost::iends_with(m_opt_id, "_gcode") ? "\n" : "") + + default_string + ")"; return tooltip_text; } diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 624962002..8063c98fd 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -35,6 +35,10 @@ #include "Tab.hpp" #include "TabIface.hpp" #include "AppConfig.hpp" +//#include <wx/config.h> +#include <wx/dir.h> +#include <wx/filename.h> +#include "Utils.hpp" namespace Slic3r { namespace GUI { @@ -162,6 +166,9 @@ wxApp *g_wxApp = nullptr; wxFrame *g_wxMainFrame = nullptr; wxNotebook *g_wxTabPanel = nullptr; +wxLocale* m_Locale; +std::string m_local_dir; + void set_wxapp(wxApp *app) { g_wxApp = app; @@ -177,13 +184,122 @@ void set_tab_panel(wxNotebook *tab_panel) g_wxTabPanel = tab_panel; } +bool select_language(wxArrayString & names, + wxArrayLong & identifiers) +{ + wxCHECK_MSG(names.Count() == identifiers.Count(), false, + _L("Array of language names and identifiers should have the same size.")); + long index = wxGetSingleChoiceIndex(_L("Select the language"), + _L("Language"), names); + if (index != -1) + { + m_Locale = new wxLocale; + m_Locale->Init(identifiers[index]); + m_Locale->AddCatalogLookupPathPrefix(wxPathOnly(m_local_dir)); + wxLogTrace(wxTraceMask(), + _L("Slic3rPE: Path Prefix = \"%s\""), + wxPathOnly(m_local_dir).GetData()); + m_Locale->AddCatalog(g_wxApp->GetAppName()); + wxLogTrace(wxTraceMask(), + _L("Slic3rPE: Catalog Name = \"%s\""), + g_wxApp->GetAppName().GetData()); + return true; + } + return false; +} + +bool load_language() +{ +// wxConfig config(g_wxApp->GetAppName()); + long language; +// if (!config.Read(wxT("wxTranslation_Language"), +// &language, wxLANGUAGE_UNKNOWN)) +// { + language = wxLANGUAGE_UKRAINIAN;// wxLANGUAGE_UNKNOWN; +// } +// if (language == wxLANGUAGE_UNKNOWN) return false; + wxArrayString names; + wxArrayLong identifiers; + get_installed_languages(names, identifiers); + for (size_t i = 0; i < identifiers.Count(); i++) + { + if (identifiers[i] == language) + { + m_Locale = new wxLocale; + m_Locale->Init(identifiers[i]); + m_Locale->AddCatalogLookupPathPrefix(wxPathOnly(m_local_dir)); + m_Locale->AddCatalog(g_wxApp->GetAppName()); + return true; + } + } + return false; +} + +void save_language(bool bReset) +{ +// wxConfig config(g_wxApp->GetAppName()); + long language = wxLANGUAGE_UNKNOWN; + if (!bReset) + { + if (m_Locale) + { + language = m_Locale->GetLanguage(); + } + } +// config.Write(wxT("wxTranslation_Language"), language); +// config.Flush(); +} + +void get_installed_languages(wxArrayString & names, + wxArrayLong & identifiers) +{ + names.Clear(); + identifiers.Clear(); + m_local_dir = localization_dir(); + + wxDir dir(wxPathOnly(m_local_dir)); + wxString filename; + const wxLanguageInfo * langinfo; + wxString name = wxLocale::GetLanguageName(wxLANGUAGE_DEFAULT); + if (!name.IsEmpty()) + { + names.Add(_L("Default")); + identifiers.Add(wxLANGUAGE_DEFAULT); + } + for (bool cont = dir.GetFirst(&filename, wxEmptyString, wxDIR_DIRS); + cont; cont = dir.GetNext(&filename)) + { + wxLogTrace(wxTraceMask(), + "L10n: Directory found = \"%s\"", + filename.GetData()); + langinfo = wxLocale::FindLanguageInfo(filename); + if (langinfo != NULL) + { + auto full_file_name = dir.GetName() + wxFileName::GetPathSeparator() + + filename + wxFileName::GetPathSeparator() + + g_wxApp->GetAppName() + wxT(".mo"); + if (wxFileExists(full_file_name)) + { + names.Add(langinfo->Description); + identifiers.Add(langinfo->Language); + } + } + } +} + void add_debug_menu(wxMenuBar *menu) { -#if 0 - auto debug_menu = new wxMenu(); - debug_menu->Append(wxWindow::NewControlId(1), "Some debug"); - menu->Append(debug_menu, _T("&Debug")); -#endif +//#if 0 + auto local_menu = new wxMenu(); + local_menu->Append(wxWindow::NewControlId(1), _L("Change Application Language")); + local_menu->Bind(wxEVT_MENU, [](wxEvent&){ + wxArrayString names; + wxArrayLong identifiers; + get_installed_languages(names, identifiers); + select_language(names, identifiers); + }); + menu->Append(local_menu, _T("&Localization")); +//#endif } void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, @@ -315,12 +431,12 @@ void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_con } void show_error(wxWindow* parent, wxString message){ - auto msg_wingow = new wxMessageDialog(parent, message, "Error", wxOK | wxICON_ERROR); + auto msg_wingow = new wxMessageDialog(parent, message, _L("Error"), wxOK | wxICON_ERROR); msg_wingow->ShowModal(); } void show_info(wxWindow* parent, wxString message, wxString title){ - auto msg_wingow = new wxMessageDialog(parent, message, title.empty() ? "Notice" : title, wxOK | wxICON_INFORMATION); + auto msg_wingow = new wxMessageDialog(parent, message, title.empty() ? _L("Notice") : title, wxOK | wxICON_INFORMATION); msg_wingow->ShowModal(); } diff --git a/xs/src/slic3r/GUI/GUI.hpp b/xs/src/slic3r/GUI/GUI.hpp index cc6bae964..c8f156846 100644 --- a/xs/src/slic3r/GUI/GUI.hpp +++ b/xs/src/slic3r/GUI/GUI.hpp @@ -11,6 +11,8 @@ class wxWindow; class wxMenuBar; class wxNotebook; class wxString; +class wxArrayString; +class wxArrayLong; namespace Slic3r { @@ -72,7 +74,14 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b void show_error(wxWindow* parent, wxString message); void show_info(wxWindow* parent, wxString message, wxString title); -wxApp* get_app(); +// load language saved at application config +bool load_language(); +// save language at application config +void save_language(bool bReset); +// get list of installed languages +void get_installed_languages(wxArrayString & names, wxArrayLong & identifiers); +// select language from the list of installed languages +bool select_language(wxArrayString & names, wxArrayLong & identifiers); } } diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 9b25f2444..77c441005 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -48,8 +48,8 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle) m_bmp_hide_incompatible_presets = new wxBitmap(wxString::FromUTF8(Slic3r::var("flag-green-icon.png").c_str()), wxBITMAP_TYPE_PNG); m_btn_hide_incompatible_presets = new wxBitmapButton(panel, wxID_ANY, *m_bmp_hide_incompatible_presets, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_btn_save_preset->SetToolTip(wxT("Save current ") + wxString(m_title));// (stTitle); - m_btn_delete_preset->SetToolTip(_T("Delete this preset")); + m_btn_save_preset->SetToolTip(_L("Save current ") + m_title); + m_btn_delete_preset->SetToolTip(_L("Delete this preset")); m_btn_delete_preset->Disable(); m_hsizer = new wxBoxSizer(wxHORIZONTAL); @@ -120,7 +120,7 @@ PageShp Tab::add_options_page(wxString title, std::string icon, bool is_extruder // Add a new icon to the icon list. const auto img_icon = new wxIcon(wxString::FromUTF8(Slic3r::var(icon).c_str()), wxBITMAP_TYPE_PNG); m_icons->Add(*img_icon); - icon_idx = ++m_icon_count; // $icon_idx = $self->{icon_count} + 1; $self->{icon_count} = $icon_idx; + icon_idx = ++m_icon_count; m_icon_index[icon] = icon_idx; } } @@ -299,7 +299,7 @@ void Tab::on_value_change(std::string opt_key, boost::any value) // to update the filament colors of the selection boxes, // to update the "dirty" flags of the selection boxes, // to uddate number of "filament" selection boxes when the number of extruders change. -void Tab::on_presets_changed(/*std::vector<std::string> reload_dependent_tabs*/) +void Tab::on_presets_changed() { if (m_event_presets_changed > 0) { wxCommandEvent event(m_event_presets_changed); @@ -321,12 +321,12 @@ void TabPrint::build() m_presets = &m_preset_bundle->prints; m_config = &m_presets->get_edited_preset().config; - auto page = add_options_page("Layers and perimeters", "layers.png"); - auto optgroup = page->new_optgroup("Layer height"); + auto page = add_options_page(_L("Layers and perimeters"), "layers.png"); + auto optgroup = page->new_optgroup(_L("Layer height")); optgroup->append_single_option_line("layer_height"); optgroup->append_single_option_line("first_layer_height"); - optgroup = page->new_optgroup("Vertical shells"); + optgroup = page->new_optgroup(_L("Vertical shells")); optgroup->append_single_option_line("perimeters"); optgroup->append_single_option_line("spiral_vase"); @@ -337,34 +337,34 @@ void TabPrint::build() }; optgroup->append_line(line); - optgroup = page->new_optgroup("Horizontal shells"); - line = { "Solid layers", "" }; + optgroup = page->new_optgroup(_L("Horizontal shells")); + line = { _L("Solid layers"), "" }; line.append_option(optgroup->get_option("top_solid_layers")); line.append_option(optgroup->get_option("bottom_solid_layers")); optgroup->append_line(line); - optgroup = page->new_optgroup("Quality (slower slicing)"); + optgroup = page->new_optgroup(_L("Quality (slower slicing)")); optgroup->append_single_option_line("extra_perimeters"); optgroup->append_single_option_line("ensure_vertical_shell_thickness"); optgroup->append_single_option_line("avoid_crossing_perimeters"); optgroup->append_single_option_line("thin_walls"); optgroup->append_single_option_line("overhangs"); - optgroup = page->new_optgroup("Advanced"); + optgroup = page->new_optgroup(_L("Advanced")); optgroup->append_single_option_line("seam_position"); optgroup->append_single_option_line("external_perimeters_first"); - page = add_options_page("Infill", "infill.png"); - optgroup = page->new_optgroup("Infill"); + page = add_options_page(_L("Infill"), "infill.png"); + optgroup = page->new_optgroup(_L("Infill")); optgroup->append_single_option_line("fill_density"); optgroup->append_single_option_line("fill_pattern"); optgroup->append_single_option_line("external_fill_pattern"); - optgroup = page->new_optgroup("Reducing printing time"); + optgroup = page->new_optgroup(_L("Reducing printing time")); optgroup->append_single_option_line("infill_every_layers"); optgroup->append_single_option_line("infill_only_where_needed"); - optgroup = page->new_optgroup("Advanced"); + optgroup = page->new_optgroup(_L("Advanced")); optgroup->append_single_option_line("solid_infill_every_layers"); optgroup->append_single_option_line("fill_angle"); optgroup->append_single_option_line("solid_infill_below_area"); @@ -372,27 +372,27 @@ void TabPrint::build() optgroup->append_single_option_line("only_retract_when_crossing_perimeters"); optgroup->append_single_option_line("infill_first"); - page = add_options_page("Skirt and brim", "box.png"); - optgroup = page->new_optgroup("Skirt"); + page = add_options_page(_L("Skirt and brim"), "box.png"); + optgroup = page->new_optgroup(_L("Skirt")); optgroup->append_single_option_line("skirts"); optgroup->append_single_option_line("skirt_distance"); optgroup->append_single_option_line("skirt_height"); optgroup->append_single_option_line("min_skirt_length"); - optgroup = page->new_optgroup("Brim"); + optgroup = page->new_optgroup(_L("Brim")); optgroup->append_single_option_line("brim_width"); - page = add_options_page("Support material", "building.png"); - optgroup = page->new_optgroup("Support material"); + page = add_options_page(_L("Support material"), "building.png"); + optgroup = page->new_optgroup(_L("Support material")); optgroup->append_single_option_line("support_material"); optgroup->append_single_option_line("support_material_threshold"); optgroup->append_single_option_line("support_material_enforce_layers"); - optgroup = page->new_optgroup("Raft"); + optgroup = page->new_optgroup(_L("Raft")); optgroup->append_single_option_line("raft_layers"); // # optgroup->append_single_option_line(get_option_("raft_contact_distance"); - optgroup = page->new_optgroup("Options for support material and raft"); + optgroup = page->new_optgroup(_L("Options for support material and raft")); optgroup->append_single_option_line("support_material_contact_distance"); optgroup->append_single_option_line("support_material_pattern"); optgroup->append_single_option_line("support_material_with_sheath"); @@ -406,8 +406,8 @@ void TabPrint::build() optgroup->append_single_option_line("dont_support_bridges"); optgroup->append_single_option_line("support_material_synchronize_layers"); - page = add_options_page("Speed", "time.png"); - optgroup = page->new_optgroup("Speed for print moves"); + page = add_options_page(_L("Speed"), "time.png"); + optgroup = page->new_optgroup(_L("Speed for print moves")); optgroup->append_single_option_line("perimeter_speed"); optgroup->append_single_option_line("small_perimeter_speed"); optgroup->append_single_option_line("external_perimeter_speed"); @@ -419,49 +419,49 @@ void TabPrint::build() optgroup->append_single_option_line("bridge_speed"); optgroup->append_single_option_line("gap_fill_speed"); - optgroup = page->new_optgroup("Speed for non-print moves"); + optgroup = page->new_optgroup(_L("Speed for non-print moves")); optgroup->append_single_option_line("travel_speed"); - optgroup = page->new_optgroup("Modifiers"); + optgroup = page->new_optgroup(_L("Modifiers")); optgroup->append_single_option_line("first_layer_speed"); - optgroup = page->new_optgroup("Acceleration control (advanced)"); + optgroup = page->new_optgroup(_L("Acceleration control (advanced)")); optgroup->append_single_option_line("perimeter_acceleration"); optgroup->append_single_option_line("infill_acceleration"); optgroup->append_single_option_line("bridge_acceleration"); optgroup->append_single_option_line("first_layer_acceleration"); optgroup->append_single_option_line("default_acceleration"); - optgroup = page->new_optgroup("Autospeed (advanced)"); + optgroup = page->new_optgroup(_L("Autospeed (advanced)")); optgroup->append_single_option_line("max_print_speed"); optgroup->append_single_option_line("max_volumetric_speed"); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_positive"); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_negative"); - page = add_options_page("Multiple Extruders", "funnel.png"); - optgroup = page->new_optgroup("Extruders"); + page = add_options_page(_L("Multiple Extruders"), "funnel.png"); + optgroup = page->new_optgroup(_L("Extruders")); optgroup->append_single_option_line("perimeter_extruder"); optgroup->append_single_option_line("infill_extruder"); optgroup->append_single_option_line("solid_infill_extruder"); optgroup->append_single_option_line("support_material_extruder"); optgroup->append_single_option_line("support_material_interface_extruder"); - optgroup = page->new_optgroup("Ooze prevention"); + optgroup = page->new_optgroup(_L("Ooze prevention")); optgroup->append_single_option_line("ooze_prevention"); optgroup->append_single_option_line("standby_temperature_delta"); - optgroup = page->new_optgroup("Wipe tower"); + optgroup = page->new_optgroup(_L("Wipe tower")); optgroup->append_single_option_line("wipe_tower"); optgroup->append_single_option_line("wipe_tower_x"); optgroup->append_single_option_line("wipe_tower_y"); optgroup->append_single_option_line("wipe_tower_width"); optgroup->append_single_option_line("wipe_tower_per_color_wipe"); - optgroup = page->new_optgroup("Advanced"); + optgroup = page->new_optgroup(_L("Advanced")); optgroup->append_single_option_line("interface_shells"); - page = add_options_page("Advanced", "wrench.png"); - optgroup = page->new_optgroup("Extrusion width", 180); + page = add_options_page(_L("Advanced"), "wrench.png"); + optgroup = page->new_optgroup(_L("Extrusion width"), 180); optgroup->append_single_option_line("extrusion_width"); optgroup->append_single_option_line("first_layer_extrusion_width"); optgroup->append_single_option_line("perimeter_extrusion_width"); @@ -471,21 +471,21 @@ void TabPrint::build() optgroup->append_single_option_line("top_infill_extrusion_width"); optgroup->append_single_option_line("support_material_extrusion_width"); - optgroup = page->new_optgroup("Overlap"); + optgroup = page->new_optgroup(_L("Overlap")); optgroup->append_single_option_line("infill_overlap"); - optgroup = page->new_optgroup("Flow"); + optgroup = page->new_optgroup(_L("Flow")); optgroup->append_single_option_line("bridge_flow_ratio"); - optgroup = page->new_optgroup("Other"); + optgroup = page->new_optgroup(_L("Other")); optgroup->append_single_option_line("clip_multipart_objects"); optgroup->append_single_option_line("elefant_foot_compensation"); optgroup->append_single_option_line("xy_size_compensation"); // # optgroup->append_single_option_line("threads"); optgroup->append_single_option_line("resolution"); - page = add_options_page("Output options", "page_white_go.png"); - optgroup = page->new_optgroup("Sequential printing"); + page = add_options_page(_L("Output options"), "page_white_go.png"); + optgroup = page->new_optgroup(_L("Sequential printing")); optgroup->append_single_option_line("complete_objects"); line = Line{ "Extruder clearance (mm)", "" }; Option option = optgroup->get_option("extruder_clearance_radius"); @@ -496,27 +496,27 @@ void TabPrint::build() line.append_option(option); optgroup->append_line(line); - optgroup = page->new_optgroup("Output file"); + optgroup = page->new_optgroup(_L("Output file")); optgroup->append_single_option_line("gcode_comments"); option = optgroup->get_option("output_filename_format"); option.opt.full_width = true; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("Post-processing scripts", 0); + optgroup = page->new_optgroup(_L("Post-processing scripts"), 0); option = optgroup->get_option("post_process"); option.opt.full_width = true; option.opt.height = 50; optgroup->append_single_option_line(option); - page = add_options_page("Notes", "note.png"); - optgroup = page->new_optgroup("Notes", 0); + page = add_options_page(_L("Notes"), "note.png"); + optgroup = page->new_optgroup(_L("Notes"), 0); option = optgroup->get_option("notes"); option.opt.full_width = true; option.opt.height = 250; optgroup->append_single_option_line(option); - page = add_options_page("Dependencies", "wrench.png"); - optgroup = page->new_optgroup("Profile dependencies"); + page = add_options_page(_L("Dependencies"), "wrench.png"); + optgroup = page->new_optgroup(_L("Profile dependencies")); line = Line{ "Compatible printers", "" }; line.widget = [this](wxWindow* parent){ return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn); @@ -791,27 +791,27 @@ void TabFilament::build() m_presets = &m_preset_bundle->filaments; m_config = &m_preset_bundle->filaments.get_edited_preset().config; - auto page = add_options_page("Filament", "spool.png"); - auto optgroup = page->new_optgroup("Filament"); + auto page = add_options_page(_L("Filament"), "spool.png"); + auto optgroup = page->new_optgroup(_L("Filament")); optgroup->append_single_option_line("filament_colour"); optgroup->append_single_option_line("filament_diameter"); optgroup->append_single_option_line("extrusion_multiplier"); optgroup->append_single_option_line("filament_density"); optgroup->append_single_option_line("filament_cost"); - optgroup = page->new_optgroup("Temperature (\u00B0C)"); // degree sign - Line line = { "Extruder", "" }; + optgroup = page->new_optgroup(_L("Temperature") +" (\u00B0C)"); // degree sign + Line line = { _L("Extruder"), "" }; line.append_option(optgroup->get_option("first_layer_temperature")); line.append_option(optgroup->get_option("temperature")); optgroup->append_line(line); - line = { "Bed", "" }; + line = { _L("Bed"), "" }; line.append_option(optgroup->get_option("first_layer_bed_temperature")); line.append_option(optgroup->get_option("bed_temperature")); optgroup->append_line(line); - page = add_options_page("Cooling", "hourglass.png"); - optgroup = page->new_optgroup("Enable"); + page = add_options_page(_L("Cooling"), "hourglass.png"); + optgroup = page->new_optgroup(_L("Enable")); optgroup->append_single_option_line("fan_always_on"); optgroup->append_single_option_line("cooling"); @@ -822,7 +822,7 @@ void TabFilament::build() }; optgroup->append_line(line); - optgroup = page->new_optgroup("Fan settings"); + optgroup = page->new_optgroup(_L("Fan settings")); line = {"Fan speed",""}; line.append_option(optgroup->get_option("min_fan_speed")); line.append_option(optgroup->get_option("max_fan_speed")); @@ -831,17 +831,17 @@ void TabFilament::build() optgroup->append_single_option_line("bridge_fan_speed"); optgroup->append_single_option_line("disable_fan_first_layers"); - optgroup = page->new_optgroup("Cooling thresholds", 250); + optgroup = page->new_optgroup(_L("Cooling thresholds"), 250); optgroup->append_single_option_line("fan_below_layer_time"); optgroup->append_single_option_line("slowdown_below_layer_time"); optgroup->append_single_option_line("min_print_speed"); - page = add_options_page("Advanced", "wrench.png"); - optgroup = page->new_optgroup("Filament properties"); + page = add_options_page(_L("Advanced"), "wrench.png"); + optgroup = page->new_optgroup(_L("Filament properties")); optgroup->append_single_option_line("filament_type"); optgroup->append_single_option_line("filament_soluble"); - optgroup = page->new_optgroup("Print speed override"); + optgroup = page->new_optgroup(_L("Print speed override")); optgroup->append_single_option_line("filament_max_volumetric_speed"); line = {"",""}; @@ -851,29 +851,29 @@ void TabFilament::build() }; optgroup->append_line(line); - page = add_options_page("Custom G-code", "cog.png"); - optgroup = page->new_optgroup("Start G-code", 0); + page = add_options_page(_L("Custom G-code"), "cog.png"); + optgroup = page->new_optgroup(_L("Start G-code"), 0); Option option = optgroup->get_option("start_filament_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("End G-code", 0); + optgroup = page->new_optgroup(_L("End G-code"), 0); option = optgroup->get_option("end_filament_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - page = add_options_page("Notes", "note.png"); - optgroup = page->new_optgroup("Notes", 0); + page = add_options_page(_L("Notes"), "note.png"); + optgroup = page->new_optgroup(_L("Notes"), 0); optgroup->label_width = 0; option = optgroup->get_option("filament_notes"); option.opt.full_width = true; option.opt.height = 250; optgroup->append_single_option_line(option); - page = add_options_page("Dependencies", "wrench.png"); - optgroup = page->new_optgroup("Profile dependencies"); + page = add_options_page(_L("Dependencies"), "wrench.png"); + optgroup = page->new_optgroup(_L("Profile dependencies")); line = {"Compatible printers", ""}; line.widget = [this](wxWindow* parent){ return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn); @@ -942,12 +942,12 @@ void TabPrinter::build() auto *nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(m_config->option("nozzle_diameter")); m_extruders_count = nozzle_diameter->values.size(); - auto page = add_options_page("General", "printer_empty.png"); - auto optgroup = page->new_optgroup("Size and coordinates"); + auto page = add_options_page(_L("General"), "printer_empty.png"); + auto optgroup = page->new_optgroup(_L("Size and coordinates")); - Line line = { "Bed shape", "" }; + Line line{ _L("Bed shape"), "" }; line.widget = [this](wxWindow* parent){ - auto btn = new wxButton(parent, wxID_ANY, "Set\u2026", wxDefaultPosition, wxDefaultSize, + auto btn = new wxButton(parent, wxID_ANY, _L("Set")+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); // btn->SetFont(Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("printer_empty.png").c_str()), wxBITMAP_TYPE_PNG)); @@ -968,7 +968,7 @@ void TabPrinter::build() optgroup->append_line(line); optgroup->append_single_option_line("z_offset"); - optgroup = page->new_optgroup("Capabilities"); + optgroup = page->new_optgroup(_L("Capabilities")); ConfigOptionDef def; def.type = coInt, def.default_value = new ConfigOptionInt(1); @@ -995,13 +995,13 @@ void TabPrinter::build() if (!m_no_controller) { - optgroup = page->new_optgroup("USB/Serial connection"); + optgroup = page->new_optgroup(_L("USB/Serial connection")); line = {"Serial port", ""}; Option serial_port = optgroup->get_option("serial_port"); serial_port.side_widget = ([this](wxWindow* parent){ auto btn = new wxBitmapButton(parent, wxID_ANY, wxBitmap(wxString::FromUTF8(Slic3r::var("arrow_rotate_clockwise.png").c_str()), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - btn->SetToolTip("Rescan serial ports"); + btn->SetToolTip(_L("Rescan serial ports")); auto sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(btn); @@ -1010,7 +1010,7 @@ void TabPrinter::build() }); auto serial_test = [this](wxWindow* parent){ auto btn = m_serial_test_btn = new wxButton(parent, wxID_ANY, - "Test", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); + _L("Test"), wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); // btn->SetFont($Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("wrench.png").c_str()), wxBITMAP_TYPE_PNG)); auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1023,10 +1023,10 @@ void TabPrinter::build() m_config->opt_int("serial_speed") ); if (res && sender->wait_connected()) { - show_info(parent, "Connection to printer works correctly.", "Success!"); + show_info(parent, _L("Connection to printer works correctly."), _L("Success!")); } else { - show_error(parent, "Connection failed."); + show_error(parent, _L("Connection failed.")); } }); return sizer; @@ -1038,10 +1038,10 @@ void TabPrinter::build() optgroup->append_line(line); } - optgroup = page->new_optgroup("OctoPrint upload"); + optgroup = page->new_optgroup(_L("OctoPrint upload")); // # append two buttons to the Host line auto octoprint_host_browse = [this] (wxWindow* parent) { - auto btn = new wxButton(parent, wxID_ANY, "Browse\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); + auto btn = new wxButton(parent, wxID_ANY, _L("Browse")+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT); // btn->SetFont($Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("zoom.png").c_str()), wxBITMAP_TYPE_PNG)); auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1053,7 +1053,7 @@ void TabPrinter::build() btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e){ if (m_event_button_browse > 0){ wxCommandEvent event(m_event_button_browse); - event.SetString("Button BROWSE was clicked!"); + event.SetString(_L("Button BROWSE was clicked!")); g_wxMainFrame->ProcessWindowEvent(event); } // // # look for devices @@ -1078,7 +1078,7 @@ void TabPrinter::build() }; auto octoprint_host_test = [this](wxWindow* parent) { - auto btn = m_octoprint_host_test_btn = new wxButton(parent, wxID_ANY, "Test", + auto btn = m_octoprint_host_test_btn = new wxButton(parent, wxID_ANY, _L("Test"), wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); // btn->SetFont($Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("wrench.png").c_str()), wxBITMAP_TYPE_PNG)); @@ -1088,7 +1088,7 @@ void TabPrinter::build() btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e) { if (m_event_button_test > 0){ wxCommandEvent event(m_event_button_test); - event.SetString("Button TEST was clicked!"); + event.SetString(_L("Button TEST was clicked!")); g_wxMainFrame->ProcessWindowEvent(event); } // my $ua = LWP::UserAgent->new; @@ -1116,54 +1116,54 @@ void TabPrinter::build() optgroup->append_line(host_line); optgroup->append_single_option_line("octoprint_apikey"); - optgroup = page->new_optgroup("Firmware"); + optgroup = page->new_optgroup(_L("Firmware")); optgroup->append_single_option_line("gcode_flavor"); - optgroup = page->new_optgroup("Advanced"); + optgroup = page->new_optgroup(_L("Advanced")); optgroup->append_single_option_line("use_relative_e_distances"); optgroup->append_single_option_line("use_firmware_retraction"); optgroup->append_single_option_line("use_volumetric_e"); optgroup->append_single_option_line("variable_layer_height"); - page = add_options_page("Custom G-code", "cog.png"); - optgroup = page->new_optgroup("Start G-code", 0); + page = add_options_page(_L("Custom G-code"), "cog.png"); + optgroup = page->new_optgroup(_L("Start G-code"), 0); option = optgroup->get_option("start_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("End G-code", 0); + optgroup = page->new_optgroup(_L("End G-code"), 0); option = optgroup->get_option("end_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("Before layer change G-code", 0); + optgroup = page->new_optgroup(_L("Before layer change G-code"), 0); option = optgroup->get_option("before_layer_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("After layer change G-code", 0); + optgroup = page->new_optgroup(_L("After layer change G-code"), 0); option = optgroup->get_option("layer_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("Tool change G-code", 0); + optgroup = page->new_optgroup(_L("Tool change G-code"), 0); option = optgroup->get_option("toolchange_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - optgroup = page->new_optgroup("Between objects G-code (for sequential printing)", 0); + optgroup = page->new_optgroup(_L("Between objects G-code (for sequential printing)"), 0); option = optgroup->get_option("between_objects_gcode"); option.opt.full_width = true; option.opt.height = 150; optgroup->append_single_option_line(option); - page = add_options_page("Notes", "note.png"); - optgroup = page->new_optgroup("Notes", 0); + page = add_options_page(_L("Notes"), "note.png"); + optgroup = page->new_optgroup(_L("Notes"), 0); option = optgroup->get_option("printer_notes"); option.opt.full_width = true; option.opt.height = 250; @@ -1192,24 +1192,24 @@ void TabPrinter::extruders_count_changed(size_t extruders_count){ void TabPrinter::build_extruder_pages(){ for (auto extruder_idx = m_extruder_pages.size()/*0*/; extruder_idx < m_extruders_count; ++extruder_idx){ //# build page - auto page = add_options_page("Extruder " + wxString::Format(_T("%i"), extruder_idx + 1), "funnel.png", true); + auto page = add_options_page(_L("Extruder ") + wxString::Format(_T("%i"), extruder_idx + 1), "funnel.png", true); m_extruder_pages.push_back(page); - auto optgroup = page->new_optgroup("Size"); + auto optgroup = page->new_optgroup(_L("Size")); optgroup->append_single_option_line("nozzle_diameter", extruder_idx); - optgroup = page->new_optgroup("Layer height limits"); + optgroup = page->new_optgroup(_L("Layer height limits")); optgroup->append_single_option_line("min_layer_height", extruder_idx); optgroup->append_single_option_line("max_layer_height", extruder_idx); - optgroup = page->new_optgroup("Position (for multi-extruder printers)"); + optgroup = page->new_optgroup(_L("Position (for multi-extruder printers)")); optgroup->append_single_option_line("extruder_offset", extruder_idx); - optgroup = page->new_optgroup("Retraction"); + optgroup = page->new_optgroup(_L("Retraction")); optgroup->append_single_option_line("retract_length", extruder_idx); optgroup->append_single_option_line("retract_lift", extruder_idx); - Line line = { "Only lift Z", "" }; + Line line = { _L("Only lift Z"), "" }; line.append_option(optgroup->get_option("retract_lift_above", extruder_idx)); line.append_option(optgroup->get_option("retract_lift_below", extruder_idx)); optgroup->append_line(line); @@ -1222,11 +1222,11 @@ void TabPrinter::build_extruder_pages(){ optgroup->append_single_option_line("wipe", extruder_idx); optgroup->append_single_option_line("retract_before_wipe", extruder_idx); - optgroup = page->new_optgroup("Retraction when tool is disabled (advanced settings for multi-extruder setups)"); + optgroup = page->new_optgroup(_L("Retraction when tool is disabled (advanced settings for multi-extruder setups)")); optgroup->append_single_option_line("retract_length_toolchange", extruder_idx); optgroup->append_single_option_line("retract_restart_extra_toolchange", extruder_idx); - optgroup = page->new_optgroup("Preview"); + optgroup = page->new_optgroup(_L("Preview")); optgroup->append_single_option_line("extruder_colour", extruder_idx); } @@ -1317,9 +1317,9 @@ void TabPrinter::update(){ if (use_firmware_retraction && wipe) { auto dialog = new wxMessageDialog(parent(), - "The Wipe option is not available when using the Firmware Retraction mode.\n" - "\nShall I disable it in order to enable Firmware Retraction?", - "Firmware Retraction", wxICON_WARNING | wxYES | wxNO); + _L("The Wipe option is not available when using the Firmware Retraction mode.\n" + "\nShall I disable it in order to enable Firmware Retraction?"), + _L("Firmware Retraction"), wxICON_WARNING | wxYES | wxNO); DynamicPrintConfig new_conf = *m_config; if (dialog->ShowModal() == wxID_YES) { @@ -1562,7 +1562,7 @@ void Tab::save_preset(std::string name /*= ""*/) return; name = dlg->get_name(); if (name == ""){ - show_error(this, "The supplied name is empty. It can't be saved."); + show_error(this, _L("The supplied name is empty. It can't be saved.")); return; } } @@ -1573,7 +1573,7 @@ void Tab::save_preset(std::string name /*= ""*/) } catch (const std::exception &e) { - show_error(this, "Something is wrong. It can't be saved."); + show_error(this, _L("Something is wrong. It can't be saved.")); return; } @@ -1590,10 +1590,10 @@ void Tab::delete_preset() { auto current_preset = m_presets->get_selected_preset(); // Don't let the user delete the ' - default - ' configuration. - std::string action = current_preset.is_external ? "remove" : "delete"; - std::string msg = "Are you sure you want to " + action + " the selected preset?"; - action = current_preset.is_external ? "Remove" : "Delete"; - std::string title = action + " Preset"; + wxString action = current_preset.is_external ? _L("remove") : _L("delete"); + wxString msg = _L("Are you sure you want to ") + action + _L(" the selected preset?"); + action = current_preset.is_external ? _L("Remove") : _L("Delete"); + wxString title = action + _L(" Preset"); if (current_preset.is_default || wxID_YES != /*new*/ (wxMessageDialog(parent(), msg, title, wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION)).ShowModal()) return; @@ -1645,8 +1645,8 @@ void Tab::update_ui_from_settings() // Return a callback to create a Tab widget to mark the preferences as compatible / incompatible to the current printer. wxSizer* Tab::compatible_printers_widget(wxWindow* parent, wxCheckBox** checkbox, wxButton** btn) { - *checkbox = new wxCheckBox(parent, wxID_ANY, "All"); - *btn = new wxButton(parent, wxID_ANY, "Set\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); + *checkbox = new wxCheckBox(parent, wxID_ANY, _L("All")); + *btn = new wxButton(parent, wxID_ANY, _L("Set")+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); (*btn)->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("printer_empty.png").c_str()), wxBITMAP_TYPE_PNG)); @@ -1676,8 +1676,8 @@ wxSizer* Tab::compatible_printers_widget(wxWindow* parent, wxCheckBox** checkbox } auto dlg = new wxMultiChoiceDialog(parent, - "Select the printers this profile is compatible with.", - "Compatible printers", presets); + _L("Select the printers this profile is compatible with."), + _L("Compatible printers"), presets); // # Collect and set indices of printers marked as compatible. wxArrayInt selections; auto *compatible_printers = dynamic_cast<const ConfigOptionStrings*>(m_config->option("compatible_printers")); @@ -1760,7 +1760,8 @@ ConfigOptionsGroupShp Page::new_optgroup(wxString title, int noncommon_label_wid void SavePresetWindow::build(wxString title, std::string default_name, std::vector<std::string> &values) { - auto text = new wxStaticText(this, wxID_ANY, "Save " + title + " as:", wxDefaultPosition, wxDefaultSize); + auto text = new wxStaticText(this, wxID_ANY, _L("Save ") + title + _L(" as:"), + wxDefaultPosition, wxDefaultSize); m_combo = new wxComboBox(this, wxID_ANY, wxString::FromUTF8(default_name.c_str()), wxDefaultPosition, wxDefaultSize, 0, 0, wxTE_PROCESS_ENTER); for (auto value : values) @@ -1793,10 +1794,10 @@ void SavePresetWindow::accept() } } if (is_unusable_symbol) { - show_error(this, "The supplied name is not valid; the following characters are not allowed: <>:/\\|?*\""); + show_error(this, _L("The supplied name is not valid; the following characters are not allowed:")+" <>:/\\|?*\""); } else if (m_chosen_name.compare("- default -") == 0) { - show_error(this, "The supplied name is not available."); + show_error(this, _L("The supplied name is not available.")); } else { EndModal(wxID_OK); diff --git a/xs/src/slic3r/GUI/Tab.hpp b/xs/src/slic3r/GUI/Tab.hpp index 03cb0ad50..2b030f4da 100644 --- a/xs/src/slic3r/GUI/Tab.hpp +++ b/xs/src/slic3r/GUI/Tab.hpp @@ -175,7 +175,7 @@ class TabPrint : public Tab public: TabPrint() {} TabPrint(wxNotebook* parent, bool no_controller) : - Tab(parent, "Print Settings", "print", no_controller) {} + Tab(parent, _L("Print Settings"), "print", no_controller) {} ~TabPrint(){} ogStaticText* m_recommended_thin_wall_thickness_description_line; @@ -195,7 +195,7 @@ class TabFilament : public Tab public: TabFilament() {} TabFilament(wxNotebook* parent, bool no_controller) : - Tab(parent, "Filament Settings", "filament", no_controller) {} + Tab(parent, _L("Filament Settings"), "filament", no_controller) {} ~TabFilament(){} void build() override; @@ -221,7 +221,7 @@ public: TabPrinter() {} TabPrinter(wxNotebook* parent, bool no_controller, bool is_disabled_btn_browse, bool is_user_agent) : - Tab(parent, "Printer Settings", "printer", no_controller), + Tab(parent, _L("Printer Settings"), "printer", no_controller), m_is_disabled_button_browse(is_disabled_btn_browse), m_is_user_agent(is_user_agent) {} ~TabPrinter(){} @@ -241,7 +241,7 @@ public: class SavePresetWindow :public wxDialog { public: - SavePresetWindow(wxWindow* parent ) :wxDialog(parent, wxID_ANY, "Save preset"){} + SavePresetWindow(wxWindow* parent) :wxDialog(parent, wxID_ANY, _L("Save preset")){} ~SavePresetWindow(){} std::string m_chosen_name;