diff --git a/src/libslic3r/ExtrusionRole.cpp b/src/libslic3r/ExtrusionRole.cpp index 1e91df2044..01ec73ed14 100644 --- a/src/libslic3r/ExtrusionRole.cpp +++ b/src/libslic3r/ExtrusionRole.cpp @@ -4,7 +4,6 @@ #include #include -#define L(s) (s) namespace Slic3r { diff --git a/src/libslic3r/Flow.cpp b/src/libslic3r/Flow.cpp index 9f4730261e..1084e6f102 100644 --- a/src/libslic3r/Flow.cpp +++ b/src/libslic3r/Flow.cpp @@ -6,9 +6,6 @@ #include -// Mark string for localization and translate. -#define L(s) Slic3r::I18N::translate(s) - namespace Slic3r { FlowErrorNegativeSpacing::FlowErrorNegativeSpacing() : @@ -58,7 +55,7 @@ static inline FlowRole opt_key_to_flow_role(const std::string &opt_key) static inline void throw_on_missing_variable(const std::string &opt_key, const char *dependent_opt_key) { - throw FlowErrorMissingVariable((boost::format(L("Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible.")) % opt_key % dependent_opt_key).str()); + throw FlowErrorMissingVariable((boost::format(_u8L("Cannot calculate extrusion width for %1%: Variable \"%2%\" not accessible.")) % opt_key % dependent_opt_key).str()); } // Used to provide hints to the user on default extrusion width values, and to provide reasonable values to the PlaceholderParser. diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 34594240f5..5a608cb054 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -296,11 +296,6 @@ bool is_valid_object_type(const std::string& type) namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) - // Base class with error messages management class _3MF_Base { @@ -1875,9 +1870,9 @@ namespace Slic3r { if (m_curr_metadata_name == SLIC3RPE_3MF_VERSION) { m_version = (unsigned int)atoi(m_curr_characters.c_str()); if (m_check_version && (m_version > VERSION_3MF_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.")); + // std::string msg = _u8L("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()); - 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(_u8L("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); } } else if (m_curr_metadata_name == "Application") { @@ -1888,15 +1883,15 @@ namespace Slic3r { } else if (m_curr_metadata_name == SLIC3RPE_FDM_SUPPORTS_PAINTING_VERSION) { m_fdm_supports_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_fdm_supports_painting_version, FDM_SUPPORTS_PAINTING_VERSION, - _(L("The selected 3MF contains FDM supports painted object using a newer version of PrusaSlicer and is not compatible."))); + _u8L("The selected 3MF contains FDM supports painted object using a newer version of PrusaSlicer and is not compatible.")); } else if (m_curr_metadata_name == SLIC3RPE_SEAM_PAINTING_VERSION) { m_seam_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_seam_painting_version, SEAM_PAINTING_VERSION, - _(L("The selected 3MF contains seam painted object using a newer version of PrusaSlicer and is not compatible."))); + _u8L("The selected 3MF contains seam painted object using a newer version of PrusaSlicer and is not compatible.")); } else if (m_curr_metadata_name == SLIC3RPE_MM_PAINTING_VERSION) { m_mm_painting_version = (unsigned int) atoi(m_curr_characters.c_str()); check_painting_version(m_mm_painting_version, MM_PAINTING_VERSION, - _(L("The selected 3MF contains multi-material painted object using a newer version of PrusaSlicer and is not compatible."))); + _u8L("The selected 3MF contains multi-material painted object using a newer version of PrusaSlicer and is not compatible.")); } return true; diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index a38960324c..c72855c885 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -57,10 +57,6 @@ const char* SLIC3R_CONFIG_TYPE = "slic3rpe_config"; namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) struct AMFParserContext { @@ -997,7 +993,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.")); // 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(_u8L("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); } diff --git a/src/libslic3r/Format/SLAArchiveReader.cpp b/src/libslic3r/Format/SLAArchiveReader.cpp index 09c1570590..f80b9a2ba6 100644 --- a/src/libslic3r/Format/SLAArchiveReader.cpp +++ b/src/libslic3r/Format/SLAArchiveReader.cpp @@ -7,7 +7,6 @@ #include #include -constexpr const char * L(const char * str) { return str; } #include #include diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 65549d2e8b..2fca25c96f 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -71,11 +71,6 @@ using namespace std::literals::string_view_literals; namespace Slic3r { - //! macro used to mark string used at localization, - //! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) - // Only add a newline in case the current G-code does not end with a newline. static inline void check_add_eol(std::string& gcode) { @@ -487,8 +482,8 @@ GCode::ObjectsLayerToPrint GCode::collect_layers_to_print(const PrintObject& obj // first layer may result in skirt/brim in the air and maybe other issues. if (layers_to_print.size() == 1u) { if (!has_extrusions) - throw Slic3r::SlicingError(_(L("There is an object with no extrusions in the first layer.")) + "\n" + - _(L("Object name")) + ": " + object.model_object()->name); + throw Slic3r::SlicingError(_u8L("There is an object with no extrusions in the first layer.") + "\n" + + _u8L("Object name") + ": " + object.model_object()->name); } // In case there are extrusions on this layer, check there is a layer to lay it on. @@ -518,14 +513,14 @@ GCode::ObjectsLayerToPrint GCode::collect_layers_to_print(const PrintObject& obj std::string warning; size_t i = 0; for (i = 0; i < std::min(warning_ranges.size(), size_t(3)); ++i) - warning += Slic3r::format(_(L("Empty layer between %1% and %2%.")), + warning += Slic3r::format(_u8L("Empty layer between %1% and %2%."), warning_ranges[i].first, warning_ranges[i].second) + "\n"; if (i < warning_ranges.size()) - warning += _(L("(Some lines not shown)")) + "\n"; + warning += _u8L("(Some lines not shown)") + "\n"; warning += "\n"; - warning += Slic3r::format(_(L("Object name: %1%")), object.model_object()->name) + "\n\n" - + _(L("Make sure the object is printable. This is usually caused by negligibly small extrusions or by a faulty model. " - "Try to repair the model or change its orientation on the bed.")); + warning += Slic3r::format(_u8L("Object name: %1%"), object.model_object()->name) + "\n\n" + + _u8L("Make sure the object is printable. This is usually caused by negligibly small extrusions or by a faulty model. " + "Try to repair the model or change its orientation on the bed."); const_cast(object.print())->active_step_add_warning( PrintStateBase::WarningLevel::CRITICAL, warning); @@ -655,25 +650,25 @@ namespace DoExport { }; const GCodeConfig& config = print.config(); - check(_(L("Start G-code")), config.start_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("End G-code")), config.end_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Before layer change G-code")), config.before_layer_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("After layer change G-code")), config.layer_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Tool change G-code")), config.toolchange_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Between objects G-code (for sequential printing)")), config.between_objects_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Color Change G-code")), config.color_change_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Pause Print G-code")), config.pause_print_gcode.value); - if (ret.size() < MAX_TAGS_COUNT) check(_(L("Template Custom G-code")), config.template_custom_gcode.value); + check(_u8L("Start G-code"), config.start_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("End G-code"), config.end_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Before layer change G-code"), config.before_layer_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("After layer change G-code"), config.layer_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Tool change G-code"), config.toolchange_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Between objects G-code (for sequential printing)"), config.between_objects_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Color Change G-code"), config.color_change_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Pause Print G-code"), config.pause_print_gcode.value); + if (ret.size() < MAX_TAGS_COUNT) check(_u8L("Template Custom G-code"), config.template_custom_gcode.value); if (ret.size() < MAX_TAGS_COUNT) { for (const std::string& value : config.start_filament_gcode.values) { - check(_(L("Filament Start G-code")), value); + check(_u8L("Filament Start G-code"), value); if (ret.size() == MAX_TAGS_COUNT) break; } } if (ret.size() < MAX_TAGS_COUNT) { for (const std::string& value : config.end_filament_gcode.values) { - check(_(L("Filament End G-code")), value); + check(_u8L("Filament End G-code"), value); if (ret.size() == MAX_TAGS_COUNT) break; } @@ -681,7 +676,7 @@ namespace DoExport { if (ret.size() < MAX_TAGS_COUNT) { const CustomGCode::Info& custom_gcode_per_print_z = print.model().custom_gcode_per_print_z; for (const auto& gcode : custom_gcode_per_print_z.gcodes) { - check(_(L("Custom G-code")), gcode.extra); + check(_u8L("Custom G-code"), gcode.extra); if (ret.size() == MAX_TAGS_COUNT) break; } @@ -714,9 +709,9 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu reports += source + ": \"" + keyword + "\"\n"; } print->active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL, - _(L("In the custom G-code were found reserved keywords:")) + "\n" + + _u8L("In the custom G-code were found reserved keywords:") + "\n" + reports + - _(L("This may cause problems in g-code visualization and printing time estimation."))); + _u8L("This may cause problems in g-code visualization and printing time estimation.")); } BOOST_LOG_TRIVIAL(info) << "Exporting G-code..." << log_memory_info(); @@ -1111,7 +1106,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } if (initial_extruder_id == static_cast(-1)) // No object to print was found, cancel the G-code export. - throw Slic3r::SlicingError(_(L("No extrusions were generated for objects."))); + throw Slic3r::SlicingError(_u8L("No extrusions were generated for objects.")); // We don't allow switching of extruders per layer by Model::custom_gcode_per_print_z in sequential mode. // Use the extruder IDs collected from Regions. this->set_extruders(print.extruders()); @@ -1122,7 +1117,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato tool_ordering.assign_custom_gcodes(print); if (tool_ordering.all_extruders().empty()) // No object to print was found, cancel the G-code export. - throw Slic3r::SlicingError(_(L("No extrusions were generated for objects."))); + throw Slic3r::SlicingError(_u8L("No extrusions were generated for objects.")); has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); initial_extruder_id = (has_wipe_tower && ! print.config().single_extruder_multi_material_priming) ? // The priming towers will be skipped. @@ -1316,8 +1311,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // (See https://github.com/prusa3d/PrusaSlicer/issues/5441.) if (overlap) { print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, - _(L("Your print is very close to the priming regions. " - "Make sure there is no collision."))); + _u8L("Your print is very close to the priming regions. " + "Make sure there is no collision.")); } else { // Just continue printing, no action necessary. } diff --git a/src/libslic3r/GCode/PostProcessor.cpp b/src/libslic3r/GCode/PostProcessor.cpp index de1807dbb8..c434aa5603 100644 --- a/src/libslic3r/GCode/PostProcessor.cpp +++ b/src/libslic3r/GCode/PostProcessor.cpp @@ -185,11 +185,6 @@ static int run_script(const std::string &script, const std::string &gcode, std:: namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) - // Run post processing script / scripts if defined. // Returns true if a post-processing script was executed. // Returns false if no post-processing script was defined. @@ -285,10 +280,10 @@ bool run_post_process_scripts(std::string &src_path, bool make_copy, const std:: throw Slic3r::RuntimeError(msg); } if (! boost::filesystem::exists(gcode_file)) { - const std::string msg = (boost::format(_(L( + const std::string msg = (boost::format(_u8L( "Post-processing script %1% failed.\n\n" "The post-processing script is expected to change the G-code file %2% in place, but the G-code file was deleted and likely saved under a new name.\n" - "Please adjust the post-processing script to change the G-code in place and consult the manual on how to optionally rename the post-processed G-code file.\n"))) + "Please adjust the post-processing script to change the G-code in place and consult the manual on how to optionally rename the post-processed G-code file.\n")) % script % path).str(); BOOST_LOG_TRIVIAL(error) << msg; throw Slic3r::RuntimeError(msg); diff --git a/src/libslic3r/I18N.hpp b/src/libslic3r/I18N.hpp index db4fd22dfe..3bf286b192 100644 --- a/src/libslic3r/I18N.hpp +++ b/src/libslic3r/I18N.hpp @@ -15,4 +15,11 @@ namespace I18N { } // namespace Slic3r +namespace { + const char* L(const char* s) { return s; } + std::string _u8L(const char* s) { return Slic3r::I18N::translate(s); } + std::string _utf8(const char* s) { return Slic3r::I18N::translate(s); } + std::string _utf8(const std::string& s) { return Slic3r::I18N::translate(s); } +} + #endif /* slic3r_I18N_hpp_ */ diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b364271752..3598d36aed 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -10,15 +10,6 @@ #include #endif /* _MSC_VER */ -// instead of #include "slic3r/GUI/I18N.hpp" : -#ifndef L -// !!! If you needed to translate some string, -// !!! please use _L(string) -// !!! _() - is a standard wxWidgets macro to translate -// !!! L() is used only for marking localizable string -// !!! It will be used in "xgettext" to create a Locating Message Catalog. -#define L(s) s -#endif /* L */ #include #include diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index f2143857ae..0dd20ea937 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -27,8 +27,6 @@ #include #include -// Mark string for localization and translate. -#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { @@ -474,20 +472,20 @@ std::string Print::validate(std::string* warning) const std::vector extruders = this->extruders(); if (m_objects.empty()) - return L("All objects are outside of the print volume."); + return _u8L("All objects are outside of the print volume."); if (extruders.empty()) - return L("The supplied settings will cause an empty print."); + return _u8L("The supplied settings will cause an empty print."); if (m_config.complete_objects) { if (! sequential_print_horizontal_clearance_valid(*this)) - return L("Some objects are too close; your extruder will collide with them."); + return _u8L("Some objects are too close; your extruder will collide with them."); if (! sequential_print_vertical_clearance_valid(*this)) - return L("Some objects are too tall and cannot be printed without extruder collisions."); + return _u8L("Some objects are too tall and cannot be printed without extruder collisions."); } if (m_config.avoid_crossing_perimeters && m_config.avoid_crossing_curled_overhangs) { - return L("Avoid crossing perimeters option and avoid crossing curled overhangs option cannot be both enabled together."); + return _u8L("Avoid crossing perimeters option and avoid crossing curled overhangs option cannot be both enabled together."); } if (m_config.spiral_vase) { @@ -496,11 +494,11 @@ std::string Print::validate(std::string* warning) const total_copies_count += object->instances().size(); // #4043 if (total_copies_count > 1 && ! m_config.complete_objects.value) - return L("Only a single object may be printed at a time in Spiral Vase mode. " + return _u8L("Only a single object may be printed at a time in Spiral Vase mode. " "Either remove all but the last object, or enable sequential mode by \"complete_objects\"."); assert(m_objects.size() == 1); if (m_objects.front()->all_regions().size() > 1) - return L("The Spiral Vase option can only be used when printing single material objects."); + return _u8L("The Spiral Vase option can only be used when printing single material objects."); } // Cache of layer height profiles for checking: @@ -524,7 +522,7 @@ std::string Print::validate(std::string* warning) const //FIXME It is quite expensive to generate object layers just to get the print height! if (auto layers = generate_object_layers(print_object.slicing_parameters(), layer_height_profile(print_object_idx)); ! layers.empty() && layers.back() > this->config().max_print_height + EPSILON) { - return L("The print is taller than the maximum allowed height. You might want to reduce the size of your model" + return _u8L("The print is taller than the maximum allowed height. You might want to reduce the size of your model" " or change current print settings and retry."); } } @@ -541,7 +539,7 @@ std::string Print::validate(std::string* warning) const print_object.model_object()->has_custom_layering()) { if (const std::vector &layers = layer_height_profile(print_object_idx); ! layers.empty()) if (! check_object_layers_fixed(print_object.slicing_parameters(), layers)) - return L("Variable layer height is not supported with Organic supports."); + return _u8L("Variable layer height is not supported with Organic supports."); } if (this->has_wipe_tower() && ! m_objects.empty()) { @@ -554,21 +552,21 @@ std::string Print::validate(std::string* warning) const double filament_diam = m_config.filament_diameter.get_at(extruder_idx); if (nozzle_diam - EPSILON > first_nozzle_diam || nozzle_diam + EPSILON < first_nozzle_diam || std::abs((filament_diam-first_filament_diam)/first_filament_diam) > 0.1) - return L("The wipe tower is only supported if all extruders have the same nozzle diameter " + return _u8L("The wipe tower is only supported if all extruders have the same nozzle diameter " "and use filaments of the same diameter."); } if (m_config.gcode_flavor != gcfRepRapSprinter && m_config.gcode_flavor != gcfRepRapFirmware && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlinLegacy && m_config.gcode_flavor != gcfMarlinFirmware) - return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."); + return _u8L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors."); if (! m_config.use_relative_e_distances) - return L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."); + return _u8L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."); if (m_config.ooze_prevention && m_config.single_extruder_multi_material) - return L("Ooze prevention is only supported with the wipe tower when 'single_extruder_multi_material' is off."); + return _u8L("Ooze prevention is only supported with the wipe tower when 'single_extruder_multi_material' is off."); if (m_config.use_volumetric_e) - return L("The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."); + return _u8L("The Wipe Tower currently does not support volumetric E (use_volumetric_e=0)."); if (m_config.complete_objects && extruders.size() > 1) - return L("The Wipe Tower is currently not supported for multimaterial sequential prints."); + return _u8L("The Wipe Tower is currently not supported for multimaterial sequential prints."); if (m_objects.size() > 1) { const SlicingParameters &slicing_params0 = m_objects.front()->slicing_parameters(); @@ -578,14 +576,14 @@ std::string Print::validate(std::string* warning) const const SlicingParameters &slicing_params = object->slicing_parameters(); if (std::abs(slicing_params.first_print_layer_height - slicing_params0.first_print_layer_height) > EPSILON || std::abs(slicing_params.layer_height - slicing_params0.layer_height ) > EPSILON) - return L("The Wipe Tower is only supported for multiple objects if they have equal layer heights"); + return _u8L("The Wipe Tower is only supported for multiple objects if they have equal layer heights"); if (slicing_params.raft_layers() != slicing_params0.raft_layers()) - return L("The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"); + return _u8L("The Wipe Tower is only supported for multiple objects if they are printed over an equal number of raft layers"); if (slicing_params0.gap_object_support != slicing_params.gap_object_support || slicing_params0.gap_support_object != slicing_params.gap_support_object) - return L("The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"); + return _u8L("The Wipe Tower is only supported for multiple objects if they are printed with the same support_material_contact_distance"); if (! equal_layering(slicing_params, slicing_params0)) - return L("The Wipe Tower is only supported for multiple objects if they are sliced equally."); + return _u8L("The Wipe Tower is only supported for multiple objects if they are sliced equally."); if (has_custom_layering) { auto &lh = layer_height_profile(i); auto &lh_tallest = layer_height_profile(tallest_object_idx); @@ -610,7 +608,7 @@ std::string Print::validate(std::string* warning) const if (i%2 == 0 && layer_height_profiles[tallest_object_idx][i] > layer_height_profiles[idx_object][layer_height_profiles[idx_object].size() - 2 ]) break; if (std::abs(layer_height_profiles[idx_object][i] - layer_height_profiles[tallest_object_idx][i]) > eps) - return L("The Wipe tower is only supported if all objects have the same variable layer height"); + return _u8L("The Wipe tower is only supported if all objects have the same variable layer height"); ++i; } } @@ -634,7 +632,7 @@ std::string Print::validate(std::string* warning) const unsigned int total_extruders_count = m_config.nozzle_diameter.size(); for (const auto& extruder_idx : extruders) if ( extruder_idx >= total_extruders_count ) - return L("One or more object were assigned an extruder that the printer does not have."); + return _u8L("One or more object were assigned an extruder that the printer does not have."); #endif auto validate_extrusion_width = [/*min_nozzle_diameter,*/ max_nozzle_diameter](const ConfigBase &config, const char *opt_key, double layer_height, std::string &err_msg) -> bool { @@ -647,10 +645,10 @@ std::string Print::validate(std::string* warning) const if (extrusion_width_min == 0) { // Default "auto-generated" extrusion width is always valid. } else if (extrusion_width_min <= layer_height) { - err_msg = (boost::format(L("%1%=%2% mm is too low to be printable at a layer height %3% mm")) % opt_key % extrusion_width_min % layer_height).str(); + err_msg = (boost::format(_u8L("%1%=%2% mm is too low to be printable at a layer height %3% mm")) % opt_key % extrusion_width_min % layer_height).str(); return false; } else if (extrusion_width_max >= max_nozzle_diameter * 3.) { - err_msg = (boost::format(L("Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm")) % opt_key % extrusion_width_max % max_nozzle_diameter).str(); + err_msg = (boost::format(_u8L("Excessive %1%=%2% mm to be printable with a nozzle diameter %3% mm")) % opt_key % extrusion_width_max % max_nozzle_diameter).str(); return false; } return true; @@ -661,7 +659,7 @@ std::string Print::validate(std::string* warning) const // The object has some form of support and either support_material_extruder or support_material_interface_extruder // will be printed with the current tool without a forced tool change. Play safe, assert that all object nozzles // are of the same diameter. - return L("Printing with multiple extruders of differing nozzle diameters. " + return _u8L("Printing with multiple extruders of differing nozzle diameters. " "If support is to be printed with the current extruder (support_material_extruder == 0 or support_material_interface_extruder == 0), " "all nozzles have to be of the same diameter."); } @@ -669,11 +667,11 @@ std::string Print::validate(std::string* warning) const if (object->config().support_material_contact_distance == 0) { // Soluble interface if (! object->config().support_material_synchronize_layers) - return L("For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."); + return _u8L("For the Wipe Tower to work with the soluble supports, the support layers need to be synchronized with the object layers."); } else { // Non-soluble interface if (object->config().support_material_extruder != 0 || object->config().support_material_interface_extruder != 0) - return L("The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. " + return _u8L("The Wipe Tower currently supports the non-soluble supports only if they are printed with the current extruder without triggering a tool change. " "(both support_material_extruder and support_material_interface_extruder need to be set to 0)."); } } @@ -709,12 +707,12 @@ std::string Print::validate(std::string* warning) const first_layer_min_nozzle_diameter = min_nozzle_diameter; } if (first_layer_height > first_layer_min_nozzle_diameter) - return L("First layer height can't be greater than nozzle diameter"); + return _u8L("First layer height can't be greater than nozzle diameter"); // validate layer_height double layer_height = object->config().layer_height.value; if (layer_height > min_nozzle_diameter) - return L("Layer height can't be greater than nozzle diameter"); + return _u8L("Layer height can't be greater than nozzle diameter"); // Validate extrusion widths. std::string err_msg; @@ -735,11 +733,11 @@ std::string Print::validate(std::string* warning) const // See GH issues #6336 #5073 if ((m_config.gcode_flavor == gcfMarlinLegacy || m_config.gcode_flavor == gcfMarlinFirmware) && ! before_layer_gcode_resets_extruder && ! layer_gcode_resets_extruder) - return L("Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode."); + return _u8L("Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode."); } else if (before_layer_gcode_resets_extruder) - return L("\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder addressing."); + return _u8L("\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder addressing."); else if (layer_gcode_resets_extruder) - return L("\"G92 E0\" was found in layer_gcode, which is incompatible with absolute extruder addressing."); + return _u8L("\"G92 E0\" was found in layer_gcode, which is incompatible with absolute extruder addressing."); } return std::string(); @@ -881,7 +879,7 @@ void Print::process() BOOST_LOG_TRIVIAL(info) << "Starting the slicing process." << log_memory_info(); for (PrintObject *obj : m_objects) obj->make_perimeters(); - this->set_status(70, L("Infilling layers")); + this->set_status(70, _u8L("Infilling layers")); for (PrintObject *obj : m_objects) obj->infill(); for (PrintObject *obj : m_objects) @@ -898,7 +896,7 @@ void Print::process() m_wipe_tower_data.clear(); m_tool_ordering.clear(); if (this->has_wipe_tower()) { - //this->set_status(95, L("Generating wipe tower")); + //this->set_status(95, _u8L("Generating wipe tower")); this->_make_wipe_tower(); } else if (! this->config().complete_objects.value) { // Initialize the tool ordering, so it could be used by the G-code preview slider for planning tool changes and filament switches. @@ -909,7 +907,7 @@ void Print::process() this->set_done(psWipeTower); } if (this->set_started(psSkirtBrim)) { - this->set_status(88, L("Generating skirt and brim")); + this->set_status(88, _u8L("Generating skirt and brim")); m_skirt.clear(); m_skirt_convex_hull.clear(); @@ -957,11 +955,11 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor std::string message; if (!path.empty() && result == nullptr) { // Only show the path if preview_data is not set -> running from command line. - message = L("Exporting G-code"); + message = _u8L("Exporting G-code"); message += " to "; message += path; } else - message = L("Generating G-code"); + message = _u8L("Generating G-code"); this->set_status(90, message); // Create GCode on heap, it has quite a lot of data. @@ -1181,30 +1179,30 @@ void Print::alert_when_supports_needed() { if (this->set_started(psAlertWhenSupportsNeeded)) { BOOST_LOG_TRIVIAL(debug) << "psAlertWhenSupportsNeeded - start"; - set_status(69, L("Alert if supports needed")); + set_status(69, _u8L("Alert if supports needed")); auto issue_to_alert_message = [](SupportSpotsGenerator::SupportPointCause cause, bool critical) { std::string message; switch (cause) { //TRN Alert when support is needed. Describes that the model has long bridging extrusions which may print badly - case SupportSpotsGenerator::SupportPointCause::LongBridge: message = L("Long bridging extrusions"); break; + case SupportSpotsGenerator::SupportPointCause::LongBridge: message = _u8L("Long bridging extrusions"); break; //TRN Alert when support is needed. Describes bridge anchors/turns in the air, which will definitely print badly - case SupportSpotsGenerator::SupportPointCause::FloatingBridgeAnchor: message = L("Floating bridge anchors"); break; + case SupportSpotsGenerator::SupportPointCause::FloatingBridgeAnchor: message = _u8L("Floating bridge anchors"); break; case SupportSpotsGenerator::SupportPointCause::FloatingExtrusion: if (critical) { //TRN Alert when support is needed. Describes that the print has large overhang area which will print badly or not print at all. - message = L("Collapsing overhang"); + message = _u8L("Collapsing overhang"); } else { //TRN Alert when support is needed. Describes extrusions that are not supported enough and come out curled or loose. - message = L("Loose extrusions"); + message = _u8L("Loose extrusions"); } break; //TRN Alert when support is needed. Describes that the print has low bed adhesion and may became loose. - case SupportSpotsGenerator::SupportPointCause::SeparationFromBed: message = L("Low bed adhesion"); break; + case SupportSpotsGenerator::SupportPointCause::SeparationFromBed: message = _u8L("Low bed adhesion"); break; //TRN Alert when support is needed. Describes that the object has part that is not connected to the bed and will not print at all without supports. - case SupportSpotsGenerator::SupportPointCause::UnstableFloatingPart: message = L("Floating object part"); break; + case SupportSpotsGenerator::SupportPointCause::UnstableFloatingPart: message = _u8L("Floating object part"); break; //TRN Alert when support is needed. Describes that the object has thin part that may brake during printing - case SupportSpotsGenerator::SupportPointCause::WeakObjectPart: message = L("Thin fragile part"); break; + case SupportSpotsGenerator::SupportPointCause::WeakObjectPart: message = _u8L("Thin fragile part"); break; } return message; @@ -1312,13 +1310,13 @@ void Print::alert_when_supports_needed() } lines.push_back(""); - lines.push_back(L("Consider enabling supports.")); + lines.push_back(_u8L("Consider enabling supports.")); if (recommend_brim) { - lines.push_back(L("Also consider enabling brim.")); + lines.push_back(_u8L("Also consider enabling brim.")); } // TRN Alert message for detected print issues. first argument is a list of detected issues. - auto message = Slic3r::format(L("Detected print stability issues:\n%1%"), elements_to_translated_list(lines, multiline_list_rule)); + auto message = Slic3r::format(_u8L("Detected print stability issues:\n%1%"), elements_to_translated_list(lines, multiline_list_rule)); if (objects_isssues.size() > 0) { this->active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL, message); diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp index d9b3e9cdae..01c0ecfaa3 100644 --- a/src/libslic3r/PrintBase.cpp +++ b/src/libslic3r/PrintBase.cpp @@ -6,10 +6,6 @@ #include "I18N.hpp" -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) - namespace Slic3r { @@ -81,7 +77,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str filename = boost::filesystem::change_extension(filename, default_ext); return filename.string(); } catch (std::runtime_error &err) { - throw Slic3r::PlaceholderParserError(L("Failed processing of the output_filename_format template.") + "\n" + err.what()); + throw Slic3r::PlaceholderParserError(_u8L("Failed processing of the output_filename_format template.") + "\n" + err.what()); } } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3255c015b6..d52f38866a 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -16,11 +16,6 @@ namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) - static t_config_enum_names enum_names_from_keys_map(const t_config_enum_values &enum_keys_map) { t_config_enum_names names; diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index aa1216a0fb..eefedd143f 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -56,10 +56,6 @@ using namespace std::literals; -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) - #ifdef SLIC3R_DEBUG_SLICE_PROCESSING #define SLIC3R_DEBUG #endif @@ -153,7 +149,7 @@ void PrintObject::make_perimeters() if (! this->set_started(posPerimeters)) return; - m_print->set_status(20, L("Generating perimeters")); + m_print->set_status(20, _u8L("Generating perimeters")); BOOST_LOG_TRIVIAL(info) << "Generating perimeters..." << log_memory_info(); // Revert the typed slices into untyped slices. @@ -258,7 +254,7 @@ void PrintObject::prepare_infill() if (! this->set_started(posPrepareInfill)) return; - m_print->set_status(30, L("Preparing infill")); + m_print->set_status(30, _u8L("Preparing infill")); if (m_typed_slices) { // To improve robustness of detect_surfaces_type() when reslicing (working with typed slices), see GH issue #7442. @@ -403,7 +399,7 @@ void PrintObject::infill() this->prepare_infill(); if (this->set_started(posInfill)) { - m_print->set_status(45, L("making infill")); + m_print->set_status(45, _u8L("making infill")); const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first; const auto& support_fill_octree = this->m_adaptive_fill_octrees.second; @@ -450,7 +446,7 @@ void PrintObject::generate_support_spots() { if (this->set_started(posSupportSpotsSearch)) { BOOST_LOG_TRIVIAL(debug) << "Searching support spots - start"; - m_print->set_status(65, L("Searching support spots")); + m_print->set_status(65, _u8L("Searching support spots")); if (!this->shared_regions()->generated_support_points.has_value()) { PrintTryCancel cancel_func = m_print->make_try_cancel(); SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values, @@ -475,7 +471,7 @@ void PrintObject::generate_support_material() if (this->set_started(posSupportMaterial)) { this->clear_support_layers(); if ((this->has_support() && m_layers.size() > 1) || (this->has_raft() && ! m_layers.empty())) { - m_print->set_status(70, L("Generating support material")); + m_print->set_status(70, _u8L("Generating support material")); this->_generate_support_material(); m_print->throw_if_canceled(); } else { @@ -496,7 +492,7 @@ void PrintObject::estimate_curled_extrusions() if (this->set_started(posEstimateCurledExtrusions)) { if (this->print()->config().avoid_crossing_curled_overhangs) { BOOST_LOG_TRIVIAL(debug) << "Estimating areas with curled extrusions - start"; - m_print->set_status(88, L("Estimating curled extrusions")); + m_print->set_status(88, _u8L("Estimating curled extrusions")); // Estimate curling of support material and add it to the malformaition lines of each layer float support_flow_width = support_material_flow(this, this->config().layer_height).width(); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 4cc5adff0d..6f6080cb8e 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -10,8 +10,6 @@ #include -//! macro used to mark string used at localization, return same string -#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { @@ -499,7 +497,7 @@ void PrintObject::slice() { if (! this->set_started(posSlice)) return; - m_print->set_status(10, L("Processing triangulated mesh")); + m_print->set_status(10, _u8L("Processing triangulated mesh")); std::vector layer_height_profile; this->update_layer_height_profile(*this->model_object(), m_slicing_params, layer_height_profile); m_print->throw_if_canceled(); @@ -733,9 +731,9 @@ void PrintObject::slice_volumes() if (m_config.xy_size_compensation.value != 0.f) { this->active_step_add_warning( PrintStateBase::WarningLevel::CRITICAL, - L("An object has enabled XY Size compensation which will not be used because it is also multi-material painted.\nXY Size " + _u8L("An object has enabled XY Size compensation which will not be used because it is also multi-material painted.\nXY Size " "compensation cannot be combined with multi-material painting.") + - "\n" + (L("Object name")) + ": " + this->model_object()->name); + "\n" + (_u8L("Object name")) + ": " + this->model_object()->name); } BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - MMU segmentation"; diff --git a/src/libslic3r/SLA/Hollowing.cpp b/src/libslic3r/SLA/Hollowing.cpp index 634cde4695..56cecdccd5 100644 --- a/src/libslic3r/SLA/Hollowing.cpp +++ b/src/libslic3r/SLA/Hollowing.cpp @@ -23,10 +23,6 @@ #include #include -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) - namespace Slic3r { namespace sla { @@ -83,12 +79,12 @@ InteriorPtr generate_interior(const VoxelGrid &vgrid, auto narrowb = 1.f; // voxel units (voxel count) if (ctl.stopcondition()) return {}; - else ctl.statuscb(0, L("Hollowing")); + else ctl.statuscb(0, _u8L("Hollowing")); auto gridptr = dilate_grid(vgrid, out_range, in_range); if (ctl.stopcondition()) return {}; - else ctl.statuscb(30, L("Hollowing")); + else ctl.statuscb(30, _u8L("Hollowing")); double iso_surface = D; if (D > EPSILON) { @@ -103,7 +99,7 @@ InteriorPtr generate_interior(const VoxelGrid &vgrid, } if (ctl.stopcondition()) return {}; - else ctl.statuscb(70, L("Hollowing")); + else ctl.statuscb(70, _u8L("Hollowing")); double adaptivity = 0.; InteriorPtr interior = InteriorPtr{new Interior{}}; @@ -112,7 +108,7 @@ InteriorPtr generate_interior(const VoxelGrid &vgrid, interior->gridptr = std::move(gridptr); if (ctl.stopcondition()) return {}; - else ctl.statuscb(100, L("Hollowing")); + else ctl.statuscb(100, _u8L("Hollowing")); interior->iso_surface = iso_surface; interior->thickness = offset; diff --git a/src/libslic3r/SLA/Pad.cpp b/src/libslic3r/SLA/Pad.cpp index ec9e216f55..34a1b5dd34 100644 --- a/src/libslic3r/SLA/Pad.cpp +++ b/src/libslic3r/SLA/Pad.cpp @@ -21,9 +21,6 @@ #include "I18N.hpp" #include -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { namespace sla { @@ -530,7 +527,7 @@ std::string PadConfig::validate() const if (brim_size_mm < MIN_BRIM_SIZE_MM || bottom_offset() > brim_size_mm + wing_distance() || get_waffle_offset(*this) <= MIN_BRIM_SIZE_MM) - return L("Pad brim size is too small for the current configuration."); + return _u8L("Pad brim size is too small for the current configuration."); return ""; } diff --git a/src/libslic3r/SLA/SupportTree.cpp b/src/libslic3r/SLA/SupportTree.cpp index 3de05261a3..d066e02bfd 100644 --- a/src/libslic3r/SLA/SupportTree.cpp +++ b/src/libslic3r/SLA/SupportTree.cpp @@ -16,13 +16,9 @@ #include #include -#include #include -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { namespace sla { diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 202da5e003..6dc4a46206 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -23,7 +23,7 @@ //! macro used to mark string used at localization, //! return same string -#define L(s) Slic3r::I18N::translate(s) +#define _u8L(s) Slic3r::I18N::translate(s) namespace Slic3r { @@ -543,7 +543,7 @@ std::string SLAPrint::validate(std::string*) const if(supports_en && mo->sla_points_status == sla::PointsStatus::UserModified && mo->sla_support_points.empty()) - return L("Cannot proceed without support points! " + return _u8L("Cannot proceed without support points! " "Add support points or disable support generation."); sla::SupportTreeConfig cfg = make_support_cfg(po->config()); @@ -554,13 +554,13 @@ std::string SLAPrint::validate(std::string*) const sla::PadConfig::EmbedObject &builtinpad = padcfg.embed_object; if(supports_en && !builtinpad.enabled && elv < cfg.head_fullwidth()) - return L( + return _u8L( "Elevation is too low for object. Use the \"Pad around " "object\" feature to print the object without elevation."); if(supports_en && builtinpad.enabled && cfg.pillar_base_safety_distance_mm < builtinpad.object_gap_mm) { - return L( + return _u8L( "The endings of the support pillars will be deployed on the " "gap between the object and the pad. 'Support base safety " "distance' has to be greater than the 'Pad object gap' " @@ -576,14 +576,14 @@ std::string SLAPrint::validate(std::string*) const double expt_cur = m_material_config.exposure_time.getFloat(); if (expt_cur < expt_min || expt_cur > expt_max) - return L("Exposition time is out of printer profile bounds."); + return _u8L("Exposition time is out of printer profile bounds."); double iexpt_max = m_printer_config.max_initial_exposure_time.getFloat(); double iexpt_min = m_printer_config.min_initial_exposure_time.getFloat(); double iexpt_cur = m_material_config.initial_exposure_time.getFloat(); if (iexpt_cur < iexpt_min || iexpt_cur > iexpt_max) - return L("Initial exposition time is out of printer profile bounds."); + return _u8L("Initial exposition time is out of printer profile bounds."); return ""; } @@ -690,7 +690,7 @@ void SLAPrint::process() } // If everything vent well - m_report_status(*this, 100, L("Slicing done")); + m_report_status(*this, 100, _u8L("Slicing done")); #ifdef SLAPRINT_DO_BENCHMARK std::string csvbenchstr; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 3381304544..94ddcec727 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -32,9 +32,6 @@ #include -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) namespace Slic3r { @@ -54,14 +51,14 @@ const std::array OBJ_STEP_LEVELS = { std::string OBJ_STEP_LABELS(size_t idx) { switch (idx) { - case slaposAssembly: return L("Assembling model from parts"); - case slaposHollowing: return L("Hollowing model"); - case slaposDrillHoles: return L("Drilling holes into model."); - case slaposObjectSlice: return L("Slicing model"); - case slaposSupportPoints: return L("Generating support points"); - case slaposSupportTree: return L("Generating support tree"); - case slaposPad: return L("Generating pad"); - case slaposSliceSupports: return L("Slicing supports"); + case slaposAssembly: return _u8L("Assembling model from parts"); + case slaposHollowing: return _u8L("Hollowing model"); + case slaposDrillHoles: return _u8L("Drilling holes into model."); + case slaposObjectSlice: return _u8L("Slicing model"); + case slaposSupportPoints: return _u8L("Generating support points"); + case slaposSupportTree: return _u8L("Generating support tree"); + case slaposPad: return _u8L("Generating pad"); + case slaposSliceSupports: return _u8L("Slicing supports"); default:; } assert(false); @@ -76,8 +73,8 @@ const std::array PRINT_STEP_LEVELS = { std::string PRINT_STEP_LABELS(size_t idx) { switch (idx) { - case slapsMergeSlicesAndEval: return L("Merging slices and calculating statistics"); - case slapsRasterize: return L("Rasterizing layers"); + case slapsMergeSlicesAndEval: return _u8L("Merging slices and calculating statistics"); + case slapsRasterize: return _u8L("Rasterizing layers"); default:; } assert(false); return "Out of bounds!"; @@ -252,14 +249,14 @@ void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep st if (ret & static_cast(sla::HollowMeshResult::FaultyMesh)) { po.active_step_add_warning( PrintStateBase::WarningLevel::NON_CRITICAL, - L("Mesh to be hollowed is not suitable for hollowing (does not " + _u8L("Mesh to be hollowed is not suitable for hollowing (does not " "bound a volume).")); } if (ret & static_cast(sla::HollowMeshResult::FaultyHoles)) { po.active_step_add_warning( PrintStateBase::WarningLevel::NON_CRITICAL, - L("Unable to drill the current configuration of holes into the " + _u8L("Unable to drill the current configuration of holes into the " "model.")); } @@ -267,7 +264,7 @@ void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep st if (ret & static_cast(sla::HollowMeshResult::DrillingFailed)) { po.active_step_add_warning( - PrintStateBase::WarningLevel::NON_CRITICAL, L( + PrintStateBase::WarningLevel::NON_CRITICAL, _u8L( "Drilling holes into the mesh failed. " "This is usually caused by broken model. Try to fix it first.")); @@ -276,7 +273,7 @@ void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep st if (hole_fail) { po.active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL, - L("Failed to drill some holes into the model")); + _u8L("Failed to drill some holes into the model")); handled = false; } @@ -286,7 +283,7 @@ void SLAPrint::Steps::generate_preview(SLAPrintObject &po, SLAPrintObjectStep st if (!handled) { // Last resort to voxelization. po.active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL, - L("Can't perform full mesh booleans! " + _u8L("Can't perform full mesh booleans! " "Some parts of the print will be previewed with approximated meshes. " "This does not affect the quality of slices or the physical print in any way.")); m = generate_preview_vdb(po, step); @@ -507,7 +504,7 @@ void SLAPrint::Steps::slice_model(SLAPrintObject &po) if(slindex_it == po.m_slice_index.end()) //TRN To be shown at the status bar on SLA slicing error. throw Slic3r::RuntimeError( - L("Slicing had to be stopped due to an internal error: " + _u8L("Slicing had to be stopped due to an internal error: " "Inconsistent slice index.")); po.m_model_height_levels.clear(); @@ -688,7 +685,7 @@ void SLAPrint::Steps::support_points(SLAPrintObject &po) // Using RELOAD_SLA_SUPPORT_POINTS to tell the Plater to pass // the update status to GLGizmoSlaSupports - report_status(-1, L("Generating support points"), + report_status(-1, _u8L("Generating support points"), SlicingStatus::RELOAD_SLA_SUPPORT_POINTS); } else { // There are either some points on the front-end, or the user @@ -737,7 +734,7 @@ void SLAPrint::Steps::support_tree(SLAPrintObject &po) auto rc = SlicingStatus::RELOAD_SCENE; // This is to prevent "Done." being displayed during merged_mesh() - report_status(-1, L("Visualizing supports")); + report_status(-1, _u8L("Visualizing supports")); BOOST_LOG_TRIVIAL(debug) << "Processed support point count " << po.m_supportdata->input.pts.size(); @@ -746,7 +743,7 @@ void SLAPrint::Steps::support_tree(SLAPrintObject &po) if(po.support_mesh().empty()) BOOST_LOG_TRIVIAL(warning) << "Support mesh is empty"; - report_status(-1, L("Visualizing supports"), rc); + report_status(-1, _u8L("Visualizing supports"), rc); } void SLAPrint::Steps::generate_pad(SLAPrintObject &po) { @@ -776,7 +773,7 @@ void SLAPrint::Steps::generate_pad(SLAPrintObject &po) { if (!validate_pad(po.m_supportdata->pad_mesh.its, pcfg)) throw Slic3r::SlicingError( - L("No pad can be generated for this model with the " + _u8L("No pad can be generated for this model with the " "current configuration")); } else if(po.m_supportdata) { @@ -784,7 +781,7 @@ void SLAPrint::Steps::generate_pad(SLAPrintObject &po) { } throw_if_canceled(); - report_status(-1, L("Visualizing supports"), SlicingStatus::RELOAD_SCENE); + report_status(-1, _u8L("Visualizing supports"), SlicingStatus::RELOAD_SCENE); } // Slicing the support geometries similarly to the model slicing procedure. @@ -905,7 +902,7 @@ void SLAPrint::Steps::initialize_printer_input() for(const SliceRecord& slicerecord : o->get_slice_index()) { if (!slicerecord.is_valid()) throw Slic3r::SlicingError( - L("There are unprintable objects. Try to " + _u8L("There are unprintable objects. Try to " "adjust support settings to make the " "objects printable.")); diff --git a/src/libslic3r/Zipper.cpp b/src/libslic3r/Zipper.cpp index cebafa6333..29ca264ca1 100644 --- a/src/libslic3r/Zipper.cpp +++ b/src/libslic3r/Zipper.cpp @@ -8,7 +8,7 @@ //! macro used to mark string used at localization, //! return same string -#define L(s) Slic3r::I18N::translate(s) +#define _u8L(s) Slic3r::I18N::translate(s) #if defined(_MSC_VER) && _MSC_VER <= 1800 || __cplusplus < 201103L #define SLIC3R_NORETURN @@ -24,7 +24,7 @@ public: std::string formatted_errorstr() const { - return L("Error with zip archive") + " " + m_zipname + ": " + + return _u8L("Error with zip archive") + " " + m_zipname + ": " + get_errorstr(); } diff --git a/src/libslic3r/miniz_extension.cpp b/src/libslic3r/miniz_extension.cpp index 76b4cb4e55..b0eccbeb38 100644 --- a/src/libslic3r/miniz_extension.cpp +++ b/src/libslic3r/miniz_extension.cpp @@ -6,11 +6,7 @@ #include "boost/nowide/cstdio.hpp" #endif -#include "I18N.hpp" - -//! macro used to mark string used at localization, -//! return same string -#define L(s) Slic3r::I18N::translate(s) +#include "libslic3r/I18N.hpp" namespace Slic3r { @@ -88,67 +84,67 @@ std::string MZ_Archive::get_errorstr(mz_zip_error mz_err) case MZ_ZIP_NO_ERROR: return "no error"; case MZ_ZIP_UNDEFINED_ERROR: - return L("undefined error"); + return _u8L("undefined error"); case MZ_ZIP_TOO_MANY_FILES: - return L("too many files"); + return _u8L("too many files"); case MZ_ZIP_FILE_TOO_LARGE: - return L("file too large"); + return _u8L("file too large"); case MZ_ZIP_UNSUPPORTED_METHOD: - return L("unsupported method"); + return _u8L("unsupported method"); case MZ_ZIP_UNSUPPORTED_ENCRYPTION: - return L("unsupported encryption"); + return _u8L("unsupported encryption"); case MZ_ZIP_UNSUPPORTED_FEATURE: - return L("unsupported feature"); + return _u8L("unsupported feature"); case MZ_ZIP_FAILED_FINDING_CENTRAL_DIR: - return L("failed finding central directory"); + return _u8L("failed finding central directory"); case MZ_ZIP_NOT_AN_ARCHIVE: - return L("not a ZIP archive"); + return _u8L("not a ZIP archive"); case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED: - return L("invalid header or archive is corrupted"); + return _u8L("invalid header or archive is corrupted"); case MZ_ZIP_UNSUPPORTED_MULTIDISK: - return L("unsupported multidisk archive"); + return _u8L("unsupported multidisk archive"); case MZ_ZIP_DECOMPRESSION_FAILED: - return L("decompression failed or archive is corrupted"); + return _u8L("decompression failed or archive is corrupted"); case MZ_ZIP_COMPRESSION_FAILED: - return L("compression failed"); + return _u8L("compression failed"); case MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE: - return L("unexpected decompressed size"); + return _u8L("unexpected decompressed size"); case MZ_ZIP_CRC_CHECK_FAILED: - return L("CRC-32 check failed"); + return _u8L("CRC-32 check failed"); case MZ_ZIP_UNSUPPORTED_CDIR_SIZE: - return L("unsupported central directory size"); + return _u8L("unsupported central directory size"); case MZ_ZIP_ALLOC_FAILED: - return L("allocation failed"); + return _u8L("allocation failed"); case MZ_ZIP_FILE_OPEN_FAILED: - return L("file open failed"); + return _u8L("file open failed"); case MZ_ZIP_FILE_CREATE_FAILED: - return L("file create failed"); + return _u8L("file create failed"); case MZ_ZIP_FILE_WRITE_FAILED: - return L("file write failed"); + return _u8L("file write failed"); case MZ_ZIP_FILE_READ_FAILED: - return L("file read failed"); + return _u8L("file read failed"); case MZ_ZIP_FILE_CLOSE_FAILED: - return L("file close failed"); + return _u8L("file close failed"); case MZ_ZIP_FILE_SEEK_FAILED: - return L("file seek failed"); + return _u8L("file seek failed"); case MZ_ZIP_FILE_STAT_FAILED: - return L("file stat failed"); + return _u8L("file stat failed"); case MZ_ZIP_INVALID_PARAMETER: - return L("invalid parameter"); + return _u8L("invalid parameter"); case MZ_ZIP_INVALID_FILENAME: - return L("invalid filename"); + return _u8L("invalid filename"); case MZ_ZIP_BUF_TOO_SMALL: - return L("buffer too small"); + return _u8L("buffer too small"); case MZ_ZIP_INTERNAL_ERROR: - return L("internal error"); + return _u8L("internal error"); case MZ_ZIP_FILE_NOT_FOUND: - return L("file not found"); + return _u8L("file not found"); case MZ_ZIP_ARCHIVE_TOO_LARGE: - return L("archive is too large"); + return _u8L("archive is too large"); case MZ_ZIP_VALIDATION_FAILED: - return L("validation failed"); + return _u8L("validation failed"); case MZ_ZIP_WRITE_CALLBACK_FAILED: - return L("write calledback failed"); + return _u8L("write calledback failed"); default: break; } diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index aadf605a10..759b176446 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -128,6 +128,9 @@ void BedShape::apply_optgroup_values(ConfigOptionsGroupShp optgroup) } } +BedShapeDialog::BedShapeDialog(wxWindow* parent) : DPIDialog(parent, wxID_ANY, _(L("Bed Shape")), + wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {} + void BedShapeDialog::build_dialog(const ConfigOptionPoints& default_pt, const ConfigOptionString& custom_texture, const ConfigOptionString& custom_model) { SetFont(wxGetApp().normal_font()); diff --git a/src/slic3r/GUI/BedShapeDialog.hpp b/src/slic3r/GUI/BedShapeDialog.hpp index 2f308a5073..2c828a58f3 100644 --- a/src/slic3r/GUI/BedShapeDialog.hpp +++ b/src/slic3r/GUI/BedShapeDialog.hpp @@ -5,7 +5,6 @@ #include "GUI_Utils.hpp" #include "2DBed.hpp" -#include "I18N.hpp" #include @@ -93,8 +92,7 @@ class BedShapeDialog : public DPIDialog { BedShapePanel* m_panel; public: - BedShapeDialog(wxWindow* parent) : DPIDialog(parent, wxID_ANY, _(L("Bed Shape")), - wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {} + BedShapeDialog(wxWindow* parent); void build_dialog(const ConfigOptionPoints& default_pt, const ConfigOptionString& custom_texture, const ConfigOptionString& custom_model); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index b8956b948e..65d08f195b 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -56,6 +56,7 @@ #include "MsgDialog.hpp" #include "UnsavedChangesDialog.hpp" #include "slic3r/Utils/AppUpdater.hpp" +#include "slic3r/GUI/I18N.hpp" #if defined(__linux__) && defined(__WXGTK3__) #define wxLinux_gtk3 true diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 076bef54b9..5d3b65632c 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -5,7 +5,11 @@ #include "GUI_ObjectManipulation.hpp" #include "GUI_Factories.hpp" #include "format.hpp" -#include "I18N.hpp" + +// Localization headers: include libslic3r version first so everything in this file +// uses the slic3r/GUI version (the macros will take precedence over the functions). +#include "libslic3r/I18N.hpp" +#include "slic3r/GUI/I18N.hpp" #include #include @@ -44,7 +48,6 @@ #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" -#include "libslic3r/I18N.hpp" #include "libslic3r/PresetBundle.hpp" #include "libslic3r/Color.hpp" @@ -2381,8 +2384,8 @@ void GUI_App::add_config_menu(wxMenuBar *menu) auto local_menu = new wxMenu(); wxWindowID config_id_base = wxWindow::NewControlId(int(ConfigMenuCnt)); - const auto config_wizard_name = _(ConfigWizard::name(true)); - const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Run %s"))) % config_wizard_name).str()); + const wxString config_wizard_name = _(ConfigWizard::name(true)); + const wxString config_wizard_tooltip = from_u8((boost::format(_u8L("Run %s")) % config_wizard_name).str()); // Cmd+, is standard on OS X - what about other operating systems? if (is_editor()) { local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); @@ -3461,7 +3464,7 @@ void GUI_App::start_download(std::string url) //lets always init so if the download dest folder was changed, new dest is used boost::filesystem::path dest_folder(app_config->get("url_downloader_dest")); if (dest_folder.empty() || !boost::filesystem::is_directory(dest_folder)) { - std::string msg = _utf8("Could not start URL download. Destination folder is not set. Please choose destination folder in Configuration Wizard."); + std::string msg = _u8L("Could not start URL download. Destination folder is not set. Please choose destination folder in Configuration Wizard."); BOOST_LOG_TRIVIAL(error) << msg; show_error(nullptr, msg); return; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp index a884a0589d..770c3ac41c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp @@ -149,15 +149,21 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color) GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) : m_parent(parent) - , m_group_id(-1) - , m_state(Off) - , m_shortcut_key(NO_SHORTCUT_KEY_VALUE) + , m_group_id(-1) + , m_state(Off) + , m_shortcut_key(NO_SHORTCUT_KEY_VALUE) , m_icon_filename(icon_filename) , m_sprite_id(sprite_id) , m_imgui(wxGetApp().imgui()) { } + +std::string GLGizmoBase::get_action_snapshot_name() const +{ + return _u8L("Gizmo action"); +} + void GLGizmoBase::set_hover_id(int id) { // do not change hover id during dragging @@ -351,12 +357,12 @@ void GLGizmoBase::render_input_window(float x, float y, float bottom_limit) std::string GLGizmoBase::get_name(bool include_shortcut) const { - std::string out = on_get_name(); - if (!include_shortcut) return out; - + std::string out = on_get_name(); + if (!include_shortcut) return out; + int key = get_shortcut_key(); - assert(key==NO_SHORTCUT_KEY_VALUE || (key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z)); - out += std::string(" [") + char(int('A') + key - int(WXK_CONTROL_A)) + "]"; + assert(key==NO_SHORTCUT_KEY_VALUE || (key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z)); + out += std::string(" [") + char(int('A') + key - int(WXK_CONTROL_A)) + "]"; return out; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 108b869da5..9ed34b011f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -4,7 +4,6 @@ #include "libslic3r/Point.hpp" #include "libslic3r/Color.hpp" -#include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/GLModel.hpp" #include "slic3r/GUI/MeshUtils.hpp" #include "slic3r/GUI/SceneRaycaster.hpp" @@ -150,7 +149,7 @@ public: virtual bool wants_enter_leave_snapshots() const { return false; } virtual std::string get_gizmo_entering_text() const { assert(false); return ""; } virtual std::string get_gizmo_leaving_text() const { assert(false); return ""; } - virtual std::string get_action_snapshot_name() { return _u8L("Gizmo action"); } + virtual std::string get_action_snapshot_name() const; void set_common_data_pool(CommonGizmosDataPool* ptr) { m_c = ptr; } unsigned int get_sprite_id() const { return m_sprite_id; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index e9b6fa6946..e4a7e96137 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoCut.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index 794d0d3391..02ed8d5b6d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -4,6 +4,7 @@ #include "GLGizmoBase.hpp" #include "slic3r/GUI/GLSelectionRectangle.hpp" #include "slic3r/GUI/GLModel.hpp" +#include "slic3r/GUI/I18N.hpp" #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/Model.hpp" #include "imgui/imgui.h" @@ -253,7 +254,7 @@ protected: bool wants_enter_leave_snapshots() const override { return true; } std::string get_gizmo_entering_text() const override { return _u8L("Entering Cut gizmo"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Cut gizmo"); } - std::string get_action_snapshot_name() override { return _u8L("Cut gizmo editing"); } + std::string get_action_snapshot_name() const override { return _u8L("Cut gizmo editing"); } void data_changed() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp index ebbdf616cc..a57def86e5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp @@ -1,12 +1,11 @@ #ifndef slic3r_GLGizmoEmboss_hpp_ #define slic3r_GLGizmoEmboss_hpp_ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, -// which overrides our localization "L" macro. #include "GLGizmoBase.hpp" #include "GLGizmoRotate.hpp" #include "slic3r/GUI/IconManager.hpp" #include "slic3r/GUI/SurfaceDrag.hpp" +#include "slic3r/GUI/I18N.hpp" #include "slic3r/Utils/RaycastManager.hpp" #include "slic3r/Utils/EmbossStyleManager.hpp" @@ -76,7 +75,7 @@ protected: bool wants_enter_leave_snapshots() const override { return true; } std::string get_gizmo_entering_text() const override { return _u8L("Enter emboss gizmo"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leave emboss gizmo"); } - std::string get_action_snapshot_name() override { return _u8L("Embossing actions"); } + std::string get_action_snapshot_name() const override { return _u8L("Embossing actions"); } private: static EmbossStyles create_default_styles(); // localized default text diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index b79e1dda7e..aee669199f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -3,6 +3,8 @@ #include "GLGizmoPainterBase.hpp" +#include "slic3r/GUI/I18N.hpp" + namespace Slic3r::GUI { class GLGizmoFdmSupports : public GLGizmoPainterBase @@ -21,7 +23,7 @@ protected: std::string get_gizmo_entering_text() const override { return _u8L("Entering Paint-on supports"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Paint-on supports"); } - std::string get_action_snapshot_name() override { return _u8L("Paint-on supports editing"); } + std::string get_action_snapshot_name() const override { return _u8L("Paint-on supports editing"); } private: diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index 947ef2df8e..6cbec08915 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoFlatten.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index 80520651da..a3184371eb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoMeasure.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp index 4652a171b7..cc43b068ef 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp @@ -5,6 +5,7 @@ #include "slic3r/GUI/GLModel.hpp" #include "slic3r/GUI/GUI_Utils.hpp" #include "slic3r/GUI/MeshUtils.hpp" +#include "slic3r/GUI/I18N.hpp" #include "libslic3r/Measure.hpp" #include "libslic3r/Model.hpp" @@ -162,7 +163,7 @@ public: bool wants_enter_leave_snapshots() const override { return true; } std::string get_gizmo_entering_text() const override { return _u8L("Entering Measure gizmo"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Measure gizmo"); } - std::string get_action_snapshot_name() override { return _u8L("Measure gizmo editing"); } + std::string get_action_snapshot_name() const override { return _u8L("Measure gizmo editing"); } protected: bool on_init() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index 67eccd8e8e..ee32c45963 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -3,6 +3,8 @@ #include "GLGizmoPainterBase.hpp" +#include "slic3r/GUI/I18N.hpp" + namespace Slic3r::GUI { class GLMmSegmentationGizmo3DScene @@ -117,7 +119,7 @@ protected: std::string get_gizmo_entering_text() const override { return _u8L("Entering Multimaterial painting"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Multimaterial painting"); } - std::string get_action_snapshot_name() override { return _u8L("Multimaterial painting editing"); } + std::string get_action_snapshot_name() const override { return _u8L("Multimaterial painting editing"); } size_t m_first_selected_extruder_idx = 0; size_t m_second_selected_extruder_idx = 1; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index 98f183b74e..73615b4635 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoMove.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 3d88ad500f..aa3d56ef93 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoPainterBase.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 345d733afd..75b80d8f5b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoRotate.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 9e5191f65f..063dce7217 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -1,4 +1,3 @@ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoScale.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 533683237d..c1a6d7dfac 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -3,6 +3,8 @@ #include "GLGizmoPainterBase.hpp" +#include "slic3r/GUI/I18N.hpp" + namespace Slic3r::GUI { class GLGizmoSeam : public GLGizmoPainterBase @@ -22,7 +24,7 @@ protected: std::string get_gizmo_entering_text() const override { return _u8L("Entering Seam painting"); } std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Seam painting"); } - std::string get_action_snapshot_name() override { return _u8L("Paint-on seam editing"); } + std::string get_action_snapshot_name() const override { return _u8L("Paint-on seam editing"); } private: bool on_init() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp index f95aad4953..1a56b77913 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp @@ -1,10 +1,9 @@ #ifndef slic3r_GLGizmoSimplify_hpp_ #define slic3r_GLGizmoSimplify_hpp_ -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, -// which overrides our localization "L" macro. #include "GLGizmoBase.hpp" #include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/I18N.hpp" #include "admesh/stl.h" // indexed_triangle_set #include #include diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 4d76dfb04b..18613cd8f5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -1,5 +1,4 @@ #include "libslic3r/libslic3r.h" -// Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoSlaSupports.hpp" #include "slic3r/GUI/MainFrame.hpp" #include "slic3r/Utils/UndoRedo.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp index 578858b5bd..bb0513682c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp @@ -3,6 +3,7 @@ #include "GLGizmoSlaBase.hpp" #include "slic3r/GUI/GLSelectionRectangle.hpp" +#include "slic3r/GUI/I18N.hpp" #include "libslic3r/SLA/SupportPoint.hpp" #include "libslic3r/ObjectID.hpp" diff --git a/src/slic3r/GUI/OG_CustomCtrl.hpp b/src/slic3r/GUI/OG_CustomCtrl.hpp index 0308322f7f..269f847a22 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.hpp +++ b/src/slic3r/GUI/OG_CustomCtrl.hpp @@ -11,7 +11,6 @@ #include "libslic3r/PrintConfig.hpp" #include "OptionsGroup.hpp" -#include "I18N.hpp" // Translate the ifdef #ifdef __WXOSX__