From fcf6f0a3a54ba28b31e814103eaaa35dea4a7394 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 31 Aug 2026 14:36:52 -0500 Subject: [PATCH 01/23] build: clear 54 warnings - dead private fields (#15423) build: clear 54 dead private fields 54 of the 161 -Wunused-private-field warnings, across 31 files. These are the ones needing no judgment. Each member is declared once and appears nowhere else in src/, counting the .mm and .c sources as well as .cpp and .hpp, so nothing writes them and nothing reads them. Every removal is a whole line, and no declaration shares a line with another member. The remaining 107 are left alone. Those members are mentioned elsewhere, usually assigned and never read, where the fix might be deleting the member or might be restoring a read that went missing. --- src/libslic3r/GCodeWriter.hpp | 1 - src/slic3r/GUI/AMSDryControl.hpp | 1 - src/slic3r/GUI/AboutDialog.hpp | 1 - src/slic3r/GUI/BBLTopbar.hpp | 1 - src/slic3r/GUI/CreatePresetsDialog.hpp | 2 -- src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp | 1 - src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h | 2 -- src/slic3r/GUI/GCodeViewer.hpp | 1 - src/slic3r/GUI/GLToolbar.hpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp | 1 - src/slic3r/GUI/IMSlider.hpp | 5 ----- src/slic3r/GUI/MediaFilePanel.h | 1 - src/slic3r/GUI/Monitor.hpp | 4 ---- src/slic3r/GUI/MultiMachineManagerPage.hpp | 1 - src/slic3r/GUI/ObjColorDialog.hpp | 1 - src/slic3r/GUI/PartSkipDialog.hpp | 1 - src/slic3r/GUI/PhysicalPrinterDialog.hpp | 1 - src/slic3r/GUI/Project.hpp | 1 - src/slic3r/GUI/RecenterDialog.hpp | 2 -- src/slic3r/GUI/SelectMachinePop.hpp | 2 -- src/slic3r/GUI/SendMultiMachinePage.hpp | 1 - src/slic3r/GUI/SendToPrinter.hpp | 2 -- src/slic3r/GUI/SkipPartCanvas.hpp | 1 - src/slic3r/GUI/SyncAmsInfoDialog.hpp | 3 --- src/slic3r/GUI/Tab.hpp | 2 -- src/slic3r/GUI/ThermalPreconditioningDialog.hpp | 1 - src/slic3r/GUI/WebGuideDialog.hpp | 1 - src/slic3r/GUI/WebViewDialog.hpp | 4 ---- src/slic3r/GUI/Widgets/AMSItem.hpp | 6 ------ src/slic3r/GUI/Widgets/FanControl.hpp | 1 - src/slic3r/GUI/Widgets/MultiNozzleSync.hpp | 1 - 31 files changed, 54 deletions(-) diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index fcb63c3e96..8247ab757a 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -165,7 +165,6 @@ public: //BBS - unsigned int m_last_additional_fan_speed; int m_last_bed_temperature; bool m_last_bed_temperature_reached; double m_lifted; diff --git a/src/slic3r/GUI/AMSDryControl.hpp b/src/slic3r/GUI/AMSDryControl.hpp index a7500b5b03..46699650d6 100644 --- a/src/slic3r/GUI/AMSDryControl.hpp +++ b/src/slic3r/GUI/AMSDryControl.hpp @@ -55,7 +55,6 @@ private: Label* m_text_label; wxStaticBitmap* m_icon_bitmap; - int m_target_size; std::string m_icon_name; ScalableBitmap m_icon; }; diff --git a/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp index 8dc72d15a3..e96c74ba08 100644 --- a/src/slic3r/GUI/AboutDialog.hpp +++ b/src/slic3r/GUI/AboutDialog.hpp @@ -60,7 +60,6 @@ class AboutDialog : public DPIDialog wxHtmlWindow* m_html; wxStaticBitmap* m_logo; int m_copy_rights_btn_id { wxID_ANY }; - int m_copy_version_btn_id { wxID_ANY }; public: AboutDialog(); diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index 465126944b..e60a95f64f 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -93,7 +93,6 @@ private: CenteredTitle* m_title_ctrl { nullptr }; wxString m_titleText; - wxAuiToolBarItem* m_account_item; wxAuiToolBarItem* m_model_store_item; //wxAuiToolBarItem *m_publish_item; diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 678f4d40fd..701779b1bf 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -74,12 +74,10 @@ private: std::unordered_set m_system_filament_types_set; std::set m_visible_printers; CreateType m_create_type; - Button * m_button_create = nullptr; Button * m_button_cancel = nullptr; ComboBox * m_filament_vendor_combobox = nullptr; ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; ComboBox * m_filament_type_combobox = nullptr; - ComboBox * m_exist_vendor_combobox = nullptr; ComboBox * m_filament_preset_combobox = nullptr; TextInput * m_filament_custom_vendor_input = nullptr; wxGridSizer * m_filament_presets_sizer = nullptr; diff --git a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp index 18dd3c4301..be8f957c94 100644 --- a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp +++ b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp @@ -199,7 +199,6 @@ private: void OnRefreshButton(wxCommandEvent& event); private: - int saveTimes{0}; wxBoxSizer* mainSizer{nullptr}; wxPanel* textPanel{nullptr}; wxBoxSizer* textSizer{nullptr}; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h index 8275638831..06b950cd7e 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h @@ -122,7 +122,6 @@ private: private: int m_ext_nozzle_id = -1; int m_rack_nozzle_id = -1; - bool m_isRefreshFinish = false; bool findNozzleImage = false; NozzleStatus m_nozzle_status = NOZZLE_STATUS_DC; @@ -154,7 +153,6 @@ private: Label* m_diameter_label; Label* m_flowtype_label; Label* m_type_label; - ScalableButton* m_error_button{ nullptr }; Label* m_sn_label; Label* m_version_label; diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index a19f7bb9ae..5ba748775c 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -72,7 +72,6 @@ public: float m_model_z_offset{ 0.5f }; bool m_visible{ true }; bool m_is_dark = false; - bool m_fixed_screen_size{ false }; float m_scale_factor{ 1.0f }; #if ENABLE_ACTUAL_SPEED_DEBUG ActualSpeedImguiWidget m_actual_speed_imgui_widget; diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 85413edc66..c4bc88045e 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -327,7 +327,6 @@ private: GLTexture m_icons_texture; bool m_icons_texture_dirty; mutable GLTexture m_images_texture; - mutable bool m_images_texture_dirty; BackgroundTexture m_background_texture; GLTexture m_arrow_texture; Layout m_layout; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index f42d327a0e..57a6cc1981 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -86,7 +86,6 @@ private: boost::thread m_thread; // Mutex and condition variable to synchronize m_thread with the UI thread. std::mutex m_mutex; - int m_generate_count; // This map holds all translated description texts, so they can be easily referenced during layout calculations // etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect. diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index bd2399e990..45e4d6ccb8 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -176,7 +176,6 @@ private: // Use those values to disable selection of active extruders bool m_is_dark = false; - bool is_osx{false}; int m_min_value; int m_max_value; int m_lower_value; @@ -201,10 +200,6 @@ private: void *m_one_layer_on_hover_id; void *m_one_layer_off_id; void *m_one_layer_off_hover_id; - void* m_one_layer_on_light_id; - void* m_one_layer_on_hover_light_id; - void* m_one_layer_off_light_id; - void* m_one_layer_off_hover_light_id; void* m_one_layer_on_dark_id; void* m_one_layer_on_hover_dark_id; void* m_one_layer_off_dark_id; diff --git a/src/slic3r/GUI/MediaFilePanel.h b/src/slic3r/GUI/MediaFilePanel.h index 72fbc96a13..36696d2225 100644 --- a/src/slic3r/GUI/MediaFilePanel.h +++ b/src/slic3r/GUI/MediaFilePanel.h @@ -61,7 +61,6 @@ private: ::Button *m_button_year = nullptr; ::Button *m_button_month = nullptr; ::Button *m_button_all = nullptr; - ::Label *m_switch_label = nullptr; ::StaticBox * m_type_panel = nullptr; ::Button * m_button_video = nullptr; diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index fe115a351a..13688d6526 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -86,11 +86,8 @@ private: /* side tools */ SideTools* m_side_tools{nullptr}; - wxStaticBitmap* m_bitmap_printer_type; wxStaticBitmap* m_bitmap_arrow; - wxStaticText* m_staticText_printer_name; wxStaticBitmap* m_bitmap_wifi_signal; - wxBoxSizer * m_side_tools_sizer; SelectMachinePopup m_select_machine; /* images */ @@ -101,7 +98,6 @@ private: wxBitmap m_printer_img; wxBitmap m_arrow_img; - int last_wifi_signal = -1; int last_status; bool m_initialized { false }; bool update_flag{false}; diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp index 7bb12ffc75..2576e36f12 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.hpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -88,7 +88,6 @@ private: Button* m_task_name{ nullptr }; Button* m_status{ nullptr }; Button* m_action{ nullptr }; - Button* m_stop_all_botton{nullptr}; // tip when no device wxStaticText* m_tip_text{ nullptr }; diff --git a/src/slic3r/GUI/ObjColorDialog.hpp b/src/slic3r/GUI/ObjColorDialog.hpp index 1ad74cdccd..19ed1dcb24 100644 --- a/src/slic3r/GUI/ObjColorDialog.hpp +++ b/src/slic3r/GUI/ObjColorDialog.hpp @@ -79,7 +79,6 @@ private: std::vector m_row_col_boxsizer_list; std::vector m_result_icon_list; int m_last_cluster_num{-1}; - const int m_combox_width{50}; int m_combox_icon_width; int m_combox_icon_height; wxButton * m_image_button = nullptr; diff --git a/src/slic3r/GUI/PartSkipDialog.hpp b/src/slic3r/GUI/PartSkipDialog.hpp index 95eba9f24d..b95681dcde 100644 --- a/src/slic3r/GUI/PartSkipDialog.hpp +++ b/src/slic3r/GUI/PartSkipDialog.hpp @@ -128,7 +128,6 @@ private: bool is_drag_mode(); boost::shared_ptr m_file_sys; - bool m_file_sys_result{false}; std::string m_timestamp; std::string m_tmp_path; std::vector m_local_paths; diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 0ba2cad54f..c32da334be 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -33,7 +33,6 @@ class PhysicalPrinterDialog : public DPIDialog Button* m_printhost_test_btn {nullptr}; Button* m_printhost_logout_btn {nullptr}; Button* m_printhost_cafile_browse_btn {nullptr}; - Button* m_printhost_client_cert_browse_btn {nullptr}; Button* m_printhost_port_browse_btn {nullptr}; RoundedRectangle* m_input_area {nullptr}; diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp index a41f76ba7e..a590212cb7 100644 --- a/src/slic3r/GUI/Project.hpp +++ b/src/slic3r/GUI/Project.hpp @@ -63,7 +63,6 @@ class ProjectPanel : public wxPanel { private: std::atomic m_web_init_completed{false}; - bool m_reload_already = {false}; std::shared_ptr> m_reload_cancel_token{std::make_shared>(false)}; std::unique_ptr m_reload_task; diff --git a/src/slic3r/GUI/RecenterDialog.hpp b/src/slic3r/GUI/RecenterDialog.hpp index 1e48e7990b..cd7511d3f5 100644 --- a/src/slic3r/GUI/RecenterDialog.hpp +++ b/src/slic3r/GUI/RecenterDialog.hpp @@ -10,8 +10,6 @@ namespace Slic3r { namespace GUI { class RecenterDialog : public DPIDialog { private: - wxStaticText* m_staticText_hint; - wxStaticBitmap* m_bitmap_home; ScalableBitmap m_home_bmp; wxString hint1; wxString hint2; diff --git a/src/slic3r/GUI/SelectMachinePop.hpp b/src/slic3r/GUI/SelectMachinePop.hpp index 757cb08ed5..764ffd6af5 100644 --- a/src/slic3r/GUI/SelectMachinePop.hpp +++ b/src/slic3r/GUI/SelectMachinePop.hpp @@ -181,8 +181,6 @@ private: PinCodePanel* m_panel_direct_connection{nullptr}; wxWindow* m_placeholder_panel{nullptr}; HyperLink* m_hyperlink{nullptr}; // ORCA - Label* m_ping_code_text{nullptr}; - wxStaticBitmap* m_img_ping_code{nullptr}; wxBoxSizer * m_sizer_body{nullptr}; wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index a531e01262..7d77849bf3 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -149,7 +149,6 @@ private: ScalableBitmap* print_time{ nullptr }; wxStaticBitmap* weightimg{ nullptr }; ScalableBitmap* print_weight{ nullptr }; - wxBoxSizer* m_thumbnail_sizer{ nullptr }; ThumbnailPanel* m_thumbnail_panel{nullptr}; wxPanel* m_panel_image{ nullptr }; wxBoxSizer* m_image_sizer{ nullptr }; diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index 87948b28c3..93215c4e06 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -62,7 +62,6 @@ private: bool m_is_in_sending_mode{ false }; bool m_is_rename_mode{ false }; bool enable_prepare_mode{ true }; - bool m_need_adaptation_screen{ false }; bool m_export_3mf_cancel{ false }; bool m_is_canceled{ false }; bool m_tcp_try_connect{true}; @@ -81,7 +80,6 @@ private: wxStaticBitmap* m_staticbitmap{ nullptr }; ThumbnailPanel* m_thumbnailPanel{ nullptr }; ComboBox* m_comboBox_printer{ nullptr }; - ComboBox* m_comboBox_bed{ nullptr }; Button* m_rename_button{ nullptr }; Button* m_button_refresh{ nullptr }; Button* m_button_ensure{ nullptr }; diff --git a/src/slic3r/GUI/SkipPartCanvas.hpp b/src/slic3r/GUI/SkipPartCanvas.hpp index a9c8f1fec7..d70ad3718f 100644 --- a/src/slic3r/GUI/SkipPartCanvas.hpp +++ b/src/slic3r/GUI/SkipPartCanvas.hpp @@ -87,7 +87,6 @@ private: std::unordered_map < uint32_t, std::vector>> parts_triangles_; std::unordered_map < uint32_t, std::vector>> pick_parts_; std::unordered_map parts_state_; - bool gl_inited_{false}; int zoom_percent_{100}; wxPoint offset_{0,0}; wxPoint drag_start_offset_{0,0}; diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.hpp b/src/slic3r/GUI/SyncAmsInfoDialog.hpp index 248ca4032c..b0868f8c58 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.hpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.hpp @@ -307,8 +307,6 @@ private: // wxBoxSizer * m_plate_combox_sizer = nullptr; wxBoxSizer * m_mode_combox_sizer = nullptr; //wxStaticText * m_printer_title = nullptr; - wxStaticText * m_printer_device_name = nullptr; - wxStaticText * m_printer_is_map_title = nullptr; CapsuleButton * m_colormap_btn = nullptr; CapsuleButton * m_override_btn = nullptr; @@ -326,7 +324,6 @@ private: bool m_check_dirty_fialment = true; bool m_expand_more_settings = true; - bool m_image_is_top = false; const int LEFT_THUMBNAIL_SIZE_WIDTH = 100; const int RIGHT_THUMBNAIL_SIZE_WIDTH = 300; diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index c6041ba1ea..5069b76417 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -626,8 +626,6 @@ private: bool m_rebuild_kinematics_page = false; void update_input_shaper_menu(GCodeFlavor flavor); - ogStaticText* m_fff_print_host_upload_description_line {nullptr}; - ogStaticText* m_sla_print_host_upload_description_line {nullptr}; std::vector m_pages_fff; std::vector m_pages_sla; diff --git a/src/slic3r/GUI/ThermalPreconditioningDialog.hpp b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp index d13a1d19f5..57cda90b18 100644 --- a/src/slic3r/GUI/ThermalPreconditioningDialog.hpp +++ b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp @@ -31,7 +31,6 @@ private: wxStaticText *m_remaining_time_label; wxStaticText *m_explanation_label; wxButton *m_ok_button; - wxStaticBitmap *m_title_bitmap; DECLARE_EVENT_TABLE() }; diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index b9592d03fe..c4cfc8bf6d 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -112,7 +112,6 @@ private: AppConfig m_appconfig_new; wxWebView *m_browser; - wxButton * m_TestBtn; wxString m_SectionName; diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 23b3c711a1..123025ef85 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -125,10 +125,6 @@ private: wxMenuItem* m_edit_undo; wxMenuItem* m_edit_redo; wxMenuItem* m_edit_mode; - wxMenuItem* m_scroll_line_up; - wxMenuItem* m_scroll_line_down; - wxMenuItem* m_scroll_page_up; - wxMenuItem* m_scroll_page_down; wxMenuItem* m_script_string; wxMenuItem* m_script_integer; wxMenuItem* m_script_double; diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index d7dc26a741..c43c71f580 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -684,7 +684,6 @@ public: private: int m_nozzle_num = {1}; - AMSRoadShowMode m_single_ext_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSRoadShowMode m_left_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSRoadShowMode m_right_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; bool m_selected = {false}; @@ -693,7 +692,6 @@ private: int m_right_road_length = {-1}; int m_passroad_width = {6}; double m_radius = {4}; - AMSPassRoadType m_pass_road_type = {AMSPassRoadType::AMS_ROAD_TYPE_NONE}; AMSPassRoadSTEP m_pass_road_left_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; AMSPassRoadSTEP m_pass_road_right_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; @@ -866,11 +864,7 @@ private: AMSinfo m_info; wxBoxSizer * sizer_can = {nullptr}; wxGridSizer* sizer_can_extra = { nullptr }; - wxBoxSizer * sizer_humidity = { nullptr }; wxBoxSizer * sizer_item = { nullptr }; - wxBoxSizer * sizer_can_middle = {nullptr}; - wxBoxSizer * sizer_can_left = {nullptr}; - wxBoxSizer * sizer_can_right = {nullptr}; AMSExtImage* m_ext_image = { nullptr }; //the ext image upon the ext ams AMSExtText* m_ext_text = { nullptr }; //the ext text upon the ext ams }; diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index fc29d22000..b13ce19d41 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -109,7 +109,6 @@ public: void decrease_fan_speeds(); private: int m_current_speeds; - int m_target_speed; int m_min_speeds; int m_max_speeds; ScalableBitmap m_bitmap_add; diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp index 3af524c2fc..3baea061dc 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp @@ -204,7 +204,6 @@ private: Label* m_caution; wxTimer* m_refresh_timer {nullptr}; - size_t m_rack_event_token; Button* m_cancel_btn; Button* m_confirm_btn; }; From ca903faa56bcfe429ef45806d962d6e15ec7c2d9 Mon Sep 17 00:00:00 2001 From: Leo Lobato Date: Mon, 31 Aug 2026 21:36:55 +0200 Subject: [PATCH 02/23] Fix uninitialized first_layer_time on CLI-sliced 3MF (#13429) PartPlate::store_to_3mf_structure read first_layer_time from the indirect cali_bboxes_data struct, which the GUI populates at Plater.cpp:10600 but the CLI never writes to. The result was uninitialized memory leaking into slice_info.config Read directly from get_slice_result()->initial_layer_time, which is populated by GCodeProcessor::finalize() in both code paths and matches the pattern already used a few lines above for gcode_prediction. Also default-initialize PlateBBoxData::first_layer_time to 0.0f as a defense against any other consumer reading it without an explicit write. --- src/libslic3r/GCode/ThumbnailData.hpp | 2 +- src/slic3r/GUI/PartPlate.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/ThumbnailData.hpp b/src/libslic3r/GCode/ThumbnailData.hpp index 82563d64f2..bc37ad40c4 100644 --- a/src/libslic3r/GCode/ThumbnailData.hpp +++ b/src/libslic3r/GCode/ThumbnailData.hpp @@ -78,7 +78,7 @@ struct PlateBBoxData int first_extruder = 0; float nozzle_diameter = 0.4; std::string bed_type; - float first_layer_time; + float first_layer_time = 0.0f; // version 1: use view type ColorPrint (filament color) // version 2: use view type FilamentId (filament id) int version = 2; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 7bb3bec12b..59a857816e 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -6470,7 +6470,7 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w plate_data_item->filament_change_sequence = m_plate_list[i]->m_gcode_result->filament_change_sequence; plate_data_item->nozzle_change_sequence = m_plate_list[i]->m_gcode_result->nozzle_change_sequence; plate_data_item->optimal_assignment = m_plate_list[i]->m_gcode_result->optimal_assignment; - plate_data_item->first_layer_time = std::to_string(m_plate_list[i]->cali_bboxes_data.first_layer_time); + plate_data_item->first_layer_time = std::to_string(m_plate_list[i]->get_slice_result()->initial_layer_time); Print *print = nullptr; m_plate_list[i]->get_print((PrintBase **) &print, nullptr, nullptr); if (print) { From 5436e422b98ccde9148c8be4413935aef8c3b54e Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 31 Aug 2026 14:59:58 -0500 Subject: [PATCH 03/23] ci: build macOS with 3 parallel jobs instead of 1 (#15393) --- .github/workflows/build_deps.yml | 2 +- .github/workflows/build_orca.yml | 4 ++-- build_release_macos.sh | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index 4e01051073..f9e5c57c34 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -151,7 +151,7 @@ jobs: if [ -z "${{ vars.SELF_HOSTED }}" ]; then brew install automake texinfo libtool pkgconf yasm nasm fi - ./build_release_macos.sh -dx ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 + ./build_release_macos.sh -dx ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a ${{ inputs.arch }} -t 10.15 (cd "${{ github.workspace }}/deps/build/${{ inputs.arch }}" && \ find . -mindepth 1 -maxdepth 1 ! -name 'OrcaSlicer_dep' -exec rm -rf {} +) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index e8dcef0b05..c73524d6f0 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -145,7 +145,7 @@ jobs: env: ORCA_TESTS_BUILD_ONLY: ${{ inputs.arch == 'arm64' && '1' || '' }} run: | - ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 ${{ inputs.arch == 'arm64' && '-T' || '' }} + ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a ${{ inputs.arch }} -t 10.15 ${{ inputs.arch == 'arm64' && '-T' || '' }} - name: Pack unit tests mac if: runner.os == 'macOS' && !inputs.macos-combine-only && inputs.arch == 'arm64' @@ -204,7 +204,7 @@ jobs: if: runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | - ./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a universal -t 10.15 + ./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a universal -t 10.15 # Thanks to RaySajuuk, it's working now - name: Sign app and notary diff --git a/build_release_macos.sh b/build_release_macos.sh index 2fd7b26cd8..b1de5df2e4 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -4,7 +4,7 @@ set -e set -o pipefail SECONDS=0 -while getopts ":dpa:snt:xbc:i:1Tuh" opt; do +while getopts ":dpa:snt:xbc:i:j:Tuh" opt; do case "${opt}" in d ) export BUILD_TARGET="deps" @@ -38,8 +38,8 @@ while getopts ":dpa:snt:xbc:i:1Tuh" opt; do i ) export CMAKE_IGNORE_PREFIX_PATH="${CMAKE_IGNORE_PREFIX_PATH:+$CMAKE_IGNORE_PREFIX_PATH;}$OPTARG" ;; - 1 ) - export CMAKE_BUILD_PARALLEL_LEVEL=1 + j ) + export CMAKE_BUILD_PARALLEL_LEVEL="$OPTARG" ;; T ) export BUILD_TESTS="1" @@ -58,7 +58,7 @@ while getopts ":dpa:snt:xbc:i:1Tuh" opt; do echo " -b: Build without reconfiguring CMake" echo " -c: Set CMake build configuration, default is Release" echo " -i: Add a prefix to ignore during CMake dependency discovery (repeatable), defaults to /opt/local:/usr/local:/opt/homebrew" - echo " -1: Use single job for building" + echo " -j: Set the number of parallel build jobs (CMAKE_BUILD_PARALLEL_LEVEL)" echo " -T: Build and run tests (set ORCA_TESTS_BUILD_ONLY=1 to build without running)" exit 0 ;; From 9933cab59f7e266af2453ce82a0bbff4e23f23fa Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 31 Aug 2026 20:19:58 -0500 Subject: [PATCH 04/23] build: drop the pkg-config requirement from the Windows build (#15469) The FFmpeg camera view port made pkg-config a required build tool on Windows. Windows does not ship one, so every Windows developer has to install it before the build will configure: Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) Call Stack (most recent call first): CMakeLists.txt:480 (find_package) Nothing on Windows needs it. FFmpeg there is a prebuilt zip unpacked into the deps prefix, whose DLLs the top level CMakeLists already names by exact soname. The version is fixed before configure runs, so find_library against that prefix does the job, as on macOS. Also drops the CI step that installed pkg-config, gated on !SELF_HOSTED so it never ran on self-hosted runners, and re-comments the if(WIN32) block that #15234 uncommented only for that find_package. --- .github/workflows/build_orca.yml | 7 ------- CMakeLists.txt | 5 ++--- src/slic3r/CMakeLists.txt | 12 ++++++++++++ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index c73524d6f0..a9efaa7561 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -385,13 +385,6 @@ jobs: dir "C:/Program Files (x86)/Windows Kits/10/Include" choco install nsis - - name: Install pkg-config - # FFmpeg is discovered via pkg-config (pkg_check_modules LIBAV in - # src/slic3r/CMakeLists.txt); the Windows runners don't ship it. - if: runner.os == 'Windows' && !vars.SELF_HOSTED - run: | - choco install pkgconfiglite -y - - name: Build slicer Win if: runner.os == 'Windows' working-directory: ${{ github.workspace }} diff --git a/CMakeLists.txt b/CMakeLists.txt index c912cdd08f..4f5ccbeb44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -476,8 +476,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) # WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory. # We pick it from environment if it is not defined in another way # ORCA: Removed Netfabb STL fixing service support in favor of CGAL. -if(WIN32) - find_package(PkgConfig REQUIRED) +# if(WIN32) # if(NOT DEFINED WIN10SDK_PATH) # if(DEFINED ENV{WIN10SDK_PATH}) # set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}") @@ -513,7 +512,7 @@ if(WIN32) # else() # message("Building without Win10 Netfabb STL fixing service support") # endif() -endif() +# endif() if (APPLE) message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}") diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index e11b5153ae..140b1cec39 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -915,6 +915,18 @@ if (APPLE) endif () target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY}) target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include) +elseif (WIN32) + # Prebuilt shared FFmpeg from the deps install. Windows has no pkg-config, + # so resolve the import libraries out of the deps prefix directly; the DLLs + # are copied next to the executable by the top level CMakeLists. + find_library(LIBAVCODEC_LIBRARY NAMES avcodec PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBSWSCALE_LIBRARY NAMES swscale PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBAVUTIL_LIBRARY NAMES avutil PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + if (NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY) + message(FATAL_ERROR "FFmpeg (avcodec/swscale/avutil) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps.") + endif () + target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY}) + target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include) else () pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET libavcodec From 7eaff76cecd1412182efbd0106dcbc41f4e8de43 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Tue, 1 Sep 2026 08:30:45 -0500 Subject: [PATCH 05/23] build: use clang-cl for Windows CI builds (faster slicing and faster builds) (#15428) * ci: build the Windows x64 dependencies and slicer with clang-cl Passes -l -x from the Windows jobs, using the clang-cl and Ninja options added in #15373. Ninja runs each dependency's build step as a plain command, so the jobs set up a VC environment for OpenSSL's nmake. arm64 stays on MSVC for now. The deps cache key gains the compiler, so windows-x64 becomes windows-x64-clang and windows-arm64 becomes windows-arm64-msvc. * deps: select OpenSSL's ARM64 target from DEPS_ARCH CMAKE_GENERATOR_PLATFORM is only set by -A, which Ninja never receives, so the Ninja build selected the x64 target on ARM64. DEPS_ARCH is derived from CMAKE_SYSTEM_PROCESSOR and is already independent of the generator. * ci: build the Windows ARM64 dependencies and slicer with clang-cl Three dependencies need handling first. libpng and OpenCV each build an ARM SIMD path that does not compile with clang-cl, so those paths are off; PNG already had the same opt-out for Apple ARM. OCCT is built with cl, since clang-cl cannot emit one of its large generated files and there is no option to turn that off. All three are gated to Windows ARM64 with clang. --- .github/workflows/build_all.yml | 5 +++-- .github/workflows/build_check_cache.yml | 13 +++++++++---- .github/workflows/build_deps.yml | 20 ++++++++++++++++++-- .github/workflows/build_orca.yml | 17 ++++++++++++++++- deps/OCCT/OCCT.cmake | 8 ++++++++ deps/OpenCV/OpenCV.cmake | 8 ++++++++ deps/OpenSSL/OpenSSL.cmake | 2 +- deps/PNG/PNG.cmake | 4 ++++ 8 files changed, 67 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 3de2a9184b..fe4f10e81b 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -81,14 +81,15 @@ jobs: # SELF_HOSTED skips arm64 (the self-hosted Windows server is x64-only). matrix: include: ${{ fromJSON(vars.SELF_HOSTED - && '[{"arch":"x64","os":"orca-win-server"}]' - || '[{"arch":"x64","os":"windows-latest"},{"arch":"arm64","os":"windows-11-arm"}]') }} + && '[{"arch":"x64","os":"orca-win-server","compiler":"clang"}]' + || '[{"arch":"x64","os":"windows-latest","compiler":"clang"},{"arch":"arm64","os":"windows-11-arm","compiler":"clang"}]') }} # Don't run scheduled builds on forks: if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} uses: ./.github/workflows/build_check_cache.yml with: os: ${{ matrix.os }} arch: ${{ matrix.arch }} + compiler: ${{ matrix.compiler }} build-deps-only: ${{ inputs.build-deps-only || false }} force-build: ${{ github.event_name == 'schedule' }} secrets: inherit diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml index b5c5b28b95..91ea51ac60 100644 --- a/.github/workflows/build_check_cache.yml +++ b/.github/workflows/build_check_cache.yml @@ -9,6 +9,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc build-deps-only: required: false type: boolean @@ -33,10 +37,10 @@ jobs: - name: set outputs id: set_outputs env: - # Keep macOS/Windows cache keys architecture-specific. amd64 Linux passes - # no arch (key stays 'linux-clang', preserving the existing cache); - # aarch64 gets its own 'linux-clang-aarch64' key. - cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}', inputs.arch) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }} + # Anything that changes how the tree is built belongs in the key, or a job + # restores one it cannot use. Linux amd64 passes no arch deliberately, so + # 'linux-clang' keeps the cache it already has. + cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}-{1}', inputs.arch, inputs.compiler) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }} # ARM64 builds use the build-arm64 tree (see build_release_vs.bat); x64/other use build. dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }} output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}} @@ -62,6 +66,7 @@ jobs: valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }} os: ${{ inputs.os }} arch: ${{ inputs.arch }} + compiler: ${{ inputs.compiler }} build-deps-only: ${{ inputs.build-deps-only }} force-build: ${{ inputs.force-build }} secrets: inherit diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index f9e5c57c34..f7082a8a06 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -16,6 +16,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc build-deps-only: required: false type: boolean @@ -135,11 +139,22 @@ jobs: choco install strawberryperl } $arch = "${{ inputs.arch }}" + # -l selects clang-cl and -x Ninja; together they build the deps with clang. + $clang = "${{ inputs.compiler }}" -eq "clang" + $flags = if ($clang) { "-l", "-x" } else { @() } + if ($clang) { + # OpenSSL builds with nmake, which needs a VC environment. + $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + $vs = & $vswhere -latest -property installationPath + $devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" } + Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch" + } if ($arch -eq "arm64") { - .\build_release_vs.bat deps arm64 + .\build_release_vs.bat deps arm64 @flags .\build_release_vs.bat pack arm64 } else { - .\build_release_vs.bat deps + .\build_release_vs.bat deps @flags .\build_release_vs.bat pack } shell: pwsh @@ -204,4 +219,5 @@ jobs: cache-path: ${{ inputs.cache-path }} os: ${{ inputs.os }} arch: ${{ inputs.arch }} + compiler: ${{ inputs.compiler }} secrets: inherit diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index a9efaa7561..8e1e28db13 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -13,6 +13,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc macos-combine-only: required: false type: boolean @@ -395,7 +399,18 @@ jobs: # "tests" builds the unit tests too; the unit_tests_windows_* jobs run them. run: | $arch = "${{ inputs.arch }}" - if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 tests } else { .\build_release_vs.bat slicer tests } + # -l selects clang-cl and -x Ninja; together they build the slicer with clang. + $clang = "${{ inputs.compiler }}" -eq "clang" + $flags = if ($clang) { "-l", "-x" } else { @() } + if ($clang) { + # Build against the same VC toolchain and SDK as the dependencies. + $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + $vs = & $vswhere -latest -property installationPath + $devArch = if ($arch -eq "arm64") { "arm64" } else { "amd64" } + Import-Module "$vs\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=$devArch" + } + if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 @flags tests } else { .\build_release_vs.bat slicer @flags tests } shell: pwsh - name: Build system preset cache (Windows) diff --git a/deps/OCCT/OCCT.cmake b/deps/OCCT/OCCT.cmake index b4cd9facd2..62bfcf8e76 100644 --- a/deps/OCCT/OCCT.cmake +++ b/deps/OCCT/OCCT.cmake @@ -1,3 +1,10 @@ +# clang-cl cannot emit IGESAppli_GeneralModule.cxx on ARM64 +# (llvm/llvm-project#62081). cl and clang-cl share an ABI. +set(_occt_compiler_args "") +if ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(_occt_compiler_args -DCMAKE_C_COMPILER:STRING=cl -DCMAKE_CXX_COMPILER:STRING=cl) +endif () + if(WIN32) set(library_build_type "Shared") else() @@ -31,6 +38,7 @@ orcaslicer_add_cmake_project(OCCT -DBUILD_MODULE_ModelingAlgorithms=OFF -DBUILD_MODULE_ModelingData=OFF -DBUILD_MODULE_Visualization=OFF + ${_occt_compiler_args} ) # add_dependencies(dep_OCCT ${FREETYPE_PKG}) diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake index d8c7cbac3b..0290b3f47a 100644 --- a/deps/OpenCV/OpenCV.cmake +++ b/deps/OpenCV/OpenCV.cmake @@ -10,6 +10,13 @@ else () set(_options "") endif () +# carotene is OpenCV's ARM NEON HAL. It uses M_PI without _USE_MATH_DEFINES +# and does not compile with clang-cl. +set(_disable_carotene "") +if ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(_disable_carotene "-DWITH_CAROTENE=OFF") +endif () + if (IN_GIT_REPO) set(OpenCV_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV) endif () @@ -83,5 +90,6 @@ orcaslicer_add_cmake_project(OpenCV -DWITH_PROTOBUF=OFF -DWITH_WIN32UI=OFF -DHAVE_WIN32UI=FALSE + ${_disable_carotene} ) diff --git a/deps/OpenSSL/OpenSSL.cmake b/deps/OpenSSL/OpenSSL.cmake index ddeb680052..2fb4b51757 100644 --- a/deps/OpenSSL/OpenSSL.cmake +++ b/deps/OpenSSL/OpenSSL.cmake @@ -6,7 +6,7 @@ if(DEFINED OPENSSL_ARCH) set(_cross_arch ${OPENSSL_ARCH}) else() if(WIN32) - if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64") + if("${DEPS_ARCH}" STREQUAL "arm64") set(_cross_arch "VC-WIN64-ARM") else() set(_cross_arch "VC-WIN64A") diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index 332fdfe274..a73e96a0c9 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -1,6 +1,10 @@ if (APPLE) # Only disable NEON extension for Apple ARM builds, leave it enabled for Raspberry PI. set(_disable_neon_extension "-DPNG_ARM_NEON=off") +elseif ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + # libpng's CMake ignores PNG_ARM_NEON on Windows ARM64 and skips the NEON + # sources, but pngpriv.h enables NEON anyway. + set(_disable_neon_extension "-DCMAKE_C_FLAGS=/DWIN32 /D_WINDOWS /DPNG_ARM_NEON_OPT=0") else () set(_disable_neon_extension "") endif () From 96e85b1db56ae9932ea0df47f94485bb16148fd4 Mon Sep 17 00:00:00 2001 From: "Mikhail f. Shiryaev" Date: Tue, 1 Sep 2026 19:21:38 +0200 Subject: [PATCH 06/23] Fix build with disabled precompiled headers (#15484) Fix broken build with disabled PCH --- src/libslic3r/Format/OBJ.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index e066925a98..10abe8e4de 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -10,6 +10,7 @@ #include #include +#include #ifdef _WIN32 #define DIR_SEPARATOR '\\' From ec06c8788d2cc5b9efb21a7a6fa45b531418570a Mon Sep 17 00:00:00 2001 From: ndrwrbgs <10776890+ndrwrbgs@users.noreply.github.com> Date: Tue, 1 Sep 2026 12:55:16 -0500 Subject: [PATCH 07/23] Minor display text fixes (#15454) * Minor display text fixes * Update in translations --------- Co-authored-by: Ian Bassi --- localization/i18n/OrcaSlicer.pot | 6 +++--- localization/i18n/ca/OrcaSlicer_ca.po | 6 +++--- localization/i18n/cs/OrcaSlicer_cs.po | 6 +++--- localization/i18n/de/OrcaSlicer_de.po | 6 +++--- localization/i18n/en/OrcaSlicer_en.po | 6 +++--- localization/i18n/es/OrcaSlicer_es.po | 6 +++--- localization/i18n/eu/OrcaSlicer_eu.po | 6 +++--- localization/i18n/fr/OrcaSlicer_fr.po | 6 +++--- localization/i18n/hu/OrcaSlicer_hu.po | 6 +++--- localization/i18n/it/OrcaSlicer_it.po | 6 +++--- localization/i18n/ja/OrcaSlicer_ja.po | 6 +++--- localization/i18n/ko/OrcaSlicer_ko.po | 6 +++--- localization/i18n/lt/OrcaSlicer_lt.po | 6 +++--- localization/i18n/nl/OrcaSlicer_nl.po | 6 +++--- localization/i18n/pl/OrcaSlicer_pl.po | 6 +++--- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 6 +++--- localization/i18n/ru/OrcaSlicer_ru.po | 6 +++--- localization/i18n/sv/OrcaSlicer_sv.po | 6 +++--- localization/i18n/th/OrcaSlicer_th.po | 6 +++--- localization/i18n/tr/OrcaSlicer_tr.po | 6 +++--- localization/i18n/uk/OrcaSlicer_uk.po | 6 +++--- localization/i18n/vi/OrcaSlicer_vi.po | 6 +++--- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 6 +++--- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 6 +++--- src/slic3r/GUI/ConfigManipulation.cpp | 6 +++--- 25 files changed, 75 insertions(+), 75 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 6ec0ecd9cf..b183df098b 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -4497,7 +4497,7 @@ msgid "" "The value will be reset to 0." msgstr "" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "" msgid "" @@ -4528,13 +4528,13 @@ msgid "" msgstr "" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index b7eb022c0d..d78487b947 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -4893,7 +4893,7 @@ msgstr "" "\n" "El valor es restablirà a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "La paret addicional alternativa no funciona bé quan assegurar el gruix de la closca vertical està establert a Tot." msgid "" @@ -4939,7 +4939,7 @@ msgstr "" "NO - Mantenir l'alçada de la capa de suport independent" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height ha de ser més petit que layer_height.\n" @@ -4947,7 +4947,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profunditat de bloqueig ha de ser menor que la profunditat de la pell.\n" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index b521a8073b..7eeb1072c0 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -4851,7 +4851,7 @@ msgstr "" "\n" "Hodnota bude nastavena na 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Střídavá přídavná stěna nefunguje správně, pokud je zajištění tloušťky svislé stěny nastaveno na Vše." msgid "" @@ -4897,7 +4897,7 @@ msgstr "" "NE – Ponechat nezávislou výšku podpůrné vrstvy" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height musí být menší než layer_height.\n" @@ -4905,7 +4905,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Hloubka zamčení musí být menší než hloubka krycí vrstvy.\n" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 436966457a..92143b907b 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -4757,7 +4757,7 @@ msgstr "" "\n" "Der Wert wird auf 0 zurückgesetzt." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Der alternative zusätzliche Wandmodus funktioniert nicht gut, wenn die vertikale Wanddicke auf Alle eingestellt ist." msgid "" @@ -4803,7 +4803,7 @@ msgstr "" "NEIN - unabhängige Stütz-Schichthöhen beibehalten" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height muss kleiner als layer_height sein.\n" @@ -4811,7 +4811,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Die Verriegelungstiefe sollte kleiner als die Hauttiefe sein.\n" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 88fb455959..eb0a7d774c 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -4493,7 +4493,7 @@ msgid "" "The value will be reset to 0." msgstr "" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "" msgid "" @@ -4524,13 +4524,13 @@ msgid "" msgstr "" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 9c5127e50a..23294fddbd 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -4629,7 +4629,7 @@ msgstr "" "\n" "El valor se restablecerá a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Perímetro adicional alternado no funciona bien cuando \"Garantizar el grosor vertical de las cubiertas\" se establece en Todos." msgid "" @@ -4675,7 +4675,7 @@ msgstr "" "NO - Mantener la altura de capa de soportes independiente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height debe ser menor que layer_height.\n" @@ -4683,7 +4683,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profundidad de bloqueo debe ser menor que la profundidad de piel.\n" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 03e6d6685d..a5a49e8325 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -4670,7 +4670,7 @@ msgstr "" "\n" "Balioa 0ra berrezarriko da." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Horma gehigarri txandakatuak ez du ondo funtzionatzen \"Bermatu oskolaren lodiera bertikala\" Guztiak gisa ezarrita dagoenean." msgid "" @@ -4716,7 +4716,7 @@ msgstr "" "NO - 'Euskarrien Geruza-Altuera Independentea' mantendu" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height txigiagoa izan behar da layer_height baino.\n" @@ -4724,7 +4724,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Blokeo-sakonera gainazalaren sakonera baino txikiagoa izan behar da.\n" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index fc58381106..c9bd7f22ef 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -4707,7 +4707,7 @@ msgstr "" "\n" "La valeur sera remise à 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "La paroi supplémentaire alternée ne fonctionne pas bien lorsque le paramètre Assurer l’épaisseur de la coque verticale est réglée sur Tous." msgid "" @@ -4753,7 +4753,7 @@ msgstr "" "NON - Conserver la hauteur de la couche de support indépendante" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height doit être inférieur à la hauteur de couche.\n" @@ -4761,7 +4761,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profondeur de verrouillage doit être inférieure à la profondeur de la peau.\n" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 9f8a849884..9d966bf80a 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -4803,7 +4803,7 @@ msgstr "" "\n" "Az érték 0-ra áll vissza." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "A váltakozó extra fal nem működik jól, ha a függőleges héjvastagság biztosítása \"Mind\" értékre van állítva." msgid "" @@ -4849,7 +4849,7 @@ msgstr "" "NEM - Független támasz rétegmagasság megtartása" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "A seam_slope_start_height értékének kisebbnek kell lennie, mint a layer_height.\n" @@ -4857,7 +4857,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "A rögzítési mélységnek kisebbnek kell lennie, mint a felületi réteg mélysége.\n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index bc36e08d25..6190d2ab44 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -4805,7 +4805,7 @@ msgstr "" "\n" "Il valore verrà reimpostato a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Parete aggiuntiva alternativa non funziona bene quando \"Garantisci spessore verticale del guscio\" è impostato su Tutto." msgid "" @@ -4851,7 +4851,7 @@ msgstr "" "NO - Mantieni Altezza strato di supporto indipendente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height deve essere inferiore a layer_height.\n" @@ -4859,7 +4859,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profondità di intersezione deve essere inferiore alla profondità della pelle.\n" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 1b70ddbf67..327e3df661 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -4818,7 +4818,7 @@ msgstr "" "\n" "値は0にリセットされます。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "垂直シェル厚さを「すべて」に設定すると、交互追加壁が適切に機能しません。" msgid "" @@ -4864,7 +4864,7 @@ msgstr "" "いいえ - 「独立サポート積層ピッチ」を有効にする" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_heightはlayer_heightより小さくする必要があります。\n" @@ -4872,7 +4872,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "ロック深さはスキン深さより小さくする必要があります。\n" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 767674e525..e8dfca968f 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -4829,7 +4829,7 @@ msgstr "" "\n" "값이 0으로 재설정됩니다." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "세로 쉘 두께가 모두로 설정된 경우 대체 여분의 벽이 제대로 작동하지 않습니다." msgid "" @@ -4875,7 +4875,7 @@ msgstr "" "아니요 - 독립적 서포트 레이어 높이 유지" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "심_경사_시작_높이는 레이어_높이보다 작아야 합니다.\n" @@ -4883,7 +4883,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "잠금 깊이는 스킨 깊이보다 작아야 합니다.\n" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index ad5edffc9a..8fd32bdd26 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -4792,7 +4792,7 @@ msgstr "" "\n" "Reikšmė bus atstatyta į 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatyvi papildoma sienelė veikia prastai, kai vertikalaus apvalkalo storio užtikrinimas nustatytas į „Visi“." msgid "" @@ -4838,7 +4838,7 @@ msgstr "" "NE – palikti nepriklausomą atramų sluoksnio aukštį" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "„seam_slope_start_height“ turi būti mažesnis už „layer_height“\n" @@ -4846,7 +4846,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Fiksavimo gylis turėtų būti mažesnis už išorinio sluoksnio gylį.\n" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 28ad63d455..96c22fcc8b 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -5217,7 +5217,7 @@ msgstr "" "De waarde wordt teruggezet naar 0." # AI Translated -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Afwisselende extra wand werkt niet goed wanneer 'verticale wanddikte waarborgen' op Alles is ingesteld." # AI Translated @@ -5265,7 +5265,7 @@ msgstr "" # AI Translated msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height moet kleiner zijn dan layer_height.\n" @@ -5274,7 +5274,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "De vergrendeldiepte moet kleiner zijn dan de huiddiepte.\n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index e8acc62a9b..4a21d38a27 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -4907,7 +4907,7 @@ msgstr "" "\n" "Wartość zostanie zresetowana do 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatywna dodatkowa ściana działa tylko wtedy, gdy jest wyłączona opcja „zapewnij stałą grubość pionowej powłoki”." msgid "" @@ -4953,7 +4953,7 @@ msgstr "" "NIE - Zachowaj Niezależną wysokość warstwy podpory" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height musi być mniejsza niż wysokość warstwy.\n" @@ -4962,7 +4962,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Głębokość blokady powinna być mniejsza niż głębokość skóry.\n" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 1b39d4a159..931d3d510b 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -4641,7 +4641,7 @@ msgstr "" "\n" "O valor será redefinido para 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "A parede extra alternada não funciona bem quando a espessura vertical da casca está definida para Todos." msgid "" @@ -4687,7 +4687,7 @@ msgstr "" "NÃO — Manter a Altura da Camada de Suporte Independente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height precisa ser menor que layer_height.\n" @@ -4695,7 +4695,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "A profundidade do travamento deve ser menor que a profundidade da textura.\n" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 2372471707..eb24ebc759 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -4780,7 +4780,7 @@ msgstr "" "\n" "Значение будет сброшено до 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Чередующаяся дополнительная стенка не работает, если для «Сохранение толщины вертикальной оболочки» установлено значение «Все»." msgid "" @@ -4833,7 +4833,7 @@ msgstr "" "Нет – отключить черновую башню" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "Начальная высота не должна превышать высоту слоя.\n" @@ -4841,7 +4841,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Перекрытие должно быть меньше внутренней оболочки.\n" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 432000f96d..52972e241a 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -5279,7 +5279,7 @@ msgstr "" "Värdet kommer att återställas till 0." # AI Translated -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternerande extra vägg fungerar inte bra när säkerställ vertikal skaltjocklek är inställt på Alla." # AI Translated @@ -5327,7 +5327,7 @@ msgstr "" # AI Translated msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height måste vara mindre än layer_height.\n" @@ -5336,7 +5336,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Låsdjupet bör vara mindre än ytskiktets djup.\n" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index a0c0079125..4c4ac2d25f 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -4785,7 +4785,7 @@ msgstr "" "\n" "ค่าจะถูกรีเซ็ตเป็น 0" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "ผนังเสริมสำรองทำงานได้ไม่ดีเมื่อตั้งค่าความหนาของเปลือกแนวตั้งเป็นทั้งหมด" msgid "" @@ -4831,7 +4831,7 @@ msgstr "" "ไม่ - รักษาความสูงของชั้นรองรับที่เป็นอิสระ" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height ต้องเล็กกว่า layer_height\n" @@ -4839,7 +4839,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "ความลึกของล็อคควรน้อยกว่าความลึกของผิวหนัง\n" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index c3deff8bd8..833706ad70 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -4847,7 +4847,7 @@ msgstr "" "\n" "Değer 0'a sıfırlanacaktır." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak ayarlandığından emin olunduğunda iyi çalışmaz." msgid "" @@ -4893,7 +4893,7 @@ msgstr "" "HAYIR - Bağımsız Destek Katmanı Yüksekliğini Koruyun" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height, layer_height değerinden küçük olmalıdır.\n" @@ -4901,7 +4901,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Kilit derinliği cilt derinliğinden daha küçük olmalıdır.\n" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 9f57b6b71a..df06c01684 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -4781,7 +4781,7 @@ msgstr "" "\n" "Значення буде скинуто на 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Чергування додаткової стінки не працює добре, якщо для параметра \"Забезпечити товщину вертикальної оболонки\" встановлено значення \"Всі\"." msgid "" @@ -4827,7 +4827,7 @@ msgstr "" "НІ - Залишити незалежну висоту шарів підтримки" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height має бути менше висоти шару.\n" @@ -4836,7 +4836,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Глибина зчеплення має бути меншою за глибину оболонки.\n" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 00a9a558ba..e78fc51687 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -5040,7 +5040,7 @@ msgstr "" "\n" "Giá trị sẽ được đặt lại về 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Luân phiên wall phụ không hoạt động tốt khi đảm bảo độ dày shell dọc được đặt thành Tất cả." msgid "" @@ -5086,7 +5086,7 @@ msgstr "" "NO - Giữ chiều cao lớp support độc lập" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height cần nhỏ hơn layer_height.\n" @@ -5094,7 +5094,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Độ sâu khóa phải nhỏ hơn độ sâu skin.\n" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 133e0815a4..d2f07d19ae 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -4641,7 +4641,7 @@ msgstr "" "\n" "这个数值将被重置为0。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "“交替添加额外”与“确保垂直外壳厚度”的”全部“选项不兼容。" msgid "" @@ -4687,7 +4687,7 @@ msgstr "" "否 - 选择保留支撑独立层高" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height需要小于layer_height。\n" @@ -4695,7 +4695,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "锁定深度应小于表皮深度。\n" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index cf6a2519c3..456092deb5 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -4758,7 +4758,7 @@ msgstr "" "\n" "該值將會重設為 0。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "當確保垂直外殼厚度設為『全部』時,交錯額外牆壁效果不佳。" msgid "" @@ -4815,7 +4815,7 @@ msgstr "" "否 - 選擇保留獨立支撐層高" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height 必須小於 layer_height。\n" @@ -4824,7 +4824,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "鎖定深度應小於表皮深度。\n" diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d15164ef63..09b7fcfad4 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -453,7 +453,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (config->opt_bool("alternate_extra_wall") && (config->opt_enum("ensure_vertical_shell_thickness") == evstAll)) { - wxString msg_text = _(L("Alternate extra wall does't work well when ensure vertical shell thickness is set to All.")); + wxString msg_text = _(L("Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All.")); if (is_global_config) msg_text += "\n\n" + _(L("Change these settings automatically?\n" @@ -642,7 +642,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (config->opt_enum("seam_slope_type") != SeamScarfType::None && config->get_abs_value("seam_slope_start_height") >= layer_height) { - const wxString msg_text = _(L("seam_slope_start_height need to be smaller than layer_height.\nReset to 0.")); + const wxString msg_text = _(L("seam_slope_start_height needs to be smaller than layer_height.\nReset to 0.")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; @@ -656,7 +656,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con float skin_depth = config->opt_float("skin_infill_depth"); if (config->opt_float("infill_lock_depth") > skin_depth) { // xgettext:no-c-format, no-boost-format - const wxString msg_text = _(L("Lock depth should smaller than skin depth.\nReset to 50% of skin depth.")); + const wxString msg_text = _(L("Lock depth should be smaller than skin depth.\nReset to 50% of skin depth.")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; From 21aa07b9cc757331584fd5d6d00183e9cf7021bc Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Tue, 1 Sep 2026 13:02:19 -0500 Subject: [PATCH 08/23] build: add build_win.bat, a Windows build script for deps, slicer and toolchain setup (#15436) * build: add build_win.bat, a Windows build script for deps, slicer and toolchain setup build_release_vs.bat takes no options: what it builds is decided by editing it. This adds build_win.bat alongside it, with short and long options, a grouped help message, a dry-run mode that prints every command instead of running it, and one option per thing a developer actually varies - the configuration, the architecture, the compiler, the generator, the Visual Studio release, how much gets rebuilt, and where the dependency tree lives. It works from any directory, needs no developer command prompt in either generator mode, and keeps CMake ahead of Strawberry Perl on PATH so a build does not depend on how the user ordered their environment. scripts/test_build_win.ps1 covers it with table-driven cases that run the script under --dry-run and assert on the commands it prints, so nothing is configured or built. The Windows build jobs wait on that suite. Based on the script from OrcaSlicer#11097. Co-authored-by: Ocraftyone <24759591+Ocraftyone@users.noreply.github.com> * build: report what build_win.bat produced and what to do next Every successful run now ends with a block naming what it built and the commands to carry on with. Those commands repeat the flags that reproduce the run, so a rebuild after a clang-cl Ninja build is not silently an MSVC one. A failure gets a framed block naming the command that failed and a retry scoped to the stage that failed, so a slicer error does not suggest discarding an untouched dependency tree. Installing is now opt-in behind -i. The install tree is a second full copy of the build that exists mainly so the release can be zipped from it, while the build tree is already runnable, with the DLLs beside the binary and resources symlinked rather than copied. Configuring against a dependency tree that was never built now names it instead of failing several hundred lines into CMake's package resolution. scripts/test_build_win.ps1 covers all of it, and gains -Name so one case can be run without the full pass. * build: let the test options stand alone, and say which build things apply to --run-tests named two things to do and then did neither without -s, so `build_win.bat -lx --run-tests` answered "Nothing to do". Both test options now imply the slicer build they cannot happen without, unless another action was already named, so -d --tests is still a dependency build. --install-vs has turned on --install-deps the same way all along. That makes them actions, so they move to the group that says so. -i goes the other way, to the step toggles beside --no-configure and --no-gettext, since it does not stand alone and adds a step rather than describing what kind of build to make. An example shows the tests run with toolchain flags, because flags pick which build gets tested and a bare --run-tests would build and test a default tree the developer never asked for. Two help lines named defaults that were not the defaults. --build-dir said "instead of build/" and --deps-dir said "instead of deps/", but trees are named for the configuration, compiler and architecture, so build/ is only the default for a release x64 MSVC build, and deps/ is the source directory rather than a tree anything is built in. The hint for a missing dependency tree now carries the flags that reproduce the run. It said "Build them with -d", which after a clang build points at the MSVC tree, so following it left you no better off. Every other suggestion the script makes already repeats them. -k counted on the developer to read taskkill invocations as progress. It now names each image and how many processes it is about to stop, which is what explains the pause, and skips the ones that are not running instead of printing taskkill's "not found" as though something had gone wrong. No image can stop the rest. The environment example set SLIC3R_ASAN, which -a already does, teaching the long way round to a flag the script owns. It now sets options that have no flag. The note under it said "Use these for a value containing spaces. Ampersands are not supported", which named neither what "these" were an alternative to nor where ampersands were a problem. The test harness gains a NotExists field, because output cannot show what a run did not create, and two cases needed to prove exactly that. --------- Co-authored-by: Ocraftyone <24759591+Ocraftyone@users.noreply.github.com> Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- .gitattributes | 5 + .github/workflows/build_all.yml | 21 +- .gitignore | 1 + build_win.bat | 1268 +++++++++++++++++++++++++++++++ scripts/test_build_win.ps1 | 847 +++++++++++++++++++++ 5 files changed, 2141 insertions(+), 1 deletion(-) create mode 100644 build_win.bat create mode 100644 scripts/test_build_win.ps1 diff --git a/.gitattributes b/.gitattributes index 441bdfe1eb..472a0b2d1f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,3 +5,8 @@ # with CRLF line endings: it fails on the first line. Windows checkouts default # to core.autocrlf=true, so keep these LF whatever the platform. *.sh text eol=lf + +# Batch files are read by cmd.exe, which tracks a byte offset into the file to +# resume after `call :label`. With LF endings that offset can land wrong and the +# label lookup fails, so keep these CRLF whatever the platform. +*.bat text eol=crlf diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index fe4f10e81b..d991bedca6 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -33,6 +33,8 @@ on: - 'build_linux.sh' - 'build_release_vs.bat' - 'build_release_vs2022.bat' + - 'build_win.bat' + - 'scripts/test_build_win.ps1' - 'build_release_macos.sh' - 'scripts/build_preset_cache.*' - 'scripts/flatpak/**' @@ -56,6 +58,22 @@ concurrency: jobs: + # build_win.bat ships a test suite. Run it before the Windows builds. + check_build_script: + name: Windows build script tests + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + lfs: 'false' + + # Windows PowerShell rather than pwsh: the suite drives build_win.bat + # through cmd, and the two differ in how they quote native arguments. + - name: Run the build script test suite + shell: powershell + run: .\scripts\test_build_win.ps1 + build_linux: strategy: fail-fast: false @@ -83,8 +101,9 @@ jobs: include: ${{ fromJSON(vars.SELF_HOSTED && '[{"arch":"x64","os":"orca-win-server","compiler":"clang"}]' || '[{"arch":"x64","os":"windows-latest","compiler":"clang"},{"arch":"arm64","os":"windows-11-arm","compiler":"clang"}]') }} + needs: check_build_script # Don't run scheduled builds on forks: - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} + if: ${{ !cancelled() && needs.check_build_script.result == 'success' && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} uses: ./.github/workflows/build_check_cache.yml with: os: ${{ matrix.os }} diff --git a/.gitignore b/.gitignore index cdcd1c90b4..e36d0dfa49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Build Build.bat /build*/ +/out/ CMakeLists.txt.user CMakeUserPresets.json **/CMakeLists.txt.autosave diff --git a/build_win.bat b/build_win.bat new file mode 100644 index 0000000000..926468687b --- /dev/null +++ b/build_win.bat @@ -0,0 +1,1268 @@ +@echo off + +REM OrcaSlicer build script for Windows. Run with -h for the options. + +REM =========================================================================== +REM Script setup +REM =========================================================================== + +setlocal enableDelayedExpansion + +REM A manually set errorlevel shadows the real one, and cmd then stops +REM updating it after each command. Clear it, inside the scope above so +REM the caller keeps whatever it had. +set errorlevel= + +REM Everything here is relative to the repository root: deps/, build/ and +REM the 7z in tools/. Work from there whatever directory this was called +REM from. setlocal above restores the caller directory on exit. +cd /d "%~dp0" +set "WP=%CD%" +set "script_name=%~nx0" + +set argdefn=0 + +REM Both macros stop on a non-zero errorlevel; error_check also says so. +REM +REM error_check jumps to :die rather than calling exit /b where it stands. +REM Every use of it is inside a parenthesised block, and an exit /b there +REM ends the script but leaves the process exit code at zero, so a failed +REM build reported success. goto unwinds the block first. +set "repeat_error=if not ^!errorlevel^! == 0 exit /b ^!errorlevel^!" +set "error_check=if not ^!errorlevel^! == 0 (set rc=^!errorlevel^!& goto :die)" + +set VSWHERE="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" + +REM =========================================================================== +REM Command line options +REM =========================================================================== + +call :add_section "Actions" +call :add_arg build_deps bool d deps "Download and build the dependencies, needed before -s" +call :add_arg build_slicer bool s slicer "Build OrcaSlicer" +call :add_arg build_tests bool "" tests "Build the unit tests" +call :add_arg run_tests bool "" run-tests "Build the unit tests and run them" +call :add_arg pack_deps bool p pack "Bundle the built dependencies into a zip file" +call :add_arg install_deps bool u install-deps "Install or update CMake, Perl and Git with WinGet" +call :add_arg install_vs string "" install-vs "Also install Visual Studio: buildtools or ide" +call :add_arg kill_jobs bool k kill-jobs "Kill any running build and compiler processes" +call :add_arg print_help bool h help "Print this help message" + +call :add_section "Build configuration" +call :add_arg config string "" config "release, debug, relwithdebinfo or minsizerel (default: release)" +call :add_arg target_arch string "" arch "x64 or arm64 (default: the host architecture)" +call :add_arg slicer_asan bool a asan "Build the slicer with ASAN enabled" + +call :add_section "Toolchain" +call :add_arg use_clang_cl bool l clang-cl "Use clang-cl as the compiler" +call :add_arg use_msvc bool "" msvc "Use cl as the compiler (default)" +call :add_arg use_ninja bool x ninja "Use the Ninja Multi-Config generator" +call :add_arg use_msbuild bool "" msbuild "Use the Visual Studio generator (default)" +call :add_arg vs_version string "" vs "Visual Studio release: 2019, 2022 or 2026 (default: autodetect)" +call :add_arg clang_path string "" clang-path "Path to clang-cl.exe, requires -x (default: the one from Visual Studio)" + +call :add_section "How much gets rebuilt" +call :add_arg slicer_target string "" slicer-target "Build one slicer target instead of all, e.g. libslic3r" +call :add_arg deps_target string t deps-target "Build one dependency instead of all, e.g. dep_Boost" +call :add_arg no_configure bool "" no-configure "Build the existing tree without configuring" +call :add_arg no_gettext bool "" no-gettext "Skip regenerating the translations" +call :add_arg install_slicer bool i install "Install into the build tree's OrcaSlicer folder" +call :add_arg jobs string j jobs "Limit the build to N parallel jobs" +call :add_arg clean bool c clean "Remove the trees this run builds, deps with -d, slicer with -s" + +call :add_section "Paths and extra arguments" +call :add_arg deps_dir string "" deps-dir "Dependency tree to build in or use, instead of the one named for this build" +call :add_arg slicer_dir string "" build-dir "Slicer build directory, instead of the one named for this build" +call :add_arg deps_args rawstring "" deps-args "Extra arguments for the deps configure, quoted" +call :add_arg slicer_args rawstring "" slicer-args "Extra arguments for the slicer configure, quoted" + +call :add_section "Diagnostics" +call :add_arg verbose bool v verbose "Show the compiler command lines" +call :add_arg dry_run bool D dry-run "Print the commands instead of running them" + +REM =========================================================================== +REM Lookup tables +REM =========================================================================== + +REM Known build configurations: the CMake build type, the directory to build +REM in, and the dependency tree to build against. Adding one means adding all +REM three entries in its group. The name is matched case-insensitively because +REM batch variable names are, so --config Debug finds cfg_type_debug. +REM +REM Release, RelWithDebInfo and MinSizeRel all link the /MD dependencies, so +REM they share one tree rather than each paying for its own. Debug needs /MDd +REM and cannot. deps/CMakeLists.txt makes the same split: only Debug turns on +REM DEP_DEBUG, while RelWithDebInfo just adds debug info to a release build. +set "cfg_type_release=Release" +set "cfg_dir_release=build" +set "cfg_dep_release=build" + +set "cfg_type_debug=Debug" +set "cfg_dir_debug=build-dbg" +set "cfg_dep_debug=build-dbg" + +set "cfg_type_relwithdebinfo=RelWithDebInfo" +set "cfg_dir_relwithdebinfo=build-dbginfo" +set "cfg_dep_relwithdebinfo=build" + +set "cfg_type_minsizerel=MinSizeRel" +set "cfg_dir_minsizerel=build-minsize" +set "cfg_dep_minsizerel=build" + +set "cfg_default=release" + +REM Known Visual Studio releases: the generator name, the suffix in the +REM WinGet id, and the major version vswhere and msbuild report. Adding a +REM release means adding all three entries in its group. +set "vs_gen_2019=Visual Studio 16 2019" +set "vs_winget_2019=.2019" +set "vs_year_16=2019" + +set "vs_gen_2022=Visual Studio 17 2022" +set "vs_winget_2022=.2022" +set "vs_year_17=2022" + +REM 2026 is the unversioned WinGet id: there is no Microsoft.VisualStudio.2026. +set "vs_gen_2026=Visual Studio 18 2026" +set "vs_winget_2026=" +set "vs_year_18=2026" + +set "vs_default=2026" + +REM What --install-vs asks WinGet for. +set "vs_edition_buildtools=BuildTools" +set "vs_edition_ide=Community" + +REM =========================================================================== +REM Command line handling +REM =========================================================================== + +call :handle_args %* +%error_check% + +if "%debugscript%" == "ON" ( + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, !range_end!) do ( + call :echo_var !argdefs[%%i].VARIABLE_NAME! + ) +) + +if "%~1" == "" ( + set print_help=ON + goto :before_print_help +) + +set "all_args=%*" +if "%all_args:"=%" == "" ( + set print_help=ON +) + +:before_print_help + +if "%print_help%" == "ON" ( + call :print_help_msg + exit /b 0 +) + +REM Say so before the first + line scrolls past. +if "%dry_run%" == "ON" echo Dry run: printing commands without running them. + +if "%kill_jobs%" == "ON" ( + echo Stopping build processes. + call :kill_image MSBuild.exe + call :kill_image ninja.exe + call :kill_image cl.exe + call :kill_image clang-cl.exe + exit /b 0 +) + +REM Neither test option can happen without building the slicer, so asking for +REM one asks for that, unless another action was already named. +if "%build_deps%%build_slicer%%pack_deps%%install_deps%%install_vs%" == "" ( + if "%build_tests%" == "ON" set "build_slicer=ON" + if "%run_tests%" == "ON" set "build_slicer=ON" +) + +REM Options like --config or -j only shape a build. Without one of the actions +REM there is nothing for them to shape, so say so rather than resolving a whole +REM build and reporting it took no time. The block above may have added one. +if "%build_deps%%build_slicer%%pack_deps%%install_deps%%install_vs%" == "" ( + echo Nothing to do. Pick an action: -d, -s, -p or -u. Run -h for the full list. + exit /b 1 +) + +REM =========================================================================== +REM Visual Studio and target architecture +REM =========================================================================== + +REM Asking for Visual Studio is asking to install prerequisites. Resolve the +REM edition here rather than testing whether the name is defined: `if defined` +REM stops at the first space, so "ide " would pass and then expand to nothing. +set "vs_edition=" +if not "%install_vs%" == "" ( + set "install_deps=ON" + set "vs_edition=!vs_edition_%install_vs%!" + if "!vs_edition!" == "" ( + echo Unknown Visual Studio edition "%install_vs%". Known editions: buildtools, ide. + exit /b 1 + ) +) +REM Autodetection overwrites vs_version, so snapshot whether it was pinned. +set "vs_pinned=%vs_version%" + +if not "%vs_version%" == "" if "%use_ninja%" == "ON" ( + echo --vs and --ninja select different generators. + exit /b 1 +) +REM install(TARGETS OrcaSlicer) carries no OPTIONAL, so installing a tree +REM whose executable was never built fails. Say so before the build starts. +if "%build_slicer%" == "ON" if "%install_slicer%" == "ON" if not "%slicer_target%" == "" if /I not "%slicer_target%" == "OrcaSlicer" ( + echo --install needs the executable, but --slicer-target names "%slicer_target%". + exit /b 1 +) +if not "%vs_version%" == "" if "!vs_gen_%vs_version%!" == "" ( + echo Unknown Visual Studio release "%vs_version%". Known releases: 2019, 2022, 2026. + exit /b 1 +) + +call :autodetect_vs +%error_check% + +REM autodetect leaves this empty when it finds nothing usable. +if "%vs_version%" == "" set "vs_version=%vs_default%" + +REM Default to the host CPU. PROCESSOR_ARCHITEW6432 covers a 32-bit shell on +REM a 64-bit OS, where PROCESSOR_ARCHITECTURE reads x86. +set arch=x64 +if /I "%PROCESSOR_ARCHITECTURE%" == "ARM64" set arch=ARM64 +if /I "%PROCESSOR_ARCHITEW6432%" == "ARM64" set arch=ARM64 +if not "%target_arch%" == "" ( + if /I "%target_arch%" == "arm64" ( + set arch=ARM64 + ) else ( + if /I "%target_arch%" == "x64" ( + set arch=x64 + ) else ( + echo Unknown architecture "%target_arch%". Expected x64 or arm64. + exit /b 1 + ) + ) +) + +REM =========================================================================== +REM Installing prerequisites +REM =========================================================================== + +if "%install_deps%" == "ON" ( + where winget >nul 2>nul + if not !errorlevel! == 0 ( + echo WinGet was not found + exit /b 1 + ) + REM Keep going after one failure so the rest still get installed, then + REM name the ones that did not rather than claiming they all did. + set "install_failed=" + set "winget_args=-e --source=winget" + if not "%install_vs%" == "" ( + set "vs_year=!vs_winget_%vs_version%!" + set "ide_component_flag=" + if /I "%install_vs%" == "ide" set "ide_component_flag=Microsoft.VisualStudio.Component.VC.CoreIde" + REM Two components: the clang-cl compiler itself, and the MSBuild + REM toolset that lets the Visual Studio generator drive it. One + REM install covers both x64 and ARM64. + set "clang_cl_flag=" + if "%use_clang_cl%" == "ON" set "clang_cl_flag=Microsoft.VisualStudio.Component.VC.Llvm.Clang Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset" + REM The x64 tools build the host tooling either way; targeting ARM64 + REM needs its own toolset on top of them. + set "arm64_tools_flag=" + if /I "%arch%" == "ARM64" set "arm64_tools_flag=Microsoft.VisualStudio.Component.VC.Tools.ARM64" + call :print_and_run winget install !winget_args! --id=Microsoft.VisualStudio!vs_year!.!vs_edition! --force --custom "--add !ide_component_flag! Microsoft.VisualStudio.Component.VC.Tools.x86.x64 !arm64_tools_flag! Microsoft.VisualStudio.Component.VC.CMake.Project Microsoft.VisualStudio.Component.Windows11SDK.22621 !clang_cl_flag!" + call :note_failed "Visual Studio" !errorlevel! + ) + + REM CMake 4 dropped pre-3.5 policy support and ships incomplete ASM_ARMASM + REM linker modules, which breaks Boost.Context on ARM64. CI pins the same way. + set "cmake_version_flag=" + if /I "%arch%" == "ARM64" set "cmake_version_flag=--version 3.31.8" + call :print_and_run winget install !winget_args! --id=Kitware.CMake !cmake_version_flag! + call :note_failed CMake !errorlevel! + call :print_and_run winget install !winget_args! --id=StrawberryPerl.StrawberryPerl + call :note_failed Perl !errorlevel! + call :print_and_run winget install !winget_args! --id=Git.Git + call :note_failed Git !errorlevel! + + if defined install_failed ( + set "die_reason=Failed to install:!install_failed!" + set rc=1 + goto :die + ) + + REM Flags to repeat back in the deferred build command. + set "next_flags=" + if "%use_clang_cl%" == "ON" set "next_flags=!next_flags! -l" + if "%use_ninja%" == "ON" set "next_flags=!next_flags! -x" + if not "%target_arch%" == "" set "next_flags=!next_flags! --arch %target_arch%" + + REM Name the build that was deferred, not a fuller one. + set "next_actions=" + if "%build_deps%" == "ON" set "next_actions=!next_actions!d" + if "%build_slicer%" == "ON" set "next_actions=!next_actions!s" + if "%pack_deps%" == "ON" set "next_actions=!next_actions!p" + if "!next_actions!" == "" set "next_actions=ds" + + echo. + echo ------------------------------------------------------------- + REM A dry run installed nothing, so do not report that it did. + if "%dry_run%" == "ON" ( + echo Dry run: nothing was installed. + ) else ( + echo Installed the prerequisites. + ) + echo. + echo Next + REM The new PATH cannot reach this shell, so the build runs in the next one. + echo Restart this shell so the new PATH takes effect, then + echo build_win.bat -!next_actions!!next_flags! + echo ------------------------------------------------------------- + exit /b 0 +) + +REM =========================================================================== +REM Resolving the build +REM =========================================================================== + +REM A value ending in a backslash escapes the closing quote when it is +REM spliced into a command line: -B "D:\tree\" reaches cmake as D:\tree" +REM and swallows the argument after it. No path here needs one. +call :trim_slash deps_dir +call :trim_slash slicer_dir +call :trim_slash clang_path + +REM Naming a specific clang-cl is naming clang-cl. Doing it before the +REM conflict check below means --clang-path with --msvc is caught there. +if not "%clang_path%" == "" set "use_clang_cl=ON" +if not "%clang_path%" == "" if not exist "%clang_path%" ( + echo No clang-cl at "%clang_path%". + exit /b 1 +) +REM A trailing backslash matches directories only, and a directory would +REM otherwise reach CMake as the compiler. +if not "%clang_path%" == "" if exist "%clang_path%\" ( + echo "%clang_path%" is a directory. Name clang-cl.exe itself. + exit /b 1 +) + +REM Naming a default explicitly is fine; naming both sides is not. +if "%use_clang_cl%" == "ON" if "%use_msvc%" == "ON" ( + echo --clang-cl and --msvc select different compilers. + exit /b 1 +) +if "%use_ninja%" == "ON" if "%use_msbuild%" == "ON" ( + echo --ninja and --msbuild select different generators. + exit /b 1 +) + +set "generator=!vs_gen_%vs_version%!" +if "%use_ninja%" == "ON" ( + set "generator=Ninja Multi-Config" + call :setup_dev_env + %error_check% + set "using_ninja=ON" +) + +if "%using_ninja%" == "ON" ( + if "%use_clang_cl%" == "ON" ( + REM Bare, so it resolves from the PATH the dev shell just set up, which + REM is the clang shipped with Visual Studio. --clang-path names another. + set "clang_exe=clang-cl.exe" + if not "%clang_path%" == "" set "clang_exe="%clang_path%"" + set "gen_args=-DCMAKE_C_COMPILER=!clang_exe! -DCMAKE_CXX_COMPILER=!clang_exe!" + ) +) else ( + set "gen_args=-A !arch!" + if "%use_clang_cl%" == "ON" ( + set "gen_args=!gen_args! -T ClangCL" + ) +) + +if not "%clang_path%" == "" if not "%using_ninja%" == "ON" ( + echo --clang-path needs the Ninja generator; add -x. The Visual Studio + echo generator builds clang-cl through its own ClangCL toolset. + exit /b 1 +) + +REM Ninja prints [123/456] by default, which says nothing about how far +REM along it is or how long is left. %p is a percentage, %w and %W are +REM elapsed and remaining, but those two arrived in ninja 1.12 and an +REM unknown placeholder is fatal rather than a warning, so an older ninja +REM would abort the build instead of degrading. Ask which one is on PATH. +REM Keep %p first inside the brackets: VS Code reads the first digits% +REM it finds there to drive its progress bar. +if "%using_ninja%" == "ON" if not defined NINJA_STATUS ( + set "nj_major=0" + set "nj_minor=0" + for /f "tokens=1,2 delims=." %%a in ('ninja --version 2^>nul') do ( + set "nj_major=%%a" + set "nj_minor=%%b" + ) + set "NINJA_STATUS=[%%s/%%t %%p :: %%e] " + if !nj_major! GTR 1 set "NINJA_STATUS=[%%f/%%t %%p :: %%w / %%W] " + if !nj_major! EQU 1 if !nj_minor! GEQ 12 set "NINJA_STATUS=[%%f/%%t %%p :: %%w / %%W] " +) +if "%verbose%" == "ON" if defined NINJA_STATUS echo Ninja progress format: !NINJA_STATUS! + +if "%deps_target%" == "" ( + set "deps_target=deps" +) + +REM Only the builds need CMake. -p zips an existing tree with 7z. +if "%build_deps%%build_slicer%" == "" goto :cmake_ready + +cmake --version >nul 2>nul +if not !errorlevel! == 0 ( + echo CMake was not found. Have you installed the system dependencies? + exit /b 1 +) + +REM Strawberry Perl ships a c/bin full of GNU tools, and the top-level +REM CMakeLists refuses to configure when it precedes CMake on PATH. Put a +REM real CMake first, skipping any hit from Strawberry's own cmake.exe, or +REM this pins exactly the order it is meant to undo. The findstr needle +REM must not end in a backslash, which escapes the quote and matches nothing. +set "cmake_bin=" +for /f "delims=" %%i in ('where cmake 2^>nul') do ( + if not defined cmake_bin ( + echo %%~dpi| findstr /i /c:"\Strawberry\c\bin" >nul || set "cmake_bin=%%~dpi" + ) +) +if defined cmake_bin set "PATH=%cmake_bin%;%PATH%" +:cmake_ready + +if "%config%" == "" set "config=%cfg_default%" + +REM Judge what the lookup returned rather than whether the name is defined. +REM "release " passed `if defined` and then expanded to nothing, leaving an +REM empty build directory for --clean to remove. +set "build_type=!cfg_type_%config%!" +set "tree_name=!cfg_dir_%config%!" +set "dep_name=!cfg_dep_%config%!" +set "bad_config=" +if "!build_type!" == "" set "bad_config=ON" +if "!tree_name!" == "" set "bad_config=ON" +if "!dep_name!" == "" set "bad_config=ON" +if defined bad_config ( + echo Unknown configuration "%config%". Known configurations: release, debug, relwithdebinfo, minsizerel. + exit /b 1 +) + +REM A tree is only good for the configuration, compiler and architecture it +REM was made with. Change one underneath it and CMake resets its cache and +REM carries on, leaving ExternalProject stamps from the old toolchain and +REM sub-builds that fail scattershot on things that build fine from scratch. +REM So name the tree for all three. MSVC x64 keeps the historical names. +if "%use_clang_cl%" == "ON" set "tree_name=!tree_name!-clang" +if /I "%arch%" == "ARM64" set "tree_name=!tree_name!-arm64" +if "%use_clang_cl%" == "ON" set "dep_name=!dep_name!-clang" +if /I "%arch%" == "ARM64" set "dep_name=!dep_name!-arm64" + +set "build_dir=!tree_name!" +if not "%slicer_dir%" == "" set "build_dir=%slicer_dir%" + +REM Resolve it once. --build-dir may arrive absolute, relative, or with +REM forward slashes, and anything that prints the directory has to show a +REM real path rather than one glued onto the repository root. +for %%p in ("!build_dir!") do set "build_full=%%~fp" +echo Configuration: %build_type%, %arch% + +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" + +set "TESTS_FLAG=-DBUILD_TESTS=OFF" +if "%build_tests%" == "ON" set "TESTS_FLAG=-DBUILD_TESTS=ON" +if "%run_tests%" == "ON" set "TESTS_FLAG=-DBUILD_TESTS=ON" + +set "SLICER_TARGET_FLAG=" +if not "%slicer_target%" == "" set "SLICER_TARGET_FLAG=--target %slicer_target%" + +set "DEP_TREE=deps/!dep_name!" +set "DEP_TREE_PACK=%WP%\deps\!dep_name!" +set "DEP_TREE_FLAG=" +if not "%deps_dir%" == "" ( + set "DEP_TREE=%deps_dir%" + set "DEP_TREE_PACK=%deps_dir%" + set "DEP_TREE_FLAG=-DDEP_BUILD_DIR="%deps_dir%"" +) + +REM CMakeLists derives DEP_BUILD_DIR from the build directory NAME, which is +REM wrong whenever the build tree and the dependency tree are named +REM differently, as they are for every configuration that shares the release +REM dependencies. Name it outright once the two stop matching. +if "!DEP_TREE_FLAG!" == "" if not "%build_dir%" == "!dep_name!" ( + set "DEP_TREE_FLAG=-DDEP_BUILD_DIR="%WP%\deps\!dep_name!"" +) + +set "VERBOSE_FLAG=" +if "%verbose%" == "ON" set "VERBOSE_FLAG=--verbose" + +REM The two generators count differently. +REM +REM Ninja counts compilers, so -j is exact. The deps superbuild reads +REM CMAKE_BUILD_PARALLEL_LEVEL for the sub-builds it drives. +REM +REM MSBuild turns -j into /m, which counts projects, not compilers: /MP still +REM runs one cl per core inside each one, so -j 1 would not give one +REM compiler. CL_MPCount sets the /MP degree instead, and MSBuild reads +REM properties from the environment, so nested deps builds inherit it. /m +REM stays at its default of one project at a time. +set "JOBS_FLAG=" +if "%jobs%" == "" goto :jobs_ready +echo %jobs%| findstr /r /c:"^[1-9][0-9]*$" >nul +if errorlevel 1 ( + echo Invalid --jobs value "%jobs%". Expected a positive integer. + exit /b 1 +) +if "%using_ninja%" == "ON" ( + set "JOBS_FLAG=-j %jobs%" + set "CMAKE_BUILD_PARALLEL_LEVEL=%jobs%" +) else ( + set "CL_MPCount=%jobs%" +) +echo Parallel jobs: %jobs% +:jobs_ready + +REM The flags that reproduce this run, for the commands the summary suggests. +REM Kept in three parts because they are not all relevant everywhere: a deps +REM retry has no use for --build-dir, and the bundle line names its own tree. +set "recall_tc=" +if "%use_clang_cl%" == "ON" set "recall_tc=!recall_tc! -l" +if "%using_ninja%" == "ON" set "recall_tc=!recall_tc! -x" +if /I not "%config%" == "%cfg_default%" set "recall_tc=!recall_tc! --config %config%" +if not "%target_arch%" == "" set "recall_tc=!recall_tc! --arch %target_arch%" +if not "%vs_pinned%" == "" set "recall_tc=!recall_tc! --vs %vs_pinned%" +if not "%clang_path%" == "" set "recall_tc=!recall_tc! --clang-path "%clang_path%"" + +set "recall_i=" +if "%install_slicer%" == "ON" set "recall_i= -i" +set "recall_dd=" +if not "%deps_dir%" == "" set "recall_dd= --deps-dir "%deps_dir%"" +set "recall_bd=" +if not "%slicer_dir%" == "" set "recall_bd= --build-dir "%slicer_dir%"" +set "recall=!recall_tc!!recall_i!!recall_dd!!recall_bd!" + +REM =========================================================================== +REM Running the build +REM =========================================================================== + +REM CMake 4 refuses a pre-3.5 policy version; several deps still ask for one. +set CMAKE_POLICY_VERSION_MINIMUM=3.5 + +set _START_TIME=%TIME% + +if "%build_deps%" == "ON" ( + REM Which stage is running, so a failure can name it and suggest a + REM retry scoped to it rather than to the whole run. + set "stage=d" + echo Building the dependencies... + + if "%clean%" == "ON" ( + call :clean_tree "!DEP_TREE!" + %error_check% + ) + + if not "%no_configure%" == "ON" ( + call :print_and_run cmake -S deps -B "!DEP_TREE!" -G "%generator%" %gen_args% -DCMAKE_BUILD_TYPE=%build_type% !deps_args! %ORCA_DEPS_CMAKE_ARGS% + %error_check% + ) + + call :print_and_run cmake --build "!DEP_TREE!" --config %build_type% --target %deps_target% %JOBS_FLAG% %VERBOSE_FLAG% + %error_check% +) + +if "%pack_deps%" == "ON" ( + set "stage=p" + setlocal ENABLEDELAYEDEXPANSION + call :print_and_run cd /d "!DEP_TREE_PACK!" + %error_check% + REM date /t prints in the machine locale and its field order varies by + REM region, which is how the inherited parse produced YYYYDDMM. Ask for + REM an unambiguous stamp instead. powershell.exe lives under + REM System32\WindowsPowerShell rather than System32, so a trimmed PATH + REM cannot find it and the stamp comes back empty. + set "ps=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" + set "build_date=" + for /f %%d in ('!ps! -NoProfile -Command "Get-Date -Format yyyyMMdd"') do set "build_date=%%d" + if "!build_date!" == "" ( + set "die_reason=Could not read the date from !ps!." + set rc=1 + goto :die + ) + + REM A bundle is only good for what built it, so it carries the same parts + REM as the dependency tree. Release x64 on cl keeps the plain name. + set "dep_flavour=!cfg_dep_%config%!" + set "dep_flavour=!dep_flavour:build=!" + set "dep_variant=%arch%" + if "%use_clang_cl%" == "ON" set "dep_variant=!dep_variant!-clang" + set "dep_variant=!dep_variant!!dep_flavour!" + echo Packing the dependencies: OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip + + REM tools\7z.exe loads its codecs from a 7z.dll, and the repo does not + REM carry one, so it can only archive on a machine that has 7-Zip + REM installed. Windows has shipped bsdtar in System32 since 10 1803 and + REM it writes an ordinary deflate zip, so fall back to that rather than + REM failing on a machine that has everything it needs. + set "zipper=" + if exist "%WP%\tools\7z.dll" set "zipper=%WP%/tools/7z.exe a" + if not defined zipper if exist "%SystemRoot%\System32\tar.exe" set "zipper=%SystemRoot%\System32\tar.exe -a -c -f" + if not defined zipper ( + set "die_reason=No archiver. tools\7z.exe needs a 7z.dll, and this Windows has no System32\tar.exe." + set "die_hint=Install 7-Zip, or copy its 7z.dll into tools\." + set rc=1 + goto :die + ) + + call :print_and_run !zipper! OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip OrcaSlicer_dep + %error_check% + REM endlocal is about to discard the name, so carry the path out with it. + for %%z in ("!DEP_TREE_PACK!\OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip") do endlocal & set "bundle=%%~fz" +) + +if "%build_slicer%" == "ON" ( + set "stage=s" + echo Building OrcaSlicer... + + if "%clean%" == "ON" ( + call :clean_tree "%build_dir%" + %error_check% + ) + + if "%slicer_asan%" == "ON" ( + set "slicer_args=!slicer_args! -DSLIC3R_ASAN=ON" + ) + + REM Configuring against a tree that was never built fails deep inside + REM package resolution. Name it here instead. Skipped when -d is about to + REM build it in this same run, and under a dry run, which configures + REM nothing and must not depend on what happens to be on the machine. + if not "%dry_run%" == "ON" if not "%no_configure%" == "ON" if not "%build_deps%" == "ON" if not exist "!DEP_TREE!\OrcaSlicer_dep\usr\local\" ( + for %%p in ("!DEP_TREE!") do set "die_reason=Dependencies not found at %%~fp" + set "die_hint=Build them with build_win.bat -d!recall!." + REM Only worth suggesting to someone who did not name a tree. + if "%deps_dir%" == "" set "die_hint=Build them with build_win.bat -d!recall!, or point --deps-dir at an existing tree." + set rc=1 + goto :die + ) + + if not "%no_configure%" == "ON" ( + call :print_and_run cmake -B "%build_dir%" -G "%generator%" %gen_args% -DORCA_TOOLS=ON %SIG_FLAG% %TESTS_FLAG% %DEP_TREE_FLAG% -DCMAKE_BUILD_TYPE=%build_type% !slicer_args! %ORCA_SLICER_CMAKE_ARGS% + %error_check% + ) + + call :print_and_run cmake --build "%build_dir%" --config %build_type% %SLICER_TARGET_FLAG% %JOBS_FLAG% %VERBOSE_FLAG% + %error_check% + + if "%run_tests%" == "ON" ( + call :print_and_run ctest --test-dir "%build_dir%/tests" -C %build_type% --output-on-failure + %error_check% + ) + + if not "%no_gettext%" == "ON" ( + call :print_and_run call scripts/run_gettext.bat + %error_check% + ) + + if "%install_slicer%" == "ON" ( + call :print_and_run cmake --build "%build_dir%" --target install --config %build_type% + %error_check% + ) +) + +REM Elapsed wall clock. The 1%%a-100 trick strips a leading zero, which set /A +REM would otherwise read as octal, and a negative total means the build ran +REM past midnight. +for /f "tokens=1-3 delims=:.," %%a in ("%_START_TIME: =0%") do set /a "_start_s=(1%%a-100)*3600+(1%%b-100)*60+(1%%c-100)" +for /f "tokens=1-3 delims=:.," %%a in ("%TIME: =0%") do set /a "_end_s=(1%%a-100)*3600+(1%%b-100)*60+(1%%c-100)" +set /a "_elapsed=_end_s - _start_s" +if %_elapsed% lss 0 set /a "_elapsed+=86400" +set /a "_hours=_elapsed / 3600" +set /a "_remainder=_elapsed - _hours * 3600" +set /a "_mins=_remainder / 60" +set /a "_secs=_remainder - _mins * 60" +call :summary +exit /b 0 + +REM Reached only by error_check, from the top level, where exit /b works. +REM The hash block is what CMakeLists already uses for a build that cannot +REM continue, so it means the same thing here. +:die +echo. +echo ############################################################# +REM The paths that set die_reason had no command fail, so last_cmd there +REM names one that succeeded. +if defined die_reason echo !die_reason! +if not defined die_reason if defined last_cmd echo Failed: !last_cmd! +if defined die_hint echo !die_hint! +echo Exit code %rc%. +REM -v only makes the build verbose, so it has nothing to offer a configure +REM that failed before any compiler ran. +set "failed_configure=" +if "!last_cmd:~0,9!" == "cmake -B " set "failed_configure=ON" +if "!last_cmd:~0,9!" == "cmake -S " set "failed_configure=ON" +REM Scoped to the stage that failed. Offering -c for the whole run would +REM discard a dependency tree that was not at fault, and neither flag does +REM anything for a failed pack. A named reason already carries its own advice. +if "!stage!" == "d" set "recall=!recall_tc!!recall_dd!" +if not defined die_reason if defined stage if not "!stage!" == "p" ( + echo. + echo Try + if not defined failed_configure echo build_win.bat -!stage!!recall! -v show the failing compiler command line + echo build_win.bat -!stage!!recall! -c discard that tree and configure from scratch +) +echo ############################################################# +exit /b %rc% + +REM =========================================================================== +REM Function definitions +REM =========================================================================== + +REM summary - what was produced, and what to do with it next. A dry run says +REM so rather than claiming the files exist, but every line below that is +REM worked out the same way in either run. +:summary + for %%p in ("!DEP_TREE!") do set "dep_full=%%~fp" + REM The binary only leaves the build tree when it is installed. + set "slicer_exe=%build_dir%\src\%build_type%\orca-slicer.exe" + if "%install_slicer%" == "ON" set "slicer_exe=%build_dir%\OrcaSlicer\orca-slicer.exe" + for %%p in ("!slicer_exe!") do set "slicer_full=%%~fp" + REM Naming a target builds it and its dependencies, not its dependents, + REM so only a full build or the executable's own target relinks. + set "linked=ON" + if not "%slicer_target%" == "" set "linked=" + if /I "%slicer_target%" == "OrcaSlicer" set "linked=ON" + + echo. + echo ------------------------------------------------------------- + if "%dry_run%" == "ON" ( + echo Dry run: nothing was built. A real run would report: + ) else ( + echo Build completed in %_hours%h %_mins%m %_secs%s + ) + + if "%build_deps%" == "ON" echo Dependencies !dep_full! + if "%build_slicer%" == "ON" if "%linked%" == "ON" echo OrcaSlicer !slicer_full! + if "%build_slicer%" == "ON" if not "%linked%" == "ON" echo Target %slicer_target% + if "%build_slicer%" == "ON" if not "%using_ninja%" == "ON" echo Solution %build_full%\OrcaSlicer.sln + if "%pack_deps%" == "ON" if defined bundle echo Bundle !bundle! + + echo. + echo Next + if "%build_slicer%" == "ON" ( + if "%linked%" == "ON" echo Run it !slicer_exe! + if not "%using_ninja%" == "ON" echo Open in Visual Studio %build_dir%\OrcaSlicer.sln + if "%linked%" == "ON" echo Rebuild after edits build_win.bat -s!recall! --no-configure + if not "%linked%" == "ON" echo Relink the binary build_win.bat -s!recall! --no-configure + if "%linked%" == "ON" if "%using_ninja%" == "ON" echo Rebuild one target build_win.bat -s!recall! --no-configure --slicer-target libslic3r + if "%run_tests%" == "ON" echo Re-run the tests ctest --test-dir %build_dir%/tests -C %build_type% --output-on-failure + ) else ( + if "%build_deps%" == "ON" echo Build the slicer build_win.bat -s!recall! + ) + if "%pack_deps%" == "ON" echo Share the bundle unzip it elsewhere, then build_win.bat -s!recall_tc! --deps-dir ^ + echo ------------------------------------------------------------- + exit /b 0 + +:debug_msg + if "%debugscript%" == "ON" echo %* + exit /b 0 + +REM get_str_len -> length in %ret% +:get_str_len + setlocal + set "in=%~1" + for /L %%i in (0, 1, 100) do ( + if "!in:~%%i,1!" == "" ( + set out=%%i + goto :break_str_len + ) + ) + + echo error in get_str_len: string is too long + endlocal + exit /b 1 + + :break_str_len + endlocal & set ret=%out% + exit /b 0 + +:print_help_msg + setlocal + + REM Measure the widest flag column. Section headers have no flags and + REM must not widen it. + set flags= + set max_len=0 + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, %range_end%) do ( + if "!argdefs[%%i].TYPE!" == "section" ( + set "flags[%%i]=" + ) else ( + set str_placeholder= + if not "!argdefs[%%i].TYPE!" == "bool" ( + set "str_placeholder= " + ) + + REM The placeholder goes on the long form only. Repeating it on + REM the short one says nothing extra and costs eight columns. + set "flag_str=" + if not "!argdefs[%%i].SHORT_FLAG!" == "" ( + set "flag_str=-!argdefs[%%i].SHORT_FLAG!" + ) + + if not "!argdefs[%%i].LONG_FLAG!" == "" ( + if "!flag_str!" == "" ( + REM No short flag: pad so the long one lines up with the others. + set "flag_str= " + ) else ( + set "flag_str=!flag_str!, " + ) + set "flag_str=!flag_str!--!argdefs[%%i].LONG_FLAG!!str_placeholder!" + ) else ( + set "flag_str=!flag_str!!str_placeholder!" + ) + set "flag_str=!flag_str! " + set "flags[%%i]=!flag_str!" + call :get_str_len "!flag_str!" + if !ret! GTR !max_len! ( + set max_len=!ret! + ) + ) + ) + + set padding= + for /L %%i in (0, 1, %max_len%) do set "padding=!padding! " + + echo Builds OrcaSlicer and its dependencies on Windows. + echo. + echo Usage: %script_name% [options] + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, !range_end!) do ( + if "!argdefs[%%i].TYPE!" == "section" ( + echo. + echo !argdefs[%%i].HELP_TEXT!: + ) else ( + set "flag=!flags[%%i]!%padding%" + echo !flag:~0,%max_len%!!argdefs[%%i].HELP_TEXT! + ) + ) + echo. + echo Examples: + echo %script_name% --install-vs ide Set up a new machine, then restart the shell + echo %script_name% -ds Build the dependencies, then the slicer + echo %script_name% -s -l -x Rebuild the slicer with clang-cl and Ninja + echo %script_name% -s --no-configure -j 8 Rebuild quickly while iterating + echo %script_name% -s --slicer-target glad Compile one target to check the toolchain + echo %script_name% -l -x --run-tests Test that toolchain's build, not the default one + echo. + echo Environment: + echo ORCA_DEPS_CMAKE_ARGS Extra arguments for the deps configure + echo ORCA_SLICER_CMAKE_ARGS Extra arguments for the slicer configure + echo ORCA_UPDATER_SIG_KEY Update signing key baked into the slicer + echo git_commit_hash Revision to stamp, so a commit does not rebuild everything + echo NINJA_STATUS Ninja progress format, if you want your own + echo debugscript Set to ON to trace this script + echo. + echo set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_PCH=OFF -DSLIC3R_MSVC_PDB=OFF + echo $env:ORCA_SLICER_CMAKE_ARGS = '-DSLIC3R_PCH=OFF' (PowerShell) + echo. + echo --deps-args and --slicer-args cannot carry a value with spaces; use + echo these instead. Neither form supports a value containing an ampersand. + endlocal + exit /b 0 + +REM add_section +:add_section + set argdefs[%argdefn%].VARIABLE_NAME= + set argdefs[%argdefn%].TYPE=section + set argdefs[%argdefn%].SHORT_FLAG= + set argdefs[%argdefn%].LONG_FLAG= + set argdefs[%argdefn%].HELP_TEXT=%~1 + set /A argdefn+=1 + exit /b 0 + +REM add_arg <variable> <type:bool,string,rawstring> <short> <long> <help> +:add_arg + set argdefs[%argdefn%].VARIABLE_NAME=%~1 + set argdefs[%argdefn%].TYPE=%~2 + set argdefs[%argdefn%].SHORT_FLAG=%~3 + set argdefs[%argdefn%].LONG_FLAG=%~4 + set argdefs[%argdefn%].HELP_TEXT=%~5 + + REM Start every option unset, so "defined" means the user gave it. + set %~1= + + if "%debugscript%" == "ON" ( + echo add_arg VARIABLE_NAME: !argdefs[%argdefn%].VARIABLE_NAME! + echo add_arg TYPE: !argdefs[%argdefn%].TYPE! + echo add_arg SHORT_FLAG: !argdefs[%argdefn%].SHORT_FLAG! + echo add_arg LONG_FLAG: !argdefs[%argdefn%].LONG_FLAG! + echo add_arg HELP_TEXT: !argdefs[%argdefn%].HELP_TEXT! + ) + + set /A argdefn+=1 + + exit /b 0 + +REM find_arg <type:short,long> <flag> -> index in %ret% +:find_arg + setlocal + call :debug_msg starting function: find_arg "%~1" "%~2" + + set type= + if /I "%~1" == "short" set type=SHORT + if /I "%~1" == "long" set type=LONG + if not defined type ( + endlocal + set ret= + exit /b 1 + ) + + call :debug_msg find_arg type=%type% + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, %range_end%) do ( + if "!argdefs[%%i].%type%_FLAG!" == "%~2" ( + set idx=%%i + goto :find_arg_cont + ) + ) + + echo Error in find_arg: Failed to find arg "%~2" + call :print_help_msg + + endlocal + set ret= + exit /b 1 + + :find_arg_cont + call :debug_msg find_arg: found at %idx% + endlocal & ( + set ret=%idx% + ) + exit /b 0 + +REM set_arg <index> [<value>] +:set_arg + call :debug_msg starting function: set_arg "%~1" "%~2" + + if "%~1" == "" ( + echo Error in set_arg: no index provided + exit /b 1 + ) + + setlocal + if /I "!argdefs[%~1].TYPE!" == "bool" ( + call :debug_msg set_arg: setting bool type to ON + set val=ON + ) else ( + set "val=%~2" + set quote_char=" + REM Delayed expansion throughout: %val% here would be the value from the + REM previous call, since the whole block is parsed before it runs. + if "!val:~0,1!" == "!quote_char!" ( + if "!val:~-1,1!" == "!quote_char!" ( + set "val=!val:~1,-1!" + ) + ) + + call :debug_msg set_arg: setting string type to %~2 + ) + set var_name=!argdefs[%~1].VARIABLE_NAME! + + endlocal & ( + REM Set variable in parent scope + set "%var_name%=%val%" + + REM Add variable to finalize command + set "finalize_cmd=%finalize_cmd% & set "%var_name%=%val%"" + ) + + exit /b 0 + +REM get_arg_type <index> -> type in %ret% +:get_arg_type + call :debug_msg starting function get_arg_type "%~1" + setlocal + set type=!argdefs[%~1].TYPE! + endlocal & set ret=%type% + exit /b 0 + +REM echo_var <variable> +:echo_var + echo %~1=!%~1! + exit /b 0 + +:autodetect_vs + REM Nothing to detect once the release is pinned, or under Ninja. + if not "%vs_version%" == "" exit /b 0 + if "%use_ninja%" == "ON" exit /b 0 + + setlocal + + %VSWHERE% -nologo >nul 2>nul + if not !errorlevel! == 0 ( + REM vswhere is not in its usual place; try msbuild instead. + goto :msbuild_check + ) + + echo Detecting Visual Studio version using vswhere... + for /f "tokens=1 delims=." %%i in ('%VSWHERE% -nologo -products * -latest -property catalog_productDisplayVersion') do ( + set "VS_MAJOR=%%i" + goto :version_found + ) + + :msbuild_check + where msbuild >nul 2>nul + if not !errorlevel! == 0 ( + REM No msbuild either; leave the release empty and let the default apply. + endlocal + exit /b 0 + ) + + echo Detecting Visual Studio version using msbuild... + + REM The version line varies by release, so try two patterns for it. + set VS_MAJOR= + for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( + for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a + set MSBUILD_OUTPUT=%%i + goto :version_found + ) + + REM The same pattern unanchored, for releases that print a banner first. + if "%VS_MAJOR%"=="" ( + for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( + for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a + set MSBUILD_OUTPUT=%%i + goto :version_found + ) + ) + + :version_found + set "detected=!vs_year_%VS_MAJOR%!" + if not defined detected ( + echo Error: Unsupported Visual Studio major version: %VS_MAJOR% + endlocal + exit /b 1 + ) + echo Detected Visual Studio %VS_MAJOR% ^(!detected!^) + endlocal & set "vs_version=%detected%" + + exit /b 0 + +:setup_dev_env + REM A dry run runs nothing, and VsDevCmd costs seconds. + if "%dry_run%" == "ON" exit /b 0 + set "dev_arch=x64" + if /I "!arch!" == "ARM64" set "dev_arch=arm64" + %VSWHERE% -nologo >nul 2>nul + if not !errorlevel! == 0 ( + REM vswhere is not in its usual place; use the environment as it stands. + exit /b 0 + ) + + for /f "tokens=*" %%i in ('%VSWHERE% -nologo -products * -latest -property resolvedInstallationPath') do ( + set "VS_PATH=%%i" + goto :vs_path_found + ) + exit /b 0 + + :vs_path_found + call "%VS_PATH%\Common7\Tools\VsDevCmd.bat" -arch=!dev_arch! >nul 2>nul + set "VS_PATH=" + + exit /b 0 + +REM clean_tree <path> - remove a build tree, refusing anything that is not +REM one. Nothing here should ever fire; it is a floor under a bug that +REM produced a path far shorter than it looks. +:clean_tree + setlocal + set "target=%~1" + if not defined target ( + echo Refusing to clean: no directory to remove. + exit /b 1 + ) + + REM Resolve first, because "." and "deps/.." are shorter than they read. + for %%p in ("!target!") do set "full=%%~fp" + if "!full:~1!" == ":\" ( + echo Refusing to clean "!full!": that is a drive root. + exit /b 1 + ) + if /I "!full!" == "%WP%" ( + echo Refusing to clean "!full!": that is the repository itself. + exit /b 1 + ) + + call :print_and_run rmdir /S /Q "!full!" + exit /b !errorlevel! + +REM note_failed <name> <code> - record a failed install. Two winget codes +REM mean the tool is already there, which is what -u is for: +REM -1978335135 (0x8A150061) winget declined: a version is already there +REM -1978335189 (0x8A15002B) installed and already the newest version +:note_failed + if "%~2" == "0" exit /b 0 + if "%~2" == "-1978335135" exit /b 0 + if "%~2" == "-1978335189" exit /b 0 + set "install_failed=%install_failed% %~1" + exit /b 0 + +REM trim_slash <variable> - drop a trailing backslash from a path value. +REM A drive root keeps its own: "C:\" is not the same place as "C:". +:trim_slash + set "trim_value=!%~1!" + if not defined trim_value exit /b 0 + if not "!trim_value:~-1!" == "\" exit /b 0 + if "!trim_value:~-2!" == ":\" exit /b 0 + set "%~1=!trim_value:~0,-1!" + exit /b 0 + +REM kill_image <name> - stop every process of one image. The count is printed +REM first because taskkill can take a while and says nothing until it returns. +REM Never fails, so one stubborn image cannot stop the rest. +:kill_image + setlocal + REM A dry run does not count, so it prints the same on every machine. + if "%dry_run%" == "ON" ( + call :print_and_run taskkill /F /IM %~1 + endlocal + exit /b 0 + ) + set "img_count=0" + for /f "tokens=1" %%a in ('tasklist /nh /fi "IMAGENAME eq %~1" 2^>nul') do ( + if /I "%%a" == "%~1" set /a img_count+=1 + ) + if "!img_count!" == "0" ( + echo %~1: none running + endlocal + exit /b 0 + ) + echo %~1: stopping !img_count! + call :print_and_run taskkill /F /IM %~1 + endlocal + exit /b 0 + +REM print_and_run <command...> +:print_and_run + echo + %* + REM Recorded before the command runs. A set afterwards would clear the + REM errorlevel the next line returns, reporting every failure as a pass. + set "last_cmd=%*" + if not "%dry_run%" == "ON" ( + %* + exit /b !errorlevel! + ) + exit /b 0 + +REM handle_args <args...> +:handle_args + call :debug_msg starting function handle_args "%*" + if "%~1" == "" exit /b 0 + + setlocal + set arg=%~1 + set finalize_cmd= + + call :debug_msg Begin handling arg "%arg%" + + if not "%arg:~0,2%" == "--" goto :HAL_check_short + + call :debug_msg Processing long arg + + call :find_arg long %arg:~2% + %repeat_error% + set idx=%ret% + + call :get_arg_type %idx% + %repeat_error% + set type=%ret% + + if /I not "%type%" == "bool" ( + set "string_val=%~2" + if not defined string_val ( + echo Error in handle_args_loop: The option "%arg:~2%" requires a value + exit /b 1 + ) + + REM rawstring options carry cmake arguments, which start with a dash, so + REM only plain string options reject a value that looks like an option. + if /I "%type%" == "string" ( + if "!string_val:~0,1!" == "-" ( + echo Error in handle_args_loop: The option "%arg:~2%" requires a value. "!string_val!" looks like another option. + exit /b 1 + ) + ) + shift + ) + + call :set_arg %idx% "%string_val%" + %repeat_error% + goto :handle_args_loop_reset + + :HAL_check_short + if not "%arg:~0,1%" == "-" ( + echo Unknown argument: %arg% + call :print_help_msg + exit /b 1 + ) + + call :debug_msg processing short args + set /A charidx=1 + :short_arg_loop + if "!arg:~%charidx%,1!" == "" goto :handle_args_loop_reset + + call :find_arg short !arg:~%charidx%,1! + %repeat_error% + set idx=%ret% + + call :get_arg_type %idx% + %repeat_error% + set type=%ret% + + set /A start_idx = %charidx% + 1 + if /I not "%type%" == "bool" ( + REM A value may be attached (-j8) or be the next argument (-j 8). + set remaining=!arg:~%start_idx%! + if defined remaining ( + set string_val=!remaining! + ) else ( + set "string_val=%~2" + shift + ) + if not defined string_val ( + echo Error in handle_args_loop: The option "!arg:~%charidx%,1!" requires a value + exit /b 1 + ) + + REM As in the long-option branch above. + if /I "%type%" == "string" ( + if "!string_val:~0,1!" == "-" ( + echo Error in handle_args_loop: The option "!arg:~%charidx%,1!" requires a value. "!string_val!" looks like another option. + exit /b 1 + ) + ) + call :set_arg !idx! "!string_val!" + %repeat_error% + goto :handle_args_loop_reset + ) + + call :set_arg %idx% + %repeat_error% + set /A charidx+=1 + goto :short_arg_loop + + :handle_args_loop_reset + REM endlocal drops this iteration scope; finalize_cmd re-applies the options + REM it set, in the caller scope. + endlocal %finalize_cmd% + shift + goto :handle_args diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 new file mode 100644 index 0000000000..62eaaae77b --- /dev/null +++ b/scripts/test_build_win.ps1 @@ -0,0 +1,847 @@ +<# +.SYNOPSIS + Tests build_win.bat's option handling and the commands it generates. + +.DESCRIPTION + Cases run the script with --dry-run, so nothing is configured, built or + deleted and the suite finishes in seconds. Each case asserts on the exit + code and on the command lines the script echoes. + + Adding a case means adding one row to $cases. A bare string starts a new + group. Defaults: ExpectExit is 0 and --dry-run is appended, so a row only + states what is unusual about it. + + Name what the case proves, in words + Args arguments, as an array + ExpectExit expected exit code (default 0) + DryRun append --dry-run (default $true) + First regex the first output line must match + Env environment for this case only + Contains literal strings the output must have + NotContains literal strings it must not have + Match regexes; each must match at least one output line + NotMatch regexes; none may match any output line + NotExists paths that must not exist after the case runs + +.PARAMETER Name + Run only the cases whose name matches this regex. Headings with no + matching case are not printed, and a pattern that matches nothing is a + failure rather than an empty pass. + +.EXAMPLE + powershell -File scripts/test_build_win.ps1 + +.EXAMPLE + powershell -File scripts/test_build_win.ps1 -Name solution +#> +[CmdletBinding()] +param( + [string] $Script, + [string] $Name +) + +$ErrorActionPreference = 'Stop' + +if (-not $Script) { + $here = $PSScriptRoot + if (-not $here) { $here = Split-Path -Parent $MyInvocation.MyCommand.Path } + $Script = Join-Path (Split-Path -Parent $here) 'build_win.bat' +} +if (-not (Test-Path $Script)) { throw "build_win.bat not found at $Script" } + +# cmd resumes a batch file by byte offset after `call :label`, and with LF +# endings that offset lands wrong and the label lookup fails. .gitattributes +# pins CRLF; this catches a checkout or an editor that did not honour it. +if ((Get-Content -Raw $Script) -match "(?<!`r)`n") { + throw "$Script has LF line endings; cmd needs CRLF to resume after call :label" +} +$Script = (Resolve-Path $Script).Path + +# Read the long options out of the script itself, so this cannot go stale when +# an option is added. Field order is: add_arg <var> <type> <short> <long>. +$longFlags = @( + Select-String -Path $Script -Pattern '^call :add_arg \S+ \S+ \S+ (\S+) ' | + ForEach-Object { '--' + $_.Matches[0].Groups[1].Value } +) +if ($longFlags.Count -lt 20) { throw "only found $($longFlags.Count) options in $Script; the parser above is wrong" } + +# A winget that always fails, so the prerequisite failure path runs without +# touching the machine. It has to be an .exe: a .bat invoked without `call` +# transfers control and never comes back, which would end the script instead. +# where.exe returns 1 when its patterns match nothing and never prompts. +$fixtures = Join-Path ([IO.Path]::GetTempPath()) 'build_win_test_fixtures' +New-Item -ItemType Directory -Force -Path $fixtures | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $fixtures 'winget.exe') -Force +$stubPath = "$fixtures;C:\Windows\system32;C:\Windows" + +# Stand-in ninjas that only report a version, so the 1.12 boundary in the +# progress format can be exercised on a machine whose real ninja is newer. +# A dry run skips the dev shell, so PATH here is what the script sees. +$ninjaPaths = @{} +foreach ($v in @{ old = '1.11.1'; new = '1.12.0' }.GetEnumerator()) { + $d = Join-Path $fixtures "ninja-$($v.Key)" + New-Item -ItemType Directory -Force -Path $d | Out-Null + Set-Content -Path (Join-Path $d 'ninja.bat') -Encoding ascii -Value @('@echo off', "echo $($v.Value)") + $ninjaPaths[$v.Key] = "$d;$env:PATH" +} + +# The pack stamp is checked against real dates, so a locale-dependent parse +# in the script cannot pass by looking date-shaped. Yesterday is accepted too, +# so a run that crosses midnight does not flake. +$dateStamps = @((Get-Date -Format 'yyyyMMdd'), (Get-Date).AddDays(-1).ToString('yyyyMMdd')) +$stampPattern = '_(' + ($dateStamps -join '|') + ')\.zip$' + +$cases = @( + 'argument handling' + @{ Name = 'no arguments prints help'; Args = @(); DryRun = $false + Contains = @('Usage: build_win.bat [options]', '--clang-cl') } + @{ Name = "--help lists all $($longFlags.Count) options the script defines"; Args = @('--help'); DryRun = $false + Contains = $longFlags } + @{ Name = 'help is grouped and shows usage, examples and environment'; Args = @('--help'); DryRun = $false + Contains = @('Usage: build_win.bat [options]', 'Actions:', 'Build configuration:', 'Toolchain:', + 'How much gets rebuilt:', 'Paths and extra arguments:', 'Diagnostics:', + 'Examples:', 'Environment:') } + @{ Name = 'the environment section shows what to set'; Args = @('--help'); DryRun = $false + Contains = @('ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS', 'ORCA_UPDATER_SIG_KEY', 'NINJA_STATUS', + 'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_PCH=OFF', '(PowerShell)', 'debugscript') } + @{ Name = 'section headers do not widen the flag column'; Args = @('--help'); DryRun = $false + Match = @('^ -d, --deps +Download') } + # Windows Terminal opens at 120 columns and wraps at 120, so 119 is the + # limit. Anyone still on the old conhost gets 80 and will see wrapping. + @{ Name = 'every help line fits a 120 column console'; Args = @('--help'); DryRun = $false + NotMatch = @('^.{120,}$') } + @{ Name = 'an unknown long option is rejected'; Args = @('--nonsense'); ExpectExit = 1 + Contains = @('Failed to find arg') } + @{ Name = 'an unknown short option is rejected'; Args = @('-Z'); ExpectExit = 1 + Contains = @('Failed to find arg') } + @{ Name = 'a bare argument is rejected'; Args = @('deps'); ExpectExit = 1 + Contains = @('Unknown argument') } + @{ Name = 'an unknown architecture is rejected'; Args = @('-d', '--arch', 'sparc'); ExpectExit = 1 + Contains = @('Unknown architecture') } + @{ Name = 'a string option without a value is rejected'; Args = @('-d', '--arch'); ExpectExit = 1 + Contains = @('requires a value') } + @{ Name = 'short options can be bundled'; Args = @('-dx') + Contains = @('-G "Ninja Multi-Config"', '--target deps') } + + 'generator and compiler selection' + @{ Name = 'deps default to the Visual Studio generator'; Args = @('-d') + Contains = @('-G "Visual Studio', '-A x64', '--target deps') + NotContains = @('Ninja', 'clang-cl') } + @{ Name = '-x selects Ninja without changing compiler'; Args = @('-d', '-x') + Contains = @('-G "Ninja Multi-Config"') + NotContains = @('clang-cl', '-A x64') } + @{ Name = '-l -x builds with clang-cl under Ninja'; Args = @('-d', '-l', '-x') + Contains = @('-G "Ninja Multi-Config"', '-DCMAKE_C_COMPILER=clang-cl.exe', '-DCMAKE_CXX_COMPILER=clang-cl.exe') } + @{ Name = '-l alone uses the ClangCL toolset on the VS generator'; Args = @('-d', '-l') + Contains = @('-G "Visual Studio', '-T ClangCL') + NotContains = @('-DCMAKE_C_COMPILER') } + # --msvc and --msbuild name the defaults, so a caller can be explicit and a + # contradictory pair can be caught rather than silently resolved. + @{ Name = '--msvc is the compiler default spelled out'; Args = @('-d', '--msvc') + Contains = @('-G "Visual Studio', '-A x64') + NotContains = @('clang-cl') } + @{ Name = '--msbuild is the generator default spelled out'; Args = @('-d', '--msbuild') + Contains = @('-G "Visual Studio') + NotContains = @('Ninja') } + @{ Name = '--msvc with -x gives Ninja driving cl'; Args = @('-d', '--msvc', '-x') + Contains = @('-G "Ninja Multi-Config"') + NotContains = @('clang-cl') } + @{ Name = '--msbuild with -l gives the VS generator and the ClangCL toolset'; Args = @('-d', '--msbuild', '-l') + Contains = @('-G "Visual Studio', '-T ClangCL') } + # A developer with a standalone LLVM points at it; the VS-bundled clang + # is what a bare clang-cl.exe resolves to after the dev shell runs. + @{ Name = '--clang-path names the compiler, quoted for its spaces'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('-DCMAKE_C_COMPILER="C:\Program Files\LLVM\bin\clang-cl.exe"', + '-DCMAKE_CXX_COMPILER="C:\Program Files\LLVM\bin\clang-cl.exe"') } + @{ Name = '--clang-path is a clang request on its own'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('deps/build-clang') } + @{ Name = '--clang-path needs Ninja to take effect'; Args = @('-d', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe'); ExpectExit = 1 + Contains = @('needs the Ninja generator') } + # `exist` is true for a directory too, and a directory would reach CMake + # as the compiler. + @{ Name = '--clang-path must name the exe, not its folder'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM'); ExpectExit = 1 + Contains = @('is a directory') } + @{ Name = 'a clang-cl that is not there is caught early'; Args = @('-d', '-x', '--clang-path', 'C:\nope\clang-cl.exe'); ExpectExit = 1 + Contains = @('No clang-cl at') + NotContains = @('cmake -S deps') } + @{ Name = '--clang-path contradicting --msvc is rejected'; Args = @('-d', '-x', '--msvc', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe'); ExpectExit = 1 + Contains = @('select different compilers') } + @{ Name = '--clang-cl and --msvc together are rejected'; Args = @('-d', '-l', '--msvc'); ExpectExit = 1 + Contains = @('select different compilers') } + @{ Name = '--ninja and --msbuild together are rejected'; Args = @('-d', '-x', '--msbuild'); ExpectExit = 1 + Contains = @('select different generators') } + # One option with a value, driven by a table, rather than a flag per + # release. Adding a release should not need a new flag. + @{ Name = '--vs 2019 pins that release and skips autodetect'; Args = @('-d', '--vs', '2019') + Contains = @('-G "Visual Studio 16 2019"') + NotContains = @('Detecting Visual Studio') } + @{ Name = '--vs 2022 pins that release'; Args = @('-d', '--vs', '2022') + Contains = @('-G "Visual Studio 17 2022"') } + @{ Name = '--vs 2026 pins that release'; Args = @('-d', '--vs', '2026') + Contains = @('-G "Visual Studio 18 2026"') } + @{ Name = 'an unknown release is rejected and the known ones listed'; Args = @('-d', '--vs', '2015'); ExpectExit = 1 + Contains = @('Unknown Visual Studio release', '2019, 2022, 2026') } + @{ Name = '--vs and --ninja together are rejected'; Args = @('-d', '--vs', '2022', '-x'); ExpectExit = 1 + Contains = @('select different generators') } + @{ Name = 'without --vs the release is autodetected'; Args = @('-d') + Contains = @('Detecting Visual Studio') } + + 'architecture' + @{ Name = 'x64 is the default'; Args = @('-d') + Contains = @('Configuration: Release, x64') + NotContains = @('build-arm64') } + @{ Name = 'arm64 sets the generator platform and deps tree'; Args = @('-d', '--arch', 'arm64') + Contains = @('-A ARM64', 'deps/build-arm64') } + @{ Name = 'the architecture is matched case-insensitively'; Args = @('-d', '--arch', 'ARM64') + Contains = @('-A ARM64', 'deps/build-arm64') } + @{ Name = 'arm64 under Ninja has no -A but keeps the arm64 tree'; Args = @('-d', '--arch', 'arm64', '-x', '-l') + Contains = @('deps/build-clang-arm64', '-DCMAKE_C_COMPILER=clang-cl.exe') + NotContains = @('-A ') } + + 'build configurations' + # One option with a value, driven by a table, so Release is named rather + # than being whatever is left when no flag is passed. + @{ Name = 'release is the default'; Args = @('-s') + Contains = @('-DCMAKE_BUILD_TYPE=Release', 'cmake -B "build" ') } + @{ Name = '--config release is the default spelled out'; Args = @('-s', '--config', 'release') + Contains = @('-DCMAKE_BUILD_TYPE=Release', 'cmake -B "build" ') } + @{ Name = '--config debug builds into build-dbg'; Args = @('-s', '--config', 'debug') + Contains = @('-DCMAKE_BUILD_TYPE=Debug', 'cmake -B "build-dbg" ') } + @{ Name = '--config relwithdebinfo builds into build-dbginfo'; Args = @('-s', '--config', 'relwithdebinfo') + Contains = @('-DCMAKE_BUILD_TYPE=RelWithDebInfo', 'cmake -B "build-dbginfo" ') } + @{ Name = '--config minsizerel builds into build-minsize'; Args = @('-s', '--config', 'minsizerel') + Contains = @('-DCMAKE_BUILD_TYPE=MinSizeRel', 'cmake -B "build-minsize" ') } + # Batch variable names are case-insensitive, so the table lookup is too. + @{ Name = 'the configuration name is matched case-insensitively'; Args = @('-s', '--config', 'RelWithDebInfo') + Contains = @('-DCMAKE_BUILD_TYPE=RelWithDebInfo') } + @{ Name = 'an unknown configuration is rejected and the known ones listed'; Args = @('-s', '--config', 'bogus'); ExpectExit = 1 + Contains = @('Unknown configuration', 'release, debug, relwithdebinfo, minsizerel') } + # Release, RelWithDebInfo and MinSizeRel all link the /MD dependencies, so + # one tree serves all three. Debug is /MDd and cannot share. + @{ Name = 'minsizerel builds against the release deps'; Args = @('-d', '-s', '--config', 'minsizerel') + Contains = @('cmake -S deps -B "deps/build"', 'cmake -B "build-minsize" ') + NotContains = @('deps/build-minsize') } + @{ Name = 'relwithdebinfo builds against them too'; Args = @('-d', '-s', '-l', '--config', 'relwithdebinfo') + Contains = @('cmake -S deps -B "deps/build-clang"', 'cmake -B "build-dbginfo-clang" ') + NotContains = @('deps/build-dbginfo') } + @{ Name = 'debug keeps a dependency tree of its own'; Args = @('-d', '--config', 'debug') + Contains = @('cmake -S deps -B "deps/build-dbg"') } + # The build tree and the deps tree now have different names, so the + # derivation from the binary directory name cannot work and it is named. + @{ Name = 'a shared deps tree is named outright'; Args = @('-s', '-l', '--config', 'relwithdebinfo') + Match = @('-DDEP_BUILD_DIR="[A-Za-z]:\\.*\\deps\\build-clang"') } + @{ Name = 'configuration and arch combine into build-dbg-arm64'; Args = @('-s', '--config', 'debug', '--arch', 'arm64') + Contains = @('cmake -B "build-dbg-arm64" ') } + + 'what gets built' + @{ Name = 'the deps target defaults to deps'; Args = @('-d') + Contains = @('--target deps') } + @{ Name = '-t overrides the deps target'; Args = @('-d', '-t', 'dep_Boost') + Contains = @('--target dep_Boost') } + @{ Name = 'unit tests are off unless asked for'; Args = @('-s') + Contains = @('-DBUILD_TESTS=OFF') } + @{ Name = '--tests turns the unit tests on'; Args = @('-s', '--tests') + Contains = @('-DBUILD_TESTS=ON') } + @{ Name = '-a enables ASAN for the slicer'; Args = @('-s', '-a') + Contains = @('-DSLIC3R_ASAN=ON') } + @{ Name = 'the slicer build runs gettext'; Args = @('-s') + Contains = @('run_gettext.bat') } + # tools\7z.exe needs a 7z.dll beside it, which the repo does not carry, + # so the pack falls back to the bsdtar Windows ships. Either is correct; + # what matters is that one is chosen and handed the right names. + @{ Name = '-p packs the deps tree with whichever archiver is usable'; Args = @('-d', '-p') + Match = @('^\+ .*(7z\.exe a|tar\.exe -a -c -f) OrcaSlicer_dep_win-\S+\.zip OrcaSlicer_dep$') } + # The bundle is only good for what built it, so it carries the same three + # axes as the tree. Release x64 on cl keeps the historical plain name. + @{ Name = 'the bundle name carries compiler and deps flavour'; Args = @('-p', '-l', '--config', 'debug', '--arch', 'arm64') + Contains = @('OrcaSlicer_dep_win-ARM64-clang-dbg_') } + @{ Name = 'a relwithdebinfo pack is the release bundle'; Args = @('-p', '--config', 'relwithdebinfo') + Contains = @('OrcaSlicer_dep_win-x64_') + NotContains = @('-dbg', 'dbginfo') } + @{ Name = 'a plain release bundle keeps its old name'; Args = @('-p') + Contains = @('OrcaSlicer_dep_win-x64_') + NotContains = @('-clang', '-Release') } + @{ Name = 'the bundle is stamped with today, not a shuffled date'; Args = @('-p') + Match = @($stampPattern) } + # powershell.exe is not in System32 itself, so a trimmed PATH used to + # leave the stamp empty and the bundle named OrcaSlicer_dep_win-x64_.zip. + @{ Name = 'the bundle is stamped even with a bare PATH'; Args = @('-p') + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Match = @($stampPattern) } + @{ Name = '-p packs without rebuilding'; Args = @('-p') + Match = @('^\+ .*(7z\.exe a|tar\.exe -a -c -f) ') + NotContains = @('cmake -S deps') } + @{ Name = 'deps and slicer build in one invocation'; Args = @('-d', '-s', '-x', '-l') + Contains = @('cmake -S deps', 'cmake -B "build-clang" ') } + + 'the developer loop' + @{ Name = '--slicer-target builds one target'; Args = @('-s', '--slicer-target', 'libslic3r') + Contains = @('--config Release --target libslic3r') } + @{ Name = '--no-configure skips the slicer configure'; Args = @('-s', '--no-configure') + Contains = @('cmake --build "build"') + NotContains = @('cmake -B "build" ') } + @{ Name = '--no-configure skips the deps configure'; Args = @('-d', '--no-configure') + Contains = @('cmake --build "deps/build"') + NotContains = @('cmake -S deps') } + @{ Name = '--no-gettext skips the translation step'; Args = @('-s', '--no-gettext') + Contains = @('cmake --build "build"') + NotContains = @('run_gettext') } + # Installing copies the whole tree again for a layout only releases need, + # so it is asked for rather than assumed. + @{ Name = 'nothing is installed unless asked'; Args = @('-s') + Contains = @('run_gettext') + NotContains = @('--target install') } + @{ Name = '-i adds the install step'; Args = @('-s', '-i') + Contains = @('--target install') } + # install(TARGETS OrcaSlicer) has no OPTIONAL, so this would fail partway + # through a build instead of before it. + @{ Name = 'installing a tree with no executable is refused'; Args = @('-s', '-i', '--slicer-target', 'glad'); ExpectExit = 1 + Contains = @('--install needs the executable') + NotContains = @('cmake --build') } + # Without -s there is no install step, so there is nothing to refuse. + @{ Name = 'the same flags without a slicer build are left alone'; Args = @('-d', '-i', '--slicer-target', 'glad') + Contains = @('cmake -S deps') + NotContains = @('--install needs the executable') } + @{ Name = 'naming the executable target is allowed'; Args = @('-s', '-i', '--slicer-target', 'OrcaSlicer') + Contains = @('--target install') } + # Ninja counts compilers, so -j goes on the command line. MSBuild's -j + # counts projects while /MP still runs one cl per core inside each, so the + # cap goes to CL_MPCount in the environment instead. A dry run can only + # show that no -j is passed. + @{ Name = '-j on Ninja passes -j to cmake'; Args = @('-s', '-x', '-j', '4') + Contains = @('Parallel jobs: 4', '--config Release -j 4') } + @{ Name = '-j on Ninja reaches the deps build'; Args = @('-d', '-x', '-j', '2') + Contains = @('--target deps -j 2') } + @{ Name = '-j on MSBuild does not pass -j, which would count projects'; Args = @('-s', '-j', '4') + Contains = @('Parallel jobs: 4') + NotContains = @('-j 4') } + @{ Name = '-j on MSBuild leaves the deps build without -j too'; Args = @('-d', '-j', '2') + Contains = @('--target deps') + NotContains = @('-j 2') } + @{ Name = 'no -j means no job limit'; Args = @('-s') + NotContains = @('parallel jobs', '-j ') } + @{ Name = 'a non-numeric -j is rejected'; Args = @('-s', '-j', 'abc'); ExpectExit = 1 + Contains = @('Invalid --jobs value') } + @{ Name = 'a zero -j is rejected'; Args = @('-s', '-j', '0'); ExpectExit = 1 + Contains = @('Invalid --jobs value') } + @{ Name = 'the loop options combine into a single build command'; Args = @('-s', '-x', '--no-configure', '--no-gettext', '--slicer-target', 'libslic3r_tests', '-j', '8') + Contains = @('--target libslic3r_tests -j 8') + NotContains = @('cmake -B "build" ', 'run_gettext', '--target install') } + + 'one tree per configuration, compiler and architecture' + # CMake resets its cache and carries on when the compiler changes under an + # existing tree, leaving stamps from the old toolchain. Give each its own. + @{ Name = 'clang builds land in their own trees'; Args = @('-d', '-s', '-l') + Contains = @('cmake -S deps -B "deps/build-clang"', 'cmake -B "build-clang" ') } + @{ Name = 'MSVC keeps the historical plain names'; Args = @('-d', '-s', '--msvc') + Contains = @('cmake -S deps -B "deps/build"', 'cmake -B "build" ') + NotContains = @('build-clang') } + @{ Name = 'configuration, compiler and arch all name the tree'; Args = @('-d', '-s', '-l', '--config', 'debug', '--arch', 'arm64') + Contains = @('cmake -S deps -B "deps/build-dbg-clang-arm64"', 'cmake -B "build-dbg-clang-arm64" ') } + + 'locating the dependency tree' + # Without --deps-dir nothing is passed, so CMakeLists derives the path from + # the binary directory name as it always has. + @{ Name = 'the deps path is left to CMake by default'; Args = @('-s') + NotContains = @('-DDEP_BUILD_DIR') } + @{ Name = '--deps-dir tells the slicer where the deps are'; Args = @('-s', '--deps-dir', 'D:\orca-deps') + Contains = @('-DDEP_BUILD_DIR="D:\orca-deps"') } + @{ Name = '--deps-dir also redirects the deps build'; Args = @('-d', '--deps-dir', 'D:\orca-deps') + Contains = @('cmake -S deps -B "D:\orca-deps"', 'cmake --build "D:\orca-deps"') + NotContains = @('deps/build') } + # Paths are quoted throughout, so one with spaces survives the whole run. + @{ Name = 'a deps path with spaces survives'; Args = @('-d', '-s', '--deps-dir', 'C:\Program Files\deps') + Contains = @('-B "C:\Program Files\deps"', '-DDEP_BUILD_DIR="C:\Program Files\deps"') } + @{ Name = '--deps-dir also redirects the pack'; Args = @('-p', '--deps-dir', 'D:\orca-deps') + Contains = @('cd /d "D:\orca-deps"') } + @{ Name = 'pack uses an absolute default path'; Args = @('-p') + Match = @('^\+ cd /d "[A-Za-z]:\\.*\\deps\\build"') } + # CMakeLists derives DEP_BUILD_DIR from the build directory's name, so + # pointing the build elsewhere has to name the deps tree outright. + @{ Name = '--build-dir moves the slicer build'; Args = @('-s', '-l', '-x', '--build-dir', 'out/build/x64-clang') + Contains = @('cmake -B "out/build/x64-clang" ') } + @{ Name = '--build-dir still names the deps tree'; Args = @('-s', '-l', '-x', '--build-dir', 'out/build/x64-clang') + Match = @('-DDEP_BUILD_DIR="[A-Za-z]:\\.*\\deps\\build-clang"') } + @{ Name = '--deps-dir wins over the derived tree'; Args = @('-s', '--build-dir', 'out/build/x64-clang', '--deps-dir', 'D:\orca-deps') + Contains = @('-DDEP_BUILD_DIR="D:\orca-deps"') } + # A value ending in a backslash escapes the closing quote it is spliced + # into, so cmake would receive D:\tree" and swallow the next argument. + @{ Name = 'a trailing backslash is trimmed off a path'; Args = @('-s', '--build-dir', 'D:\tree\') + Contains = @('cmake -B "D:\tree" ') } + @{ Name = 'a build directory with spaces survives'; Args = @('-s', '--build-dir', 'C:\Program Files\tree') + Contains = @('cmake -B "C:\Program Files\tree" ') } + @{ Name = 'the default build names no deps tree'; Args = @('-s') + NotContains = @('DEP_BUILD_DIR') } + + 'saying what mode and toolchain are in play' + @{ Name = 'a dry run announces itself before the first command'; Args = @('-u') + First = '^Dry run: printing commands without running them\.$' } + @{ Name = 'the announcement leads even a full build'; Args = @('-ds') + First = '^Dry run: ' } + # Autodetect only runs for the Visual Studio generator, and only when no + # release was pinned, so it needs a Visual Studio on the machine. + @{ Name = 'the detected Visual Studio names its release year'; Args = @('-s') + Match = @('^Detected Visual Studio \d+ \(20\d\d\)$') } + @{ Name = 'pinning a release skips detection'; Args = @('-s', '--vs', '2022') + NotContains = @('Detected Visual Studio') } + + 'an action has to be asked for' + # Neither can happen without building the slicer, so they stand alone the + # way --install-vs does. + @{ Name = '--run-tests is an action on its own'; Args = @('--run-tests') + Contains = @('-DBUILD_TESTS=ON', 'ctest --test-dir') + NotContains = @('Nothing to do') } + @{ Name = '--tests is too'; Args = @('--tests') + Contains = @('-DBUILD_TESTS=ON') + NotContains = @('Nothing to do', 'ctest --test-dir') } + # Naming an action means that action, not a fuller build. + @{ Name = 'they do not add a slicer build to one already asked for'; Args = @('-d', '--tests') + Contains = @('cmake -S deps') + NotContains = @('cmake -B "build"') } + @{ Name = 'shaping options alone are not an action'; Args = @('--config', 'debug'); ExpectExit = 1 + Contains = @('Nothing to do.') + NotContains = @('Build completed') } + @{ Name = '-j alone is not an action either'; Args = @('-j', '4'); ExpectExit = 1 + Contains = @('Nothing to do.') } + @{ Name = '--install-vs counts as an action on its own'; Args = @('--install-vs', 'ide') + NotContains = @('Nothing to do.') } + + 'diagnostics' + @{ Name = '-v asks cmake for the command lines'; Args = @('-s', '-v') + Contains = @('--verbose') } + @{ Name = '-v applies to the deps build too'; Args = @('-d', '-v') + Contains = @('--target deps', '--verbose') } + # ninja's own default shows neither a percentage nor a time. %w and %W + # need ninja 1.12, and an unknown placeholder is fatal, so the format is + # chosen from the version rather than hardcoded. + @{ Name = '-v names the ninja progress format'; Args = @('-s', '-x', '-v') + Match = @('^Ninja progress format: \[.*%p.*\]') } + @{ Name = 'a ninja older than 1.12 gets the format it understands'; Args = @('-s', '-x', '-v') + Env = @{ PATH = $ninjaPaths['old'] } + Contains = @('Ninja progress format: [%s/%t %p :: %e]') } + @{ Name = 'ninja 1.12 gets elapsed and remaining'; Args = @('-s', '-x', '-v') + Env = @{ PATH = $ninjaPaths['new'] } + Contains = @('Ninja progress format: [%f/%t %p :: %w / %W]') } + @{ Name = 'a format you set yourself is left alone'; Args = @('-s', '-x', '-v') + Env = @{ NINJA_STATUS = '[mine] ' } + Contains = @('Ninja progress format: [mine]') } + @{ Name = 'MSBuild builds mention no ninja format'; Args = @('-s', '-v') + NotContains = @('Ninja progress format') } + @{ Name = 'builds are quiet without -v'; Args = @('-s') + NotContains = @('--verbose') } + + 'installing prerequisites' + # -u installs CMake, Perl and Git. Visual Studio is a separate ask, because + # most people already have it, and which one you want is a real choice. + @{ Name = '-u alone installs no Visual Studio'; Args = @('-u') + Contains = @('Kitware.CMake', 'StrawberryPerl', 'Git.Git') + NotContains = @('Microsoft.VisualStudio') } + # Asking for Visual Studio is asking to install prerequisites, so it does + # not also need -u; requiring both meant --install-vs alone did nothing. + @{ Name = '--install-vs works without -u'; Args = @('--install-vs', 'ide') + Contains = @('id=Microsoft.VisualStudio.Community', 'Kitware.CMake', 'Git.Git') } + @{ Name = '--install-vs buildtools asks for the build tools'; Args = @('-u', '--install-vs', 'buildtools') + Contains = @('id=Microsoft.VisualStudio.BuildTools') + NotContains = @('VC.CoreIde') } + @{ Name = '--install-vs ide asks for Community with the IDE component'; Args = @('-u', '--install-vs', 'ide') + Contains = @('id=Microsoft.VisualStudio.Community', 'VC.CoreIde') } + @{ Name = 'an unknown edition is rejected and the known ones listed'; Args = @('-u', '--install-vs', 'bogus'); ExpectExit = 1 + Contains = @('Unknown Visual Studio edition', 'buildtools, ide') } + @{ Name = '--vs picks which release to install'; Args = @('-u', '--vs', '2022', '--install-vs', 'buildtools') + Contains = @('id=Microsoft.VisualStudio.2022.BuildTools') } + @{ Name = '-l adds the clang compiler and the MSBuild toolset'; Args = @('-u', '--install-vs', 'buildtools', '-l') + Contains = @('VC.Llvm.Clang ', 'VC.Llvm.ClangToolset') } + # CMake 4.x breaks Boost.Context on ARM64, so the installer pins 3.31 there + # and leaves x64 on the current release. + @{ Name = 'CMake is pinned to 3.31 when installing for arm64'; Args = @('-u', '--arch', 'arm64') + Contains = @('Kitware.CMake --version 3.31.8') } + @{ Name = 'CMake is not pinned for x64'; Args = @('-u', '--arch', 'x64') + Contains = @('Kitware.CMake') + NotContains = @('--version') } + @{ Name = 'installing for arm64 asks for the ARM64 toolset'; Args = @('--install-vs', 'buildtools', '--arch', 'arm64') + Contains = @('Microsoft.VisualStudio.Component.VC.Tools.ARM64') } + @{ Name = 'an x64 install asks only for the x64 toolset'; Args = @('--install-vs', 'buildtools') + Contains = @('Microsoft.VisualStudio.Component.VC.Tools.x86.x64') + NotContains = @('VC.Tools.ARM64') } + + 'dry run changes nothing' + # clean_tree resolves the path before removing it, so the line echoed is + # absolute. It is the last thing printed before a directory goes. + @{ Name = '-c echoes the deps rmdir rather than running it'; Args = @('-d', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\.*\\deps\\build"$') } + @{ Name = '-c removes the tree --deps-dir named, not the default one'; Args = @('-d', '-c', '--deps-dir', 'D:\orca-deps') + Match = @('^\+ rmdir /S /Q "D:\\orca-deps"$') + NotContains = @('\deps\build') } + @{ Name = '-c echoes the slicer rmdir rather than running it'; Args = @('-s', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\.*\\build"$') } + @{ Name = 'cleaning a slicer build leaves the deps tree alone'; Args = @('-s', '-c') + NotMatch = @('rmdir.*\\deps\\') } + @{ Name = 'cleaning both builds removes both trees'; Args = @('-d', '-s', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\[^"]*\\deps\\build"$', + '^\+ rmdir /S /Q "[A-Za-z]:\\(?!.*\\deps\\)[^"]*\\build"$') } + + # Nothing below should be reachable. They are a floor under a bug that + # hands clean_tree a path far shorter than it looks. + @{ Name = 'a configuration whose lookup comes back empty is rejected'; Args = @('-d', '-c', '--config', 'release '); ExpectExit = 1 + Contains = @('Unknown configuration') + NotContains = @('rmdir') } + @{ Name = 'a drive root is refused'; Args = @('-d', '-c', '--deps-dir', 'D:\'); ExpectExit = 1 + Contains = @('that is a drive root') + NotContains = @('+ rmdir') } + @{ Name = 'the repository itself is refused'; Args = @('-d', '-c', '--deps-dir', '.'); ExpectExit = 1 + Contains = @('that is the repository itself') + NotContains = @('+ rmdir') } + @{ Name = '-k echoes the taskkills rather than running them'; Args = @('-k') + Contains = @('+ taskkill /F /IM MSBuild.exe', '+ taskkill /F /IM cl.exe') } + @{ Name = '-k also covers the Ninja toolchain'; Args = @('-k') + Contains = @('+ taskkill /F /IM ninja.exe', '+ taskkill /F /IM clang-cl.exe') } + @{ Name = '-k announces the dry run like every other action'; Args = @('-k') + First = '^Dry run: ' } + @{ Name = '-u echoes the winget installs rather than running them'; Args = @('-u') + Contains = @('+ winget install', 'Kitware.CMake') + NotContains = @('cmake -S deps') } + # Not a dry run: winget is a stub that fails, so nothing is installed. + @{ Name = 'a failed install is reported, not claimed as success'; Args = @('-u') + DryRun = $false; ExpectExit = 1 + Env = @{ PATH = $stubPath } + Contains = @('Failed to install:', 'CMake', 'Perl', 'Git') + NotContains = @('Installed the prerequisites') } + # The reason belongs inside the frame. Every command this path ran had + # already succeeded, so naming the last one would point at the wrong thing. + @{ Name = 'a failed install names the reason, not the last command'; Args = @('-u') + DryRun = $false; ExpectExit = 1 + Env = @{ PATH = $stubPath } + Contains = @('####', 'Failed to install:') + NotContains = @('Failed: winget') } + @{ Name = 'a dry run does not claim the install happened'; Args = @('-u') + Contains = @('Dry run: nothing was installed.') + NotContains = @('are in place') } + @{ Name = '-u with a build defers that build, not a fuller one'; Args = @('-u', '-d') + Contains = @('build_win.bat -d') + NotContains = @('build_win.bat -ds') } + @{ Name = '-u on its own suggests the whole build'; Args = @('-u') + Contains = @('build_win.bat -ds') } + @{ Name = 'a dry run only echoes, it never configures'; Args = @('-d') + Contains = @('+ cmake') + NotContains = @('CMake Error', 'Configuring done') } + + 'extra configure arguments' + # --deps-args and --slicer-args are declared "rawstring", so a value that + # looks like an option is allowed through. Plain string options still + # reject one, since there it almost always means a forgotten value. + @{ Name = '--deps-args reaches the deps configure'; Args = @('-d', '--deps-args', 'FOO') + Contains = @('-DCMAKE_BUILD_TYPE=Release FOO') } + @{ Name = '--slicer-args reaches the slicer configure'; Args = @('-s', '--slicer-args', 'BAZ') + Contains = @('BAZ') } + @{ Name = '--deps-args accepts a value that starts with a dash'; Args = @('-d', '--deps-args', '-DFOO') + Contains = @('-DFOO') } + @{ Name = 'a plain string option still rejects a dash-leading value'; Args = @('-d', '--deps-target', '--tests'); ExpectExit = 1 + Contains = @('looks like another option') } + # cmd splits arguments on "=" as well as spaces, so an unquoted -D reaches + # the script as two arguments however it was invoked. + @{ Name = 'an unquoted value containing = is rejected'; Args = @('-d', '--deps-args', 'FOO=BAR'); ExpectExit = 1 + Contains = @('Unknown argument') } + # The environment overrides exist for that reason; nothing tokenises them. + @{ Name = 'ORCA_DEPS_CMAKE_ARGS reaches the deps configure'; Args = @('-d') + Env = @{ ORCA_DEPS_CMAKE_ARGS = '-DFOO=BAR -DBAZ=QUX' } + Contains = @('-DFOO=BAR -DBAZ=QUX') } + @{ Name = 'ORCA_SLICER_CMAKE_ARGS reaches the slicer configure'; Args = @('-s') + Env = @{ ORCA_SLICER_CMAKE_ARGS = '-DWANTED=1' } + Contains = @('-DWANTED=1') } + @{ Name = 'the deps override does not leak into the slicer configure'; Args = @('-s') + Env = @{ ORCA_DEPS_CMAKE_ARGS = '-DDEPSONLY=1' } + NotContains = @('-DDEPSONLY=1') } + @{ Name = 'the help points at the environment for a spaced argument'; Args = @('--help'); DryRun = $false + Contains = @('Neither form supports a value containing an ampersand') } + @{ Name = 'the help lists the environment overrides'; Args = @('--help'); DryRun = $false + Contains = @('Environment:', 'ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS') } + + 'running the unit tests' + @{ Name = '--tests builds them without running them'; Args = @('-s', '--tests') + Contains = @('-DBUILD_TESTS=ON') + NotContains = @('ctest') } + @{ Name = '--run-tests builds and runs them'; Args = @('-s', '--run-tests') + Contains = @('-DBUILD_TESTS=ON', 'ctest --test-dir "build/tests" -C Release --output-on-failure') } + @{ Name = '--run-tests follows the build type and directory'; Args = @('-s', '--run-tests', '--config', 'debug') + Contains = @('ctest --test-dir "build-dbg/tests" -C Debug') } + @{ Name = 'no tests are run by default'; Args = @('-s') + NotContains = @('ctest') } + + 'failures are reported' + @{ Name = 'a missing cmake is caught and exits non-zero'; Args = @('-d'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('CMake was not found') } + @{ Name = 'packing does not need cmake, only an archiver'; Args = @('-p') + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + NotContains = @('CMake was not found') } + # Not a dry run: a cd to a missing drive is a real failure inside a + # parenthesised block, which is where exit /b silently loses its code. + # Without the jump to :die this exits 0 and a failed build reads as a + # successful one. + @{ Name = 'a failure inside a build block reaches the caller'; Args = @('-p', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('Exit code 1.', '####') + NotContains = @('Build completed', 'Try') } + # The retry follows the stage that failed. Offering it for the whole run + # would clean a dependency tree that was not at fault. + @{ Name = 'a failure names a retry scoped to the stage that failed'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('build_win.bat -ds') } + # CMake's own failure here is hundreds of lines about package resolution. + @{ Name = 'a missing dependency tree is named, not left to CMake'; Args = @('-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('Dependencies not found at', 'Build them with build_win.bat -d --deps-dir "Z:\nope"') + NotContains = @('cmake -B', 'Try') } + # Every other suggestion carries the flags that reproduce the run; a bare + # -d would point at the MSVC tree after a clang build. + @{ Name = 'the missing-deps hint names this toolchain'; Args = @('-s', '-l', '-x', '--deps-dir', 'deps/not-built') + DryRun = $false; ExpectExit = 1 + Contains = @('Build them with build_win.bat -d -l -x --deps-dir "deps/not-built"') + NotExists = @('deps/not-built') } + # A dry run configures nothing, so it must not depend on which trees happen + # to exist on the machine running the suite. + @{ Name = 'a dry run does not check for the deps tree'; Args = @('-s', '--deps-dir', 'Z:\nope') + Contains = @('cmake -B "build"') + NotContains = @('Dependencies not found') } + # -d is about to build them, so there is nothing to report yet. + @{ Name = 'building the deps in the same run skips the check'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + NotContains = @('Dependencies not found') } + # A configure fails before any compiler runs, so -v has nothing to show. + @{ Name = 'a configure failure is not offered a verbose rebuild'; Args = @('-d', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('-c discard that tree') + NotContains = @('-v show the failing') } + # A bare --no-configure succeeds on a machine that already has a usable + # build tree, so name one that cannot exist instead. + @{ Name = 'a build failure is'; Args = @('-s', '--no-configure', '--build-dir', 'deps/no-such-tree') + DryRun = $false; ExpectExit = 1 + Contains = @('-v show the failing') + NotExists = @('deps/no-such-tree') } + # --build-dir names the slicer tree, which a deps failure has nothing to do + # with. --deps-dir stays, because that is the tree that failed. + @{ Name = 'a deps retry leaves out the slicer tree'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope', '--build-dir', 'D:\b') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('--build-dir') } + @{ Name = 'an unknown configuration stays a single line'; Args = @('-s', '--config', 'bogus'); ExpectExit = 1 + Contains = @('Unknown configuration') + NotContains = @('####', 'Try') } + @{ Name = 'a bad --jobs value is not framed either'; Args = @('-s', '-j', 'x'); ExpectExit = 1 + Contains = @('Invalid --jobs value') + NotContains = @('####') } + + 'the summary says what to do next' + # Every suggested command carries the flags that reproduce this run. + @{ Name = 'a deps build points at the slicer build'; Args = @('-d', '-l') + Contains = @('Build the slicer build_win.bat -s -l') + NotContains = @('Run it') } + @{ Name = 'a ninja slicer build offers a single target'; Args = @('-s', '-l', '-x') + Contains = @('Rebuild after edits build_win.bat -s -l -x --no-configure', 'Rebuild one target') + NotContains = @('Solution', 'Open in Visual Studio') } + @{ Name = 'a visual studio build names the solution instead'; Args = @('-s') + Contains = @('Solution ', 'Open in Visual Studio build\OrcaSlicer.sln', + 'Rebuild after edits build_win.bat -s --no-configure') + NotContains = @('Rebuild one target') } + @{ Name = 'the configuration and architecture come back'; Args = @('-s', '-l', '-x', '--config', 'debug', '--arch', 'arm64') + Contains = @('build_win.bat -s -l -x --config debug --arch arm64 --no-configure') } + @{ Name = 'the tree overrides come back quoted'; Args = @('-s', '--deps-dir', 'D:\d', '--build-dir', 'D:\b') + Contains = @('--deps-dir "D:\d" --build-dir "D:\b"') } + @{ Name = 'a pinned visual studio release comes back'; Args = @('-s', '--vs', '2022') + Contains = @('build_win.bat -s --vs 2022 --no-configure') } + # Autodetection writes what it found into the same variable, so a detected + # release must not come back as though it had been asked for. + @{ Name = 'a detected release does not'; Args = @('-s') + NotContains = @('--vs') } + @{ Name = 'the binary is named in the build tree it was built in'; Args = @('-s', '-l', '-x') + Contains = @('build-clang\src\Release\orca-slicer.exe') } + @{ Name = 'installing names the installed copy instead'; Args = @('-s', '-l', '-x', '-i') + Contains = @('build-clang\OrcaSlicer\orca-slicer.exe') } + # -i changes where the binary lands, so a rebuild that dropped it would + # leave the path above pointing at a stale copy. + @{ Name = 'the rebuild suggestion keeps -i'; Args = @('-s', '-l', '-x', '-i') + Contains = @('Rebuild after edits build_win.bat -s -l -x -i --no-configure') } + # A deps retry has no install step to repeat. + @{ Name = 'a deps retry drops it'; Args = @('-d', '-s', '-i', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('-d -i') } + # Naming a target builds it and its dependencies, not its dependents, so + # the binary on disk is whatever the last full build left there. + @{ Name = 'a single-target build does not claim the whole binary'; Args = @('-s', '-l', '-x', '--slicer-target', 'glad') + Contains = @('Target glad', 'Relink the binary build_win.bat -s -l -x --no-configure') + NotContains = @('Run it', 'orca-slicer.exe', 'Rebuild after edits') } + # The executable has a target of its own, and naming that one does relink. + @{ Name = 'naming the executable target still claims the binary'; Args = @('-s', '-l', '-x', '--slicer-target', 'OrcaSlicer') + Contains = @('Run it', 'orca-slicer.exe', 'Rebuild after edits') + NotContains = @('Target OrcaSlicer', 'Relink the binary') } + @{ Name = '--run-tests offers the ctest line'; Args = @('-s', '-l', '-x', '--run-tests') + Contains = @('Re-run the tests ctest --test-dir build-clang/tests -C Release') } + @{ Name = 'packing names the bundle and how to use it'; Args = @('-p', '-l') + Contains = @('Bundle ', 'Share the bundle') } + # The line supplies its own tree, so the one this run used must not ride + # along and contradict it. + @{ Name = 'the bundle line names one tree, not two'; Args = @('-s', '-p', '-l', '-x', '--deps-dir', 'D:\shared') + Contains = @('then build_win.bat -s -l -x --deps-dir <path>') + NotContains = @('--deps-dir "D:\shared" --deps-dir') } + @{ Name = 'installing prerequisites suggests the build that follows'; Args = @('-u', '-l') + Contains = @('Restart this shell', 'build_win.bat -ds -l') + NotContains = @('Run it') } + # Everything below the header line is worked out the same way in either + # run, which is why a dry run can cover it. + @{ Name = 'a dry run does not claim a build happened'; Args = @('-s', '-l', '-x') + Contains = @('Dry run: nothing was built.') + NotContains = @('Build completed in') } + # --no-configure is the iteration loop and still gets the block; four + # lines after a rebuild is not enough to be worth suppressing. + @{ Name = '--no-configure still gets the summary'; Args = @('-s', '-l', '-x', '--no-configure') + Contains = @('Next', 'Rebuild after edits') } + + 'pointing at the solution' + @{ Name = 'the VS generator says where the solution is'; Args = @('-s') + Match = @('^ Solution .*\\build\\OrcaSlicer\.sln$') } + @{ Name = 'the solution path follows the configuration'; Args = @('-s', '--config', 'debug') + Match = @('^ Solution .*\\build-dbg\\OrcaSlicer\.sln$') } + @{ Name = 'the solution line survives an install'; Args = @('-s', '-i') + Contains = @(' Solution ') } + # The path is resolved, not pasted onto the repository root, so it is + # right whether --build-dir came absolute or with forward slashes. + @{ Name = 'a moved build still prints one real path'; Args = @('-s', '--build-dir', 'out/build/x64-clang') + Match = @('^ Solution [A-Za-z]:\\[^/]+\\OrcaSlicer\.sln$') } + @{ Name = 'an absolute --build-dir is not glued onto the repo root'; Args = @('-s', '--build-dir', 'D:\tree') + Contains = @('Solution D:\tree\OrcaSlicer.sln') } +) + +function Invoke-BuildScript { + param([string[]] $Arguments, [hashtable] $Environment) + + $saved = @{} + if ($Environment) { + foreach ($key in $Environment.Keys) { + $saved[$key] = [Environment]::GetEnvironmentVariable($key) + Set-Item -Path "env:$key" -Value $Environment[$key] + } + } + try { + # 'Stop' turns a native command's stderr into a terminating error, and + # a case that exercises a real failure writes to stderr. Let the output + # through and judge the run by its exit code instead. The assignment is + # scoped to this function, so the rest of the suite keeps 'Stop'. + $ErrorActionPreference = 'Continue' + if ($Arguments.Count -eq 0) { + $out = & $Script 2>&1 | Out-String + } else { + $out = & $Script @Arguments 2>&1 | Out-String + } + return [pscustomobject]@{ Output = $out; Exit = $LASTEXITCODE } + } finally { + foreach ($key in $saved.Keys) { + if ($null -eq $saved[$key]) { Remove-Item -Path "env:$key" -ErrorAction SilentlyContinue } + else { Set-Item -Path "env:$key" -Value $saved[$key] } + } + } +} + +$knownFields = @( + 'Name', 'Args', 'ExpectExit', 'DryRun', 'First', 'Env', + 'Contains', 'NotContains', 'Match', 'NotMatch', 'NotExists' +) + +function Test-Case { + param([hashtable] $Case) + + # Read fields with the indexer, not dot notation. A hashtable exposes its + # own members too, so $Case.Contains returns the Contains *method* whenever + # the case has no key by that name. + $argv = @($Case['Args']) + if (-not $Case.ContainsKey('DryRun') -or $Case['DryRun']) { $argv += '--dry-run' } + + $expect = 0 + if ($Case.ContainsKey('ExpectExit')) { $expect = $Case['ExpectExit'] } + + $result = Invoke-BuildScript -Arguments $argv -Environment $Case['Env'] + + $problems = @() + + # A misspelled field is silently ignored by the checks below, which + # leaves the case asserting nothing at all and passing. + foreach ($field in $Case.Keys) { + if ($knownFields -notcontains $field) { $problems += "unknown field '$field'" } + } + + if ($result.Exit -ne $expect) { $problems += "exit $($result.Exit), expected $expect" } + foreach ($needle in $Case['Contains']) { + if (-not $result.Output.Contains($needle)) { $problems += "missing '$needle'" } + } + foreach ($needle in $Case['NotContains']) { + if ($result.Output.Contains($needle)) { $problems += "unexpected '$needle'" } + } + $lines = $result.Output -split "`r?`n" + if ($Case['First'] -and $lines[0] -notmatch $Case['First']) { + $problems += "first line was '$($lines[0])'" + } + foreach ($pattern in $Case['Match']) { + if (@($lines | Where-Object { $_ -match $pattern }).Count -eq 0) { + $problems += "no line matching /$pattern/" + } + } + foreach ($pattern in $Case['NotMatch']) { + foreach ($line in @($lines | Where-Object { $_ -match $pattern })) { + $problems += "line matches /$pattern/: $line" + } + } + # Output cannot show what a run did not create. + foreach ($path in $Case['NotExists']) { + $full = Join-Path (Split-Path -Parent $Script) $path + if (Test-Path $full) { + $problems += "created '$path'" + } + } + return ,$problems +} + +$pass = 0 +$failed = @() +# Held back so a filtered run does not print headings for groups it skipped. +$heading = $null + +foreach ($case in $cases) { + if ($case -is [string]) { + $heading = $case + continue + } + if ($Name -and $case['Name'] -notmatch $Name) { continue } + if ($heading) { + Write-Host '' + Write-Host $heading -ForegroundColor Cyan + $heading = $null + } + + $problems = Test-Case -Case $case + if ($problems.Count -eq 0) { + $pass++ + Write-Host (' ok ' + $case['Name']) + } else { + $failed += $case['Name'] + Write-Host (' FAIL ' + $case['Name']) -ForegroundColor Red + foreach ($problem in $problems) { Write-Host (' ' + $problem) -ForegroundColor Red } + Write-Host (' args: ' + (@($case['Args']) -join ' ')) + } +} + +Remove-Item -Recurse -Force $fixtures -ErrorAction SilentlyContinue + +Write-Host '' +# A pattern that matched nothing has proved nothing, so do not report it as +# a clean run. +if ($Name -and $pass -eq 0 -and $failed.Count -eq 0) { + Write-Host "no case matched /$Name/" -ForegroundColor Red + exit 1 +} +Write-Host "$pass passed, $($failed.Count) failed" +if ($failed.Count -gt 0) { + foreach ($name in $failed) { Write-Host " failed: $name" -ForegroundColor Red } + exit 1 +} +exit 0 From 918d3914ba40d7db638115e31beef54dc867e4ed Mon Sep 17 00:00:00 2001 From: Thomas <bistory@gmail.com> Date: Tue, 1 Sep 2026 20:05:10 +0200 Subject: [PATCH 09/23] Fixed "jerk" translation inconsistency. (#15463) * Fixed "jerk" translation inconsistency. * Fixed an other "jerk" translation. --- localization/i18n/fr/OrcaSlicer_fr.po | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index c9bd7f22ef..65589bc5ff 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.6\n" +"X-Generator: Poedit 3.9\n" # AI Translated msgid "Main Extruder" @@ -10707,7 +10707,7 @@ msgid "Acceleration limitation" msgstr "Limitation d'accélération" msgid "Jerk limitation" -msgstr "Limitation des secousses" +msgstr "Limitation du jerk" msgid "Single extruder multi-material setup" msgstr "Configuration multi-matériaux pour extrudeur unique" @@ -12226,7 +12226,7 @@ msgid "Plate %d: %s does not support filament %s" msgstr "Plaque %d : %s ne prend pas en charge le filament %s" msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" -msgstr "Un réglage trop bas de la vitesse de saccade peut entraîner des artefacts sur les surfaces courbes" +msgstr "Un réglage trop bas de la vitesse de jerk peut entraîner des artefacts sur les surfaces courbes" msgid "" "The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/machine_max_jerk_y).\n" @@ -12234,7 +12234,7 @@ msgid "" "You can adjust the maximum jerk setting in your printer's configuration to get higher speeds." msgstr "" "Le réglage du jerk dépasse le jerk maximum de l’imprimante (machine_max_jerk_x/machine_max_jerk_y).\n" -"Orca plafonne automatiquement la vitesse de l’impulsion pour s’assurer qu’elle ne dépasse pas les capacités de l’imprimante.\n" +"Orca plafonne automatiquement la vitesse du jerk pour s’assurer qu’elle ne dépasse pas les capacités de l’imprimante.\n" "Vous pouvez ajuster le réglage du jerk maximum dans la configuration de votre imprimante pour obtenir des vitesses plus élevées." msgid "" @@ -21188,8 +21188,7 @@ msgstr "" "Divisez vos impressions en plateaux\n" "Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le processus de suivi de toutes les pièces." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer -#: Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -21261,8 +21260,7 @@ msgstr "" "Améliorer la solidité\n" "Saviez-vous que vous pouvez définir un plus grand nombre de périmètre et une densité de remplissage plus élevée pour améliorer la résistance du modèle ?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer -#: door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." From e108ddfd56b6527a7b372c009307a5a2e5291347 Mon Sep 17 00:00:00 2001 From: Ian Bassi <ian.bassi@outlook.com> Date: Tue, 1 Sep 2026 15:37:08 -0300 Subject: [PATCH 10/23] Fix wrong JA jerk translation. (#15488) Update OrcaSlicer_ja.po --- localization/i18n/ja/OrcaSlicer_ja.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 327e3df661..d67a39463d 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -10617,7 +10617,7 @@ msgid "Junction Deviation" msgstr "接合偏差" msgid "Jerk(XY)" -msgstr "ジャーク(XY)" +msgstr "Jerk(XY)" msgid "Raft" msgstr "ラフト" @@ -10914,7 +10914,7 @@ msgid "Acceleration limitation" msgstr "加速制限" msgid "Jerk limitation" -msgstr "振動特性" +msgstr "Jerk制限" msgid "Single extruder multi-material setup" msgstr "シングルエクストルーダー マルチマテリアル設定" @@ -12485,7 +12485,7 @@ msgid "Plate %d: %s does not support filament %s" msgstr "プレート %d: %s がフィラメント %s を使用できません" msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" -msgstr "ジャーク速度を低く設定しすぎると曲面にアーティファクトが発生する可能性があります" +msgstr "Jerk速度を低く設定しすぎると曲面にアーティファクトが発生する可能性があります" # AI Translated msgid "" @@ -14750,7 +14750,7 @@ msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration. msgstr "Klipperのmax_accel_to_decelが、加速度のこの%%に調整されます。" msgid "Default jerk." -msgstr "デフォルトジャーク。" +msgstr "デフォルトのJerkです。" # AI Translated msgid "Marlin Firmware Junction Deviation (replaces the traditional XY Jerk setting)." @@ -15841,28 +15841,28 @@ msgid "Maximum acceleration of the E axis" msgstr "E軸最大加速度" msgid "Maximum jerk X" -msgstr "最大振動 X" +msgstr "最大Jerk X" msgid "Maximum jerk Y" -msgstr "最大振動 Y" +msgstr "最大Jerk Y" msgid "Maximum jerk Z" -msgstr "最大振動 Z" +msgstr "最大Jerk Z" msgid "Maximum jerk E" -msgstr "最大振動 E" +msgstr "最大Jerk E" msgid "Maximum jerk of the X axis" -msgstr "最大振動 X" +msgstr "X軸最大Jerk" msgid "Maximum jerk of the Y axis" -msgstr "最大振動 Y" +msgstr "Y軸最大Jerk" msgid "Maximum jerk of the Z axis" -msgstr "最大振動 Z" +msgstr "Z軸最大Jerk" msgid "Maximum jerk of the E axis" -msgstr "最大振動 E" +msgstr "E軸最大Jerk" msgid "Maximum Junction Deviation" msgstr "最大接合偏差" From 36228c4755782447f74296a7c8d9c430288b3bad Mon Sep 17 00:00:00 2001 From: weng haishi <74546450+wenghaishi@users.noreply.github.com> Date: Wed, 2 Sep 2026 03:39:12 +0800 Subject: [PATCH 11/23] fix: prevent heap corruption when repairing models with auto-backup (#15395) * fix: prevent heap corruption in model repair with auto-backup The CGAL model repair (fix_model_with_cgal_gui) runs on a worker thread that mutates the live ModelObject (split / delete_volume / set_mesh). Those mutators transitively call save_object_mesh(), which hands the object to the auto-backup manager. The manager clones and serializes the object on its own thread via an internal Model documented as "visit only in main thread". Running that path from the repair worker races the backup thread on the shared model, causing use-after-free / heap corruption -- EXC_BAD_ACCESS and libmalloc "corruption of free block" aborts, always with the "cgal_fix_model" worker on the stack inside add_object_mesh -> Model::add_object / delete_object. Wrap the repair in a SaveObjectGaurd so the backup manager ignores the object for the duration of the repair; a single backup is taken when the guard is released on the main thread after the worker joins. This mirrors existing batch-edit usage of SaveObjectGaurd (Model.hpp, GUI_ObjectList). Repro: repair a multi-part / splittable object with auto-backup enabled (Preferences > Backup); crashed within a few repairs on macOS arm64. * Update FixModelByCgal.cpp --------- Co-authored-by: Ian Bassi <ian.bassi@outlook.com> --- src/slic3r/Utils/FixModelByCgal.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/slic3r/Utils/FixModelByCgal.cpp b/src/slic3r/Utils/FixModelByCgal.cpp index 8d196f7201..9d973844bb 100644 --- a/src/slic3r/Utils/FixModelByCgal.cpp +++ b/src/slic3r/Utils/FixModelByCgal.cpp @@ -12,6 +12,7 @@ #include "libslic3r/MeshBoolean.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/format.hpp" #include "libslic3r/Thread.hpp" #include "../GUI/I18N.hpp" @@ -69,6 +70,9 @@ public: // Returns false if fixing was canceled. fix_result contains error message if failed. bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dialog, const wxString &msg_header, std::string &fix_result, bool keep_painting) { + // Hold SaveObjectGaurd to prevent backup manager from racing concurrent mesh mutations (use-after-free). + SaveObjectGaurd backup_gaurd(model_object); + // Orca: Synchronization primitives for progress updates between worker thread and GUI. std::mutex mtx; std::condition_variable condition; From e8115658e044c1a4bc9b537f9197ec31531b1ca4 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Wed, 2 Sep 2026 00:07:02 +0300 Subject: [PATCH 12/23] Fix overhang fan control when overhang slowdown is enabled (#15158) --- src/libslic3r/GCode.cpp | 7 +-- src/libslic3r/GCode/CoolingBuffer.cpp | 21 ++++---- src/libslic3r/GCode/FanMover.cpp | 11 ++--- src/libslic3r/GCode/GCodeProcessor.cpp | 4 +- tests/fff_print/test_cooling.cpp | 68 ++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 21 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e947be47a1..e9cdb620e0 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -8197,9 +8197,10 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } variable_speed = std::any_of(new_points.begin(), new_points.end(), [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec) - if (!NOZZLE_CONFIG(enable_overhang_speed) && FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers) { - for (ProcessedPoint &point : new_points) - point.speed = speed; + if (FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers) { + if (!NOZZLE_CONFIG(enable_overhang_speed)) + for (ProcessedPoint &point : new_points) + point.speed = speed; variable_speed = new_points.size() > 1; } } diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 3bca1f8df9..e55b89212e 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -1024,28 +1024,29 @@ std::string CoolingBuffer::apply_layer_cooldown( } if (need_set_fan) { + const auto set_fan = [&](int speed) { + if (m_current_fan_speed != speed) { + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, speed, part_cooling_fan_min_pwm); + m_current_fan_speed = speed; + } + }; if (fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, overhang_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = overhang_fan_speed; + set_fan(overhang_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_INTERNAL_BRIDGE_FAN_START]){ // ORCA: Add support for separate internal bridge fan speed control - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, internal_bridge_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = internal_bridge_fan_speed; + set_fan(internal_bridge_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, supp_interface_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = supp_interface_fan_speed; + set_fan(supp_interface_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, ironing_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = ironing_fan_speed; + set_fan(ironing_fan_speed); } else if(fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] && m_current_fan_speed != -1){ new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed, part_cooling_fan_min_pwm); fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] = false; } else { - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = m_fan_speed; + set_fan(m_fan_speed); } need_set_fan = false; } diff --git a/src/libslic3r/GCode/FanMover.cpp b/src/libslic3r/GCode/FanMover.cpp index 112066bb85..9d77d1d04c 100644 --- a/src/libslic3r/GCode/FanMover.cpp +++ b/src/libslic3r/GCode/FanMover.cpp @@ -170,14 +170,13 @@ void FanMover::_put_in_middle_G1(std::list<BufferData>::iterator item_to_split, void FanMover::_print_in_middle_G1(BufferData& line_to_split, float nb_sec, const std::string &line_to_write) { if (nb_sec < line_to_split.time * 0.1) { - // doesn't really need to be split, print it after - m_process_output += line_to_split.raw + "\n"; + // Doesn't need to be split: the insertion point is at the start. m_process_output += line_to_write + (line_to_write.back() == '\n'?"":"\n"); - } else if (nb_sec > line_to_split.time * 0.9) { - // doesn't really need to be split, print it before - //will also print before if line_to_split.time == 0 - m_process_output += line_to_write + (line_to_write.back() == '\n' ? "" : "\n"); m_process_output += line_to_split.raw + "\n"; + } else if (nb_sec > line_to_split.time * 0.9) { + // Doesn't need to be split: the insertion point is at the end. + m_process_output += line_to_split.raw + "\n"; + m_process_output += line_to_write + (line_to_write.back() == '\n' ? "" : "\n"); }else if(line_to_split.raw.size() > 2 && line_to_split.raw[0] == 'G' && line_to_split.raw[1] == '1' && line_to_split.raw[2] == ' ') { float percent = nb_sec / line_to_split.time; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 4f3f95f297..2ac8bd45a6 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -532,7 +532,7 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; // ORCA: Fix issue with flow rate changes being visualized incorrectly const float mm3_per_mm = curr_move.mm3_per_mm; - const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; + const float fan_speed = curr_move.fan_speed; const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; actual_speed_moves.push_back({ block.move_id, @@ -563,7 +563,7 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; // ORCA: Fix issue with flow rate changes being visualized incorrectly const float mm3_per_mm = curr_move.mm3_per_mm; - const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; + const float fan_speed = curr_move.fan_speed; const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; actual_speed_moves.push_back({ block.move_id, diff --git a/tests/fff_print/test_cooling.cpp b/tests/fff_print/test_cooling.cpp index ec29b5fdc9..a21ff236ce 100644 --- a/tests/fff_print/test_cooling.cpp +++ b/tests/fff_print/test_cooling.cpp @@ -2,7 +2,10 @@ #include "test_helpers.hpp" +#include <algorithm> +#include <sstream> #include <string> +#include <vector> using namespace Slic3r; using namespace Slic3r::Test; @@ -25,3 +28,68 @@ TEST_CASE("Cooling consumes its internal speed markers", "[Cooling]") const std::string gcode = slice({ cube(20) }, { { "layer_height", 0.2 } }); CHECK(gcode.find(";_EXTRUDE_SET_SPEED") == std::string::npos); } + +TEST_CASE("Overhang fan transitions do not depend on overhang speed", "[Cooling][Regression]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "bridge_speed", 2.0 }, + { "enable_arc_fitting", false }, + { "enable_overhang_bridge_fan", true }, + { "enable_overhang_speed", false }, + { "initial_layer_print_height", 0.3 }, + { "inner_wall_speed", 30.0 }, + { "layer_height", 0.3 }, + { "outer_wall_speed", 30.0 }, + { "overhang_1_4_speed", "30" }, + { "overhang_2_4_speed", "29" }, + { "overhang_3_4_speed", "6" }, + { "overhang_4_4_speed", "3" }, + { "slow_down_for_layer_cooling", false }, + { "slowdown_for_curled_perimeters", false }, + }); + config.set_key_value("fan_max_speed", new ConfigOptionFloats{20.0}); + config.set_key_value("fan_min_speed", new ConfigOptionFloats{20.0}); + config.set_key_value("overhang_fan_speed", new ConfigOptionInts{100}); + config.set_key_value("overhang_fan_threshold", new ConfigOptionEnumsGeneric{Overhang_threshold_2_4}); + config.set_key_value("layer_change_gcode", new ConfigOptionString{";TEST_LAYER_Z=[layer_z]"}); + + const auto fan_commands = [](const std::string &gcode) { + std::vector<std::pair<std::string, std::string>> commands; + std::istringstream input(gcode); + std::string layer; + std::string line; + while (std::getline(input, line)) { + if (line.rfind(";TEST_LAYER_Z=", 0) == 0) + layer = line; + else if (!layer.empty() && (line.rfind("M106", 0) == 0 || line.rfind("M107", 0) == 0)) + commands.emplace_back(layer, line); + } + return commands; + }; + const auto feedrates = [](const std::string &gcode) { + std::vector<std::string> values; + std::istringstream input(gcode); + std::string word; + while (input >> word) + if (!word.empty() && word.front() == 'F') + values.push_back(word); + return values; + }; + + constexpr double sphere_radius = 50.0; // 100 mm diameter. + const std::string without_speed_gcode = slice({make_sphere(sphere_radius, PI / 24.0)}, config); + config.set_deserialize_strict({{"enable_overhang_speed", true}}); + const std::string with_speed_gcode = slice({make_sphere(sphere_radius, PI / 24.0)}, config); + + const auto without_speed_fan = fan_commands(without_speed_gcode); + const auto with_speed_fan = fan_commands(with_speed_gcode); + const auto without_speed_feedrates = feedrates(without_speed_gcode); + const auto with_speed_feedrates = feedrates(with_speed_gcode); + + REQUIRE_FALSE(without_speed_fan.empty()); + REQUIRE(std::any_of(without_speed_fan.begin(), without_speed_fan.end(), + [](const auto &command) { return command.second.find("S255") != std::string::npos; })); + REQUIRE(with_speed_feedrates != without_speed_feedrates); + CHECK(with_speed_fan == without_speed_fan); +} From b6ef6cf1be428b931d669dcc31b7f43ae320be85 Mon Sep 17 00:00:00 2001 From: Clifford <cliff@cigii.com> Date: Tue, 1 Sep 2026 18:29:11 -0400 Subject: [PATCH 13/23] fix: out-of-bounds write migrating per-variant values when switching printers (#15456) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> --- src/libslic3r/PrintConfig.cpp | 57 +++++++++++-- .../test_config_variant_expansion.cpp | 81 +++++++++++++++++++ 2 files changed, 131 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2a4eb8d7a7..17d7cee678 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -10091,6 +10091,10 @@ int DynamicPrintConfig::update_values_from_single_to_multi(DynamicPrintConfig& m for (int index = 0; index < variant_count; index++) { + //variant_count is the variant column width, src_opt the value array; + //they disagree when the source was authored at a different width + if (index >= (int)src_opt->values.size()) + break; if (opt->values[index] > src_opt->values[index]) opt->values[index] = src_opt->values[index]; } @@ -10108,6 +10112,8 @@ int DynamicPrintConfig::update_values_from_single_to_multi(DynamicPrintConfig& m for (int index = 0; index < variant_count; index++) { + if (index >= (int)src_opt->values.size()) + break; if (opt->values[index].value > src_opt->values[index].value) opt->values[index] = src_opt->values[index]; } @@ -10302,6 +10308,10 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + //the counts come from the variant columns, the arrays from the options; + //they disagree when a config was authored at a different variant width + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx] < opt->values[new_variant_index]) opt->values[new_variant_index] = old_values[idx]; } @@ -10332,6 +10342,10 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + //the counts come from the variant columns, the arrays from the options; + //they disagree when a config was authored at a different variant width + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx] < opt->values[new_variant_index]) opt->values[new_variant_index] = old_values[idx]; } @@ -10362,6 +10376,8 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx]) //enabled opt->values[new_variant_index] = old_values[idx]; } @@ -10402,6 +10418,15 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st same_variant_indices.emplace_back(indices); } + //dst_values below is the destination PRINT preset's per-variant row, sized to its own + //print_extruder_variant; dst_extruder_variants is the PRINTER's list. They disagree until + //the print preset is re-selected, so size the row to the variant count before indexing it. + const size_t dst_variant_count = dst_extruder_variants.size(); + if (dst_variant_count == 0) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", Line %1%: empty destination variant list")%__LINE__; + return -1; + } + t_config_option_keys keys = this->keys(); for(auto& key : keys){ if(key_sets.find(key) == key_sets.end()) @@ -10417,7 +10442,13 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st { ConfigOptionFloatsNullable* opt = this->option<ConfigOptionFloatsNullable>(key); auto src_values = opt->values; - auto dst_values = dst_config.option<ConfigOptionFloatsNullable>(key) ->values; + const auto* dst_opt = dst_config.option<ConfigOptionFloatsNullable>(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionFloatsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto& indices = same_variant_indices[dst_idx]; if(indices.empty()) @@ -10425,7 +10456,7 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st bool has_value = false; double target_value = std::numeric_limits<double>::max(); for(auto idx : indices){ - if(opt && idx < opt->values.size() && !opt->is_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = std::min(target_value, src_values[idx]); } @@ -10441,7 +10472,13 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st { ConfigOptionFloatsOrPercentsNullable* opt = this->option<ConfigOptionFloatsOrPercentsNullable>(key); auto src_values = opt->values; - auto dst_values = dst_config.option<ConfigOptionFloatsOrPercentsNullable>(key) ->values; + const auto* dst_opt = dst_config.option<ConfigOptionFloatsOrPercentsNullable>(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionFloatsOrPercentsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto& indices = same_variant_indices[dst_idx]; if(indices.empty()) @@ -10449,7 +10486,7 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st bool has_value = false; FloatOrPercent target_value{9999.f, true}; for(auto idx : indices){ - if(opt && !opt->is_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = src_values[idx].value < target_value.value ? src_values[idx] : target_value; } @@ -10465,15 +10502,21 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector<st { ConfigOptionBoolsNullable* opt = this->option<ConfigOptionBoolsNullable>(key); auto src_values = opt->values; - auto dst_values = dst_config.option<ConfigOptionBoolsNullable>(key) ->values; + const auto* dst_opt = dst_config.option<ConfigOptionBoolsNullable>(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionBoolsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto indices = same_variant_indices[dst_idx]; if(indices.empty()) continue; bool has_value = false; - bool target_value; + bool target_value = false; for(auto idx : indices){ - if(opt && !opt->is_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = src_values[idx]; break; diff --git a/tests/libslic3r/test_config_variant_expansion.cpp b/tests/libslic3r/test_config_variant_expansion.cpp index dd7de2af44..28901702cc 100644 --- a/tests/libslic3r/test_config_variant_expansion.cpp +++ b/tests/libslic3r/test_config_variant_expansion.cpp @@ -479,3 +479,84 @@ TEST_CASE("update_values_to_printer_extruders_for_multiple_filaments resolves pe REQUIRE(config.option<ConfigOptionInts>("filament_self_index")->values == std::vector<int>({1, 2})); } } + +// update_values_from_multi_to_multi_2 walks the DESTINATION PRINTER's variant list while writing +// into a row taken from the destination PRINT preset, whose arrays are sized to its own +// print_extruder_variant. Those two widths disagree until the print preset is re-selected for the +// new printer -- Tab::load_current_preset() runs this migration first -- so a project authored on +// a single-variant printer, opened and switched to a wider one, wrote past the end of the row. +TEST_CASE("update_values_from_multi_to_multi_2 sizes the destination row to the variant count", + "[Config][VariantExpansion]") +{ + const std::vector<std::string> src_variants{"Direct Drive Standard"}; + const std::vector<std::string> dst_variants{"Direct Drive Standard", "Direct Drive High Flow", + "Direct Drive Standard", "Direct Drive High Flow"}; + const std::set<std::string> keys{"outer_wall_speed"}; + + // The per-object override as authored on the single-variant printer. + const auto object_override = [] { + DynamicPrintConfig c; + c.option<ConfigOptionFloatsNullable>("outer_wall_speed", true)->values = {42.}; + return c; + }; + + SECTION("a row narrower than the variant list is grown, not overrun") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option<ConfigOptionFloatsNullable>("outer_wall_speed", true)->values = {200.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2(src_variants, dst_variants, dst, keys) == 0); + + const auto& out = object_config.option<ConfigOptionFloatsNullable>("outer_wall_speed")->values; + REQUIRE(out.size() == dst_variants.size()); + // Both "Direct Drive Standard" columns match the source variant, so they take the override. + CHECK(out[0] == Catch::Approx(42.)); + CHECK(out[2] == Catch::Approx(42.)); + // The High Flow columns have no matching source variant: nil, so the destination keeps + // tracking the print preset rather than being pinned to another variant's value. + CHECK(std::isnan(out[1])); + CHECK(std::isnan(out[3])); + } + + // The regression guard: where the row already matches the variant list -- every case that was + // not corrupting the heap -- the resize is a no-op and the output is unchanged. + SECTION("a correctly sized row is untouched") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option<ConfigOptionFloatsNullable>("outer_wall_speed", true)->values = {200., 500., 210., 510.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2(src_variants, dst_variants, dst, keys) == 0); + + const auto& out = object_config.option<ConfigOptionFloatsNullable>("outer_wall_speed")->values; + REQUIRE(out.size() == 4); + CHECK(out[0] == Catch::Approx(42.)); // matched -> override + CHECK(out[1] == Catch::Approx(500.)); // unmatched -> preset value preserved + CHECK(out[2] == Catch::Approx(42.)); + CHECK(out[3] == Catch::Approx(510.)); + } + + // is_nil(idx) indexes values[idx] with no bounds check, so a source shorter than its own + // variant list read out of range before the guard was added. + SECTION("a source shorter than its variant list is read in range") { + DynamicPrintConfig object_config = object_override(); // one value... + DynamicPrintConfig dst; + dst.option<ConfigOptionFloatsNullable>("outer_wall_speed", true)->values = {200., 500.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2( + {"Direct Drive Standard", "Direct Drive Standard"}, // ...but two source variants + {"Direct Drive Standard", "Direct Drive High Flow"}, dst, keys) == 0); + + const auto& out = object_config.option<ConfigOptionFloatsNullable>("outer_wall_speed")->values; + REQUIRE(out.size() == 2); + CHECK(out[0] == Catch::Approx(42.)); + CHECK(out[1] == Catch::Approx(500.)); + } + + SECTION("an empty destination variant list is refused") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option<ConfigOptionFloatsNullable>("outer_wall_speed", true)->values = {200.}; + + CHECK(object_config.update_values_from_multi_to_multi_2(src_variants, {}, dst, keys) == -1); + } +} From e523acc164ecacb9e25d080cd72bbdf9f58abfe8 Mon Sep 17 00:00:00 2001 From: SoftFever <103989404+SoftFever@users.noreply.github.com> Date: Wed, 2 Sep 2026 15:22:55 +0800 Subject: [PATCH 14/23] Add script to run full profile checks locally (#15496) * Run the CI profile checks locally --- .gitignore | 1 + scripts/check_profile.bat | 6 + scripts/check_profile.ps1 | 564 ++++++++++++++++++++++++++++++++++++++ scripts/check_profile.sh | 527 +++++++++++++++++++++++++++++++++++ 4 files changed, 1098 insertions(+) create mode 100644 scripts/check_profile.bat create mode 100644 scripts/check_profile.ps1 create mode 100755 scripts/check_profile.sh diff --git a/.gitignore b/.gitignore index e36d0dfa49..d994d922c1 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ internal_docs/ __pycache__/ *.pyc *.opc +/.test/ diff --git a/scripts/check_profile.bat b/scripts/check_profile.bat new file mode 100644 index 0000000000..231fa721d4 --- /dev/null +++ b/scripts/check_profile.bat @@ -0,0 +1,6 @@ +@echo off +REM Runs check_profile.ps1, the Windows twin of check_profile.sh, from cmd. +REM -ExecutionPolicy Bypass is needed because a Windows client defaults to Restricted, +REM which refuses to run a checked-out .ps1 at all. +powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0check_profile.ps1" %* +exit /b %ERRORLEVEL% diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 new file mode 100644 index 0000000000..5c5dcb20c8 --- /dev/null +++ b/scripts/check_profile.ps1 @@ -0,0 +1,564 @@ +<# +.SYNOPSIS + Local twin of the "Check profiles" CI job (.github/workflows/check_profiles.yml), for Windows. + +.DESCRIPTION + The Windows counterpart of scripts/check_profile.sh, and kept deliberately close to it. + + Runs the same five checks, in the same order, with the same validator flags, and with the + same semantics: every check runs even after an earlier one fails (the workflow's + continue-on-error), then the script exits non-zero once at the end. + + extra_json_check scripts/orca_extra_profile_check.py + validate_system validator -p <profiles> -l <level> + validate_slice validator -p <profiles> -s -l <level> + validate_filament_subtypes validator -p <profiles> -l <level> -f + validate_custom validator against every released custom-preset fixture + + Everything that has to be downloaded - the profile validator and the custom-preset fixture + archives - lands under <repo>\.test\check_profiles and is reused on the next run. That + directory also holds one log per check plus a copy of the comment CI would post on the PR. + + resources\profiles\user, which the validator creates as its data dir but a CI checkout never + has, is moved aside for the duration of the run and restored on exit. Only one run per work + dir at a time. + + x64 and ARM64 hosts are both supported. A locally built validator is chosen by the machine + type in its PE header rather than by the name of its build tree, so build\ (x64) and + build-arm64\ side by side resolve correctly; the published nightly is x64 only and runs + under emulation on ARM64. + +.PARAMETER ProfilesDir + Profile tree to validate (default: resources\profiles). extra_json_check always looks at the + tree next to the script, so this only redirects the validator checks. + +.PARAMETER Validator + OrcaSlicer_profile_validator.exe to use; also $env:ORCA_PROFILE_VALIDATOR. Default: the local + build*\ Release build (then RelWithDebInfo, MinSizeRel, Debug) for this architecture, else + the nightly release build is downloaded. + +.PARAMETER Download + Ignore local builds and use the downloaded nightly validator. + +.PARAMETER Refresh + Re-download the validator and fixtures instead of using the cache. + +.PARAMETER WorkDir + Downloads, logs and fixture trees (default: .test\check_profiles). Point it somewhere short, + such as D:\t, if a fixture tree trips Windows' 260-character path limit. + +.PARAMETER LogLevel + Validator log level (default: 2, as in CI). + +.PARAMETER Checks + Checks to run, by name (default: all of them, in the order listed above). + +.EXAMPLE + scripts\check_profile.bat + +.EXAMPLE + powershell -ExecutionPolicy Bypass -File scripts\check_profile.ps1 validate_system validate_slice +#> + +# PositionalBinding is off so that the check names are the only positional arguments; left on, +# a bare "validate_system" would bind to whichever named parameter came next in this block. +[CmdletBinding(PositionalBinding = $false)] +param( + [Alias('p')] [string] $ProfilesDir, + [string] $Validator, + [string] $WorkDir, + [Alias('l')] [int] $LogLevel = 2, + [switch] $Download, + [switch] $Refresh, + [Alias('h')] [switch] $Help, + [Parameter(Position = 0, ValueFromRemainingArguments = $true)] [string[]] $Checks +) + +$ErrorActionPreference = 'Stop' + +# Windows PowerShell 5.1 still negotiates TLS 1.0/1.1, which github.com refuses. +[Net.ServicePointManager]::SecurityProtocol = + [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 + +$ValidatorReleaseUrl = 'https://github.com/OrcaSlicer/OrcaSlicer/releases/download/nightly-builds' +$FixtureReleaseUrl = 'https://github.com/OrcaSlicer/OrcaSlicer-profile-validator/releases/download/fixture-archive' + +$RepoRoot = Split-Path -Parent $PSScriptRoot + +# PROCESSOR_ARCHITECTURE reports the architecture of the *shell*, so a 32-bit PowerShell on a +# 64-bit OS says x86; ARCHITEW6432 is the machine's own in that case. +$HostArch = if ($env:PROCESSOR_ARCHITEW6432) { $env:PROCESSOR_ARCHITEW6432 } else { $env:PROCESSOR_ARCHITECTURE } +$HostArch = switch ($HostArch) { + 'ARM64' { 'arm64' } + 'AMD64' { 'x64' } + default { 'x86' } +} + +$AllChecks = @('extra_json_check', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') + +$script:LogWriter = $null +$script:Python = '' + +# ---------------------------------------------------------------------------- helpers + +function Die([string] $Message) { + Write-Host "check_profile.ps1: $Message" -ForegroundColor Red + exit 2 +} + +# UTF-8 without a BOM, so a log reads the same here as the artifact CI uploads. +function New-LogWriter([string] $Path) { + New-Object IO.StreamWriter($Path, $false, (New-Object Text.UTF8Encoding($false))) +} + +# Output of the check being run: shown, and kept in that check's log. +function Write-CheckLog([string] $Text) { + Write-Host $Text + if ($script:LogWriter) { $script:LogWriter.WriteLine($Text) } +} + +# Runs a program and returns its exit code, streaming stdout and stderr into the current check's +# log. -OutFile sends that output to a file of its own instead, silently. +function Invoke-Tool { + param([string] $Exe, [string[]] $Arguments, [string] $OutFile) + + # Under 'Stop', 2>&1 turns every stderr line of a native command into a terminating error. + # Assigning the preference here scopes it to this function, so it undoes itself on return. + $ErrorActionPreference = 'Continue' + + $writer = if ($OutFile) { New-LogWriter $OutFile } else { $null } + try { + & $Exe @Arguments 2>&1 | ForEach-Object { + if ($writer) { $writer.WriteLine("$_") } else { Write-CheckLog "$_" } + } + return $LASTEXITCODE + } catch { + if ($writer) { $writer.WriteLine("$_") } else { Write-CheckLog "$_" } + return 1 + } finally { + if ($writer) { $writer.Dispose() } + } +} + +# The first $Limit characters of a log, as CI truncates them for the PR comment. +function Get-LogHead([string] $Path, [int] $Limit) { + $text = if (Test-Path -LiteralPath $Path) { [IO.File]::ReadAllText($Path) } else { '' } + if (-not $text) { return 'No output captured' } + if ($text.Length -gt $Limit) { return $text.Substring(0, $Limit) } + return $text +} + +# ---------------------------------------------------------------------------- arguments + +if ($Help) { Get-Help $PSCommandPath -Detailed; exit 0 } + +foreach ($name in $Checks) { + if ($name -like '-*') { Die "unknown option '$name' (try -Help)" } + if ($AllChecks -notcontains $name) { Die "unknown check '$name' (try -Help)" } +} +if (-not $Checks) { $Checks = $AllChecks } + +if (-not $ProfilesDir) { $ProfilesDir = Join-Path $RepoRoot 'resources\profiles' } +if (-not (Test-Path -LiteralPath $ProfilesDir -PathType Container)) { Die "profile directory not found: $ProfilesDir" } +$ProfilesDir = (Resolve-Path -LiteralPath $ProfilesDir).Path + +if (-not $WorkDir) { $WorkDir = Join-Path $RepoRoot '.test\check_profiles' } +$LogDir = Join-Path $WorkDir 'logs' +try { New-Item -ItemType Directory -Force -Path $LogDir | Out-Null } catch { Die "cannot create ${LogDir}: $_" } +$WorkDir = (Resolve-Path -LiteralPath $WorkDir).Path +$LogDir = Join-Path $WorkDir 'logs' + +if (-not $Validator) { $Validator = $env:ORCA_PROFILE_VALIDATOR } + +# ------------------------------------------------------------------- clean profile tree + +# The validator points its data dir at the profile tree, so it creates - and, with -g, fills - +# <profiles>\user. A CI checkout never has that directory, and anything left in it from an +# earlier local run would be loaded as user presets and validated too. Move it aside for the +# duration of the run so what gets checked is what CI checks. +$script:StashedUserDir = '' + +function Push-UserPresets { + $user = Join-Path $ProfilesDir 'user' + if (-not (Test-Path -LiteralPath $user -PathType Container)) { return } + $script:StashedUserDir = Join-Path $WorkDir "user-presets-$PID" + Remove-Item -LiteralPath $script:StashedUserDir -Recurse -Force -ErrorAction SilentlyContinue + try { Move-Item -LiteralPath $user -Destination $script:StashedUserDir } + catch { $script:StashedUserDir = ''; Die "cannot move $user aside: $_" } + Write-Host "moved $user aside for the run (restored on exit)" +} + +function Pop-UserPresets { + # The validator leaves an empty user\default\{filament,machine,process} skeleton behind. + # Prune it directory by directory, never wholesale: one that holds a real file survives and + # is reported instead of being deleted. Runs even when nothing was stashed, so a tree that + # had no user\ before the run does not gain one. + $user = Join-Path $ProfilesDir 'user' + Remove-EmptyDirs $user + if (-not $script:StashedUserDir) { return } + if (Test-Path -LiteralPath $user) { + Write-Host "$user is not empty; your presets stay in $($script:StashedUserDir)" + } else { + Move-Item -LiteralPath $script:StashedUserDir -Destination $user + } + $script:StashedUserDir = '' +} + +function Remove-EmptyDirs([string] $Path) { + if (-not (Test-Path -LiteralPath $Path -PathType Container)) { return } + Get-ChildItem -LiteralPath $Path -Recurse -Directory -Force | + Sort-Object { $_.FullName.Length } -Descending | + ForEach-Object { + if (-not (Get-ChildItem -LiteralPath $_.FullName -Force)) { + Remove-Item -LiteralPath $_.FullName -Force + } + } + if (-not (Get-ChildItem -LiteralPath $Path -Force)) { Remove-Item -LiteralPath $Path -Force } +} + +# ---------------------------------------------------------------------------- downloads + +# Cached; -Refresh, or -Force, pulls a new copy. Release assets never change, so caching them is +# safe; the fixture manifest is the index that grows with every release, and CI re-reads it on +# every run. +function Save-Asset { + param([string] $Url, [string] $Dest, [switch] $Force) + + if (-not $Refresh -and -not $Force -and (Test-Path -LiteralPath $Dest -PathType Leaf) -and + (Get-Item -LiteralPath $Dest).Length -gt 0) { + return + } + New-Item -ItemType Directory -Force -Path (Split-Path -Parent $Dest) | Out-Null + Write-Host "downloading $(Split-Path -Leaf $Dest) ..." + + # Invoke-WebRequest spends most of a large download repainting its progress bar. + $ProgressPreference = 'SilentlyContinue' + $part = "$Dest.part" + for ($attempt = 1; ; $attempt++) { + try { + Invoke-WebRequest -Uri $Url -OutFile $part -UseBasicParsing + break + } catch { + if ($attempt -ge 3) { + Remove-Item -LiteralPath $part -Force -ErrorAction SilentlyContinue + throw "download failed: $Url" + } + } + } + Move-Item -LiteralPath $part -Destination $Dest -Force +} + +function Get-Sha256([string] $Path) { + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash +} + +# Directories a built validator can sit in, best first: build_win.bat names its trees build, +# build-dbginfo, build-minsize and build-dbg, each optionally -clang and -arm64 suffixed, and +# CMake puts the binary in src\<config>. Each pattern is matched both directly under a build root +# and one level down (build\x64), for trees laid out the way the macOS ones are. +function Get-ValidatorSearchDirs { + foreach ($config in 'Release', 'RelWithDebInfo', 'MinSizeRel', 'Debug') { + Join-Path $RepoRoot "build*\src\$config" + Join-Path $RepoRoot "build*\*\src\$config" + } + Join-Path $RepoRoot 'build*\src' + Join-Path $RepoRoot 'build*\*\src' +} + +# The machine type from the PE header, which is what actually decides whether an .exe can run +# here - the name of the build tree only says what it was meant to be. +function Get-ExeArch([string] $Path) { + try { + $stream = [IO.File]::OpenRead($Path) + try { + $reader = New-Object IO.BinaryReader($stream) + $stream.Position = 0x3C # e_lfanew: offset of the PE header + $stream.Position = $reader.ReadInt32() + if ($reader.ReadUInt32() -ne 0x00004550) { return '' } # "PE\0\0" + switch ($reader.ReadUInt16()) { + 0x8664 { 'x64' } + 0xAA64 { 'arm64' } + 0x014C { 'x86' } + default { '' } + } + } finally { $stream.Dispose() } + } catch { '' } +} + +# First locally built OrcaSlicer_profile_validator.exe, in the order above. An x86 build, and on +# ARM64 an x64 one, is kept only as a fallback: it runs, but emulated. An ARM64 build on an x64 +# host does not run at all and is never offered. +function Find-LocalValidator { + $emulated = '' + foreach ($pattern in (Get-ValidatorSearchDirs)) { + foreach ($dir in @(Resolve-Path -Path $pattern -ErrorAction SilentlyContinue)) { + $candidate = Join-Path $dir.Path 'OrcaSlicer_profile_validator.exe' + if (-not (Test-Path -LiteralPath $candidate -PathType Leaf)) { continue } + $arch = Get-ExeArch $candidate + if (-not $arch -or $arch -eq $HostArch) { return $candidate } + if (-not $emulated -and ($arch -eq 'x86' -or $HostArch -eq 'arm64')) { $emulated = $candidate } + } + } + if ($emulated) { Write-Host "no $HostArch build found, falling back to $emulated (emulated)" } + return $emulated +} + +# The nightly release build, same one CI uses. Windows ships the bare .exe, x64 only. +function Save-NightlyValidator { + if ($HostArch -ne 'x64') { + Write-Host "the nightly Windows validator is x64; it runs here under emulation" + } + $exe = Join-Path $WorkDir 'validator\OrcaSlicer_profile_validator.exe' + Save-Asset -Url "$ValidatorReleaseUrl/OrcaSlicer_profile_validator_Windows_nightly.exe" -Dest $exe + return $exe +} + +function Resolve-Validator { + if ($Validator) { + if (-not (Test-Path -LiteralPath $Validator -PathType Leaf)) { Die "validator not found: $Validator" } + return (Resolve-Path -LiteralPath $Validator).Path + } + if (-not $Download) { + $local = Find-LocalValidator + if ($local) { + Write-Host "using locally built validator: $local" + return $local + } + } + try { $downloaded = Save-NightlyValidator } catch { Die "could not obtain a profile validator: $_" } + Write-Host "using downloaded validator: $downloaded" + return $downloaded +} + +# python3 is rarely on PATH on Windows: the py launcher is the reliable way in, and a bare +# `python` may be the Store stub, which prints an advert and exits non-zero. Probe each for the +# interpreter it actually resolves to, and use that. +function Resolve-Python { + $ErrorActionPreference = 'Continue' + if ($script:Python) { return $script:Python } + foreach ($candidate in 'py -3', 'python', 'python3') { + $words = $candidate -split ' ' + $exe = Get-Command $words[0] -CommandType Application -ErrorAction SilentlyContinue | Select-Object -First 1 + if (-not $exe) { continue } + $leading = @($words | Select-Object -Skip 1) + $found = & $exe.Source @leading -c 'import sys; print(sys.executable)' 2>$null + if ($LASTEXITCODE -eq 0 -and $found) { + $script:Python = "$found" + return $script:Python + } + } + Die 'no Python 3 found; install it (or the py launcher) and re-run' +} + +# ---------------------------------------------------------------------------- checks + +$CheckBodies = @{ + + extra_json_check = { + Invoke-Tool -Exe (Resolve-Python) -Arguments @((Join-Path $RepoRoot 'scripts\orca_extra_profile_check.py')) + } + + validate_system = { + Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-l', "$LogLevel") + } + + # Slices a two-colour cube through every printer so all custom g-code (incl. + # change_filament_gcode) is expanded - catches undefined-placeholder / invalid-flow bugs the + # static checks cannot see. + validate_slice = { + Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-s', '-l', "$LogLevel") + } + + validate_filament_subtypes = { + Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-l', "$LogLevel", '-f') + } + + # Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each + # is unpacked over the current system profiles and validated, so a profile change that would + # break an existing user's presets fails here. + validate_custom = { + $fixturesDir = Join-Path $WorkDir 'profile-fixtures' + $outputDir = Join-Path $WorkDir 'custom-preset-validation' + New-Item -ItemType Directory -Force -Path $fixturesDir, $outputDir | Out-Null + + $manifestPath = Join-Path $fixturesDir 'manifest.json' + Save-Asset -Url "$FixtureReleaseUrl/manifest.json" -Dest $manifestPath -Force + + $manifest = Get-Content -LiteralPath $manifestPath -Raw | ConvertFrom-Json + $entries = if ($manifest -is [array]) { $manifest } else { $manifest.fixtures } + $fixtures = @($entries | Where-Object { $_.version -and $_.asset }) + if (-not $fixtures) { + Write-CheckLog "No custom preset fixtures found in $FixtureReleaseUrl/manifest.json" + return 1 + } + + $status = 0 + $failedLogs = @() + $summary = @('## Custom Preset Fixture Validation', '', '| Version | Status | Log |', '| --- | --- | --- |') + + foreach ($fixture in $fixtures) { + $version = $fixture.version + $asset = $fixture.asset + $fixtureZip = Join-Path $fixturesDir $asset + $profileTree = Join-Path $outputDir "profiles-$version" + $logPath = Join-Path $outputDir "$version.log" + $assetUrl = "$FixtureReleaseUrl/$([uri]::EscapeDataString($asset))" + + Save-Asset -Url $assetUrl -Dest $fixtureZip + + $expected = $fixture.asset_sha256 + if ($expected -and $expected -ne '<sha256>' -and (Get-Sha256 $fixtureZip) -ne $expected.ToUpperInvariant()) { + # A cached zip can be stale or truncated; the release asset itself is immutable, + # so deleting it forces Save-Asset to pull a fresh copy. + Write-Host "checksum mismatch for $asset, re-downloading" + Remove-Item -LiteralPath $fixtureZip -Force + Save-Asset -Url $assetUrl -Dest $fixtureZip + $actual = Get-Sha256 $fixtureZip + if ($actual -ne $expected.ToUpperInvariant()) { + Write-CheckLog "${asset}: expected $expected, got $actual" + return 1 + } + } + + Write-Host "validating custom presets from $version ..." + Remove-Item -LiteralPath $profileTree -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Force -Path $profileTree | Out-Null + # Piped rather than copied through <profiles>\*, so a vendor directory whose name + # holds a wildcard character is still copied by its literal path. + Get-ChildItem -LiteralPath $ProfilesDir -Force | Copy-Item -Destination $profileTree -Recurse -Force + Remove-Item -LiteralPath (Join-Path $profileTree 'user') -Recurse -Force -ErrorAction SilentlyContinue + Expand-Archive -LiteralPath $fixtureZip -DestinationPath $profileTree -Force + + $result = Invoke-Tool -Exe $Validator -Arguments @('-p', $profileTree, '-l', "$LogLevel") -OutFile $logPath + if ($result -eq 0) { + $summary += "| $version | PASS | $version.log |" + # Only failures are worth keeping; each tree is a full copy of resources\profiles. + Remove-Item -LiteralPath $profileTree -Recurse -Force + } else { + $summary += "| $version | FAIL | $version.log |" + $failedLogs += $logPath + $status = 1 + } + } + + [IO.File]::WriteAllLines((Join-Path $outputDir 'summary.md'), [string[]] $summary) + $summary | ForEach-Object { Write-CheckLog $_ } + + if ($failedLogs) { + Write-CheckLog '' + Write-CheckLog '## Failed Fixture Logs' + foreach ($logPath in $failedLogs) { + Write-CheckLog '' + Write-CheckLog "### $([IO.Path]::GetFileNameWithoutExtension($logPath))" + Write-CheckLog '```' + Write-CheckLog (Get-LogHead $logPath 12000) + Write-CheckLog '```' + } + } + return $status + } +} + +# Heading CI puts above this check's log in the PR comment. +$CommentHeadings = @{ + extra_json_check = '### Extra JSON Check Failed' + validate_system = '### System Profile Validation Failed' + validate_slice = '### Slice Validation Failed (custom g-code expansion)' + validate_filament_subtypes = '### Filament Subtype Validation Failed' + validate_custom = '### Custom Preset Validation Failed' +} + +# ---------------------------------------------------------------------------- run + +function Invoke-Check([string] $Name) { + $log = Join-Path $LogDir "$Name.log" + Write-Host '' + Write-Host "==> $Name" -ForegroundColor Cyan + + $script:LogWriter = New-LogWriter $log + try { + $result = & $CheckBodies[$Name] | Select-Object -Last 1 + } catch { + Write-CheckLog "$_" + $result = 1 + } finally { + $script:LogWriter.Dispose() + $script:LogWriter = $null + } + + if ([int] $result -eq 0) { + Write-Host " $Name passed" -ForegroundColor Green + return $true + } + Write-Host " $Name failed (exit $result)" -ForegroundColor Red + return $false +} + +# The fixture trees under the work dir are shared scratch space keyed by fixture version, so a +# second run would delete a tree the first one is validating. +$LockDir = Join-Path $WorkDir '.lock' +try { New-Item -ItemType Directory -Path $LockDir -ErrorAction Stop | Out-Null } +catch { Die "another run is using $WorkDir (pass -WorkDir, or remove $LockDir if no run is active)" } + +# The validator writes UTF-8, but PowerShell decodes a child process's output using the console +# code page, which mangles the accented and CJK preset names in its messages. +$PreviousOutputEncoding = [Console]::OutputEncoding + +try { + [Console]::OutputEncoding = New-Object Text.UTF8Encoding($false) + Push-UserPresets + + if ($Checks | Where-Object { $_ -ne 'extra_json_check' }) { $Validator = Resolve-Validator } + + $results = [ordered] @{} + foreach ($name in $AllChecks) { + if ($Checks -contains $name) { $results[$name] = Invoke-Check $name } + } + + Write-Host '' + Write-Host '==> summary' -ForegroundColor Cyan + foreach ($name in $results.Keys) { + if ($results[$name]) { + Write-Host " PASS $name" -ForegroundColor Green + } else { + Write-Host " FAIL $name ($(Join-Path $LogDir "$name.log"))" -ForegroundColor Red + } + } + + $failed = @($results.Keys | Where-Object { -not $results[$_] }) + if (-not $failed) { + Remove-Item -LiteralPath (Join-Path $WorkDir 'pr_comment.md') -Force -ErrorAction SilentlyContinue + Write-Host '' + Write-Host "All checks passed. Logs: $LogDir" -ForegroundColor Green + exit 0 + } + + # The comment check_profiles_comment.yml would post when something fails. + $comment = @( + # Marker matched by check_profiles_comment.yml to delete prior comments. + '<!-- profile-validation-comment -->' + '## :x: Profile Validation Errors' + '' + foreach ($name in $failed) { + $CommentHeadings[$name] + '' + '```' + Get-LogHead (Join-Path $LogDir "$name.log") 30000 + '```' + '' + } + '---' + '*Please fix the above errors and push a new commit.*' + ) + $commentPath = Join-Path $WorkDir 'pr_comment.md' + [IO.File]::WriteAllLines($commentPath, [string[]] $comment) + + Write-Host '' + Write-Host "One or more profile checks failed. Logs: $LogDir" -ForegroundColor Red + Write-Host "The comment CI would post: $commentPath" + exit 1 +} finally { + Pop-UserPresets + Remove-Item -LiteralPath $LockDir -Force -ErrorAction SilentlyContinue + [Console]::OutputEncoding = $PreviousOutputEncoding +} diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh new file mode 100755 index 0000000000..9b841d0612 --- /dev/null +++ b/scripts/check_profile.sh @@ -0,0 +1,527 @@ +#!/usr/bin/env bash +# +# Local twin of the "Check profiles" CI job (.github/workflows/check_profiles.yml). +# +# Runs the same five checks, in the same order, with the same validator flags, and with the +# same semantics: every check runs even after an earlier one fails (the workflow's +# continue-on-error), then the script exits non-zero once at the end. +# +# Everything that has to be downloaded - the profile validator and the custom-preset fixture +# archives - lands under <repo>/.test/check_profiles/ and is reused on the next run. That +# directory also holds one log per check plus a copy of the comment CI would post on the PR. +# +# resources/profiles/user, which the validator creates as its data dir but a CI checkout never +# has, is moved aside for the duration of the run and restored on exit. Only one run per work +# dir at a time. +# +# Usage: scripts/check_profile.sh [OPTION]... [CHECK]... + +# The check_* functions run through run_check, which dispatches on the check name, so +# ShellCheck cannot see that they (and what they call) are used. +# shellcheck disable=SC2329 + +set -uo pipefail + +VALIDATOR_RELEASE_URL="https://github.com/OrcaSlicer/OrcaSlicer/releases/download/nightly-builds" +FIXTURE_RELEASE_URL="https://github.com/OrcaSlicer/OrcaSlicer-profile-validator/releases/download/fixture-archive" + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" + +HOST_ARCH="$(uname -m)" + +PROFILES_DIR="${REPO_ROOT}/resources/profiles" +WORK_DIR="${REPO_ROOT}/.test/check_profiles" +VALIDATOR="${ORCA_PROFILE_VALIDATOR:-}" +LOG_LEVEL=2 +PREFER_DOWNLOAD=0 +REFRESH=0 + +ALL_CHECKS=(extra_json_check validate_system validate_slice validate_filament_subtypes validate_custom) +CHECKS=() +# "<check><TAB>pass|fail" per check that ran; a string rather than an array because bash 3.2 +# (still the /bin/bash on macOS) cannot expand an empty array under `set -u`. +RESULTS="" + +usage() { + cat <<EOF +Run the profile checks from .github/workflows/check_profiles.yml locally. + +Usage: scripts/check_profile.sh [OPTION]... [CHECK]... + +Checks (default: all, in this order): + extra_json_check scripts/orca_extra_profile_check.py + validate_system validator -p <profiles> -l <level> + validate_slice validator -p <profiles> -s -l <level> + validate_filament_subtypes validator -p <profiles> -l <level> -f + validate_custom validator against every released custom-preset fixture + +Options: + -p, --profiles DIR profile tree to validate (default: resources/profiles) + --validator BIN OrcaSlicer_profile_validator to use; also \$ORCA_PROFILE_VALIDATOR. + Default: the local build*/ Release build (then RelWithDebInfo, then + Debug) for this architecture, else the nightly release build is + downloaded for this platform + --download ignore local builds and use the downloaded nightly validator + --refresh re-download the validator and fixtures instead of using the cache + --work-dir DIR downloads, logs and fixture trees (default: .test/check_profiles) + -l, --log-level N validator log level (default: ${LOG_LEVEL}, as in CI) + -h, --help show this help + +Note: extra_json_check always looks at the tree next to the script +(<repo>/resources/profiles); --profiles only redirects the validator checks. +EOF +} + +msg() { printf '%s\n' "$*" >&2; } +die() { printf 'check_profile.sh: %s\n' "$*" >&2; exit 2; } + +if [ -t 1 ]; then + C_RED=$'\033[91m'; C_GREEN=$'\033[92m'; C_BOLD=$'\033[1m'; C_RESET=$'\033[0m' +else + C_RED=''; C_GREEN=''; C_BOLD=''; C_RESET='' +fi + +# ---------------------------------------------------------------------------- arguments + +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) usage; exit 0 ;; + -p|--profiles) [ $# -ge 2 ] || die "$1 needs a directory"; PROFILES_DIR="$2"; shift 2 ;; + --validator) [ $# -ge 2 ] || die "$1 needs a path"; VALIDATOR="$2"; shift 2 ;; + --work-dir) [ $# -ge 2 ] || die "$1 needs a directory"; WORK_DIR="$2"; shift 2 ;; + -l|--log-level) [ $# -ge 2 ] || die "$1 needs a number"; LOG_LEVEL="$2"; shift 2 ;; + --download) PREFER_DOWNLOAD=1; shift ;; + --refresh) REFRESH=1; shift ;; + -*) die "unknown option '$1' (try --help)" ;; + *) + known=0 + for check in "${ALL_CHECKS[@]}"; do + [ "$1" = "${check}" ] && known=1 + done + [ "${known}" -eq 1 ] || die "unknown check '$1' (try --help)" + CHECKS[${#CHECKS[@]}]="$1" + shift + ;; + esac +done + +[ "${#CHECKS[@]}" -gt 0 ] || CHECKS=("${ALL_CHECKS[@]}") + +[ -d "${PROFILES_DIR}" ] || die "profile directory not found: ${PROFILES_DIR}" +PROFILES_DIR="$(cd -- "${PROFILES_DIR}" && pwd)" + +LOG_DIR="${WORK_DIR}/logs" +mkdir -p "${LOG_DIR}" || die "cannot create ${LOG_DIR}" +WORK_DIR="$(cd -- "${WORK_DIR}" && pwd)" +LOG_DIR="${WORK_DIR}/logs" + +wants() { + local check + for check in "${CHECKS[@]}"; do + [ "${check}" = "$1" ] && return 0 + done + return 1 +} + +# ------------------------------------------------------------------- clean profile tree + +# The validator points its data dir at the profile tree, so it creates - and, with -g, fills - +# <profiles>/user. A CI checkout never has that directory, and anything left in it from an +# earlier local run would be loaded as user presets and validated too. Move it aside for the +# duration of the run so what gets checked is what CI checks. +STASHED_USER_DIR="" + +stash_user_presets() { + [ -d "${PROFILES_DIR}/user" ] || return 0 + STASHED_USER_DIR="${WORK_DIR}/user-presets-$$" + rm -rf "${STASHED_USER_DIR}" + mv "${PROFILES_DIR}/user" "${STASHED_USER_DIR}" || { STASHED_USER_DIR=""; die "cannot move ${PROFILES_DIR}/user aside"; } + msg "moved ${PROFILES_DIR}/user aside for the run (restored on exit)" +} + +restore_user_presets() { + # The validator leaves an empty user/default/{filament,machine,process} skeleton behind. + # Prune it with rmdir, never rm -rf: a directory that holds a real file survives and is + # reported instead of being deleted. Runs even when nothing was stashed, so a tree that had + # no user/ before the run does not gain one. + find "${PROFILES_DIR}/user" -depth -type d -exec rmdir {} + 2>/dev/null + [ -n "${STASHED_USER_DIR}" ] || return 0 + if [ -d "${PROFILES_DIR}/user" ]; then + msg "${PROFILES_DIR}/user is not empty; your presets stay in ${STASHED_USER_DIR}" + STASHED_USER_DIR="" + return 0 + fi + mv "${STASHED_USER_DIR}" "${PROFILES_DIR}/user" + STASHED_USER_DIR="" +} + +# The fixture trees under the work dir are shared scratch space keyed by fixture version, so a +# second run would delete a tree the first one is validating. +LOCK_DIR="${WORK_DIR}/.lock" +mkdir "${LOCK_DIR}" 2>/dev/null || + die "another run is using ${WORK_DIR} (pass --work-dir, or remove ${LOCK_DIR} if no run is active)" + +cleanup() { + restore_user_presets + rmdir "${LOCK_DIR}" 2>/dev/null +} + +# Installed only once the lock is ours, so a refused start never releases someone else's. +trap cleanup EXIT +trap 'cleanup; exit 130' INT TERM + +stash_user_presets + +# ---------------------------------------------------------------------------- downloads + +# fetch URL DEST [force] - cached; --refresh, or a non-empty third argument, forces a new +# download. Release assets never change, so caching them is safe; the fixture manifest is the +# index that grows with every release, and CI re-reads it on every run. +fetch() { + local url="$1" dest="$2" force="${3:-}" + if [ "${REFRESH}" -eq 0 ] && [ -z "${force}" ] && [ -s "${dest}" ]; then + return 0 + fi + mkdir -p "$(dirname -- "${dest}")" || return 1 + msg "downloading $(basename -- "${dest}") ..." + if ! curl -fsSL --retry 3 -o "${dest}.part" "${url}"; then + rm -f "${dest}.part" + msg "download failed: ${url}" + return 1 + fi + mv -f "${dest}.part" "${dest}" +} + +sha256_of() { + if command -v sha256sum >/dev/null 2>&1; then + sha256sum "$1" | cut -d' ' -f1 + elif command -v shasum >/dev/null 2>&1; then + shasum -a 256 "$1" | cut -d' ' -f1 + else + return 1 + fi +} + +# Directories a built validator can sit in, best first: every Ninja Multi-Config Release tree, +# then RelWithDebInfo, then Debug, then a single-config generator's plain src/. Each pattern is +# matched both directly under a build root (build/) and one level down (build/arm64, build/x64), +# and unmatched globs are dropped by the caller's -d test. +validator_search_dirs() { + local config + for config in Release RelWithDebInfo Debug; do + printf '%s\n' "${REPO_ROOT}"/build*/src/"${config}" "${REPO_ROOT}"/build*/*/src/"${config}" + done + printf '%s\n' "${REPO_ROOT}"/build*/src "${REPO_ROOT}"/build*/*/src +} + +# A build tree named for the other architecture (build/x86_64 on an arm64 host, build/arm64 on +# an x64 one) is a last resort: on Linux it will not run at all, on macOS it goes via Rosetta. +# Takes a repo-relative path - an absolute one would also match an arch name in the checkout path. +is_foreign_arch_dir() { + case "${HOST_ARCH}" in + arm64|aarch64) case "$1" in *x86_64*|*x86-64*|*x64*|*amd64*) return 0 ;; esac ;; + x86_64|amd64) case "$1" in *arm64*|*aarch64*) return 0 ;; esac ;; + esac + return 1 +} + +# First locally built OrcaSlicer_profile_validator, in the order above. macOS puts it in an .app +# bundle, Linux and Windows next to the other binaries. +find_local_validator() { + local dir candidate foreign="" + while IFS= read -r dir; do + [ -d "${dir}" ] || continue + for candidate in \ + "${dir}/OrcaSlicer_profile_validator" \ + "${dir}/OrcaSlicer_profile_validator.exe" \ + "${dir}/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator"; do + [ -f "${candidate}" ] && [ -x "${candidate}" ] || continue + if ! is_foreign_arch_dir "${dir#"${REPO_ROOT}"/}"; then + printf '%s\n' "${candidate}" + return 0 + fi + [ -n "${foreign}" ] || foreign="${candidate}" + done + done <<EOF +$(validator_search_dirs) +EOF + [ -n "${foreign}" ] || return 1 + msg "no ${HOST_ARCH} build found, falling back to ${foreign}" + printf '%s\n' "${foreign}" +} + +# The nightly release build, same one CI uses. Linux ships the bare binary, macOS a .dmg +# holding the signed .app, Windows an .exe. +download_validator() { + local dest="${WORK_DIR}/validator" binary dmg app mounted app_src + case "$(uname -s)" in + Linux*) + case "${HOST_ARCH}" in + arm64|aarch64) msg "the nightly Linux validator is x86_64; build it locally for ${HOST_ARCH}" ;; + esac + binary="${dest}/OrcaSlicer_profile_validator" + fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Linux_Ubuntu2404_nightly" "${binary}" || return 1 + chmod +x "${binary}" || return 1 + ;; + Darwin*) + dmg="${dest}/OrcaSlicer_profile_validator.dmg" + app="${dest}/OrcaSlicer_profile_validator.app" + binary="${app}/Contents/MacOS/OrcaSlicer_profile_validator" + fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Mac_universal_nightly.dmg" "${dmg}" || return 1 + if [ ! -x "${binary}" ] || [ "${REFRESH}" -eq 1 ]; then + mounted="${dest}/mnt" + rm -rf "${mounted}" "${app}" + mkdir -p "${mounted}" || return 1 + hdiutil attach -nobrowse -readonly -mountpoint "${mounted}" "${dmg}" >/dev/null || return 1 + app_src="$(find "${mounted}" -maxdepth 1 -name '*.app' -print 2>/dev/null | head -n 1)" + if [ -n "${app_src}" ]; then + cp -R "${app_src}" "${app}" + fi + hdiutil detach "${mounted}" >/dev/null 2>&1 + rmdir "${mounted}" 2>/dev/null + [ -x "${binary}" ] || { msg "no validator app inside ${dmg}"; return 1; } + fi + ;; + MINGW*|MSYS*|CYGWIN*) + binary="${dest}/OrcaSlicer_profile_validator.exe" + fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Windows_nightly.exe" "${binary}" || return 1 + chmod +x "${binary}" || return 1 + ;; + *) + msg "no nightly validator published for $(uname -s); build it (-DORCA_TOOLS=ON) and pass --validator" + return 1 + ;; + esac + printf '%s\n' "${binary}" +} + +resolve_validator() { + if [ -n "${VALIDATOR}" ]; then + [ -x "${VALIDATOR}" ] || die "validator not executable: ${VALIDATOR}" + return 0 + fi + if [ "${PREFER_DOWNLOAD}" -eq 0 ]; then + VALIDATOR="$(find_local_validator)" + if [ -n "${VALIDATOR}" ]; then + msg "using locally built validator: ${VALIDATOR}" + return 0 + fi + fi + VALIDATOR="$(download_validator)" || die "could not obtain a profile validator" + msg "using downloaded validator: ${VALIDATOR}" +} + +# ---------------------------------------------------------------------------- checks + +check_extra_json_check() { + python3 "${REPO_ROOT}/scripts/orca_extra_profile_check.py" +} + +check_validate_system() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -l "${LOG_LEVEL}" +} + +# Slices a two-colour cube through every printer so all custom g-code (incl. change_filament_gcode) +# is expanded - catches undefined-placeholder / invalid-flow bugs the static checks cannot see. +check_validate_slice() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -s -l "${LOG_LEVEL}" +} + +check_validate_filament_subtypes() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -l "${LOG_LEVEL}" -f +} + +# Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each is +# unpacked over the current system profiles and validated, so a profile change that would break +# an existing user's presets fails here. +check_validate_custom() { + local fixtures_dir="${WORK_DIR}/profile-fixtures" + local output_dir="${WORK_DIR}/custom-preset-validation" + local summary="${output_dir}/summary.md" + local status=0 failed_logs="" + local version asset expected_sha256 asset_url fixture_zip profile_tree log_path actual_sha256 result + + command -v unzip >/dev/null 2>&1 || { msg "unzip is required for validate_custom"; return 1; } + mkdir -p "${fixtures_dir}" "${output_dir}" || return 1 + + fetch "${FIXTURE_RELEASE_URL}/manifest.json" "${fixtures_dir}/manifest.json" force || return 1 + + MANIFEST_PATH="${fixtures_dir}/manifest.json" python3 - > "${fixtures_dir}/fixtures.tsv" <<'PY' +import json +import os + +with open(os.environ["MANIFEST_PATH"], encoding="utf-8") as fh: + manifest = json.load(fh) + +if isinstance(manifest, dict): + entries = manifest.get("fixtures", []) +else: + entries = manifest + +for entry in entries: + version = entry.get("version", "") + asset = entry.get("asset", "") + sha256 = entry.get("asset_sha256", "") + if not version or not asset: + continue + print(f"{version}\t{asset}\t{sha256}") +PY + + if [ ! -s "${fixtures_dir}/fixtures.tsv" ]; then + echo "No custom preset fixtures found in ${FIXTURE_RELEASE_URL}/manifest.json" + return 1 + fi + + { + echo "## Custom Preset Fixture Validation" + echo "" + echo "| Version | Status | Log |" + echo "| --- | --- | --- |" + } > "${summary}" + + while IFS=$'\t' read -r version asset expected_sha256; do + [ -n "${version}" ] || continue + fixture_zip="${fixtures_dir}/${asset}" + profile_tree="${output_dir}/profiles-${version}" + log_path="${output_dir}/${version}.log" + + asset_url="${FIXTURE_RELEASE_URL}/$(python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=""))' "${asset}")" + fetch "${asset_url}" "${fixture_zip}" || return 1 + + if [ -n "${expected_sha256}" ] && [ "${expected_sha256}" != "<sha256>" ]; then + actual_sha256="$(sha256_of "${fixture_zip}")" + if [ -z "${actual_sha256}" ]; then + msg "no sha256 tool available, skipping checksum of ${asset}" + elif [ "${actual_sha256}" != "${expected_sha256}" ]; then + # A cached zip can be stale or truncated; the release asset itself is immutable, + # so deleting it forces fetch to pull a fresh copy. + msg "checksum mismatch for ${asset}, re-downloading" + rm -f "${fixture_zip}" + fetch "${asset_url}" "${fixture_zip}" || return 1 + actual_sha256="$(sha256_of "${fixture_zip}")" + [ "${actual_sha256}" = "${expected_sha256}" ] || { msg "${asset}: expected ${expected_sha256}, got ${actual_sha256}"; return 1; } + fi + fi + + msg "validating custom presets from ${version} ..." + rm -rf "${profile_tree}" + mkdir -p "${profile_tree}" || return 1 + cp -a "${PROFILES_DIR}/." "${profile_tree}/" || return 1 + rm -rf "${profile_tree}/user" + unzip -q "${fixture_zip}" -d "${profile_tree}" || return 1 + + "${VALIDATOR}" -p "${profile_tree}" -l "${LOG_LEVEL}" > "${log_path}" 2>&1 + result=$? + + if [ "${result}" -eq 0 ]; then + echo "| ${version} | PASS | ${version}.log |" >> "${summary}" + # Only failures are worth keeping; each tree is a full copy of resources/profiles. + rm -rf "${profile_tree}" + else + echo "| ${version} | FAIL | ${version}.log |" >> "${summary}" + failed_logs="${failed_logs}${log_path}"$'\n' + status=1 + fi + done < "${fixtures_dir}/fixtures.tsv" + + cat "${summary}" + if [ -n "${failed_logs}" ]; then + echo "" + echo "## Failed Fixture Logs" + while IFS= read -r log_path; do + [ -n "${log_path}" ] || continue + echo "" + echo "### $(basename "${log_path}" .log)" + echo '```' + head -c 12000 "${log_path}" || echo "No output captured" + echo '```' + done <<EOF +${failed_logs} +EOF + fi + + return "${status}" +} + +# Heading CI puts above this check's log in the PR comment. +comment_heading() { + case "$1" in + extra_json_check) echo "### Extra JSON Check Failed" ;; + validate_system) echo "### System Profile Validation Failed" ;; + validate_slice) echo "### Slice Validation Failed (custom g-code expansion)" ;; + validate_filament_subtypes) echo "### Filament Subtype Validation Failed" ;; + validate_custom) echo "### Custom Preset Validation Failed" ;; + esac +} + +# ---------------------------------------------------------------------------- run + +run_check() { + local name="$1" + local log="${LOG_DIR}/${name}.log" + local result + printf '\n%s==> %s%s\n' "${C_BOLD}" "${name}" "${C_RESET}" + "check_${name}" 2>&1 | tee "${log}" + result="${PIPESTATUS[0]}" + if [ "${result}" -eq 0 ]; then + printf '%s %s passed%s\n' "${C_GREEN}" "${name}" "${C_RESET}" + RESULTS="${RESULTS}${name}"$'\t'"pass"$'\n' + else + printf '%s %s failed (exit %s)%s\n' "${C_RED}" "${name}" "${result}" "${C_RESET}" + RESULTS="${RESULTS}${name}"$'\t'"fail"$'\n' + fi +} + +if wants validate_system || wants validate_slice || wants validate_filament_subtypes || wants validate_custom; then + resolve_validator +fi + +for check in "${ALL_CHECKS[@]}"; do + wants "${check}" && run_check "${check}" +done + +# Summary, plus the comment check_profiles_comment.yml would post when something fails. +failed=0 +printf '\n%s==> summary%s\n' "${C_BOLD}" "${C_RESET}" +while IFS=$'\t' read -r name result; do + [ -n "${name}" ] || continue + if [ "${result}" = "pass" ]; then + printf '%s PASS%s %s\n' "${C_GREEN}" "${C_RESET}" "${name}" + else + printf '%s FAIL%s %s (%s)\n' "${C_RED}" "${C_RESET}" "${name}" "${LOG_DIR}/${name}.log" + failed=1 + fi +done <<EOF +${RESULTS} +EOF + +if [ "${failed}" -eq 0 ]; then + rm -f "${WORK_DIR}/pr_comment.md" + printf '\n%sAll checks passed.%s Logs: %s\n' "${C_GREEN}" "${C_RESET}" "${LOG_DIR}" + exit 0 +fi + +{ + # Marker matched by check_profiles_comment.yml to delete prior comments. + echo "<!-- profile-validation-comment -->" + echo "## :x: Profile Validation Errors" + echo "" + while IFS=$'\t' read -r name result; do + [ "${result}" = "fail" ] || continue + comment_heading "${name}" + echo "" + echo '```' + head -c 30000 "${LOG_DIR}/${name}.log" || echo "No output captured" + echo '```' + echo "" + done <<INNER +${RESULTS} +INNER + echo "---" + echo "*Please fix the above errors and push a new commit.*" +} > "${WORK_DIR}/pr_comment.md" + +printf '\n%sOne or more profile checks failed.%s Logs: %s\n' "${C_RED}" "${C_RESET}" "${LOG_DIR}" +printf 'The comment CI would post: %s\n' "${WORK_DIR}/pr_comment.md" +exit 1 From 1749c293a6ed71172959d6e16d9e98759aab8fcb Mon Sep 17 00:00:00 2001 From: Kris Austin <kris.austin@gmail.com> Date: Wed, 2 Sep 2026 05:38:05 -0500 Subject: [PATCH 15/23] build: clear 237 warnings - unused lambda captures (#15417) * build: enable /Zc:lambda for MSVC MSVC keeps its legacy lambda processor under /std:c++17, which rejects reading a constexpr constant inside a lambda that does not capture it (C3493). No other compiler requires that capture, and clang reports it as an unused one, so the two cannot both be satisfied without the flag. /Zc:lambda selects the conforming lambda parser that clang and GCC already use. It is implied by /std:c++20 and /permissive-, so it is only needed while we are on C++17. clang-cl is conforming already and does not take the flag. It requires VS2019 16.8, so build_release_vs.bat now says 16.8+. * build: clear 237 unused lambda capture warnings 236 captures across 81 files, 142 of them `this`. Removing an unused capture changes no behavior; clang does not report a capture whose type has a non-trivial destructor, so nothing held only to extend an object's lifetime is in this set. Nine of them are the second half of the warning, "is not required to be captured for this use", where the capture is a const or constexpr value the body does read. Those depend on the /Zc:lambda change in the previous commit. One of them, in FillRectilinear.cpp, had been worked around with an #ifndef __APPLE__ guard around the capture list, which is now gone. GUI_ObjectTableSettings.cpp captured its reset button only to read it inside #ifdef __WXOSX_MAC__. That branch now takes the button from the event it is already handling. * build: fail configure on MSVC older than 19.28 instead of dropping /Zc:lambda cl.exe answers an unrecognized /Zc: sub-option with warning D9002 and keeps going, so on VS2019 before 16.8 the flag is silently ignored and the build instead dies with C3493 in FillRectilinear.cpp, nowhere near the cause. * fix: delete three locals that are now unused Their only remaining use was the lambda capture this branch removed. The Clang builds set -Wno-unused-variable, so the build never flagged them. --------- Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- CMakeLists.txt | 16 ++++++ build_release_vs.bat | 2 +- src/OrcaSlicer.cpp | 2 +- src/libslic3r/Arrange.cpp | 2 +- src/libslic3r/Fill/FillRectilinear.cpp | 7 +-- src/libslic3r/GCode/GCodeProcessor.cpp | 8 +-- src/libslic3r/GCode/WipeTower.cpp | 4 +- src/libslic3r/Model.cpp | 2 +- src/libslic3r/PresetBundle.cpp | 4 +- src/libslic3r/Print.cpp | 4 +- src/libslic3r/PrintObject.cpp | 2 +- src/libslic3r/PrintObjectSlice.cpp | 4 +- src/libslic3r/Support/SupportCommon.cpp | 2 +- src/libslic3r/Support/SupportMaterial.cpp | 2 +- src/libslic3r/Support/TreeSupport.cpp | 2 +- src/slic3r/GUI/AMSDryControl.cpp | 6 +- src/slic3r/GUI/BindDialog.cpp | 6 +- src/slic3r/GUI/CaliHistoryDialog.cpp | 2 +- src/slic3r/GUI/Calibration.cpp | 2 +- src/slic3r/GUI/CalibrationWizard.cpp | 2 +- src/slic3r/GUI/CalibrationWizardCaliPage.cpp | 2 +- src/slic3r/GUI/CalibrationWizardPage.cpp | 2 +- src/slic3r/GUI/CalibrationWizardSavePage.cpp | 6 +- src/slic3r/GUI/CameraPopup.cpp | 2 +- src/slic3r/GUI/ConfigWizard.cpp | 2 +- src/slic3r/GUI/CreatePresetsDialog.cpp | 2 +- src/slic3r/GUI/Field.cpp | 2 +- src/slic3r/GUI/FilamentPickerDialog.cpp | 4 +- src/slic3r/GUI/GCodeViewer.cpp | 24 ++++---- src/slic3r/GUI/GLCanvas3D.cpp | 20 +++---- src/slic3r/GUI/GUI_App.cpp | 10 ++-- src/slic3r/GUI/GUI_AuxiliaryList.cpp | 2 +- src/slic3r/GUI/GUI_Factories.cpp | 14 ++--- src/slic3r/GUI/GUI_ObjectLayers.cpp | 2 +- src/slic3r/GUI/GUI_ObjectList.cpp | 8 +-- src/slic3r/GUI/GUI_ObjectTable.cpp | 4 +- src/slic3r/GUI/GUI_ObjectTableSettings.cpp | 17 +++--- src/slic3r/GUI/Gizmos/GLGizmoCut.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 2 +- .../GUI/Gizmos/GizmoObjectManipulation.cpp | 2 +- src/slic3r/GUI/HMS.cpp | 4 +- src/slic3r/GUI/Jobs/FillBedJob.cpp | 2 +- src/slic3r/GUI/Jobs/PrintJob.cpp | 5 +- src/slic3r/GUI/Jobs/RotoptimizeJob.cpp | 2 +- src/slic3r/GUI/Jobs/SendJob.cpp | 3 +- src/slic3r/GUI/MainFrame.cpp | 28 ++++----- src/slic3r/GUI/MultiMachine.cpp | 2 +- src/slic3r/GUI/MultiMachineManagerPage.cpp | 2 +- src/slic3r/GUI/MultiMachinePage.cpp | 2 +- src/slic3r/GUI/MultiTaskManagerPage.cpp | 2 +- src/slic3r/GUI/NetworkPluginDialog.cpp | 4 +- src/slic3r/GUI/NetworkTestDialog.cpp | 2 +- src/slic3r/GUI/Notebook.cpp | 2 +- src/slic3r/GUI/OG_CustomCtrl.cpp | 2 +- src/slic3r/GUI/ObjColorDialog.cpp | 2 +- src/slic3r/GUI/ParamsPanel.cpp | 6 +- src/slic3r/GUI/Plater.cpp | 57 +++++++++---------- src/slic3r/GUI/Preferences.cpp | 6 +- src/slic3r/GUI/PresetComboBoxes.cpp | 4 +- src/slic3r/GUI/PrintHostDialogs.cpp | 2 +- src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 4 +- src/slic3r/GUI/PrivacyUpdateDialog.cpp | 2 +- src/slic3r/GUI/ReleaseNote.cpp | 2 +- src/slic3r/GUI/SavePresetDialog.cpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 8 +-- src/slic3r/GUI/SelectMachinePop.cpp | 12 ++-- src/slic3r/GUI/SendMultiMachinePage.cpp | 2 +- src/slic3r/GUI/SkipPartCanvas.cpp | 4 +- src/slic3r/GUI/SliceInfoPanel.cpp | 2 +- src/slic3r/GUI/StepMeshDialog.cpp | 4 +- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 4 +- src/slic3r/GUI/Tab.cpp | 14 ++--- src/slic3r/GUI/TroubleshootDialog.cpp | 4 +- src/slic3r/GUI/WebGuideDialog.cpp | 4 +- src/slic3r/GUI/WebUserLoginDialog.cpp | 4 +- src/slic3r/Utils/3DPrinterOS.cpp | 2 +- src/slic3r/Utils/Moonraker.cpp | 4 +- src/slic3r/Utils/Obico.cpp | 2 +- src/slic3r/Utils/PresetUpdater.cpp | 2 +- src/slic3r/Utils/Repetier.cpp | 2 +- src/slic3r/Utils/SimplyPrint.cpp | 6 +- 83 files changed, 226 insertions(+), 217 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f5ccbeb44..972627d0c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -362,6 +362,22 @@ if (MSVC) if (SLIC3R_MSVC_COMPILE_PARALLEL AND CMAKE_GENERATOR MATCHES "Visual Studio") add_compile_options(/MP) endif () + + # Parse lambdas the way the standard says, as clang and GCC already do. Without it + # MSVC keeps its legacy lambda processor under /std:c++17 and rejects reading a + # constexpr constant inside a lambda that does not capture it (C3493), which no + # other compiler requires. Implied by /std:c++20 and /permissive-, so it is only + # needed while we are on C++17. clang-cl is conforming already and does not take + # the flag. Requires VS2019 16.8 or newer. + if (NOT IS_CLANG_CL) + # cl.exe only warns (D9002) about an unknown /Zc: option, so without this the + # flag would be dropped and the first lambda reading a constexpr constant would + # fail with C3493 far from the cause. + if (MSVC_VERSION LESS 1928) + message(FATAL_ERROR "Visual Studio 2019 16.8 (MSVC 19.28) or newer is required; detected MSVC ${MSVC_VERSION}.") + endif () + add_compile_options(/Zc:lambda) + endif () # /bigobj (Increase Number of Sections in .Obj file) # error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater # Generate symbols at every build target, even for the release. diff --git a/build_release_vs.bat b/build_release_vs.bat index a52d940455..3842f1d198 100644 --- a/build_release_vs.bat +++ b/build_release_vs.bat @@ -86,7 +86,7 @@ if "%VS_MAJOR%"=="16" ( set CMAKE_GENERATOR="Visual Studio 18 2026" ) else ( echo Error: Unsupported Visual Studio version: %VS_MAJOR% - echo Supported versions: VS2019 (16.x^), VS2022 (17.x^), VS2026 (18.x^) + echo Supported versions: VS2019 (16.8+^), VS2022 (17.x^), VS2026 (18.x^) exit /b 1 ) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 8176e9f444..33669abcf2 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1969,7 +1969,7 @@ int CLI::run(int argc, char **argv) } } - auto load_config_file = [config_substitution_rule](const std::string& file, DynamicPrintConfig& config, std::string& config_type, + auto load_config_file = [](const std::string& file, DynamicPrintConfig& config, std::string& config_type, std::string& config_name, std::string& filament_id, std::string& config_from) { if (! boost::filesystem::exists(file)) { boost::nowide::cerr << __FUNCTION__<< ": can not find setting file: " << file << std::endl; diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 48e6950a82..fd496537f4 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -797,7 +797,7 @@ public: } }); - m_pck.unfitIndicator([this](std::string name) { + m_pck.unfitIndicator([](std::string name) { BOOST_LOG_TRIVIAL(debug) << "arrange progress: " + name; }); diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 0c82354b38..db340748ab 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -2395,12 +2395,7 @@ static std::vector<MonotonicRegionLink> chain_monotonic_regions( } // Probability (unnormalized) of traversing a link between two monotonic regions. - auto path_probability = [ -#ifndef __APPLE__ - // clang complains when capturing constexpr constants. - pheromone_alpha, pheromone_beta -#endif // __APPLE__ - ](AntPath &path) { + auto path_probability = [](AntPath &path) { return pow(path.pheromone, pheromone_alpha) * pow(path.visibility, pheromone_beta); }; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 2ac8bd45a6..cd6c494f33 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1273,7 +1273,7 @@ void GCodeProcessor::run_post_process() // add lines M73 to exported gcode auto process_line_move = [ // Lambdas, mostly for string formatting, all with an empty capture block. - time_in_minutes, format_time_float, format_line_M73_main, format_line_M73_stop_int, format_line_M73_stop_float, time_in_last_minute,format_line_exhaust_fan_control, + time_in_minutes, format_time_float, format_line_M73_main, format_line_M73_stop_int, format_line_M73_stop_float, time_in_last_minute, &self = std::as_const(m_time_processor), // Caches, to be modified &g1_times_cache_it, &last_exported_main, &last_exported_stop, @@ -5304,7 +5304,7 @@ void GCodeProcessor::process_VG1(const GCodeReader::GCodeLine& line) float filament_radius = 0.5f * filament_diameter; float area_filament_cross_section = static_cast<float>(M_PI) * sqr(filament_radius); - auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG1) { + auto absolute_position = [this](Axis axis, const GCodeReader::GCodeLine& lineG1) { bool is_relative = (m_global_positioning_type == EPositioningType::Relative); if (axis == E) is_relative |= (m_e_local_positioning_type == EPositioningType::Relative); @@ -5755,7 +5755,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line, bool cloc if (travel_length < 0.001) return; - auto adjust_target = [this, area_filament_cross_section](const AxisCoords& target, const AxisCoords& prev_position) { + auto adjust_target = [this](const AxisCoords& target, const AxisCoords& prev_position) { AxisCoords ret = target; if (m_global_positioning_type == EPositioningType::Relative) { for (unsigned char a = X; a <= E; ++a) { @@ -7006,7 +7006,7 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type, get_acceleration(normal_mode)); const float junction_deviation = get_option_value(m_time_processor.machine_limits.machine_max_junction_deviation, normal_mode_id); const bool use_jd_jerk = (m_flavor == gcfMarlinFirmware && junction_deviation > 0.0f); - const auto axis_jerk_for_preview = [this, normal_mode, use_jd_jerk, move_acceleration](Axis axis) { + const auto axis_jerk_for_preview = [this, use_jd_jerk, move_acceleration](Axis axis) { return use_jd_jerk ? get_axis_max_jerk_with_jd(normal_mode, axis, move_acceleration) : get_axis_max_jerk(normal_mode, axis); }; const float jerk_x = axis_jerk_for_preview(X); diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 5834937169..8aff5f4a3f 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -4083,7 +4083,7 @@ void WipeTower::toolchange_wipe_new(WipeTowerWriter &writer, const box_coordinat } return time * 60.f; }; - auto estimate_wipe_time = [&estimate_time_kernel, & cleaning_box, &target_speed, &x_to_wipe, &xr, &xl, &dy, &WipeSpeedMap, &solid_tool_toolchange](int begin_line) -> float { + auto estimate_wipe_time = [&estimate_time_kernel, & cleaning_box, &x_to_wipe, &xr, &xl, &dy, &solid_tool_toolchange](int begin_line) -> float { int n = std::ceil(x_to_wipe / (xr - xl)); if (solid_tool_toolchange) n = (cleaning_box.lu[1] - cleaning_box.ld[1]) / dy; float total_time = estimate_time_kernel(n); @@ -5111,7 +5111,7 @@ Polygon WipeTower::generate_rib_polygon(const box_coordinates &wt_box) Polygon WipeTower::generate_support_wall_new(WipeTowerWriter &writer, const box_coordinates &wt_box, double feedrate, bool first_layer,bool rib_wall, bool extrude_perimeter, bool skip_points) { - auto get_closet_idx = [this, &writer](Polylines &pls) -> std::pair<int,int> { + auto get_closet_idx = [&writer](Polylines &pls) -> std::pair<int,int> { Vec2f anchor{writer.x(), writer.y()}; int closestIndex = -1; int closestPl = -1; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index bbc3aa80f3..8f1dd8926c 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -877,7 +877,7 @@ void Model::convert_multipart_object(unsigned int max_extruders) // Revert the centering operation. trafo_volume.set_offset(trafo_volume.get_offset() - o->origin_translation); int counter = 1; - auto copy_volume = [o, v, max_extruders, &counter, &extruder_counter](ModelVolume *new_v) { + auto copy_volume = [o, v, &counter](ModelVolume *new_v) { assert(new_v != nullptr); new_v->name = (counter > 1) ? o->name + "_" + std::to_string(counter++) : o->name; //BBS: Use extruder priority: volumn > object > default diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 53524887a9..8e5d565c55 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -2157,7 +2157,7 @@ int PresetBundle::validate_presets(const std::string &file_name, DynamicPrintCon void PresetBundle::remove_users_preset(AppConfig &config, std::map<std::string, std::map<std::string, std::string>> *my_presets) { - auto check_removed = [my_presets, this](Preset &preset) -> bool { + auto check_removed = [my_presets](Preset &preset) -> bool { if (my_presets == nullptr) return true; if (my_presets->find(preset.name) != my_presets->end()) return false; if (!preset.sync_info.empty()) return false; // syncing, not remove @@ -3412,7 +3412,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) combox_info.ams_names.push_back(ams_name); continue; } - iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { return f.is_compatible && f.is_system; }); + iter = std::find_if(filaments.begin(), filaments.end(), [](auto &f) { return f.is_compatible && f.is_system; }); if (iter == filaments.end()) continue; } diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 40764342fb..e96304e874 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2288,7 +2288,7 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) obj->clear_shared_object(); //add the print_object share check logic - auto is_print_object_the_same = [this](const PrintObject* object1, const PrintObject* object2) -> bool{ + auto is_print_object_the_same = [](const PrintObject* object1, const PrintObject* object2) -> bool{ if (object1->trafo().matrix() != object2->trafo().matrix()) return false; const ModelObject* model_obj1 = object1->model_object(); @@ -5699,7 +5699,7 @@ int Print::load_cached_data(const std::string& directory) return CLI_IMPORT_CACHE_NOT_FOUND; } - auto find_region = [this](PrintObject* object, size_t config_hash) -> const PrintRegion* { + auto find_region = [](PrintObject* object, size_t config_hash) -> const PrintRegion* { int regions_count = object->num_printing_regions(); for (int index = 0; index < regions_count; index++ ) { diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 7bc18f6b86..a228bb7436 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2666,7 +2666,7 @@ void PrintObject::bridge_over_infill() // SECTION to gather and filter surfaces for expanding, and then cluster them by layer { tbb::concurrent_vector<CandidateSurface> candidate_surfaces; - tbb::parallel_for(tbb::blocked_range<size_t>(0, this->layers().size()), [po = static_cast<const PrintObject *>(this), &candidate_surfaces, has_lightning_infill](tbb::blocked_range<size_t> r) { + tbb::parallel_for(tbb::blocked_range<size_t>(0, this->layers().size()), [po = static_cast<const PrintObject *>(this), &candidate_surfaces](tbb::blocked_range<size_t> r) { PRINT_OBJECT_TIME_LIMIT_MILLIS(PRINT_OBJECT_TIME_LIMIT_DEFAULT); for (size_t lidx = r.begin(); lidx < r.end(); lidx++) { const Layer *layer = po->get_layer(lidx); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 07eb885eda..f6a6b43e09 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -527,7 +527,7 @@ bool groupingVolumes(std::vector<VolumeSlices> objSliceByVolume, std::vector<gro } tbb::parallel_for(tbb::blocked_range<int>(0, osvIndex.size()), - [&osvIndex, &objSliceByVolume, &offsetValue, &resolution](const tbb::blocked_range<int>& range) { + [&osvIndex, &objSliceByVolume, &resolution](const tbb::blocked_range<int>& range) { for (auto k = range.begin(); k != range.end(); ++k) { for (ExPolygon& poly_ex : objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]]) poly_ex.douglas_peucker(resolution); @@ -535,7 +535,7 @@ bool groupingVolumes(std::vector<VolumeSlices> objSliceByVolume, std::vector<gro }); tbb::parallel_for(tbb::blocked_range<int>(0, osvIndex.size()), - [&osvIndex, &objSliceByVolume,&offsetValue, &resolution](const tbb::blocked_range<int>& range) { + [&osvIndex, &objSliceByVolume,&offsetValue](const tbb::blocked_range<int>& range) { for (auto k = range.begin(); k != range.end(); ++k) { objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]] = offset_ex(objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]], offsetValue); } diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index 15640cb0f2..0c7a4b832e 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -132,7 +132,7 @@ std::pair<SupportGeneratorLayersPtr, SupportGeneratorLayersPtr> generate_interfa return nullptr; }; tbb::parallel_for(tbb::blocked_range<int>(0, int(intermediate_layers.size())), - [&bottom_contacts, &top_contacts, &top_interface_layers, &top_base_interface_layers, &intermediate_layers, &insert_layer, &support_params, + [&bottom_contacts, &top_contacts, &top_interface_layers, &top_base_interface_layers, &intermediate_layers, &insert_layer, num_top_interface_layers, num_bottom_interface_layers, num_top_base_interface_layers, num_bottom_base_interface_layers, num_top_interface_layers_only, num_bottom_interface_layers_only, snug_supports, &interface_layers, &base_interface_layers](const tbb::blocked_range<int>& range) { diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index cd60489e75..12ac275592 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -1588,7 +1588,7 @@ static inline std::tuple<Polygons, Polygons, double> detect_contacts( // Cache support trimming polygons derived from lower layer polygons, possible merged with "on build plate only" trimming polygons. auto slices_margin_update = - [&slices_margin, &layer, &lower_layer, &lower_layer_polygons, buildplate_only, has_enforcer, &annotations, layer_id] + [&slices_margin, &lower_layer, &lower_layer_polygons, buildplate_only, has_enforcer, &annotations, layer_id] (float slices_margin_offset, float no_interface_offset) { if (slices_margin.offset != slices_margin_offset) { slices_margin.offset = slices_margin_offset; diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index de08870216..2b06f11244 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -2667,7 +2667,7 @@ void TreeSupport::drop_nodes() SupportNode::diameter_angle_scale_factor = diameter_angle_scale_factor; float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm - auto get_max_move_dist = [this, &config, tan_angle, wall_count, support_extrusion_width](const SupportNode *node, int power = 1) { + auto get_max_move_dist = [this, tan_angle, support_extrusion_width](const SupportNode *node, int power = 1) { if (node->max_move_dist == 0) { node->radius = get_radius(node); node->max_move_dist = std::min(tan_angle * node->height, support_extrusion_width); diff --git a/src/slic3r/GUI/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index ddd3380975..f83eed30db 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -437,7 +437,7 @@ wxBoxSizer* AMSDryCtrWin::create_normal_state_panel(wxPanel* parent) m_temperature_input = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(80), -1)); m_temperature_input->SetMaxLength(3); // Limit to 3 digits - m_temperature_input->Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { + m_temperature_input->Bind(wxEVT_CHAR, [](wxKeyEvent& event) { int keycode = event.GetKeyCode(); if (keycode >= '0' && keycode <= '9') { event.Skip(); @@ -464,7 +464,7 @@ wxBoxSizer* AMSDryCtrWin::create_normal_state_panel(wxPanel* parent) m_time_input = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(100), -1)); m_time_input->SetMaxLength(3); // Limit to 3 digits - m_time_input->Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { + m_time_input->Bind(wxEVT_CHAR, [](wxKeyEvent& event) { int keycode = event.GetKeyCode(); if (keycode >= '0' && keycode <= '9') { event.Skip(); @@ -698,7 +698,7 @@ wxBoxSizer* AMSDryCtrWin::create_guide_info_section(wxPanel* parent) m_rotate_spool_toggle = new wxCheckBox(parent, wxID_ANY, ""); m_rotate_spool_toggle->SetValue(false); - m_rotate_spool_toggle->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& event) { + m_rotate_spool_toggle->Bind(wxEVT_CHECKBOX, [](wxCommandEvent& event) { bool is_checked = event.IsChecked(); // Add toggle behavior logic here }); diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index a4b568e82d..4c6d3c249d 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -468,7 +468,7 @@ PingCodeBindDialog::~PingCodeBindDialog() { m_link_privacy_title->SetFont(Label::Head_13); m_link_privacy_title->SetMaxSize(wxSize(FromDIP(450), -1)); m_link_privacy_title->Wrap(FromDIP(450)); - m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [](auto& e) { std::string url; std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); @@ -893,7 +893,7 @@ void BindMachineDialog::on_show(wxShowEvent &event) } } }) - .on_error([this](std::string body, std::string error, unsigned status) { + .on_error([](std::string body, std::string error, unsigned status) { //BOOST_LOG_TRIVIAL(info) << "load oss picture failed, oss path: " << oss_path << " status:" << status << " error:" << error; }).perform(); } @@ -1099,7 +1099,7 @@ void UnBindMachineDialog::on_show(wxShowEvent &event) } } }) - .on_error([this](std::string body, std::string error, unsigned status) { + .on_error([](std::string body, std::string error, unsigned status) { //BOOST_LOG_TRIVIAL(info) << "load oss picture failed, oss path: " << oss_path << " status:" << status << " error:" << error; }).perform(); diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index 4de90d8b8f..6c1e612864 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -443,7 +443,7 @@ void HistoryWindow::sync_history_data() { auto edit_button = new Button(m_history_data_panel, _L("Edit")); edit_button->SetStyle(ButtonStyle::Confirm, ButtonType::Window); - edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value, edit_button](auto& e) { + edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value](auto& e) { if (m_ui_op_lock) return; PACalibResult result_buffer = result; diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 0c2b4f1659..f3351fdb6b 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -201,7 +201,7 @@ wxWindow* CalibrationDialog::create_check_option(wxString title, wxWindow* paren checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this, check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); }); + text->Bind(wxEVT_LEFT_DOWN, [check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); }); m_checkbox_list[param] = check; m_checkbox_list[param]->SetValue(true); return checkbox; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index b1f5c206c6..7496d59a51 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -477,7 +477,7 @@ void CalibrationWizard::on_cali_go_home() if (go_home_dialog == nullptr) go_home_dialog = new SecondaryCheckDialog(this, wxID_ANY, _L("Confirm")); - go_home_dialog->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, method](wxCommandEvent &e) { + go_home_dialog->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent &e) { if (curr_obj) { curr_obj->command_task_abort(); } else { diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index d9604da84a..152f46f37c 100644 --- a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -90,7 +90,7 @@ void CalibrationCaliPage::on_subtask_abort(wxCommandEvent& event) if (abort_dlg == nullptr) { abort_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Cancel print")); - abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [obj](wxCommandEvent& e) { if (obj) obj->command_task_abort(); }); } diff --git a/src/slic3r/GUI/CalibrationWizardPage.cpp b/src/slic3r/GUI/CalibrationWizardPage.cpp index ef17da9081..c117ec8857 100644 --- a/src/slic3r/GUI/CalibrationWizardPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPage.cpp @@ -762,7 +762,7 @@ void CaliPageActionPanel::bind_button(CaliPageActionType action_type, bool is_bl if (is_block) { m_action_btns[i]->Bind(wxEVT_BUTTON, - [this](wxCommandEvent& evt) { + [](wxCommandEvent& evt) { MessageDialog msg(nullptr, _L("The current firmware version of the printer does not support calibration.\nPlease upgrade the printer firmware."), _L("Calibration not supported"), wxOK | wxICON_WARNING); msg.ShowModal(); }); diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp index 78bc4bb77f..f7699cfab0 100644 --- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -272,7 +272,7 @@ void CaliPASaveAutoPanel::sync_cali_result(const std::vector<PACalibResult>& cal preset_names = default_naming(preset_names); std::vector<PACalibResult> sorted_cali_result = cali_result; - std::sort(sorted_cali_result.begin(), sorted_cali_result.end(), [this](const PACalibResult &left, const PACalibResult& right) { + std::sort(sorted_cali_result.begin(), sorted_cali_result.end(), [](const PACalibResult &left, const PACalibResult& right) { return left.tray_id < right.tray_id; }); @@ -366,7 +366,7 @@ void CaliPASaveAutoPanel::sync_cali_result(const std::vector<PACalibResult>& cal } } - comboBox_tray_name->Bind(wxEVT_COMBOBOX, [this, comboBox_tray_name, k_value, n_value](auto& e) { + comboBox_tray_name->Bind(wxEVT_COMBOBOX, [comboBox_tray_name](auto& e) { int selection = comboBox_tray_name->GetSelection(); auto history = filtered_results[selection]; }); @@ -744,7 +744,7 @@ void CaliPASaveAutoPanel::sync_cali_result_for_multi_extruder(const std::vector< } } - comboBox_tray_name->Bind(wxEVT_COMBOBOX, [this, comboBox_tray_name, k_value, n_value](auto &e) { + comboBox_tray_name->Bind(wxEVT_COMBOBOX, [comboBox_tray_name](auto &e) { int selection = comboBox_tray_name->GetSelection(); auto history = filtered_results[selection]; }); diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 0ee5694a34..cc7e00eec6 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -140,7 +140,7 @@ CameraPopup::CameraPopup(wxWindow *parent) vcamera_guide_link->Wrap(-1); vcamera_guide_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); auto text_size = vcamera_guide_link->GetTextExtent(text); - vcamera_guide_link->Bind(wxEVT_LEFT_DOWN, [this, url](wxMouseEvent& e) {wxLaunchDefaultBrowser(url); }); + vcamera_guide_link->Bind(wxEVT_LEFT_DOWN, [url](wxMouseEvent& e) {wxLaunchDefaultBrowser(url); }); link_underline = new wxPanel(m_panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); link_underline->SetBackgroundColour(wxColour(0x1F, 0x8E, 0xEA)); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index dba8699105..412df19091 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -2752,7 +2752,7 @@ ConfigWizard::ConfigWizard(wxWindow *parent) }); if (wxLinux_gtk3) - this->Bind(wxEVT_SHOW, [this, vsizer](const wxShowEvent& e) { + this->Bind(wxEVT_SHOW, [](const wxShowEvent& e) { ; }); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 33f49c2a38..063d1ce628 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -1885,7 +1885,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_nozzle_diameter_item(wxWindow *par m_custom_nozzle_diameter_ctrl = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE); m_custom_nozzle_diameter_ctrl->SetHint(_L("Input Custom Nozzle Diameter")); - m_custom_nozzle_diameter_ctrl->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) { + m_custom_nozzle_diameter_ctrl->Bind(wxEVT_CHAR, [](wxKeyEvent &event) { int key = event.GetKeyCode(); if (key != 44 && key != 46 && cannot_input_key.find(key) != cannot_input_key.end()) { // "@" can not be inputed event.Skip(false); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index dbbf5ec5e2..b0302f2cf8 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1324,7 +1324,7 @@ void SpinCtrl::BUILD() { bEnterPressed = true; }), temp->GetId()); - temp->GetTextCtrl()->Bind(wxEVT_TEXT, ([this, temp](wxCommandEvent e) + temp->GetTextCtrl()->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { // # On OSX / Cocoa, SpinInput::GetValue() doesn't return the new value // # when it was changed from the text control, so the on_change callback diff --git a/src/slic3r/GUI/FilamentPickerDialog.cpp b/src/slic3r/GUI/FilamentPickerDialog.cpp index 98c955fb76..5b5af59501 100644 --- a/src/slic3r/GUI/FilamentPickerDialog.cpp +++ b/src/slic3r/GUI/FilamentPickerDialog.cpp @@ -426,11 +426,11 @@ wxScrolledWindow* FilamentPickerDialog::CreateColorGrid() }); // Hover highlight - btn->Bind(wxEVT_ENTER_WINDOW, [btn](wxMouseEvent& evt) { + btn->Bind(wxEVT_ENTER_WINDOW, [](wxMouseEvent& evt) { evt.Skip(); }); - btn->Bind(wxEVT_LEAVE_WINDOW, [btn](wxMouseEvent& evt) { + btn->Bind(wxEVT_LEAVE_WINDOW, [](wxMouseEvent& evt) { evt.Skip(); }); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 15085c3cc4..e5a88e4ea4 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -2613,7 +2613,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector<const GCodeProcessor return ret; }; - auto append_item = [icon_size, &imgui, imperial_units, &window_padding, &draw_list, this](const ColorRGBA& color, const std::vector<std::pair<std::string, float>>& columns_offsets) + auto append_item = [icon_size, &imgui, &window_padding, &draw_list, this](const ColorRGBA& color, const std::vector<std::pair<std::string, float>>& columns_offsets) { // render icon ImVec2 pos = ImVec2(ImGui::GetCursorScreenPos().x + window_padding * 3, ImGui::GetCursorScreenPos().y); @@ -2648,7 +2648,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector<const GCodeProcessor } ImGui::Separator(); }; - auto get_used_filament_from_volume = [this, imperial_units, &filament_diameters, &filament_densities](double volume, int extruder_id) { + auto get_used_filament_from_volume = [imperial_units, &filament_diameters, &filament_densities](double volume, int extruder_id) { double koef = imperial_units ? 1.0 / GizmoObjectManipulation::in_to_mm : 0.001; std::pair<double, double> ret = { koef * volume / (PI * sqr(0.5 * filament_diameters[extruder_id])), volume * filament_densities[extruder_id] * 0.001 }; @@ -3233,7 +3233,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv //ImVec2(pos_rect.x + ImGui::GetWindowWidth() + ImGui::GetFrameHeight(),pos_rect.y + ImGui::GetFrameHeight() + window_padding * 2.5), //ImGui::GetColorU32(ImVec4(0,0,0,0.3))); - auto append_item = [icon_size, &imgui, imperial_units, &window_padding, &draw_list, this]( + auto append_item = [icon_size, &imgui, &window_padding, &draw_list, this]( EItemType type, const ColorRGBA& color, const std::vector<std::pair<std::string, float>>& columns_offsets, @@ -3368,7 +3368,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return ret; }; - auto calculate_offsets = [&imgui, max_width, window_padding, this](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) { + auto calculate_offsets = [max_width, this](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) { const ImGuiStyle& style = ImGui::GetStyle(); std::vector<float> offsets; // ORCA increase spacing for more readable format. Using direct number requires much less code change in here. GetTextLineHeight for additional spacing for icon_size @@ -3856,7 +3856,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({ distance_text, offsets[3] }); if (full_layout && !count_text.empty()) columns_offsets.push_back({ count_text, distance_text.empty() ? offsets[3] : offsets[4] }); - append_item(EItemType::Rect, color, columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, type, visible]() { + append_item(EItemType::Rect, color, columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, type]() { m_viewer.toggle_option_visibility(type); update_moves_slider(); }); @@ -3913,7 +3913,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({used_filaments_length[i], offsets[3]}); columns_offsets.push_back({used_filaments_weight[i], offsets[4]}); append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_extrusion_role_color(role)), columns_offsets, - true, offsets.back(), visible, [this, role, visible]() { + true, offsets.back(), visible, [this, role]() { m_viewer.toggle_extrusion_role_visibility(role); update_moves_slider(); }); @@ -3932,7 +3932,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({ travel_percent, offsets[2] }); columns_offsets.push_back({ travel_distance, offsets[3] }); // Usage column columns_offsets.push_back({ travel_moves, offsets[4] }); // Usage column - append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, item, visible]() { + append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, item]() { m_viewer.toggle_option_visibility(item); update_moves_slider(); }); @@ -3951,7 +3951,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); // refresh(*m_gcode_result, wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result)); update_moves_slider(); @@ -3968,7 +3968,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); // refresh(*m_gcode_result, wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result)); update_moves_slider(); @@ -3985,7 +3985,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); update_moves_slider(); }); @@ -4001,7 +4001,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); update_moves_slider(); }); @@ -4121,7 +4121,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } float checkbox_pos = std::max(predictable_icon_pos, color_print_offsets[_u8L("Display")]); // ORCA prefer predictable_icon_pos when header not reacing end - append_item(EItemType::Rect, libvgcode::convert(tool_colors[extruder_idx]), columns_offsets, false, checkbox_pos/*ORCA*/, true, [this, extruder_idx]() {}); + append_item(EItemType::Rect, libvgcode::convert(tool_colors[extruder_idx]), columns_offsets, false, checkbox_pos/*ORCA*/, true, []() {}); } i++; } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 34279369a1..7db7e01e9c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -9236,7 +9236,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); // ORCA show additional information depends on state - auto draw_info_btn = [end_pos, f_scale, margin, window_bg](std::string str, ImVec4 bg_color, ImVec4 fg_color){ + auto draw_info_btn = [end_pos, f_scale, margin](std::string str, ImVec4 bg_color, ImVec4 fg_color){ GImGui->FontSize = 15.0f * f_scale; ImVec2 txt_slice_sz = ImGui::CalcTextSize(str.c_str()); ImVec2 btn_pad = ImVec2(8.f, 1.f) * f_scale; @@ -9492,7 +9492,7 @@ void GLCanvas3D::_render_canvas_toolbar() Plater* p = wxGetApp().plater(); AppConfig* cfg = wxGetApp().app_config; - auto create_menu_item = [this, sc]( + auto create_menu_item = [sc]( const std::string& name, bool enable, bool condition, @@ -9509,7 +9509,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("3D Navigator")), m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly wxGetApp().show_3d_navigator(), - [this]{ + []{ wxGetApp().toggle_show_3d_navigator(); ImGui::CloseCurrentPopup(); // Close popup to show changes on UI } @@ -9518,7 +9518,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Zoom button")), true, // work on all wxGetApp().show_canvas_zoom_button(), - [this]{ + []{ wxGetApp().toggle_canvas_zoom_button(); ImGui::CloseCurrentPopup(); // Close popup to show changes on UI } @@ -9529,13 +9529,13 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Overhangs")), m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare p->is_view3D_overhang_shown(), - [this, p]{p->show_view3D_overhang(!p->is_view3D_overhang_shown());} + [p]{p->show_view3D_overhang(!p->is_view3D_overhang_shown());} ); create_menu_item( _utf8(L("Outline")), m_canvas_type != ECanvasType::CanvasPreview, // not work on preview wxGetApp().show_outline(), - [this]{wxGetApp().toggle_show_outline();} + []{wxGetApp().toggle_show_outline();} ); create_menu_item( _utf8(L("Wireframe")), @@ -9547,7 +9547,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Realistic View")), m_canvas_type != ECanvasType::CanvasPreview, // not work on preview cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE), - [this, &cfg]{ + [&cfg]{ cfg->set_bool(SETTING_OPENGL_REALISTIC_MODE, !cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE)); cfg->save(); } @@ -9558,7 +9558,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Perspective")), true, // work on all cfg->get_bool("use_perspective_camera"), - [this, &cfg]{ + [&cfg]{ cfg->set_bool("use_perspective_camera", !(cfg->get_bool("use_perspective_camera"))); wxGetApp().update_ui_from_settings(); } @@ -9575,7 +9575,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Gridlines")), m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly wxGetApp().show_plate_gridlines(), - [this]{wxGetApp().toggle_show_plate_gridlines();} + []{wxGetApp().toggle_show_plate_gridlines();} ); ImGui::Separator(); @@ -9583,7 +9583,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Labels")), m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare p->are_view3D_labels_shown(), - [this, p]{p->show_view3D_labels(!p->are_view3D_labels_shown());} + [p]{p->show_view3D_labels(!p->are_view3D_labels_shown());} ); ImGui::PopItemFlag(); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 223829f435..d661b012a3 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2641,7 +2641,7 @@ std::string GUI_App::get_bbl_client_version() void GUI_App::on_start_subscribe_again(std::string dev_id) { auto start_subscribe_timer = new wxTimer(this, wxID_ANY); - Bind(wxEVT_TIMER, [this, start_subscribe_timer, dev_id](auto& e) { + Bind(wxEVT_TIMER, [start_subscribe_timer, dev_id](auto& e) { start_subscribe_timer->Stop(); Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -3231,7 +3231,7 @@ bool GUI_App::on_init_inner() } }); - Bind(EVT_SHOW_NO_NEW_VERSION, [this](const wxCommandEvent& evt) { + Bind(EVT_SHOW_NO_NEW_VERSION, [](const wxCommandEvent& evt) { wxString msg = _L("This is the newest version."); InfoDialog dlg(nullptr, _L("Info"), msg); dlg.ShowModal(); @@ -5256,7 +5256,7 @@ std::string GUI_App::handle_web_request(std::string cmd) } } else if (command_str.compare("begin_network_plugin_download") == 0) { - CallAfter([this] { wxGetApp().ShowDownNetPluginDlg(); }); + CallAfter([] { wxGetApp().ShowDownNetPluginDlg(); }); } else if (command_str.compare("get_web_shortcut") == 0) { if (root.get_child_optional("key_event") != boost::none) { @@ -8297,7 +8297,7 @@ bool GUI_App::show_modal_ip_address_enter_dialog(bool input_sn, wxString title) dlg.set_machine_obj(obj); if (!title.empty()) dlg.update_title(title); - dlg.Bind(EVT_ENTER_IP_ADDRESS, [this, obj](wxCommandEvent& e) { + dlg.Bind(EVT_ENTER_IP_ADDRESS, [obj](wxCommandEvent& e) { auto selection_data_arr = wxSplit(e.GetString().ToStdString(), '|'); if (selection_data_arr.size() == 2) { @@ -8777,7 +8777,7 @@ bool GUI_App::check_and_keep_current_preset_changes(const wxString& caption, con if (!no_need_change && dlg.ShowModal() == wxID_CANCEL) return false; - auto reset_modifications = [this, is_called_from_configwizard]() { + auto reset_modifications = [this]() { //if (is_called_from_configwizard) // return; // no need to discared changes. It will be done fromConfigWizard closing diff --git a/src/slic3r/GUI/GUI_AuxiliaryList.cpp b/src/slic3r/GUI/GUI_AuxiliaryList.cpp index 1fa5b194ec..be9f99a76a 100644 --- a/src/slic3r/GUI/GUI_AuxiliaryList.cpp +++ b/src/slic3r/GUI/GUI_AuxiliaryList.cpp @@ -217,7 +217,7 @@ void AuxiliaryList::on_context_menu(wxDataViewEvent& evt) } else { append_menu_item(menu, wxID_ANY, _L("Open"), wxEmptyString, - [this, node](wxCommandEvent&) + [node](wxCommandEvent&) { wxLaunchDefaultApplication(node->path, 0); }); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index be407a270f..d8e54978fa 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1414,7 +1414,7 @@ void MenuFactory::create_default_menu() append_menu_check_item(&m_default_menu, wxID_ANY, _L("Show Labels"), "", [](wxCommandEvent&) { plater()->show_view3D_labels(!plater()->are_view3D_labels_shown()); plater()->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, &m_default_menu, - []() { return plater()->is_view3D_shown(); }, [this]() { return plater()->are_view3D_labels_shown(); }, m_parent); + []() { return plater()->is_view3D_shown(); }, []() { return plater()->are_view3D_labels_shown(); }, m_parent); } void MenuFactory::create_common_object_menu(wxMenu* menu) @@ -2090,7 +2090,7 @@ void MenuFactory::append_menu_item_clone(wxMenu* menu) static const wxString ctrl = _L("Ctrl+"); #endif append_menu_item(menu, wxID_ANY, _L("Clone") + "\t" + ctrl + "K", "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->clone_selection(); }, "", nullptr, []() { @@ -2115,7 +2115,7 @@ void MenuFactory::append_menu_item_smooth_mesh(wxMenu *menu) void MenuFactory::append_menu_item_center(wxMenu* menu) { append_menu_item(menu, wxID_ANY, _L("Center") , "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->center_selection(); }, "", nullptr, []() { @@ -2134,7 +2134,7 @@ void MenuFactory::append_menu_item_center(wxMenu* menu) void MenuFactory::append_menu_item_drop(wxMenu* menu) { append_menu_item(menu, wxID_ANY, _L("Drop") , "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->drop_selection(); }, "", nullptr, []() { @@ -2309,7 +2309,7 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) } } - wxMenuItem* menu_item_set_printable = append_menu_check_item(menu, wxID_ANY, _L("Printable") + "\t" + "V", "", [this, all_printable](wxCommandEvent&) { + wxMenuItem* menu_item_set_printable = append_menu_check_item(menu, wxID_ANY, _L("Printable") + "\t" + "V", "", [all_printable](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_printable(!all_printable); }, menu); @@ -2329,7 +2329,7 @@ void MenuFactory::append_menu_item_set_auto_drop(wxMenu* menu) wxString menu_tooltip = _L("Automatically snaps the selected object to the build plate."); wxMenuItem* menu_item_set_auto_drop = append_menu_check_item( menu, wxID_ANY, menu_text, menu_tooltip, - [this, current_auto_drop](wxCommandEvent&) { + [current_auto_drop](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_auto_drop(!current_auto_drop); }, @@ -2384,7 +2384,7 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) auto item = append_menu_item( menu, wxID_ANY, name, "", - [plate](wxCommandEvent &e) { + [](wxCommandEvent &e) { int hover_idx =plater()->canvas3D()->GetHoverId(); if (hover_idx == -1) { int plate_idx=plater()->GetPlateIndexByRightMenuInLeftUI(); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 3b36158bd1..bbd7294ae5 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -223,7 +223,7 @@ void ObjectLayers::update_layers_list() // only call sizer->Clear(true) via CallAfter, otherwise crash happens in Linux when press enter in Height Range // because an element cannot be destroyed while there are pending events for this element.(https://github.com/wxWidgets/Phoenix/issues/1854) - wxGetApp().CallAfter([this, type, objects_ctrl, range]() { + wxGetApp().CallAfter([this, type, range]() { m_og->ctrl_parent()->Freeze(); // Delete all controls from options group diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index b33cc82abc..8067afd8df 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2324,7 +2324,7 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo bool split_compound = wxGetApp().app_config->get_bool("is_split_compound"); model = Model::read_from_step( input_file, LoadStrategy::LoadModel, nullptr, nullptr, - [this, &is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, + [&is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split) -> int { if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) { StepMeshDialog mesh_dlg(nullptr, file, linear, angle); @@ -3317,7 +3317,7 @@ void ObjectList::boolean() } } - TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [this](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); }); + TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); }); // add mesh to model as a new object, keep the original object's name and config Model* model = object->get_model(); @@ -6267,7 +6267,7 @@ void GUI::ObjectList::smooth_mesh() get_selection_indexes(obj_idxs, vol_idxs); auto object_idx = obj_idxs.front(); ModelObject *obj{nullptr}; - auto show_warning_dlg = [this](int cur_face_count,std::string name,bool is_part) { + auto show_warning_dlg = [](int cur_face_count,std::string name,bool is_part) { int limit_face_count = 1000000; if (cur_face_count > limit_face_count) { auto name_str = wxString::FromUTF8(name); @@ -6280,7 +6280,7 @@ void GUI::ObjectList::smooth_mesh() } return false; }; - auto show_smooth_mesh_error_dlg = [this](std::string name) { + auto show_smooth_mesh_error_dlg = [](std::string name) { auto name_str = wxString::FromUTF8(name); auto content = wxString::Format(_L("\"%s\" part's mesh contains errors. Please repair it first."), name_str); WarningDialog dlg(static_cast<wxWindow *>(wxGetApp().mainframe), content, wxEmptyString, wxOK); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 1fc07bf5a2..35508c6113 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -3520,13 +3520,13 @@ void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) Text()->GetTextCtrl()->SetInsertionPointEnd(); - m_control->Bind(wxEVT_TEXT_ENTER, [this, row, col, grid](wxCommandEvent &e) { + m_control->Bind(wxEVT_TEXT_ENTER, [grid](wxCommandEvent &e) { grid->HideCellEditControl(); grid->SaveEditControlValue(); e.Skip(); }); - m_control->Bind(wxEVT_CHAR_HOOK, [this, row, col, grid](wxKeyEvent &e) { + m_control->Bind(wxEVT_CHAR_HOOK, [grid](wxKeyEvent &e) { if (e.GetKeyCode() == WXK_ESCAPE) { grid->HideCellEditControl(); grid->SaveEditControlValue(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index e72c421a08..2290018419 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -184,7 +184,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ btn->Bind(EVT_LOCK_ENABLE, [this, btn](auto &e) { btn->SetBitmap(m_bmp_reset_focus.bmp()); }); #endif - btn->Bind(wxEVT_BUTTON, [btn, opt_key, this, is_object, object, config, group_category](wxEvent &event) { + btn->Bind(wxEVT_BUTTON, [opt_key, this, is_object, object, config, group_category](wxEvent &event) { //wxGetApp().plater()->take_snapshot(from_u8((boost::format(_utf8(L("Reset Option %s"))) % opt_key).str())); config->erase(opt_key); //btn->Hide(); @@ -204,10 +204,13 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ this->m_parent->Thaw(); #ifdef __WXOSX_MAC__ - if (!btn->IsEnabled()) { - btn->SetBitmap(m_bmp_reset_disable.bmp()); - } else { - btn->SetBitmap(m_bmp_reset_focus.bmp()); + // The handler is bound on the button, so the event source is that button. + if (auto *btn = dynamic_cast<ScalableButton *>(event.GetEventObject())) { + if (!btn->IsEnabled()) { + btn->SetBitmap(m_bmp_reset_disable.bmp()); + } else { + btn->SetBitmap(m_bmp_reset_focus.bmp()); + } } #endif }); @@ -284,13 +287,13 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ m_settings_list_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0); m_og_settings.push_back(optgroup); - auto toggle_field = [this, optgroup](const t_config_option_key & opt_key, bool toggle, int opt_index) + auto toggle_field = [optgroup](const t_config_option_key & opt_key, bool toggle, int opt_index) { Field* field = optgroup->get_fieldc(opt_key, opt_index);; if (field) field->toggle(toggle); }; - auto toggle_line = [this, optgroup](const t_config_option_key &opt_key, bool toggle, int opt_index) + auto toggle_line = [optgroup](const t_config_option_key &opt_key, bool toggle, int opt_index) { Line* line = optgroup->get_line(opt_key); if (line) line->toggle_visible = toggle; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index b5273e3024..273bb94b90 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -3596,7 +3596,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection) // model_name failing reason std::vector<std::pair<std::string, std::string>> failed_models; auto plater = wxGetApp().plater(); - auto fix_and_update_progress = [this, plater, keep_painting](ModelObject *model_object, const int vol_idx, const string &model_name, ProgressDialog &progress_dlg, + auto fix_and_update_progress = [keep_painting](ModelObject *model_object, const int vol_idx, const string &model_name, ProgressDialog &progress_dlg, std::vector<std::string> &succes_models, std::vector<std::pair<std::string, std::string>> &failed_models) { wxString msg = _L("Repairing model object"); msg += ": " + from_u8(model_name) + "\n"; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index c7186e5d80..8b12da14f9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -223,7 +223,7 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l const int select_btn_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(("1 " + _u8L("selected")).c_str()).x, ImGui::CalcTextSize(_u8L("Select").c_str()).x); - auto selectable = [this](const std::string& label, bool selected, const ImVec2& size_arg) { + auto selectable = [](const std::string& label, bool selected, const ImVec2& size_arg) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 0,0 }); ImGuiWindow* window = ImGui::GetCurrentWindow(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 8f0cd9a43d..3dcf51cbb5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1456,7 +1456,7 @@ void TriangleSelectorPatch::update_triangles_per_patch() return touching_triangles; }; - auto calc_fragment_area = [this](const TrianglePatch& patch, float max_limit_area, int stride) { + auto calc_fragment_area = [](const TrianglePatch& patch, float max_limit_area, int stride) { double total_area = 0.f; const std::vector<int>& ti = patch.triangle_indices; /*for (int i = 0; i < ti.size() / 3; i++) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 7882cf2269..9cff834346 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -1003,7 +1003,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) // number waits briefly for a second one. const int digit = keyCode - '0'; const int shortcut_max = int(GLGizmoMmuSegmentation::EXTRUDERS_LIMIT); - auto can_start_two_digit = [shortcut_max](int d) { return d > 0 && d * 10 <= shortcut_max; }; + auto can_start_two_digit = [](int d) { return d > 0 && d * 10 <= shortcut_max; }; auto select = [mmu_seg](int number) { return number > 0 && mmu_seg->on_number_key_down(number); }; if (m_timer_set_color.IsRunning() && m_pending_color_shortcut_tens > 0) { diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index d7b082426c..7c4a2afd38 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -239,7 +239,7 @@ void GizmoObjectManipulation::update_if_dirty() }; for (int i = 0; i < 3; ++ i) { - auto update = [this, i](Vec3d &cached, Vec3d &cached_rounded, const Vec3d &new_value) { + auto update = [i](Vec3d &cached, Vec3d &cached_rounded, const Vec3d &new_value) { //wxString new_text = double_to_string(new_value(i), 2); double new_rounded = round(new_value(i)*100)/100.0; //new_text.ToDouble(&new_rounded); diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index 5471c16064..f00e661df2 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -46,7 +46,7 @@ int get_hms_info_version(std::string& version) std::string url = (boost::format("https://%1%/GetVersion.php?%2%") % hms_host % query_params).str(); Slic3r::Http http = Slic3r::Http::get(url); http.timeout_max(10) - .on_complete([&result, &version](std::string body, unsigned status){ + .on_complete([&version](std::string body, unsigned status){ try { json j = json::parse(body); if (j.contains("ver")) { @@ -95,7 +95,7 @@ int HMSQuery::download_hms_related(const std::string& hms_type, const std::strin BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url; Slic3r::Http http = Slic3r::Http::get(url); - http.on_complete([this, receive_json, hms_type, &to_save_local, &j, & local_version](std::string body, unsigned status) { + http.on_complete([receive_json, hms_type, &to_save_local, &j, & local_version](std::string body, unsigned status) { try { j = json::parse(body); if (j.contains("result")) { diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index a9a66cb96f..5364cb5648 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -184,7 +184,7 @@ void FillBedJob::prepare() ap.poly = m_selected.front().poly; ap.bed_idx = PartPlateList::MAX_PLATES_COUNT; ap.itemid = -1; - ap.setter = [this, mi, offset](const ArrangePolygon &p) { + ap.setter = [this, offset](const ArrangePolygon &p) { ModelObject *mo = m_plater->model().objects[m_object_idx]; ModelObject *obj; if (m_instances) { diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index d79deb955b..dae05494e3 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -135,7 +135,6 @@ void PrintJob::process(Ctl &ctl) { /* display info */ std::string msg; - wxString error_str; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); AppConfig* config = wxGetApp().app_config; @@ -402,9 +401,7 @@ void PrintJob::process(Ctl &ctl) &is_try_lan_mode, &is_try_lan_mode_failed, &msg, - &error_str, &curr_percent, - &error_text, StagePercentPoint ](int stage, int code, std::string info) { @@ -491,7 +488,7 @@ void PrintJob::process(Ctl &ctl) DeviceManager* dev = wxGetApp().getDeviceManager(); MachineObject* obj = dev->get_selected_machine(); - auto wait_fn = [this, &ctl, curr_percent, &obj](int state, std::string job_info) { + auto wait_fn = [&ctl, &obj](int state, std::string job_info) { BOOST_LOG_TRIVIAL(info) << "print_job: get_job_info = " << job_info; if (!obj->is_support_wait_sending_finish) { diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index f97b03bf62..7f8219008f 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -55,7 +55,7 @@ void RotoptimizeJob::process(Ctl &ctl) sla::RotOptimizeParams{} .accuracy(m_accuracy) .print_config(&m_default_print_cfg) - .statucb([this, &prev_status, &ctl/*, &statustxt*/](int s) + .statucb([&ctl/*, &statustxt*/](int s) { return !ctl.was_canceled(); }); diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index bb52367188..67ce02b476 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -213,7 +213,6 @@ void SendJob::process(Ctl &ctl) params.password = m_access_code; params.use_ssl_for_ftp = m_local_use_ssl_for_ftp; params.use_ssl_for_mqtt = m_local_use_ssl; - wxString error_text; std::string msg_text; const int StagePercentPoint[(int)PrintingStageFinished + 1] = { @@ -227,7 +226,7 @@ void SendJob::process(Ctl &ctl) }; auto update_fn = [this, &ctl, - &msg, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) { + &msg, &curr_percent, StagePercentPoint](int stage, int code, std::string info) { if (stage == SendingPrintJobStage::PrintingStageCreate) { if (this->connection_type == "lan") { msg = _u8L("Sending G-code file over LAN"); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5f7d69244e..a81cb72ab9 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -746,7 +746,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ evt.Skip(); }); - Bind(wxEVT_SHOW, [this](wxShowEvent &evt) { + Bind(wxEVT_SHOW, [](wxShowEvent &evt) { DeviceManager *manger = wxGetApp().getDeviceManager(); if (manger) { evt.IsShown() ? manger->start_refresher() : manger->stop_refresher(); @@ -2855,7 +2855,7 @@ void MainFrame::init_menubar_as_editor() [this]() { return can_add_models(); }); append_menu_item(import_menu, wxID_ANY, _L("Import Configs") + dots /*+ "\t" + ctrl + "I"*/, _L("Load configs"), [this](wxCommandEvent&) { load_config_file(); }, "menu_import", nullptr, - [this](){return true; }, this); + [](){return true; }, this); append_submenu(fileMenu, import_menu, wxID_ANY, _L("Import"), ""); @@ -2968,7 +2968,7 @@ void MainFrame::init_menubar_as_editor() _L("Duplicate the current plate"),[this](wxCommandEvent&) { m_plater->duplicate_plate(); }, - "menu_remove", nullptr, [this](){return true;}, this); + "menu_remove", nullptr, [](){return true;}, this); editMenu->AppendSeparator(); #else // BBS undo @@ -3135,13 +3135,13 @@ void MainFrame::init_menubar_as_editor() //BBS perspective view wxWindowID camera_id_base = wxWindow::NewControlId(int(wxID_CAMERA_COUNT)); auto perspective_item = append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), - [this](wxCommandEvent&) { + [](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", true); wxGetApp().update_ui_from_settings(); }, nullptr); //BBS orthogonal view auto orthogonal_item = append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), - [this](wxCommandEvent&) { + [](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", false); wxGetApp().update_ui_from_settings(); }, nullptr); @@ -3157,7 +3157,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().app_config->get_bool("auto_perspective"); }, this); + []() { return wxGetApp().app_config->get_bool("auto_perspective"); }, this); viewMenu->AppendSeparator(); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &G-code Window") + sep + "C", _L("Show G-code window in Preview scene."), @@ -3166,7 +3166,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_tabpanel->GetSelectedPageName() == TAB_ID_PREVIEW; }, - [this]() { return wxGetApp().show_gcode_window(); }, this); + []() { return wxGetApp().show_gcode_window(); }, this); append_menu_check_item( viewMenu, wxID_ANY, _L("Show 3D Navigator"), _L("Show 3D navigator in Prepare and Preview scene."), @@ -3175,7 +3175,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().show_3d_navigator(); }, this); + []() { return wxGetApp().show_3d_navigator(); }, this); append_menu_check_item(viewMenu, wxID_ANY, _L("Show Gridlines"), _L("Show Gridlines on plate"), [this](wxCommandEvent&) { @@ -3183,7 +3183,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().show_plate_gridlines(); }, this); + []() { return wxGetApp().show_plate_gridlines(); }, this); append_menu_item( viewMenu, wxID_ANY, _L("Reset Window Layout"), _L("Reset to default window layout"), @@ -3212,7 +3212,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_tabpanel->GetSelectedPageName() == TAB_ID_PREPARE; }, - [this]() { return wxGetApp().show_outline(); }, this); + []() { return wxGetApp().show_outline(); }, this); /*viewMenu->AppendSeparator(); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Wireframe") + "\t" + ctrl + shift + _L("Enter"), _L("Show wireframes in 3D scene."), @@ -3361,7 +3361,7 @@ void MainFrame::init_menubar_as_editor() append_menu_item( m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\t" + ctrl + "P", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit wxGetApp().open_preferences(); }, @@ -3393,14 +3393,14 @@ void MainFrame::init_menubar_as_editor() into_u8(_L("Syncing presets from cloud\u2026"))); wxGetApp().restart_sync_user_preset(); }, "", nullptr, - [this]() { + []() { return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); }, this); top_menu->AppendSeparator(); append_menu_item( top_menu, wxID_ANY, _L("Plugins") + "\t", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { wxGetApp().open_plugins_dialog(); }, "", nullptr, []() { return true; }, this); @@ -3501,7 +3501,7 @@ void MainFrame::init_menubar_as_editor() [this]() {return m_plater->is_view3D_shown();; }, this); // help - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), [this](wxCommandEvent &) + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), [](wxCommandEvent &) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); diff --git a/src/slic3r/GUI/MultiMachine.cpp b/src/slic3r/GUI/MultiMachine.cpp index f5ffd1319f..c0e84f40e9 100644 --- a/src/slic3r/GUI/MultiMachine.cpp +++ b/src/slic3r/GUI/MultiMachine.cpp @@ -217,7 +217,7 @@ std::vector<DeviceItem*> selected_machines(const std::vector<DeviceItem*>& dev_i SortItem::SortItem() { - sort_map.emplace(std::make_pair(SortRule::SR_None, [this](const DeviceItem* d1, const DeviceItem* d2) { + sort_map.emplace(std::make_pair(SortRule::SR_None, [](const DeviceItem* d1, const DeviceItem* d2) { return d1->state_dev_name > d2->state_dev_name; })); sort_map.emplace(std::make_pair(SortRule::SR_DEV_NAME, [this](const DeviceItem* d1, const DeviceItem* d2) { diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp index d6531cc8d4..792c23fb13 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.cpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -19,7 +19,7 @@ MultiMachineItem::MultiMachineItem(wxWindow* parent, MachineObject* obj) Bind(wxEVT_LEAVE_WINDOW, &MultiMachineItem::OnLeaveWindow, this); Bind(wxEVT_LEFT_DOWN, &MultiMachineItem::OnLeftDown, this); Bind(wxEVT_MOTION, &MultiMachineItem::OnMove, this); - Bind(EVT_MULTI_DEVICE_VIEW, [this, obj](auto& e) { + Bind(EVT_MULTI_DEVICE_VIEW, [obj](auto& e) { wxGetApp().mainframe->jump_to_monitor(obj->get_dev_id()); if (wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()) { wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()->jump_to_play(); diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp index 88d03007b9..dd67e099a0 100644 --- a/src/slic3r/GUI/MultiMachinePage.cpp +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -80,7 +80,7 @@ void MultiMachinePage::init_tabpanel() sizer_side_tools->Add(m_side_tools, 1, wxEXPAND, 0); m_tabpanel = new Tabbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, sizer_side_tools, wxNB_LEFT | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); m_tabpanel->SetBackgroundColour(wxColour("#FEFFFF")); - m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {; }); + m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [](wxBookCtrlEvent& e) {; }); m_local_task_manager = new LocalTaskManagerPage(m_tabpanel); m_cloud_task_manager = new CloudTaskManagerPage(m_tabpanel); diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp index bca2de8761..48a7fbe43e 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.cpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -783,7 +783,7 @@ void LocalTaskManagerPage::refresh_user_device(bool clear) mtitem->m_send_time = task_state_info->get_sent_time(); mtitem->state_local_task = task_state_info->state(); - task_state_info->set_state_changed_fn([this, mtitem](TaskState state, int percent) { + task_state_info->set_state_changed_fn([mtitem](TaskState state, int percent) { mtitem->state_local_task = state; if (state == TaskState::TS_SEND_COMPLETED) { diff --git a/src/slic3r/GUI/NetworkPluginDialog.cpp b/src/slic3r/GUI/NetworkPluginDialog.cpp index bc898d0d24..42e1fc5fc5 100644 --- a/src/slic3r/GUI/NetworkPluginDialog.cpp +++ b/src/slic3r/GUI/NetworkPluginDialog.cpp @@ -156,14 +156,14 @@ void NetworkPluginDownloadDialog::create_update_available_ui(const std::string& auto daa_chk = new CheckBox(this); daa_chk->SetValue(cfg->is_network_update_prompt_disabled()); - daa_chk->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e){ + daa_chk->Bind(wxEVT_TOGGLEBUTTON, [](wxCommandEvent& e){ auto cfg = wxGetApp().app_config; cfg->set_network_update_prompt_disabled(e.IsChecked()); cfg->save(); }); auto daa_str = new Label(this, _L("Don't Ask Again")); - auto on_toggle = [this, daa_chk]() { + auto on_toggle = [daa_chk]() { daa_chk->SetValue(!daa_chk->GetValue()); wxCommandEvent evt(wxEVT_TOGGLEBUTTON, daa_chk->GetId()); evt.SetEventObject(daa_chk); diff --git a/src/slic3r/GUI/NetworkTestDialog.cpp b/src/slic3r/GUI/NetworkTestDialog.cpp index 78f395febc..53876d9f97 100644 --- a/src/slic3r/GUI/NetworkTestDialog.cpp +++ b/src/slic3r/GUI/NetworkTestDialog.cpp @@ -268,7 +268,7 @@ void NetworkTestDialog::start_test_url(TestJob job, wxString name, wxString url) int result = -1; http.timeout_max(10) - .on_complete([this, &result](std::string body, unsigned status) { + .on_complete([&result](std::string body, unsigned status) { try { if (status == 200) { result = 0; diff --git a/src/slic3r/GUI/Notebook.cpp b/src/slic3r/GUI/Notebook.cpp index 673508454a..67c1831e4d 100644 --- a/src/slic3r/GUI/Notebook.cpp +++ b/src/slic3r/GUI/Notebook.cpp @@ -56,7 +56,7 @@ ButtonsListCtrl::ButtonsListCtrl(wxWindow *parent, wxBoxSizer* side_tools) : // BBS: disable custom paint //this->Bind(wxEVT_PAINT, &ButtonsListCtrl::OnPaint, this); - Bind(wxEVT_SYS_COLOUR_CHANGED, [this](auto& e){ + Bind(wxEVT_SYS_COLOUR_CHANGED, [](auto& e){ }); } diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 2ee94dbeeb..4fce046162 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -158,7 +158,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/) ctrl_line.height = size.y; }; - auto add_buttons_width = [&h_pos, this] (int blinking_button_width) { + auto add_buttons_width = [&h_pos] (int blinking_button_width) { #ifndef DISABLE_BLINKING # ifndef DISABLE_UNDO_SYS h_pos += 3 * blinking_button_width; diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index 47f62aa168..d5a37fc9a7 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -254,7 +254,7 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c m_color_cluster_num_by_user_ebox->Bind(wxEVT_TEXT_ENTER, on_apply_color_cluster_text_modify); m_color_cluster_num_by_user_ebox->Bind(wxEVT_SPINCTRL, on_apply_color_cluster_text_modify); - m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [this](wxKeyEvent &e) { + m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [](wxKeyEvent &e) { int keycode = e.GetKeyCode(); wxString input_char = wxString::Format("%c", keycode); long value; diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index 7d054d8a1b..a0834666ad 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -128,7 +128,7 @@ wxBoxSizer *TipsDialog::create_item_checkbox(wxString title, wxWindow *parent, w m_show_again = wxGetApp().app_config->has(param); checkbox->SetValue(m_show_again); - checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent &e) { + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, param](wxCommandEvent &e) { m_show_again = m_show_again ? false : true; e.Skip(); }); @@ -290,11 +290,11 @@ ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, c m_compare_btn = new ScalableButton(m_top_panel, wxID_ANY, "compare", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_compare_btn->SetToolTip(_L("Compare presets")); - m_compare_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { wxGetApp().mainframe->diff_dialog.show(); })); + m_compare_btn->Bind(wxEVT_BUTTON, ([](wxCommandEvent e) { wxGetApp().mainframe->diff_dialog.show(); })); m_setting_btn = new ScalableButton(m_top_panel, wxID_ANY, "table", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_setting_btn->SetToolTip(_L("View all object's settings")); - m_setting_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { wxGetApp().plater()->PopupObjectTable(-1, -1, {0, 0}); }); + m_setting_btn->Bind(wxEVT_BUTTON, [](wxCommandEvent &) { wxGetApp().plater()->PopupObjectTable(-1, -1, {0, 0}); }); m_highlighter.set_timer_owner(this, 0); this->Bind(wxEVT_TIMER, [this](wxTimerEvent &) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 2b1a558fe9..067b1fcd04 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1340,7 +1340,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title if (index >= 0) label_flow->SetMinSize({FromDIP(80), -1}); auto combo_flow = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); combo_flow->GetDropDown().SetUseContentWidth(true); - combo_flow->Bind(wxEVT_COMBOBOX, [this, index, combo_flow](wxCommandEvent &evt) { + combo_flow->Bind(wxEVT_COMBOBOX, [index, combo_flow](wxCommandEvent &evt) { auto printer_tab = dynamic_cast<TabPrinter *>(wxGetApp().get_tab(Preset::TYPE_PRINTER)); NozzleVolumeType volume_type = NozzleVolumeType(intptr_t(combo_flow->GetClientData(evt.GetInt()))); printer_tab->set_extruder_volume_type(index, volume_type); @@ -1400,7 +1400,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title btn_up = new ScalableButton(this, wxID_ANY, "page_up", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_up->SetBackgroundColour(*wxWHITE); - btn_up->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) { + btn_up->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur > 0) --page_cur; update_ams(); @@ -1408,7 +1408,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title btn_up->Hide(); btn_down = new ScalableButton(this, wxID_ANY, "page_down", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_down->SetBackgroundColour(*wxWHITE); - btn_down->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) { + btn_down->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur + 1 < page_num) ++page_cur; update_ams(); @@ -2025,7 +2025,7 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material, bool is_man if (!this->plater) return false; - this->plater->update_objects_position_when_select_preset([&obj, machine_preset]() { + this->plater->update_objects_position_when_select_preset([machine_preset]() { Tab *printer_tab = GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER); printer_tab->select_preset(machine_preset->name); }); @@ -2170,7 +2170,7 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material, bool is_man void Sidebar::priv::update_sync_status(const MachineObject *obj) { StateColor not_synced_colour(std::pair<wxColour, int>(wxColour("#009688"), StateColor::Normal)); - auto clear_all_sync_status = [this, ¬_synced_colour]() { + auto clear_all_sync_status = [this]() { panel_printer_preset->ShowBadge(false); panel_printer_bed->ShowBadge(false); panel_nozzle_dia->ShowBadge(false); // ORCA add support for nozzle sync @@ -2474,7 +2474,7 @@ Sidebar::Sidebar(Plater *parent) p->m_printer_icon = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer"); p->m_text_printer_settings = new Label(p->m_panel_printer_title, _L("Printer"), LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END); - p->m_printer_icon->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + p->m_printer_icon->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) { //auto wizard_t = new ConfigWizard(wxGetApp().mainframe); //wizard_t->run(ConfigWizard::RR_USER, ConfigWizard::SP_CUSTOM); }); @@ -2495,7 +2495,7 @@ Sidebar::Sidebar(Plater *parent) }); p->m_printer_setting = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "settings"); - p->m_printer_setting->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + p->m_printer_setting->Bind(wxEVT_BUTTON, [](wxCommandEvent &e) { // p->editing_filament = -1; // wxGetApp().params_dialog()->Popup(); // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); @@ -2610,8 +2610,8 @@ Sidebar::Sidebar(Plater *parent) p->image_printer->SetBackgroundColour(bg_color); p->combo_printer->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_printer->Bind(wxEVT_SET_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(true ); e.Skip();}); - p->combo_printer->Bind(wxEVT_KILL_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(false); e.Skip();}); + p->combo_printer->Bind(wxEVT_SET_FOCUS, [printer_focus_bg](auto& e) {printer_focus_bg(true ); e.Skip();}); + p->combo_printer->Bind(wxEVT_KILL_FOCUS, [printer_focus_bg](auto& e) {printer_focus_bg(false); e.Skip();}); /* ORCA This part moved to titlebar p->btn_connect_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "monitor_signal_strong"); @@ -2688,8 +2688,8 @@ Sidebar::Sidebar(Plater *parent) p->label_nozzle_type->SetBackgroundColour(bg_color); p->combo_nozzle_dia->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); - p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); + p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); + p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); p->label_nozzle_type = new Label(p->panel_nozzle_dia, "Brass", LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END | wxALIGN_CENTRE_HORIZONTAL); p->label_nozzle_type->SetFont(Label::Body_10); @@ -2763,8 +2763,8 @@ Sidebar::Sidebar(Plater *parent) p->image_printer_bed->SetBackgroundColour(bg_color); p->combo_printer_bed->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_printer_bed->Bind(wxEVT_SET_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(true ); e.Skip();}); - p->combo_printer_bed->Bind(wxEVT_KILL_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(false); e.Skip();}); + p->combo_printer_bed->Bind(wxEVT_SET_FOCUS, [bed_focus_bg](auto& e) {bed_focus_bg(true ); e.Skip();}); + p->combo_printer_bed->Bind(wxEVT_KILL_FOCUS, [bed_focus_bg](auto& e) {bed_focus_bg(false); e.Skip();}); // highlight border on hover auto printer_bed_hovered = std::make_shared<std::unordered_set<wxWindow*>>(); @@ -2978,7 +2978,7 @@ Sidebar::Sidebar(Plater *parent) ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); add_btn->SetToolTip(_L("Add one filament")); - add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ + add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e){ add_filament(); update_filaments_counter(); }); @@ -2988,7 +2988,7 @@ Sidebar::Sidebar(Plater *parent) ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament"); del_btn->SetToolTip(_L("Remove last filament")); - del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { + del_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { delete_filament(); update_filaments_counter(); }); @@ -3002,7 +3002,7 @@ Sidebar::Sidebar(Plater *parent) ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 16); // ORCA match icon size with other icons as 16x16 ams_btn->SetToolTip(_L("Synchronize filament list from AMS")); - ams_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { + ams_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { sync_ams_list(); }); @@ -3682,7 +3682,7 @@ void Sidebar::update_presets(Preset::Type preset_type) extruder.combo_flow->SetSelection(select); }; - auto update_extruder_diameter = [&diameters, &diameter, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) { + auto update_extruder_diameter = [&diameters, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) { extruder.combo_diameter->Clear(); int select = -1; // ORCA get the actual nozzle diameter from printer config @@ -7497,7 +7497,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Keep tracking the current sidebar size, by storing it using `best_size`, which will be stored // in the config and re-applied when the app is opened again. - this->sidebar->Bind(wxEVT_IDLE, [&sidebar, this](wxIdleEvent& e) { + this->sidebar->Bind(wxEVT_IDLE, [&sidebar](wxIdleEvent& e) { if (sidebar.IsShown() && sidebar.IsDocked() && sidebar.rect.GetWidth() > 0) { sidebar.BestSize(sidebar.rect.GetWidth(), sidebar.best_size.GetHeight()); } @@ -7796,8 +7796,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) wxGetApp().removable_drive_manager()->init(this->q); #ifdef _WIN32 //Trigger enumeration of removable media on Win32 notification. - this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); - this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_ATTACHED, [](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_DETACHED, [](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); #endif /* _WIN32 */ } @@ -8354,7 +8354,6 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ const float LOAD_MODEL_RATIO = 0.9; for (size_t i = 0; i < input_files.size(); ++i) { - int file_percent = 0; #ifdef _WIN32 auto path = input_files[i]; @@ -8403,7 +8402,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ q->skip_thumbnail_invalid = true; model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, en_3mf_file_type, strategy, &plate_data, &project_presets, &file_version, - [this, &dlg, real_filename, &progress_percent, &file_percent, stage_percent, INPUT_FILES_RATIO, total_files, i, + [&dlg, real_filename, &progress_percent, stage_percent, INPUT_FILES_RATIO, total_files, i, &is_user_cancel](int import_stage, int current, int total, bool &cancel) { bool cont = true; float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)stage_percent[import_stage] + (float)current * (float)(stage_percent[import_stage + 1] - stage_percent[import_stage]) /(float) total) / (float)total_files; @@ -8986,7 +8985,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ Semver file_version; //ObjImportColorFn obj_color_fun=nullptr; - auto obj_color_fun = [this, &path](ObjDialogInOut &in_out) { + auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path.string(), ".obj")) { return; } const std::vector<std::string> extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); @@ -9003,7 +9002,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ if (angle <= 0) angle = 0.5; bool split_compound = wxGetApp().app_config->get_bool("is_split_compound"); model = Slic3r::Model:: read_from_step(path.string(), strategy, - [this, &dlg, real_filename, &progress_percent, &file_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel) + [&dlg, real_filename, &progress_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel) { bool cont = true; float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)step_percent[load_stage] + (float)current * (float)(step_percent[load_stage + 1] - step_percent[load_stage]) / (float)total) / (float)total_files; @@ -9027,7 +9026,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ } } }, - [this, &path, &is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split)-> int { + [&is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split)-> int { if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) { StepMeshDialog mesh_dlg(nullptr, file, linear, angle); if (mesh_dlg.ShowModal() == wxID_OK) { @@ -9048,7 +9047,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ }else { model = Slic3r::Model:: read_from_file( path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr, - [this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) + [&dlg, real_filename, &progress_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) { designer_model_id = mode_id; designer_country_code = code; @@ -11294,7 +11293,7 @@ void Plater::priv::reload_from_disk() // load one file at a time for (size_t i = 0; i < input_paths.size(); ++i) { const auto& path = input_paths[i].string(); - auto obj_color_fun = [this, &path](ObjDialogInOut &in_out) { + auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path, ".obj")) { return; } const std::vector<std::string> extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); @@ -15265,7 +15264,7 @@ void Plater::import_model_id(wxString download_info) p->project.reset(); /* prepare project and profile */ - boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &cancel, &retry_count, max_retries, &msg, &target_path, &download_ok, download_url, &filename] { + boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &retry_count, &msg, &target_path, &download_ok, download_url, &filename] { // Orca: NetworkAgent is not needed and only prevents this from running // NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); @@ -15372,7 +15371,7 @@ void Plater::import_model_id(wxString download_info) msg = wxString::Format(_L("Project downloaded %d%%"), percent); } }) - .on_error([&msg, &cont, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { + .on_error([&msg, &cont, &retry_count](std::string body, std::string error, unsigned http_status) { (void)body; BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", body, diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 8f3ac17f7c..355c4a26a8 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -519,7 +519,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS } } - auto check = [this](bool yes_or_no) { + auto check = [](bool yes_or_no) { // if (yes_or_no) // return true; int act_btns = ActionButtons::SAVE; @@ -1200,7 +1200,7 @@ wxBoxSizer* PreferencesDialog::create_item_button(wxString title, wxString title m_button_download->SetStyle(title2 == _L("Clear") ? ButtonStyle::Alert : ButtonStyle::Regular, ButtonType::Parameter); m_button_download->SetToolTip(tooltip2.IsEmpty() ? tooltip : tooltip2); // use label tooltip if button tooltip empty - m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); + m_button_download->Bind(wxEVT_BUTTON, [onclick](auto &e) { onclick(); }); m_sizer->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL); @@ -1490,7 +1490,7 @@ void PreferencesDialog::create() m_sizer_body = new wxBoxSizer(wxVERTICAL); m_pref_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); - m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable right select m_pref_tabs->SetFont(Label::Body_14); create_items(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index f78af21a99..837f4ebe0c 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -1653,7 +1653,7 @@ void TabPresetComboBox::OnSelect(wxCommandEvent &evt) default: break; } if (sp != ConfigWizard::SP_WELCOME) { - wxTheApp->CallAfter([this, sp]() { + wxTheApp->CallAfter([sp]() { run_wizard(sp); }); } @@ -1949,7 +1949,7 @@ GUI::CalibrateFilamentComboBox::CalibrateFilamentComboBox(wxWindow *parent) { clr_picker->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); clr_picker->SetToolTip(""); - clr_picker->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) {}); + clr_picker->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) {}); } GUI::CalibrateFilamentComboBox::~CalibrateFilamentComboBox() diff --git a/src/slic3r/GUI/PrintHostDialogs.cpp b/src/slic3r/GUI/PrintHostDialogs.cpp index 669468d852..2b4d212d0f 100644 --- a/src/slic3r/GUI/PrintHostDialogs.cpp +++ b/src/slic3r/GUI/PrintHostDialogs.cpp @@ -2062,7 +2062,7 @@ void CrealityPrintHostSendDialog::init() } for (auto* c : m_slot_combos) { - c->Bind(wxEVT_COMBOBOX, [this, ext_slot_idx](wxCommandEvent& e) { + c->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { int sel = e.GetSelection(); if (sel >= 0 && sel < (int)m_printer_slots.size() && m_printer_slots[sel].box_id == 0) { diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 0b280fe923..8ec6909c8c 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -164,7 +164,7 @@ void PrinterFileSystem::ListAllFiles() req["storage"] = m_file_storage; req["api_version"] = 2; req["notify"] = "DETAIL"; - SendRequest<FileList>(LIST_INFO, req, [this, type = m_file_type](json const& resp, FileList & list, auto) -> int { + SendRequest<FileList>(LIST_INFO, req, [type = m_file_type](json const& resp, FileList & list, auto) -> int { json files = resp["file_lists"]; for (auto& f : files) { std::string name = f["name"]; @@ -1230,7 +1230,7 @@ boost::uint32_t PrinterFileSystem::RequestMediaAbility(int api_version) req["api_version"] = api_version; return SendRequest<MediaAbilityList>( - REQUEST_MEDIA_ABILITY, req, [this](const json &resp, MediaAbilityList &list, auto) -> int { + REQUEST_MEDIA_ABILITY, req, [](const json &resp, MediaAbilityList &list, auto) -> int { json abliity_list = resp["storage"]; list = abliity_list.get<MediaAbilityList>(); return 0; diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index ef4dac9b13..92d6d6c8c7 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -97,7 +97,7 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const this->on_hide(); }); - Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) {e.Veto(); }); + Bind(wxEVT_CLOSE_WINDOW, [](wxCloseEvent& e) {e.Veto(); }); if (btn_style != CONFIRM_AND_CANCEL) m_button_cancel->Hide(); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 7b2d091176..029310faf9 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1250,7 +1250,7 @@ void ConfirmBeforeSendDialog::update_text(std::vector<ConfirmBeforeSendInfo> tex else { label_item = new Label(m_vebview_release_note, text.text + " " + _L("Please refer to Wiki before use->"), LB_AUTO_WRAP); - label_item->Bind(wxEVT_LEFT_DOWN, [this, text](wxMouseEvent& e) { wxLaunchDefaultBrowser(text.wiki_url);}); + label_item->Bind(wxEVT_LEFT_DOWN, [text](wxMouseEvent& e) { wxLaunchDefaultBrowser(text.wiki_url);}); label_item->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_HAND); }); label_item->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_ARROW); }); } diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 0b33e48ec4..b3f34a8cb9 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -153,7 +153,7 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox detach_label->SetForegroundColour(wxColour("#363636")); - auto on_toggle = [this, detach_checkbox]() { + auto on_toggle = [detach_checkbox]() { detach_checkbox->SetValue(!detach_checkbox->GetValue()); wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); ev.SetEventObject(detach_checkbox); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index ac56e35ac3..199de9236e 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3428,7 +3428,7 @@ void SelectMachineDialog::show_timelapse_storage_dialog(MachineObject* obj) if (show_cleanup_btn) { auto* btn_cleanup = new Button(&dlg, _L("Clean Up")); - btn_cleanup->Bind(wxEVT_BUTTON, [&dlg, ID_CLEANUP](wxCommandEvent&) { dlg.EndModal(ID_CLEANUP); }); + btn_cleanup->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(ID_CLEANUP); }); btn_sizer->Add(btn_cleanup, 0, wxEXPAND); } @@ -5497,7 +5497,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() first_enabled_id = extruder; } - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent &e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { if (!item->m_enable) {return;} if (!m_check_flag || m_print_status == PrintDialogStatus::PrintStatusUnsupportedPrinter) { return; } /*STUDIO-11301*/ @@ -6128,8 +6128,8 @@ void SelectMachineDialog::set_default_from_sdcard() first_enabled_id = fo.id; } - item->Bind(wxEVT_LEFT_UP, [this, item, materials](wxMouseEvent& e) {}); - item->Bind(wxEVT_LEFT_DOWN, [this, obj_, item, materials, diameters_count, fo](wxMouseEvent& e) { + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_DOWN, [this, obj_, item, materials, fo](wxMouseEvent& e) { if (!item->m_enable) {return;} if (!m_check_flag || m_print_status == PrintDialogStatus::PrintStatusUnsupportedPrinter) { return; } /*STUDIO-11301*/ diff --git a/src/slic3r/GUI/SelectMachinePop.cpp b/src/slic3r/GUI/SelectMachinePop.cpp index df0a566917..9b34e74f23 100644 --- a/src/slic3r/GUI/SelectMachinePop.cpp +++ b/src/slic3r/GUI/SelectMachinePop.cpp @@ -567,7 +567,7 @@ void SelectMachinePopup::update_other_devices() } } - op->Bind(EVT_CONNECT_LAN_PRINT, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_CONNECT_LAN_PRINT, [mobj](wxCommandEvent &e) { if (mobj) { if (mobj->is_lan_mode_printer()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); @@ -579,7 +579,7 @@ void SelectMachinePopup::update_other_devices() } }); - op->Bind(EVT_BIND_MACHINE, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_BIND_MACHINE, [mobj](wxCommandEvent &e) { BindMachineDialog dlg; dlg.update_machine_info(mobj); int dlg_result = wxID_CANCEL; @@ -700,7 +700,7 @@ void SelectMachinePopup::update_user_devices() op->set_printer_state(PrinterState::LOCK); } } - op->Bind(EVT_UNBIND_MACHINE, [this, dev, mobj](wxCommandEvent& e) { + op->Bind(EVT_UNBIND_MACHINE, [dev, mobj](wxCommandEvent& e) { dev->set_selected_machine(""); if (mobj) { AppConfig* config = wxGetApp().app_config; @@ -720,7 +720,7 @@ void SelectMachinePopup::update_user_devices() } else { op->show_printer_bind(true, PrinterBindState::ALLOW_UNBIND); - op->Bind(EVT_UNBIND_MACHINE, [this, mobj, dev](wxCommandEvent& e) { + op->Bind(EVT_UNBIND_MACHINE, [mobj, dev](wxCommandEvent& e) { // show_unbind_dialog UnBindMachineDialog dlg; dlg.update_machine_info(mobj); @@ -747,7 +747,7 @@ void SelectMachinePopup::update_user_devices() } } - op->Bind(EVT_CONNECT_LAN_PRINT, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_CONNECT_LAN_PRINT, [mobj](wxCommandEvent &e) { if (mobj) { if (mobj->is_lan_mode_printer()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); @@ -759,7 +759,7 @@ void SelectMachinePopup::update_user_devices() } }); - op->Bind(EVT_EDIT_PRINT_NAME, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_EDIT_PRINT_NAME, [mobj](wxCommandEvent &e) { EditDevNameDialog dlg; dlg.set_machine_obj(mobj); dlg.ShowModal(); diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 7b7c42922f..3a52caec3f 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -1468,7 +1468,7 @@ void SendMultiMachinePage::sync_ams_list() item->set_ams_info(wxColour("#CECECE"), "Ext", 0, std::vector<wxColour>()); m_ams_list_sizer->Add(item, 0, wxALL, FromDIP(4)); - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent& e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { diff --git a/src/slic3r/GUI/SkipPartCanvas.cpp b/src/slic3r/GUI/SkipPartCanvas.cpp index 5e01b8140f..7b7db213b1 100644 --- a/src/slic3r/GUI/SkipPartCanvas.cpp +++ b/src/slic3r/GUI/SkipPartCanvas.cpp @@ -287,7 +287,7 @@ void SkipPartCanvas::Render() glDisable(GL_CULL_FACE); glEnable(GL_STENCIL_TEST); - auto draw_shape = [this, border_w](const int stencil, const PartState part_type, const ColorRGB& rgb) { + auto draw_shape = [this](const int stencil, const PartState part_type, const ColorRGB& rgb) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_ALWAYS, stencil, 0xFF); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); @@ -335,7 +335,7 @@ void SkipPartCanvas::Render() // stencil3 => skipped draw_shape(skipped_stencil, psSkipped, ColorRGB{95 / 255.f, 95 / 255.f, 95 / 255.f}); - auto draw_mask = [this, view_rect, border_w, w, h](const int stencil, const PartState part_type, + auto draw_mask = [this, view_rect](const int stencil, const PartState part_type, const ColorRGB& background, const ColorRGB& line, const ColorRGB& bound) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_EQUAL, stencil, 0xFF); diff --git a/src/slic3r/GUI/SliceInfoPanel.cpp b/src/slic3r/GUI/SliceInfoPanel.cpp index 37a3ba698d..a7e436c0ff 100644 --- a/src/slic3r/GUI/SliceInfoPanel.cpp +++ b/src/slic3r/GUI/SliceInfoPanel.cpp @@ -115,7 +115,7 @@ SliceInfoPopup::SliceInfoPopup(wxWindow *parent, wxBitmap bmp, BBLSliceInfo *inf f_sizer->Add(f_type, 0, wxEXPAND | wxALL, FromDIP(5)); f_sizer->Add(f_used_g, 0, wxEXPAND | wxALL, FromDIP(5)); grid_sizer->Add(f_sizer, 0, wxEXPAND, 0); - f_type->Bind(wxEVT_LEFT_DOWN, [this](auto &e) {}); + f_type->Bind(wxEVT_LEFT_DOWN, [](auto &e) {}); } } topSizer->Add(grid_sizer, 0, wxALL, FromDIP(5)); diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp index b1a8e2319a..c6131b7bfa 100644 --- a/src/slic3r/GUI/StepMeshDialog.cpp +++ b/src/slic3r/GUI/StepMeshDialog.cpp @@ -167,7 +167,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line e.Skip(); })); // textctrl bind slider - linear_input->Bind(wxEVT_TEXT, ([this, linear_slider, linear_input](wxCommandEvent& e) { + linear_input->Bind(wxEVT_TEXT, ([linear_slider, linear_input](wxCommandEvent& e) { double slider_value_long; int slider_value; wxString value = linear_input->GetTextCtrl()->GetValue(); @@ -222,7 +222,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line e.Skip(); })); // textctrl bind slider - angle_input->Bind(wxEVT_TEXT, ([this, angle_slider, angle_input](wxCommandEvent& e) { + angle_input->Bind(wxEVT_TEXT, ([angle_slider, angle_input](wxCommandEvent& e) { double slider_value_long; int slider_value; wxString value = angle_input->GetTextCtrl()->GetValue(); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 9515ecc116..7ae48008c8 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -1113,7 +1113,7 @@ void SyncAmsInfoDialog::init_bind() e.Skip(); }); - Bind(EVT_CONNECT_LAN_MODE_PRINT, [this](wxCommandEvent &e) { + Bind(EVT_CONNECT_LAN_MODE_PRINT, [](wxCommandEvent &e) { if (e.GetInt() == 0) { DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -2644,7 +2644,7 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() item_index++; contronal_index++; - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent &e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder, item_index_str](wxMouseEvent &e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 0eb5c9281d..d65d7f68bd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -459,7 +459,7 @@ void Tab::create_preset_tab() // tree m_tabctrl = new TabCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(20 * m_em_unit, -1), wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); - m_tabctrl->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_tabctrl->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable right select m_tabctrl->SetFont(Label::Body_14); //m_left_sizer->Add(m_tabctrl, 1, wxEXPAND); const int img_sz = int(32 * scale_factor + 0.5f); @@ -6075,7 +6075,7 @@ void TabPrinter::toggle_options() auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type"); auto extruders = m_config->option<ConfigOptionEnumsGeneric>("extruder_type"); auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes](int extruder_id, int stride = 1) { + [this, &extruders](int extruder_id, int stride = 1) { return m_config->get_index_for_extruder(extruder_id + 1, "printer_extruder_id", ExtruderType(extruders->values[extruder_id]), get_actual_nozzle_volume_type(extruder_id), "printer_extruder_variant", stride); }; @@ -7713,18 +7713,18 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep this->update_changed_ui(); }; - deps.checkbox_title->Bind(wxEVT_LEFT_DOWN,([this, &deps, on_toggle](wxMouseEvent& e) { + deps.checkbox_title->Bind(wxEVT_LEFT_DOWN,([&deps, on_toggle](wxMouseEvent& e) { if (e.GetEventType() == wxEVT_LEFT_DCLICK) return; on_toggle(!deps.checkbox->GetValue()); e.Skip(); })); - deps.checkbox_title->Bind(wxEVT_LEFT_DCLICK,([this, &deps, on_toggle](wxMouseEvent& e) { + deps.checkbox_title->Bind(wxEVT_LEFT_DCLICK,([&deps, on_toggle](wxMouseEvent& e) { on_toggle(!deps.checkbox->GetValue()); e.Skip(); })); - deps.checkbox->Bind(wxEVT_TOGGLEBUTTON, ([this, on_toggle](wxCommandEvent& e) { + deps.checkbox->Bind(wxEVT_TOGGLEBUTTON, ([on_toggle](wxCommandEvent& e) { on_toggle(e.IsChecked()); e.Skip(); }), deps.checkbox->GetId()); @@ -8306,7 +8306,7 @@ void Tab::switch_excluder(int extruder_id, bool reload) return; } auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, int stride = 1) { + [this, &extruders, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, int stride = 1) { return m_config->get_index_for_extruder(extruder_id + 1, variant_keys.first, ExtruderType(extruders->values[extruder_id]), get_actual_nozzle_volume_type(extruder_id), variant_keys.second, stride); }; @@ -8363,7 +8363,7 @@ void Tab::sync_excluder() auto nozzle_volumes = m_preset_bundle->project_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type"); auto extruders = printer_preset.config.option<ConfigOptionEnumsGeneric>("extruder_type"); auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, NozzleVolumeType nozzle_type) { + [this, &extruders, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, NozzleVolumeType nozzle_type) { return m_config->get_index_for_extruder(extruder_id + 1, variant_keys.first, ExtruderType(extruders->values[extruder_id]), nozzle_type, variant_keys.second); }; diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index b0a8f71930..c1dee7ca5c 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -71,7 +71,7 @@ wxFlexGridSizer* TroubleshootDialog::create_item_loaded_profiles() auto gen_stats = GetProfilesOverview(); gen_stats = ""; // clear mem. not needed after generating m_..._act, m_..._usr variables - auto add_sizer = [this, g_sizer, create_label](PresetCollection* col, wxString label, int in_use, int user) { + auto add_sizer = [g_sizer, create_label](PresetCollection* col, wxString label, int in_use, int user) { int sys = 0; for (auto it = col->begin(); it != col->end(); it++) { if (it->is_system) @@ -178,7 +178,7 @@ TroubleshootDialog::TroubleshootDialog() return wxTheClipboard->SetData(new wxTextDataObject(GetSysInfoAll())); }); - sys_less_btn->Bind(wxEVT_BUTTON, [this, sys_panel, sys_less_btn, sys_info_lines, sys_copy_btn](wxCommandEvent &e) { + sys_less_btn->Bind(wxEVT_BUTTON, [this, sys_panel, sys_less_btn, sys_info_lines](wxCommandEvent &e) { m_sys_panel_mode = !m_sys_panel_mode; sys_panel->SetText(sys_info_lines(m_sys_panel_mode)); sys_less_btn->SetLabel(m_sys_panel_mode ? _L("Hide") : _L("Show")); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 6b58fffead..ae259f23d1 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -588,7 +588,7 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) else if (strCmd == "user_guide_create_printer") { this->EndModal(wxID_CANCEL); this->Close(); - GUI::wxGetApp().CallAfter([this] {GUI::wxGetApp().sidebar().create_printer_preset();}); + GUI::wxGetApp().CallAfter([] {GUI::wxGetApp().sidebar().create_printer_preset();}); } else if (strCmd == "user_guide_cancel") { this->EndModal(wxID_CANCEL); @@ -871,7 +871,7 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle std::string preferred_model; std::string preferred_variant; PrinterTechnology preferred_pt = ptFFF; - auto get_preferred_printer_model = [preset_bundle, enabled_vendors, old_enabled_vendors, preferred_pt](const std::string& bundle_name, std::string& variant) { + auto get_preferred_printer_model = [preset_bundle, enabled_vendors, old_enabled_vendors](const std::string& bundle_name, std::string& variant) { const auto config = enabled_vendors.find(bundle_name); if (config == enabled_vendors.end()) return std::string(); diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 4222ce745b..829e7ef106 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -489,7 +489,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) std::string jump_url = j["data"]["url"].get<std::string>(); int loopback_port = ensure_loopback_port(); jump_url = rewrite_loopback_url(jump_url, loopback_port); - CallAfter([this, jump_url] { + CallAfter([jump_url] { wxString url = wxString::FromUTF8(jump_url); wxLaunchDefaultBrowser(url); }); @@ -498,7 +498,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) else if (strCmd == "new_webpage") { if (j["data"].contains("url")) { std::string jump_url = j["data"]["url"].get<std::string>(); - CallAfter([this, jump_url] { + CallAfter([jump_url] { wxString url = wxString::FromUTF8(jump_url); wxLaunchDefaultBrowser(url); }); diff --git a/src/slic3r/Utils/3DPrinterOS.cpp b/src/slic3r/Utils/3DPrinterOS.cpp index 79c8a62700..b177e37e38 100755 --- a/src/slic3r/Utils/3DPrinterOS.cpp +++ b/src/slic3r/Utils/3DPrinterOS.cpp @@ -627,7 +627,7 @@ void C3DPrinterOS::send_form( responseTree.put("result", false); responseTree.put("message", error); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { std::stringstream ss(body); try { pt::read_json(ss, responseTree); diff --git a/src/slic3r/Utils/Moonraker.cpp b/src/slic3r/Utils/Moonraker.cpp index f1ca432390..73fdb8486a 100644 --- a/src/slic3r/Utils/Moonraker.cpp +++ b/src/slic3r/Utils/Moonraker.cpp @@ -80,7 +80,7 @@ bool Moonraker::test(wxString &msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: /server/info body: %2%") % name % body; try { std::stringstream ss(body); @@ -141,7 +141,7 @@ bool Moonraker::get_storage(wxArrayString &storage_path, wxArrayString &storage_ % name % error % status % body; } }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: /server/files/roots body: %2%") % name % body; try { std::stringstream ss(body); diff --git a/src/slic3r/Utils/Obico.cpp b/src/slic3r/Utils/Obico.cpp index 5541d1c683..92d748b496 100644 --- a/src/slic3r/Utils/Obico.cpp +++ b/src/slic3r/Utils/Obico.cpp @@ -86,7 +86,7 @@ bool Obico::test(wxString& msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got version: %2%") % name % body; }) #ifdef WIN32 diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 56a2b66b49..663a4ce8c3 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -513,7 +513,7 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::str cancel_http = true; } }) - .on_complete([this, &resource_list, resources](std::string body, unsigned) { + .on_complete([&resource_list, resources](std::string body, unsigned) { try { BOOST_LOG_TRIVIAL(info) << "[Orca Updater]: request_resources, body=" << body; diff --git a/src/slic3r/Utils/Repetier.cpp b/src/slic3r/Utils/Repetier.cpp index 0d269e1cd5..a524f29b71 100644 --- a/src/slic3r/Utils/Repetier.cpp +++ b/src/slic3r/Utils/Repetier.cpp @@ -73,7 +73,7 @@ bool Repetier::test(wxString &msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got version: %2%") % name % body; try { diff --git a/src/slic3r/Utils/SimplyPrint.cpp b/src/slic3r/Utils/SimplyPrint.cpp index bbfd5209c9..a3edfd98ee 100644 --- a/src/slic3r/Utils/SimplyPrint.cpp +++ b/src/slic3r/Utils/SimplyPrint.cpp @@ -192,7 +192,7 @@ bool SimplyPrint::do_api_call(std::function<Http(bool)> bool res = true; - const auto create_request = [this, &build_request, &res, &on_complete](const std::string& access_token, bool is_retry) { + const auto create_request = [&build_request, &res, &on_complete](const std::string& access_token, bool is_retry) { auto http = build_request(is_retry); set_auth(http, access_token); http.header("User-Agent", "SimplyPrint Orca Plugin") @@ -300,7 +300,7 @@ bool SimplyPrint::do_temp_upload(const boost::filesystem::path& file_path, return http; }, - [&error_fn, &filename, this](std::string body, unsigned status) { + [&error_fn, &filename](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File uploaded: HTTP %1%: %2%") % status % body; // Get file UUID @@ -423,7 +423,7 @@ bool SimplyPrint::do_chunk_upload(const boost::filesystem::path& file_path, cons return http; }, - [&error_fn, i, chunk_amount, this, &chunk_id, &delete_token](std::string body, unsigned status) { + [&error_fn, i, chunk_amount, &chunk_id, &delete_token](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File chunk [%1%/%2%] uploaded: HTTP %3%: %4%") % (i + 1) % chunk_amount % status % body; if (i == 0) { // First chunk, parse chunk id From 640fd9f454d26ca6ef37f16b72ed60f39d8559ed Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes <afmenez@terra.com.br> Date: Wed, 2 Sep 2026 09:36:54 -0300 Subject: [PATCH 16/23] Fix misc. errors on GUI strings (#15468) * Fix misc. errors on GUI strings * Adding context to single-letter unit strings * Fix duplicate strings on po files --- localization/i18n/OrcaSlicer.pot | 33 +++++----- localization/i18n/ca/OrcaSlicer_ca.po | 38 ++++++------ localization/i18n/cs/OrcaSlicer_cs.po | 36 +++++------ localization/i18n/de/OrcaSlicer_de.po | 36 +++++------ localization/i18n/en/OrcaSlicer_en.po | 32 +++++----- localization/i18n/es/OrcaSlicer_es.po | 42 ++++++------- localization/i18n/eu/OrcaSlicer_eu.po | 69 +++++++-------------- localization/i18n/fr/OrcaSlicer_fr.po | 44 +++++++------ localization/i18n/hu/OrcaSlicer_hu.po | 34 +++++----- localization/i18n/it/OrcaSlicer_it.po | 38 ++++++------ localization/i18n/ja/OrcaSlicer_ja.po | 46 +++++++------- localization/i18n/ko/OrcaSlicer_ko.po | 41 ++++++------ localization/i18n/lt/OrcaSlicer_lt.po | 58 +++++------------ localization/i18n/nl/OrcaSlicer_nl.po | 48 +++++++------- localization/i18n/pl/OrcaSlicer_pl.po | 45 ++++++++------ localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 48 +++++++------- localization/i18n/ru/OrcaSlicer_ru.po | 34 +++++----- localization/i18n/sv/OrcaSlicer_sv.po | 44 +++++++------ localization/i18n/th/OrcaSlicer_th.po | 36 +++++------ localization/i18n/tr/OrcaSlicer_tr.po | 42 ++++++------- localization/i18n/uk/OrcaSlicer_uk.po | 37 ++++++----- localization/i18n/vi/OrcaSlicer_vi.po | 38 ++++++------ localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 35 ++++++----- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 33 +++++----- src/libslic3r/PrintConfig.cpp | 39 ++++++------ src/libslic3r/calib.cpp | 4 +- src/slic3r/GUI/CreatePresetsDialog.cpp | 6 +- src/slic3r/GUI/FilamentMapDialog.cpp | 2 +- src/slic3r/GUI/MainFrame.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 6 +- src/slic3r/GUI/Tab.cpp | 4 +- src/slic3r/GUI/TroubleshootDialog.cpp | 4 +- src/slic3r/Utils/3DPrinterOS.cpp | 2 +- 33 files changed, 513 insertions(+), 543 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index b183df098b..4f4e5079da 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -3,7 +3,6 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" @@ -5951,10 +5950,10 @@ msgstr "" msgid "Load a model" msgstr "" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "" msgid "Import Configs" @@ -7663,7 +7662,7 @@ msgstr "" msgid "Customized Preset" msgstr "" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7685,7 +7684,7 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" msgid "Object too small" @@ -10329,11 +10328,11 @@ msgstr "" msgid "No modifications need to be copied." msgstr "" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "" #, possible-c-format, possible-boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "" #, possible-c-format, possible-boost-format @@ -11874,7 +11873,7 @@ msgstr "" msgid "Other layers" msgstr "" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -14675,7 +14674,7 @@ msgstr "" msgid "Reduce infill retraction" msgstr "" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -14831,7 +14830,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" @@ -14874,7 +14873,7 @@ msgstr "" msgid "Z-hop height" msgstr "" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "" msgid "Z-hop lower boundary" @@ -18191,17 +18190,17 @@ msgstr "" msgid "Only display the filament names with changes to filament presets." msgstr "" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" msgid "Please select at least one printer or filament." @@ -18416,7 +18415,7 @@ msgstr "" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "" -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "" msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -18458,7 +18457,7 @@ msgstr "" msgid "Stored logs" msgstr "" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "" msgid "Profiles" @@ -18523,7 +18522,7 @@ msgstr "" msgid "Authorizing..." msgstr "" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "" msgid "Could not parse server response." diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index d78487b947..873cf0d7fb 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -6419,10 +6419,10 @@ msgstr "Importar 3MF STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carregar un model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importar fitxer ZIP" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Carregar models continguts dins d'un arxiu zip" msgid "Import Configs" @@ -8232,8 +8232,8 @@ msgid "Customized Preset" msgstr "Perfil personalitzat" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF-8!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8255,10 +8255,10 @@ msgstr "El volum de l'objecte és zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L'objecte del fitxer %s és massa petit, i potser en metres o polzades.\n" -" Vols escalar a mil·límetres?" +"Vols escalar a mil·límetres?" msgid "Object too small" msgstr "Objecte massa petit" @@ -11189,12 +11189,12 @@ msgid "No modifications need to be copied." msgstr "No cal copiar cap modificació." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar els paràmetres" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar els paràmetres de %s" # AI Translated @@ -12868,8 +12868,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Altres capes" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura del llit per a les capes excepte la primera. Un valor de 0 significa que el filament no admet la impressió sobre el Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Temperatura del llit de les capes excepte la inicial. Un valor de 0 significa que el filament no admet la impressió sobre el Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Temperatura del llit de les capes excepte la inicial. El valor 0 significa que el filament no admet imprimir a una Base Freda." @@ -16197,7 +16197,7 @@ msgid "Reduce infill retraction" msgstr "Reduir la retracció de farciment" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "No retrau quan el desplaçament està totalment a la zona de farciment. Això vol dir que l'oozing( goteig ) queda amagat. Això pot reduir els temps de retracció per a models complexos i estalviar temps d'impressió, però fer que el laminat i la generació de Codi-G siguin més lents. Tingueu en compte que el salt en Z tampoc es realitza a les zones on s'omet la retracció." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16373,7 +16373,7 @@ msgstr "Quantitat de retracció després de netejar" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Longitud de la retracció ràpida després de netejar, relativa a la longitud de retracció.\n" @@ -16420,7 +16420,7 @@ msgstr "Quan s'activa la retracció abans d'un canvi d'eina, el filament es reti msgid "Z-hop height" msgstr "Alçada Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Cade vegada que es fa una retracció, s'aixeca una mica el broquet per crear espai lliure entre el broquet i la impressió. Evita que el broquet colpegi la impressió en els desplaçaments. L'ús de la línia espiral per aixecar z pot evitar l'aparició de fils" msgid "Z-hop lower boundary" @@ -20071,19 +20071,19 @@ msgstr "Mostrar només els noms de les impressores amb canvis als perfils d'impr msgid "Only display the filament names with changes to filament presets." msgstr "Mostrar només els noms dels filaments amb canvis en els perfils de filament." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Només es mostraran els noms de les impressores amb perfils d'impressora d'usuari i cada perfil que trieu s'exportarà com a fitxer zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Només es mostraran els noms dels filaments amb perfils de filament d'usuari, \n" "i tots els perfils de filament d'usuari de cada nom de filament que seleccioneu s'exportaran com a zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Només es mostraran els noms de les impressores amb perfils de processament modificats, \n" "I tots els valors perfils del procés d'usuari de cada nom d'impressora que seleccioneu s'exportaran com a ZIP." @@ -20328,7 +20328,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Necessitem informació per diagnosticar l'origen del problema. Consulteu la pàgina wiki per a una guia detallada." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "El botó Empaquetar recull el fitxer del projecte i els registres de la sessió actual en un fitxer zip." # AI Translated @@ -20384,7 +20384,7 @@ msgid "Stored logs" msgstr "Registres emmagatzemats" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Empaqueta tots els registres emmagatzemats en un fitxer zip." # AI Translated @@ -20472,7 +20472,7 @@ msgid "Authorizing..." msgstr "Autoritzant..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Error. No es pot obtenir el testimoni d'api per a l'autorització" # AI Translated diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 7eeb1072c0..f51c5dc3e2 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -6380,10 +6380,10 @@ msgstr "Importovat 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Načíst model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importovat ZIP archiv" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Načíst modely obsažené v zip archivu" msgid "Import Configs" @@ -8193,7 +8193,7 @@ msgstr "Potvrďte prosím, že je G-code v těchto předvolbách bezpečný, aby msgid "Customized Preset" msgstr "Přizpůsobená předvolba" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Názvy komponent v souboru STEP nejsou ve formátu UTF-8!" # AI Translated @@ -8216,7 +8216,7 @@ msgstr "Objem objektu je nula." #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objekt ze souboru %s je příliš malý a může být v metrech nebo palcích.\n" "Chcete převést měřítko na milimetry?" @@ -11133,12 +11133,12 @@ msgid "No modifications need to be copied." msgstr "Není třeba kopírovat žádné úpravy." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopírovat parametry" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Upravit parametry %s" # AI Translated @@ -12853,7 +12853,7 @@ msgstr "mm nebo %" msgid "Other layers" msgstr "Ostatní vrstvy" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Teplota desky pro vrstvy kromě počáteční. Hodnota 0 znamená, že filament nepodporuje tisk na chladicí podložce SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -16143,8 +16143,8 @@ msgstr "Počáteční a koncové body, které vedou z oblasti řezače do odpadk msgid "Reduce infill retraction" msgstr "Snížit retrakci při výplni" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Neprovádět retrakci, pokud se přejezd nachází zcela uvnitř oblasti výplně. Případné vytékání materiálu tak nebude viditelné. To může snížit počet retrakčních pohybů u složitých modelů a zkrátit dobu tisku, ale zároveň zpomalit slicování a generování G-code. V oblastech, kde je retrakce přeskočena, se zároveň neprovádí ani z-hop." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Neprovádět retrakci, pokud se přejezd nachází zcela uvnitř oblasti výplně. Případné vytékání materiálu tak nebude viditelné. To může snížit počet retrakčních pohybů u složitých modelů a zkrátit dobu tisku, ale zároveň zpomalit slicování a generování G-code. V oblastech, kde je retrakce přeskočena, se zároveň neprovádí ani Z-hop." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Tato možnost sníží teplotu neaktivních extruderů, aby se zabránilo vytékání." @@ -16317,7 +16317,7 @@ msgstr "Délka retrakce po očištění" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Délka rychlé retrakce po očištění, vztažená k délce retrakce.\n" @@ -16364,7 +16364,7 @@ msgstr "Když je retrakce spuštěna před změnou nástroje, filament se zatáh msgid "Z-hop height" msgstr "Výška Z-hopu" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Po každém stažení filamentu se tryska mírně zvedne, aby vznikla mezera mezi tryskou a tiskem. Zabrání kolizi trysky s tiskem při přesunu. Použití spirálových linií pro zvedání v ose Z může zabránit vytahování vláken." msgid "Z-hop lower boundary" @@ -19992,19 +19992,19 @@ msgstr "Zobrazit pouze názvy tiskáren se změnami v předvolbách tiskárny, f msgid "Only display the filament names with changes to filament presets." msgstr "Zobrazit pouze názvy filamentů se změnami ve filamentových profilech." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Zobrazí se pouze názvy tiskáren s uživatelskými předvolbami tiskárny, každá vybraná předvolba bude exportována jako zip archiv." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Zobrazí se pouze názvy filamentů s uživatelskými filamentovými profily. \n" "Všechny uživatelské filamentové profily ve vybraných filamentech budou exportovány jako zip archiv." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Zobrazí se pouze názvy tiskáren se změněnými procesními předvolbami. \n" "Všechny uživatelské procesní předvolby ve vybraných tiskárnách budou exportovány jako zip archiv." @@ -20250,7 +20250,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Pro diagnostiku zdroje problému potřebujeme informace. Podrobný návod najdete na stránce wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Tlačítko Zabalit shromáždí soubor projektu a protokoly aktuální relace do souboru zip." # AI Translated @@ -20306,7 +20306,7 @@ msgid "Stored logs" msgstr "Uložené protokoly" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Zabalí všechny uložené protokoly do souboru zip." # AI Translated @@ -20394,8 +20394,8 @@ msgid "Authorizing..." msgstr "Probíhá autorizace..." # AI Translated -msgid "Error. Can't get api token for authorization" -msgstr "Chyba. Nelze získat api token pro autorizaci" +msgid "Error. Can't get API token for authorization" +msgstr "Chyba. Nelze získat API token pro autorizaci" # AI Translated msgid "Could not parse server response." diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 92143b907b..8b27148a03 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -6272,10 +6272,10 @@ msgstr "Importiere 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Lade ein Modell" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip-Archiv importieren" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Modelle aus einem Zip-Archiv laden" msgid "Import Configs" @@ -8063,8 +8063,8 @@ msgstr "Bitte bestätigen Sie, dass die G-Codes innerhalb dieser Profile sicher msgid "Customized Preset" msgstr "Benutzerdefinierte Profile" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF-8-Format!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Aufgrund der nicht unterstützten Textkodierung können unbrauchbare Zeichen erscheinen!" @@ -8085,10 +8085,10 @@ msgstr "Das Volumen des Objekts ist Null" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Das Objekt aus der Datei %s ist zu klein und vielleicht in Metern oder Zoll angeben.\n" -" Möchten Sie auf Millimeter skalieren?" +"Möchten Sie auf Millimeter skalieren?" msgid "Object too small" msgstr "Objekt zu klein" @@ -10940,11 +10940,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Es müssen keine Änderungen kopiert werden." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parameter kopieren" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Parameter von %s ändern" #, c-format, boost-format @@ -12570,7 +12570,7 @@ msgstr "mm o. %" msgid "Other layers" msgstr "Andere Schichten" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert von 0 bedeutet, dass das Filament auf der kalten Druckplatte SuperTack nicht unterstützt wird." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15802,7 +15802,7 @@ msgstr "Die Start- und Endpunkte, vom Schnittbereich bis zum Auswurfschacht." msgid "Reduce infill retraction" msgstr "Rückzug bei der Füllung verringern" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Kein Rückzug, wenn sich die Bewegung des Druckkopfes vollständig in einem Füllbereich befindet. Das bedeutet, dass das herauslaufen des Filaments nicht zu sehen ist. Dies kann die Zeit für das zurückziehen des Filaments bei komplexeren Modellen verkürzen und Druckzeit sparen, verlangsamt aber das Slicen und die G-Code Generierung." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15972,7 +15972,7 @@ msgstr "Rückzugsmenge nach dem Wischen" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Die Länge des schnellen Rückzugs nach dem Wischen, relativ zur Rückzugslänge.\n" @@ -16019,7 +16019,7 @@ msgstr "Wenn vor einem Werkzeugwechsel ein Rückzug ausgelöst wird, wird das Fi msgid "Z-hop height" msgstr "Z-Hub-Höhe" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Bei jedem Rückzug wird die Düse ein wenig angehoben, um einen Abstand zwischen Düse und Druck zu schaffen. Dadurch wird verhindert, dass die Düse bei der Verfahrbewegung gegen den Druck stößt. Die Verwendung einer Spirallinie zum Anheben von z kann Fadenbildung verhindern." msgid "Z-hop lower boundary" @@ -19600,19 +19600,19 @@ msgstr "Nur Druckernamen mit Änderungen an Drucker-, Filament- und Prozessprofi msgid "Only display the filament names with changes to filament presets." msgstr "Nur die Filamentnamen mit Änderungen an den Filamentprofilen werden angezeigt." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Nur Druckernamen mit Benutzerdruckerprofilen werden angezeigt, und jedes Profil, das Sie auswählen, wird als ZIP exportiert." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Nur die Filamentnamen mit Benutzerfilamentvorlagen werden angezeigt, \n" "und alle Benutzerfilamentvorlagen in jedem Filamentnamen, den Sie auswählen, " msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Nur Druckernamen mit geänderten Prozessvorlagen werden angezeigt, \n" "und alle Benutzerprozessvorlagen in jedem Druckernamen, den Sie auswählen, werden als ZIP exportiert." @@ -19841,7 +19841,7 @@ msgstr "Systeminformationen in die Zwischenablage kopieren" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Wir benötigen Informationen zur Diagnose der Ursache des Problems. Überprüfen Sie die Wiki-Seite für eine detaillierte Anleitung." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Die Schaltfläche „Packen“ sammelt die Projektdatei und Protokolle der aktuellen Sitzung in einer ZIP-Datei." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19883,7 +19883,7 @@ msgstr "Protokollstufe" msgid "Stored logs" msgstr "Gespeicherte Protokolle" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Packt alle gespeicherten Protokolle in eine ZIP-Datei." msgid "Profiles" @@ -19950,7 +19950,7 @@ msgstr "Druckertyp nicht gefunden, bitte manuell auswählen." msgid "Authorizing..." msgstr "Autorisierung..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fehler. Kann kein API-Token für die Autorisierung erhalten" msgid "Could not parse server response." diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index eb0a7d774c..0d0d0e2ddb 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -5947,10 +5947,10 @@ msgstr "" msgid "Load a model" msgstr "" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "" msgid "Import Configs" @@ -7659,7 +7659,7 @@ msgstr "" msgid "Customized Preset" msgstr "" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7681,7 +7681,7 @@ msgstr "" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" msgid "Object too small" @@ -10325,11 +10325,11 @@ msgstr "" msgid "No modifications need to be copied." msgstr "" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "" #, c-format, boost-format @@ -11870,7 +11870,7 @@ msgstr "" msgid "Other layers" msgstr "" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -14671,7 +14671,7 @@ msgstr "" msgid "Reduce infill retraction" msgstr "" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -14827,7 +14827,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" @@ -14870,7 +14870,7 @@ msgstr "" msgid "Z-hop height" msgstr "" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "" msgid "Z-hop lower boundary" @@ -18187,17 +18187,17 @@ msgstr "" msgid "Only display the filament names with changes to filament presets." msgstr "" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" msgid "Please select at least one printer or filament." @@ -18412,7 +18412,7 @@ msgstr "" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "" -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "" msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -18454,7 +18454,7 @@ msgstr "" msgid "Stored logs" msgstr "" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "" msgid "Profiles" @@ -18519,7 +18519,7 @@ msgstr "" msgid "Authorizing..." msgstr "" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "" msgid "Could not parse server response." diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 23294fddbd..032516c978 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -6129,10 +6129,10 @@ msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Cargar un modelo" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importar archivo Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Cargar modelos contenidos en un archivo zip" msgid "Import Configs" @@ -7877,8 +7877,8 @@ msgstr "¡Por favor, confirme que el G-Code dentro de los perfiles son seguros p msgid "Customized Preset" msgstr "Perfil Personalizado" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "¡El nombre puede mostrar caracteres no válidos!" @@ -7899,10 +7899,10 @@ msgstr "El volumen del objeto es cero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "El objeto del archivo %s es demasiado pequeño, tal vez en metros o pulgadas.\n" -" ¿Quiere escalar a milímetros?" +"¿Quiere escalar a milímetros?" msgid "Object too small" msgstr "Objeto demasiado pequeño" @@ -10670,11 +10670,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "No hay modificaciones que copiar." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar parámetros" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar parámetros de %s" #, c-format, boost-format @@ -12267,8 +12267,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Otras capas" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura de la cama para las capas, excepto la inicial. Un valor de 0 significa que el filamento no es compatible con la Cama Fría SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Esta es la temperatura de la cama para las capas excepto la inicial. Un valor de 0 significa que el filamento no es compatible con la Cama Fría SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Esta es la temperatura de la cama para las capas excepto la inicial. Un valor de 0 significa que el filamento no admite la impresión en la Cama Fría." @@ -15470,7 +15470,7 @@ msgstr "Los puntos de inicio y fin, desde la zona de corte al cubo de basura." msgid "Reduce infill retraction" msgstr "Reducir la retracción del relleno" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Desactiva la retracción cuando el desplazamiento se realiza en su totalidad dentro de un área de relleno, donde los artefactos causados por un rezumado no son visibles. Puede reducir el número de retracciones y por ende el tiempo total de retracción al imprimir modelos complejos, reduciendo el tiempo total de impresión. Sin embargo, puede que las operaciones de laminado y de generación del archivo G-Code sean más lentas." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15635,7 +15635,7 @@ msgstr "Cantidad de retracción después de la limpieza" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La longitud de la retracción rápida después de la limpieza, relativa a la longitud de retracción.\n" @@ -15682,7 +15682,7 @@ msgstr "Cuando se activa la retracción antes de un cambio de herramienta, el fi msgid "Z-hop height" msgstr "Altura de Salto en Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Cada vez que se realiza una retracción, la boquilla se levanta un poco para crear un pequeño margen entre la boquilla y la impresión. Esto evita que la boquilla golpee la pieza cuando se desplaza. El uso de la línea espiral para levantar z puede evitar la aparición de hilos." msgid "Z-hop lower boundary" @@ -17423,7 +17423,7 @@ msgid "Current Z-hop" msgstr "Z-Hop actual" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Contiene el z-hop presente al principio del bloque de G-Code personalizado." +msgstr "Contiene el Z-hop presente al principio del bloque de G-Code personalizado." msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Posición del extrusor al comienzo del bloque de G-Code personalizado. Si el G-Code personalizado viaja a otro lugar, debe escribir en esta variable para que OrcaSlicer sepa desde dónde viaja cuando recupere el control." @@ -19233,17 +19233,17 @@ msgstr "Mostrar sólo los nombres de impresora con cambios en los perfiles de im msgid "Only display the filament names with changes to filament presets." msgstr "Mostrar sólo los nombres de impresora con cambios en los perfiles de filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Sólo se mostrarán los nombres de impresoras con perfiles de impresora de usuario, y cada perfil que elija se exportará como un archivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "Sólo se mostrarán los nombres de filamento con perfiles de filamento de usuario, y todos los perfiles de filamento de usuario de cada nombre de filamento que seleccione se exportarán como un archivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Sólo se mostrarán los nombres de impresoras con perfiles de procesos modificados, \n" "y todos los perfiles de procesos de usuario de cada nombre de impresora que seleccione se exportarán como un archivo zip." @@ -19472,7 +19472,7 @@ msgstr "Copiar información del sistema al portapapeles" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Necesitamos información para diagnosticar el origen del problema. Consulta la página wiki para una guía detallada." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "El botón Empaquetar recopila el archivo del proyecto y los registros de la sesión actual en un archivo zip." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19514,7 +19514,7 @@ msgstr "Nivel de registro" msgid "Stored logs" msgstr "Registros almacenados" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Empaqueta todos los registros almacenados en un archivo zip." msgid "Profiles" @@ -19581,7 +19581,7 @@ msgstr "No se ha encontrado el tipo de impresora; selecciónelo manualmente." msgid "Authorizing..." msgstr "Autorizando..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Error. No se puede obtener el token de la API para la autorización" msgid "Could not parse server response." @@ -21042,7 +21042,7 @@ msgstr "" #~ msgid "Select Filament && Hotends" #~ msgstr "Seleccionar Filamento && Hotends" -#~ msgid "External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it." +#~ msgid "External spools are not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it." #~ msgstr "Los carretes externos no son compatibles porque se ha instalado el Filament Track Switch. Si desea utilizar un carrete externo, desinstálelo." #, c-format, boost-format diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index a5a49e8325..26185f6514 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -3,7 +3,6 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" @@ -6174,10 +6173,10 @@ msgstr "Inportatu 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modeloa kargatu" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Inportatu ZIP fitxategia" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Kargatu ZIP fitxategi baten barnean dauden modeloak" msgid "Import Configs" @@ -7945,7 +7944,7 @@ msgstr "Berretsi aurrezarpen hauetako G-codea segurua dela, makinari kalterik ez msgid "Customized Preset" msgstr "Aurrezarpen pertsonalizatua" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP fitxategiko osagai-izena(k) ez dago/daude UTF-8 formatuan!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7967,10 +7966,10 @@ msgstr "Objektuaren bolumena zero da" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s fitxategiko objektua txikiegia da, eta baliteke metrotan edo hazbetetan egotea.\n" -" Milimetroetara eskalatu nahi duzu?" +"Milimetroetara eskalatu nahi duzu?" msgid "Object too small" msgstr "Objektua txikiegia da" @@ -10765,11 +10764,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Ez dago kopiatu beharreko aldaketarik." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiatu parametroak" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Aldatu %s-(r)en parametroak" #, c-format, boost-format @@ -12379,8 +12378,8 @@ msgstr "mm edo %" msgid "Other layers" msgstr "Beste geruzak" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Hasierakoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak SuperTack Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Hau da lehenengoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak SuperTack Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Hau da lehenengoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." @@ -15606,8 +15605,8 @@ msgstr "Mozteko eremutik hondakin-ontzira doazen hasierako eta amaierako puntuak msgid "Reduce infill retraction" msgstr "Murriztu betegarriaren atzera-egitea" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Ez egin atzera-egiterik mugimendua guztiz betegarriaren eremuan dagoenean. Horrek esan nahi du jarioa ez dela ikusiko. Honek modelo konplexuetan atzera-egite kopurua murriztu eta inprimatze-denbora aurreztu dezake, baina xerraketa eta G-codearen sorrera motelduko ditu. Kontuan izan z-hop mugimendua ez dela egiten atzera-egitea saihesten den eremuetan." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Ez egin atzera-egiterik mugimendua guztiz betegarriaren eremuan dagoenean. Horrek esan nahi du jarioa ez dela ikusiko. Honek modelo konplexuetan atzera-egite kopurua murriztu eta inprimatze-denbora aurreztu dezake, baina xerraketa eta G-codearen sorrera motelduko ditu. Kontuan izan Z-hop mugimendua ez dela egiten atzera-egitea saihesten den eremuetan." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Aukera honek aktibo ez dauden estrusoreen tenperatura jaitsiko du, jarioa saihesteko." @@ -15771,7 +15770,7 @@ msgstr "Garbitu ondorengo atzera-egite kantitatea" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Garbiketa-mugimenduaren ondorengo atzera-egite azkarraren luzera, atzera-egitearen luzerari dagokionez.\n" @@ -15818,7 +15817,7 @@ msgstr "Erreminta aldatu aurretik atzera-egitea abiarazten denean, filamentua ze msgid "Z-hop height" msgstr "Z jauziaren altuera" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Atzera-egite bakoitzean pita apur bat altxatzen da pitaren eta inprimaketaren artean tartea sortzeko. Horrela, mugimenduetan pitak pieza jotzea saihesten da. Z altxatzeko espiral-lerroak erabiltzeak hariak sortzea murriztu dezake." msgid "Z-hop lower boundary" @@ -19379,19 +19378,19 @@ msgstr "Inprimagailuaren, filamentuen edo prozesuen aurrezarpenetan aldaketak di msgid "Only display the filament names with changes to filament presets." msgstr "Bistaratu soilik filamentu-aurrezarpenetan aldaketak dituzten filamentu-izenak." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Erabiltzailearen inprimagailu-aurrezarpenak dituzten inprimagailu-izenak soilik bistaratuko dira, eta hautatzen duzun aurrezarpen bakoitza zip gisa esportatuko da." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Erabiltzailearen filamentu-aurrezarpenak dituzten filamentu-izenak soilik bistaratuko dira, \n" "eta hautatzen duzun filamentu-izen bakoitzeko erabiltzailearen filamentu-aurrezarpen guztiak zip gisa esportatuko dira." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Prozesu-aurrezarpen aldatuak dituzten inprimagailu-izenak soilik bistaratuko dira, \n" "eta hautatzen duzun inprimagailu-izen bakoitzeko erabiltzailearen prozesu-aurrezarpen guztiak zip gisa esportatuko dira." @@ -19620,7 +19619,7 @@ msgstr "Kopiatu sistemaren informazioa arbelera" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Arazoaren jatorria diagnostikatzeko informazioa behar dugu. Begiratu wiki-orria gida xehatua ikusteko." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketatu botoiak proiektu-fitxategia eta uneko saioko erregistroak ZIP fitxategi batean biltzen ditu." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19662,7 +19661,7 @@ msgstr "Erregistro-maila" msgid "Stored logs" msgstr "Gordetako erregistroak" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Gordetako erregistro guztiak ZIP fitxategi batean paketatzen ditu." msgid "Profiles" @@ -19729,7 +19728,7 @@ msgstr "Ez da inprimagailu mota aurkitu; hautatu eskuz." msgid "Authorizing..." msgstr "Baimena ematen..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Errorea. Ezin da baimenerako API tokena lortu" msgid "Could not parse server response." @@ -22259,20 +22258,12 @@ msgstr "" #~ msgid "The 3mf has the following customized filament or printer presets:" #~ msgstr "3mf-ak pertsonalizatutako filamentuen edo inprimagailuaren aurrezarpen hauek dauzka:" -#~ msgid "Name of components inside step file is not UTF8 format!" -#~ msgstr "Step fitxategiko osagaien izena ez dago UTF8 formatuan!" +#~ msgid "Name of components inside step file is not UTF-8 format!" +#~ msgstr "Step fitxategiko osagaien izena ez dago UTF-8 formatuan!" #~ msgid "The name may show garbage characters!" #~ msgstr "Izenak karaktere ulergaitzak erakuts ditzake!" -#, c-format, boost-format -#~ msgid "" -#~ "The object from file %s is too small, and maybe in meters or inches.\n" -#~ " Do you want to scale to millimeters?" -#~ msgstr "" -#~ "%s fitxategiko objektua txikiegia da, eta baliteke metroetan edo hazbetetan egotea.\n" -#~ " Milimetrotara eskalatu nahi duzu?" - #~ msgid "" #~ "This file contains several objects positioned at multiple heights.\n" #~ "Instead of considering them as multiple objects, should \n" @@ -23123,24 +23114,6 @@ msgstr "" #~ msgid "Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable." #~ msgstr "Hormak gurutzatzea saihesteko gehieneko desbideratze-distantzia. Ez desbideratu distantzia balio hau baino handiagoa bada. Desbideratze-luzera balio absolutu gisa edo lekualdatze-ibilbide zuzenaren ehuneko gisa zehaztu daiteke (adibidez, 50%). Zero, desgaitzeko." -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela plaka hotzean inprimatzea onartzen." - -#~ msgid "°C" -#~ msgstr "°C" - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured Cool Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela testuradun plaka hotzean inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Engineering Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela ingeniaritza-plakan inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the High Temp Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela tenperatura altuko plakan inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela testuradun PEI plakan inprimatzea onartzen." - #~ msgid "Initial layer" #~ msgstr "Hasierako geruza" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 65589bc5ff..28a2e27a01 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6221,10 +6221,10 @@ msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Charger un modèle" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importer une archive Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Charger les modèles contenus dans une archive zip" msgid "Import Configs" @@ -8000,7 +8000,7 @@ msgstr "Veuillez vous assurer que les G-codes de ces préréglages sont sûrs af msgid "Customized Preset" msgstr "Préréglage personnalisé" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Le nom des composants dans le fichier STEP n'est pas au format UTF-8 !" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8022,10 +8022,10 @@ msgstr "Le volume de l'objet est nul" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L’objet du fichier %s est trop petit, et est peut-être en mètres ou en pouces.\n" -" Voulez-vous le mettre à l’échelle en millimètres ?" +"Voulez-vous le mettre à l’échelle en millimètres ?" msgid "Object too small" msgstr "Objet trop petit" @@ -10854,11 +10854,11 @@ msgstr "%s : %s" msgid "No modifications need to be copied." msgstr "Aucune modification à copier." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copier les paramètres" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifier les paramètres de %s" #, c-format, boost-format @@ -12475,21 +12475,27 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Autres couches" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Température du plateau pour les couches sauf la première. Une valeur de 0 signifie que le filament ne prend pas en charge l'impression sur la Cool Plate SuperTack." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur la plaque \"Cool plate\"." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Température du plateau pour les couches à l’exception de la couche initiale. La valeur 0 signifie que le filament ne peut pas être imprimé sur la plaque Cool Plate texturée." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur la plaque Engineering." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur le plateau haute température (\"High Temp plate\")." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Température du plateau après la première couche. 0 signifie que le filament ne peut pas être imprimé sur la plaque PEI texturée." @@ -15703,7 +15709,7 @@ msgstr "Les points de départ et d'arrivée qui se situent entre la zone de coup msgid "Reduce infill retraction" msgstr "Réduire la rétraction du remplissage" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Ne pas effectuer de rétraction lors de déplacement en zone de remplissage car même si l’extrudeur suinte, les coulures ne seraient pas visibles. Cela peut réduire les rétractions pour les modèles complexes et économiser du temps d’impression, mais ralentit la découpe et la génération du G-code" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15873,7 +15879,7 @@ msgstr "Quantité de rétraction après essuyage" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La longueur de la rétraction rapide après l'essuyage, relative à la longueur de rétraction.\n" @@ -15920,7 +15926,7 @@ msgstr "Lorsque la rétraction est déclenchée avant un changement d’outil, l msgid "Z-hop height" msgstr "Hauteur du saut en Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Chaque fois que la rétraction est effectuée, la buse est légèrement soulevée pour créer un espace entre la buse et l'impression. Il empêche la buse de toucher l'impression lors du déplacement. L'utilisation d'une ligne en spirale pour soulever z peut empêcher l'enfilage" msgid "Z-hop lower boundary" @@ -19492,19 +19498,19 @@ msgstr "N’afficher que les noms d’imprimantes avec les modifications apport msgid "Only display the filament names with changes to filament presets." msgstr "N’affichez que les noms des filaments lorsque vous modifiez les préréglages des filaments." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Seuls les noms d’imprimantes avec des préréglages d’imprimante utilisateur seront affichés, et chaque préréglage que vous choisissez sera exporté sous forme de fichier zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Seuls les noms de filaments contenant des préréglages de filaments utilisateur seront affichés, \n" "et tous les préréglages de filament d’utilisateur dans chaque nom de filament que vous sélectionnez seront exportés sous forme de fichier zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Seuls les noms d’imprimantes dont les préréglages de traitement ont été modifiés seront affichés, \n" "et tous les préréglages de processus de l’utilisateur dans chaque nom d’imprimante que vous sélectionnez seront exportés sous forme de fichier zip." @@ -19733,7 +19739,7 @@ msgstr "Copier les informations système dans le presse-papiers" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Nous avons besoin d’informations pour diagnostiquer l’origine du problème. Consultez la page wiki pour un guide détaillé." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Le bouton Compresser rassemble le fichier de projet et les journaux de la session actuelle dans un fichier ZIP." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19775,7 +19781,7 @@ msgstr "Niveau de journalisation" msgid "Stored logs" msgstr "Journaux stockés" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Compresse tous les journaux stockés dans un fichier ZIP." msgid "Profiles" @@ -19842,7 +19848,7 @@ msgstr "Type d’imprimante introuvable, veuillez le sélectionner manuellement. msgid "Authorizing..." msgstr "Autorisation en cours…" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Erreur : impossible d’obtenir le jeton d’API pour l’autorisation" msgid "Could not parse server response." @@ -22159,8 +22165,8 @@ msgstr "" #~ msgid "The 3mf has the following customized filament or printer presets:" #~ msgstr "Le 3mf dispose de filaments personnalisés ou de préréglages d'imprimante :" -#~ msgid "Name of components inside step file is not UTF8 format!" -#~ msgstr "Le nom des composants à l'intérieur du fichier .step n'est pas au format UTF8 !" +#~ msgid "Name of components inside step file is not UTF-8 format!" +#~ msgstr "Le nom des composants à l'intérieur du fichier .step n'est pas au format UTF-8 !" #~ msgid "Should printer/filament/process settings be loaded when opening a .3mf?" #~ msgstr "Les paramètres de l’imprimante/du filament/du processus doivent-ils être chargés lors de l’ouverture d’un fichier .3mf ?" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 9d966bf80a..1dbfe0b1b7 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -6323,10 +6323,10 @@ msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modell betöltése" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip archívum importálása" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Zip archívumban található modellek betöltése" msgid "Import Configs" @@ -8115,7 +8115,7 @@ msgstr "Kérlek, győződj meg arról, hogy a beállításokban található G-k msgid "Customized Preset" msgstr "Egyedi beállítás" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "A STEP fájlon belüli komponens neve nem UTF-8 formátumban van!" # AI Translated @@ -8139,10 +8139,10 @@ msgstr "Az objektum térfogata nulla" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "A(z) %s fájlból származó objektum túl kicsi, lehet, hogy méterben vagy hüvelykben lett létrehozva.\n" -" Szeretnéd milliméterre méretezni?" +"Szeretnéd milliméterre méretezni?" msgid "Object too small" msgstr "Objektum túl kicsi" @@ -11030,12 +11030,12 @@ msgid "No modifications need to be copied." msgstr "Nincs másolandó módosítás." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Paraméterek másolása" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "A(z) %s paramétereinek módosítása" # AI Translated @@ -12685,7 +12685,7 @@ msgstr "mm vagy %" msgid "Other layers" msgstr "Többi réteg" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "A kezdőréteg utáni asztalhőmérséklet. A 0 azt jelenti, hogy a filament nem nyomtatható a SuperTack hűvös tálcára." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15957,7 +15957,7 @@ msgid "Reduce infill retraction" msgstr "Csökkentett visszahúzás kitöltésnél" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Nem történik visszahúzás, amikor a fej csak kitöltés felett halad el, mert az itt történő szivárgás egyébként sem látható. Ez az opció lerövidítheti a nyomtatási időt a visszahúzások csökkentésével komplex modelleknél, de egyúttal lassabbá teszi a szeletelést és a G-kód generálást. Vedd figyelembe, hogy a Z-emelés sem történik meg azokon a területeken, ahol a visszahúzás ki van hagyva." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16131,7 +16131,7 @@ msgstr "Visszahúzás mértéke törlés után" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "A törlés utáni gyors visszahúzás hossza a visszahúzási hosszhoz viszonyítva.\n" @@ -16178,7 +16178,7 @@ msgstr "Amikor a visszahúzás eszközváltás előtt aktiválódik, a filament msgid "Z-hop height" msgstr "Z-emelés magassága" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Visszahúzáskor a fúvóka egy kicsit megemelkedik, hogy a fúvóka és a nyomtatott tárgy között rés keletkezzen. Ez megakadályozza, hogy a fúvóka nagyobb mozgás közben a tárgynak ütközzön. A Z tengely emelésekor használt körkörös mozgás megelőzheti a szálazást." msgid "Z-hop lower boundary" @@ -19796,19 +19796,19 @@ msgstr "Csak azok a nyomtatók jelennek meg, amelyeknél változtak a nyomtató- msgid "Only display the filament names with changes to filament presets." msgstr "Csak azok a filamentnevek jelennek meg, ahol változtak a filamentbeállítások." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Csak azok a nyomtatónevek jelennek meg, amelyekhez tartoznak felhasználói beállítások. A kiválasztott beállítások ZIP fájlként kerülnek exportálásra." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Csak azok a filamentnevek jelennek meg, amelyekhez tartoznak felhasználói filamentbeállítások,\n" "és a kiválasztott filamentnevekhez tartozó összes felhasználói filamentbeállítás ZIP-fájlként lesz exportálva." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Csak azok a nyomtatónevek jelennek meg, amelyekhez módosított folyamatbeállítások tartoznak,\n" "és a kiválasztott nyomtatónevekhez tartozó összes felhasználói folyamatbeállítás ZIP-fájlként lesz exportálva." @@ -20054,7 +20054,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Információra van szükségünk a probléma forrásának feltárásához. A részletes útmutatót a wiki oldalon találod." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "A Csomagolás gomb egy zip fájlba gyűjti a projektfájlt és az aktuális munkamenet naplóit." # AI Translated @@ -20110,7 +20110,7 @@ msgid "Stored logs" msgstr "Tárolt naplók" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Az összes tárolt naplót egy zip fájlba csomagolja." # AI Translated @@ -20198,7 +20198,7 @@ msgid "Authorizing..." msgstr "Engedélyezés..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Hiba. Nem sikerült API-tokent szerezni az engedélyezéshez" # AI Translated diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 6190d2ab44..f9d31456bf 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -6325,10 +6325,10 @@ msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carica modello" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importa archivio Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Carica i modelli contenuti in un archivio zip" msgid "Import Configs" @@ -8119,8 +8119,8 @@ msgstr "Si prega di confermare che i G-code all'interno di questi profili sono s msgid "Customized Preset" msgstr "Profilo personalizzato" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "A causa di una codifica del testo non supportata, potrebbero apparire caratteri inutili!" @@ -8141,10 +8141,10 @@ msgstr "Il volume dell'oggetto è zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L'oggetto del file %s è troppo piccolo e può essere in metri o pollici.\n" -" Si desidera scalare in millimetri?" +"Si desidera scalare in millimetri?" msgid "Object too small" msgstr "Oggetto troppo piccolo" @@ -11044,12 +11044,12 @@ msgid "No modifications need to be copied." msgstr "Non è necessario copiare alcuna modifica." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copia parametri" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifica i parametri di %s" # AI Translated @@ -12705,8 +12705,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Altri strati" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura del piatto per gli strati diversi dal primo. Un valore di 0 significa che il filamento non supporta la stampa su Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Indica la temperatura del piatto per tutti gli strati eccetto il primo. Un valore di 0 significa che il filamento non supporta la stampa su Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Indica la temperatura del piatto per tutti gli strati eccetto il primo. Un valore pari a 0 indica che il filamento non supporta la stampa su Piatto a bassa temperatura." @@ -15976,7 +15976,7 @@ msgid "Reduce infill retraction" msgstr "Evita retrazione nel riempimento" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Non ritrarre quando gli spostamenti si trovano interamente in un'area di riempimento. Ciò significa che il trasudo del materiale non è visibile. Questo può ridurre i tempi di retrazione per i modelli complessi e far risparmiare tempo di stampa, ma rende più lente l'elaborazione e la generazione del G-code. Nota che anche il sollevamento Z non viene eseguito nelle aree in cui la retrazione viene saltata." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16150,7 +16150,7 @@ msgstr "Quantità di retrazione dopo la pulizia" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La lunghezza della retrazione rapida dopo la pulizia, relativa alla lunghezza di retrazione.\n" @@ -16197,7 +16197,7 @@ msgstr "Quando la retrazione viene attivata prima di un cambio testina, il filam msgid "Z-hop height" msgstr "Altezza sollevamento Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Ogni volta che si verifica una retrazione, l'ugello viene sollevato leggermente per creare spazio tra ugello e stampa. Ciò impedisce all'ugello di colpire la stampa negli spostamenti. L'uso di linee a spirale per il sollevamento sull'asse Z può evitare gli sfilacciamenti sulla stampa." msgid "Z-hop lower boundary" @@ -19813,21 +19813,21 @@ msgstr "Vengono visualizzate solo le stampanti con modifiche ai profili di stamp msgid "Only display the filament names with changes to filament presets." msgstr "Nomi dei filamenti con modifiche ai profili di filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" "Nomi delle stampanti con profili creati dell'utente.\n" "Tutti i profili selezionati saranno esportati come file zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Nomi dei filamenti con profili creati dell'utente.\n" "Tutti i profili selezionati saranno esportati come file zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Nomi delle stampanti con profili di processo modificati.\n" "Tutti i profili selezionati saranno esportati come file zip." @@ -20072,7 +20072,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Abbiamo bisogno di informazioni per diagnosticare l'origine del problema. Consulta la pagina wiki per una guida dettagliata." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Il pulsante Comprimi raccoglie il file di progetto e i log della sessione corrente in un file zip." # AI Translated @@ -20128,7 +20128,7 @@ msgid "Stored logs" msgstr "Log memorizzati" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Comprime tutti i log memorizzati in un file zip." # AI Translated @@ -20216,7 +20216,7 @@ msgid "Authorizing..." msgstr "Autorizzazione in corso..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Errore. Impossibile ottenere il token API per l'autorizzazione" # AI Translated diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index d67a39463d..9c819dd7c1 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -6334,10 +6334,10 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" msgid "Load a model" msgstr "モデルを読み込む" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIPアーカイブをインポート" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "ZIPアーカイブ内のモデルをロード" msgid "Import Configs" @@ -8133,8 +8133,8 @@ msgstr "これらのプリセット内のG-codeがマシンに損傷を与えな msgid "Customized Preset" msgstr "カスタマイズされたプリセット" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "ファイルのエンコーディング方式はUTF-8形式ではありません" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "文字化けがあるようです、ご確認ください" @@ -8155,7 +8155,7 @@ msgstr "オブジェクトの体積が0です" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "ファイル %s 中のオブジェクトが小さいすぎます、ファイルの単位をご確認ください。\n" "mm単位に変換しますか?" @@ -11068,12 +11068,12 @@ msgid "No modifications need to be copied." msgstr "コピーが必要な変更はありません。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "パラメータをコピー" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%sのパラメータを変更" # AI Translated @@ -12756,23 +12756,27 @@ msgstr "mm 或は %" msgid "Other layers" msgstr "他の層" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはCool Plate SuperTackでの印刷に対応していません。" +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが常温プレートで使用できないという意味です。" -# AI Translated +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはTextured Cool Plateでの印刷に対応していません。" +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントがエンジニアリング プレートで使用できないという意味です。" +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが高温プレートで使用できないという意味です。" +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "1層目以外のベッド温度。値が0の場合、フィラメントがPEIプレートをサポートしない意味をします。" @@ -16238,7 +16242,7 @@ msgstr "カッター領域から廃料排出口までの終始点" msgid "Reduce infill retraction" msgstr "インフィルのリトラクション低減" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "インフィル領域内の移動はリトラクションしません。造形時間を節約できます。" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16423,7 +16427,7 @@ msgstr "ワイプ後のリトラクション量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "ワイプ後の高速リトラクションの長さで、リトラクション長に対する割合です。\n" @@ -16474,7 +16478,7 @@ msgstr "ツール交換の前にリトラクションが行われるとき、指 msgid "Z-hop height" msgstr "Zホップの高さ" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "リトラクション時に、ノズルを少し上げてから移動します。この動作でモデルとの衝突を回避できます。" # AI Translated @@ -18439,10 +18443,10 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "新しいバージョンの3MFのスライスを許可します。" msgid "Current Z-hop" -msgstr "現在のz-hop" +msgstr "現在のZ-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "カスタムGコードブロックの先頭に存在するz-hopを含む。" +msgstr "カスタムGコードブロックの先頭に存在するZ-hopを含む。" msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "カスタム G コード ブロックの先頭のエクストルーダーのモーターの位置。 カスタム G コードで動かしたとき、PrusaSlicer が制御を取り戻したときにどこから移動したかを認識できるように、この変数に書き込む必要があります。" @@ -20340,19 +20344,19 @@ msgstr "プリンタ、フィラメント、加工プリセットに変更があ msgid "Only display the filament names with changes to filament presets." msgstr "フィラメントプリセットを変更したフィラメント名のみを表示します。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "ユーザープリンタプリセットを持つプリンタ名のみが表示され、選択した各プリセットがZIPとしてエクスポートされます。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "ユーザーフィラメントプリセットを含むフィラメント名のみが表示されます、 \n" "選択した各フィラメント名に含まれるすべてのユーザーフィラメントプリセットがZIP形式でエクスポートされます。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "変更されたプロセスプリセットがあるプリンタ名のみが表示され、選択した各プリンタ名にあるすべてのユーザープロセスプリセットがZIP形式でエクスポートされます。" msgid "Please select at least one printer or filament." @@ -20596,7 +20600,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "問題の原因を特定するために情報が必要です。詳しい手順はWikiページをご覧ください。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "「パック」ボタンは、現在のセッションのプロジェクトファイルとログをzipファイルにまとめます。" # AI Translated @@ -20652,7 +20656,7 @@ msgid "Stored logs" msgstr "保存されたログ" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "保存されたすべてのログをzipファイルにまとめます。" # AI Translated @@ -20740,7 +20744,7 @@ msgid "Authorizing..." msgstr "認証中..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "エラー。認証用のAPIトークンを取得できません" # AI Translated diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index e8dfca968f..61d785ef2e 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -6348,10 +6348,10 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" msgid "Load a model" msgstr "모델 불러오기" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIP 압축파일 가져오기" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "ZIP 압축파일에 포함된 모델 로드" msgid "Import Configs" @@ -8152,8 +8152,8 @@ msgid "Customized Preset" msgstr "사용자 정의 프리셋" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "STEP 파일 내부의 구성 요소 이름이 UTF8 형식이 아닙니다!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "STEP 파일 내부의 구성 요소 이름이 UTF-8 형식이 아닙니다!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8175,7 +8175,7 @@ msgstr "물체의 부피는 0입니다" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s 파일의 객체가 너무 작습니다. 단위가 미터나 인치일 수 있습니다.\n" " mm 단위로 확장하시겠습니까?" @@ -11188,12 +11188,12 @@ msgid "No modifications need to be copied." msgstr "복사할 변경 사항이 없습니다." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "매개변수 복사" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%s의 매개변수 수정" # AI Translated @@ -12889,22 +12889,27 @@ msgstr "mm 또는 %" msgid "Other layers" msgstr "다른 레이어" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "초기 레이어를 제외한 레이어의 베드 온도입니다. 값이 0이면 해당 필라멘트가 쿨 플레이트 슈퍼택에서의 출력을 지원하지 않음을 의미합니다." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 쿨 플레이트 출력을 지원하지 않음을 의미합니다." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도입니다. 값 0은 필라멘트가 텍스처드 쿨 플레이트에서 출력를 지원하지 않음을 의미합니다." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 엔지니어링 플레이트 출력을 지원하지 않음을 의미합니다." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 고온 플레이트 출력을 지원하지 않음을 의미합니다." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 텍스처 PEI 플레이트 출력을 지원하지 않음을 의미합니다." @@ -16276,7 +16281,7 @@ msgid "Reduce infill retraction" msgstr "채우기 후퇴 감소" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "이동 경로가 완전히 채우기 영역 안에 있으면 후퇴하지 않습니다. 흘러내림이 보이지 않기 때문입니다. 복잡한 모델에서 후퇴 횟수를 줄여 출력 시간을 절약할 수 있지만 슬라이싱과 G-code 생성 속도는 느려집니다. 후퇴를 건너뛴 영역에서는 Z 올리기도 수행되지 않습니다." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16453,7 +16458,7 @@ msgstr "노즐 청소 후 후퇴량" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "노즐 청소 후 빠른 후퇴의 길이로, 후퇴 길이를 기준으로 합니다.\n" @@ -16500,7 +16505,7 @@ msgstr "툴 체인지 전에 후퇴가 실행되면 지정한 양만큼 필라 msgid "Z-hop height" msgstr "Z올리기 높이" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "후퇴가 완료될 때마다 노즐이 약간 올라가서 노즐과 출력물 사이에 간격이 생깁니다. 이동 시 노즐이 출력물에 닿는 것을 방지합니다. 나선형 선을 사용하여 z를 들어 올리면 스트링 현상을 방지할 수 있습니다" msgid "Z-hop lower boundary" @@ -20213,19 +20218,19 @@ msgstr "프린터, 필라멘트 및 프로세스 사전 설정이 변경된 경 msgid "Only display the filament names with changes to filament presets." msgstr "필라멘트 사전 설정이 변경된 경우에만 필라멘트 이름을 표시합니다." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "사용자 프린터 사전 설정이 있는 프린터 이름만 표시되며, 선택한 각 사전 설정은 zip으로 내보내집니다." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "사용자 필라멘트 사전 설정이 있는 필라멘트 이름만 표시됩니다.\n" "선택한 각 필라멘트 이름의 모든 사용자 필라멘트 사전 설정은 zip으로 내보내집니다." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "프로세스 사전 설정이 변경된 프린터 이름만 표시됩니다.\n" "선택한 각 프린터 이름의 모든 사용자 프로세스 사전 설정은 zip으로 내보내집니다." @@ -20469,7 +20474,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "문제의 원인을 진단하려면 정보가 필요합니다. 자세한 안내는 위키 페이지를 확인하십시오." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "패키지 버튼은 현재 세션의 프로젝트 파일과 로그를 zip 파일로 모읍니다." # AI Translated @@ -20525,7 +20530,7 @@ msgid "Stored logs" msgstr "저장된 로그" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "저장된 모든 로그를 zip 파일로 묶습니다." # AI Translated @@ -20613,7 +20618,7 @@ msgid "Authorizing..." msgstr "인증 중..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "오류. 인증용 API 토큰을 가져올 수 없습니다" # AI Translated diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 8fd32bdd26..e1ce2f18b2 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -3,7 +3,6 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" @@ -6311,10 +6310,10 @@ msgstr "Importuoti 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Įkelti modelį" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importuoti Zip archyvą" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Įkelti modelius iš ZIP archyvo" msgid "Import Configs" @@ -8110,7 +8109,7 @@ msgstr "Patvirtinkite, kad šiuose profiliuose esantis G-kodas yra saugus, kad i msgid "Customized Preset" msgstr "Pritaikytas profilis" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8132,7 +8131,7 @@ msgstr "Objekto tūris nulinis" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objektas iš failo „%s“ yra per mažas ir galimai nurodytas metrais arba coliais.\n" "Ar norite mastelį pakeisti į milimetrus?" @@ -10981,11 +10980,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Nereikia kopijuoti jokių modifikacijų" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopijuoti parametrus" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifikuoti %s parametrus" #, c-format, boost-format @@ -12609,7 +12608,7 @@ msgstr "mm arba %" msgid "Other layers" msgstr "Kiti sluoksniai" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant „Cool Plate SuperTack“ pagrindo." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15839,7 +15838,7 @@ msgstr "Pradžios ir pabaigos taškai, esantys tarp gijos kirpimo zonos ir atlie msgid "Reduce infill retraction" msgstr "Sumažinti užpildo įtraukimą (Retraction)" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Neatlikti gijos įtraukimo, kai tuščioji eiga vyksta tik užpildo zonoje. Tokiu atveju gijos varvėjimas (oozing) išorėje bus nematomas. Tai leidžia sumažinti įtraukimų skaičių sudėtingiems modeliams ir sutaupyti spausdinimo laiko, tačiau sulėtina sluoksniavimą bei G-kodo (G-code) generavimą. Pastaba: zonose, kuriose įtraukimas praleidžiamas, „Z-hop“ judesys taip pat neatliekamas." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16005,7 +16004,7 @@ msgstr "Atitraukimo kiekis po nubraukimo" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Greito atitraukimo ilgis po nubraukimo, atsižvelgiant į atitraukimo ilgį.\n" @@ -16052,7 +16051,7 @@ msgstr "Kai atitraukimas suaktyvinamas prieš įrankio keitimą, gija atitraukia msgid "Z-hop height" msgstr "„Z-hop“ (pakėlimo) aukštis" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Kaskart atliekant atitraukimą, purkštukas šiek tiek pakeliamas, kad tarp jo ir spaudinio atsirastų tarpas. Tai apsaugo nuo purkštuko užkliudymo už spaudinio judėjimo metu. „Spiralinių“ linijų naudojimas Z ašies kėlimui gali padėti išvengti „tįstančių siūlų“ (angl. \"stringing\")." msgid "Z-hop lower boundary" @@ -19649,19 +19648,19 @@ msgstr "Rodomi tik tie spausdintuvai, kurių spausdintuvo, kaitinamojo siūlo ir msgid "Only display the filament names with changes to filament presets." msgstr "Rodyti tik tuos gijų pavadinimus, kurių gijos profiliai buvo pakeisti." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Bus rodomi tik tie spausdintuvų pavadinimai, kurie turi naudotojo sukurtų profilių, o kiekvienas pasirinktas profilis bus eksportuotas kaip ZIP failas." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Bus rodomi tik tie gijų pavadinimai, kurie turi naudotojo sukurtų profilių, \n" "o visi pasirinkto pavadinimo naudotojo gijos profiliai bus eksportuoti kaip ZIP failas." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Bus rodomi tik tie spausdintuvų pavadinimai, kurie turi pakeistų proceso profilių, \n" "o visi pasirinkto spausdintuvo naudotojo proceso profiliai bus eksportuoti kaip ZIP failas." @@ -19891,7 +19890,7 @@ msgstr "Kopijuoti sistemos informaciją į iškarpinę" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Mums reikia informacijos problemos šaltiniui diagnozuoti. Išsamų vadovą rasite „Wiki“ puslapyje." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Mygtukas „Supakuoti“ (Pack) surenka projekto failą ir dabartinės sesijos žurnalus į ZIP failą." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19933,7 +19932,7 @@ msgstr "Žurnalo lygis" msgid "Stored logs" msgstr "Saugomi žurnalai" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Supakuoja visus saugomus žurnalus į ZIP failą." msgid "Profiles" @@ -20000,7 +19999,7 @@ msgstr "Spausdintuvo tipas nerastas, pasirinkite rankiniu būdu." msgid "Authorizing..." msgstr "Autorizuojama..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Klaida. Nepavyko gauti API žetono (token) autorizacijai" msgid "Could not parse server response." @@ -22206,20 +22205,12 @@ msgstr "" #~ msgid "Please correct them in the param tabs" #~ msgstr "Prašome juos ištaisyti parametrų skirtukuose" -#~ msgid "Name of components inside STEP file is not UTF8 format!" +#~ msgid "Name of components inside STEP file is not UTF-8 format!" #~ msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" #~ msgid "The name may show garbage characters!" #~ msgstr "Pavadinimas gali rodyti neskaitomus simbolius!" -#, c-format, boost-format -#~ msgid "" -#~ "The object from file %s is too small, and maybe in meters or inches.\n" -#~ " Do you want to scale to millimeters?" -#~ msgstr "" -#~ "Objektas iš failo „%s“ yra per mažas ir galimai nurodytas metrais arba coliais.\n" -#~ "Ar norite mastelį pakeisti į milimetrus?" - #~ msgid "" #~ "This file contains several objects positioned at multiple heights.\n" #~ "Instead of considering them as multiple objects, should \n" @@ -22609,21 +22600,6 @@ msgstr "" #~ msgid "Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable." #~ msgstr "Maksimalus apylankos atstumas sienelių kirtimui išvengti. Apylanka nedaroma, jei jos atstumas viršija šią reikšmę. Apylankos ilgis gali būti nurodomas absoliučia verte arba procentais (pavyzdžiui, 50 %) nuo tiesioginio judėjimo trajektorijos. Įrašius 0 – funkcija išjungiama." -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant šalto pagrindo (Cool Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured Cool Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant tekstūruoto šalto pagrindo (Textured Cool Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Engineering Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant inžinerinio pagrindo (Engineering Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the High Temp Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant aukštos temperatūros pagrindo (High Temp Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant tekstūruoto PEI pagrindo (Textured PEI Plate)." - #~ msgid "Bed temperature of the first layer. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." #~ msgstr "Pirmojo sluoksnio pagrindo temperatūra. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant „Cool Plate SuperTack“ pagrindo." diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 96c22fcc8b..4284378cd1 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -6887,11 +6887,11 @@ msgid "Load a model" msgstr "Laad een model" # AI Translated -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIP-archief importeren" # AI Translated -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Laad modellen uit een ZIP-archief" msgid "Import Configs" @@ -8860,8 +8860,8 @@ msgstr "Controleer of de G-codes in deze presets veilig zijn om schade aan de ma msgid "Customized Preset" msgstr "Aangepaste voorinstelling" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Naam van componenten in step-bestand is niet UTF-8-formaat!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Vanwege niet-ondersteunde tekstcodering kunnen er onjuiste tekens verschijnen!" @@ -8883,10 +8883,10 @@ msgstr "Het volume van het object is 0" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Het object uit bestand %s is erg klein, en misschien in meters of inches.\n" -" Wil je schalen naar millimeters?" +"Wil je schalen naar millimeters?" msgid "Object too small" msgstr "He tobject is te klein" @@ -12027,12 +12027,12 @@ msgid "No modifications need to be copied." msgstr "Er hoeven geen wijzigingen te worden gekopieerd." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parameters kopiëren" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Parameters van %s wijzigen" # AI Translated @@ -13843,23 +13843,27 @@ msgstr "mm of %" msgid "Other layers" msgstr "Andere lagen" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Cool Plate SuperTack niet ondersteunt." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament het afdrukken op de Cool Plate niet ondersteunt." -# AI Translated +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Textured Cool Plate niet ondersteunt." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van 0 betekent dat het filament afdrukken op de Engineering Plate niet ondersteunt." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van 0 betekent dat het filament printen op de High Temp Plate niet ondersteunt." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Bedtemperatuur na de eerste laag. 0 betekent dat het filament niet wordt ondersteund op de getextureerde PEI-plaat." @@ -17510,8 +17514,8 @@ msgid "Reduce infill retraction" msgstr "Reduceer terugtrekken (retraction) bij vulling (infill)" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Trek niet terug als de beweging zich volledig in een opvulgebied bevindt. Dat betekent dat het sijpelen niet zichtbaar is. Dit kan de retraction times voor complexe modellen verkorten en printtijd besparen, maar het segmenteren en het genereren van G-codes langzamer maken. Let op: z-hop wordt ook niet uitgevoerd in gebieden waar het terugtrekken wordt overgeslagen." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Trek niet terug als de beweging zich volledig in een opvulgebied bevindt. Dat betekent dat het sijpelen niet zichtbaar is. Dit kan de retraction times voor complexe modellen verkorten en printtijd besparen, maar het segmenteren en het genereren van G-codes langzamer maken. Let op: Z-hop wordt ook niet uitgevoerd in gebieden waar het terugtrekken wordt overgeslagen." # AI Translated msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -17700,7 +17704,7 @@ msgstr "Terugtrekhoeveelheid na vegen" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "De lengte van de snelle terugtrekking na het vegen, relatief ten opzichte van de terugtreklengte.\n" @@ -17754,7 +17758,7 @@ msgstr "Wanneer het terugtrekken vóór een gereedschapswissel wordt geactiveerd msgid "Z-hop height" msgstr "Z-hop-hoogte" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Wanneer er een terugtrekking (retraction) is, wordt het mondstuk een beetje opgetild om ruimte te creëren tussen het mondstuk en de print. Dit voorkomt dat het mondstuk de print raakt bij verplaatsen. Het gebruik van spiraallijnen om Z op te tillen kan stringing voorkomen." msgid "Z-hop lower boundary" @@ -19764,7 +19768,7 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "Sta toe dat een 3MF met een nieuwere versie wordt geslicet." msgid "Current Z-hop" -msgstr "Huidige z-hop" +msgstr "Huidige Z-hop" # AI Translated msgid "Contains Z-hop present at the beginning of the custom G-code block." @@ -21801,19 +21805,19 @@ msgstr "Alleen printers met wijzigingen in printer-, filament- en proces presets msgid "Only display the filament names with changes to filament presets." msgstr "Geef alleen de filamentnamen weer met wijzigingen in filament presets." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Alleen printernamen met gebruikersprinter presets worden weergegeven en elke preset die je kiest, wordt als zip geëxporteerd." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Alleen de filamentnamen met gebruikers presets worden weergegeven, \n" "en alle gebruikers presets in elke filamentnaam die u selecteert, worden geëxporteerd als zip-bestand." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Alleen printernamen met gewijzigde proces presets worden weergegeven, \n" "en alle gebruikersproces presets in elke printernaam die u selecteert, worden als zip geëxporteerd." @@ -22068,7 +22072,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "We hebben informatie nodig om de oorzaak van het probleem te achterhalen. Raadpleeg de wikipagina voor een uitgebreide handleiding." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "De knop Inpakken verzamelt het projectbestand en de logboeken van de huidige sessie in een zipbestand." # AI Translated @@ -22124,7 +22128,7 @@ msgid "Stored logs" msgstr "Opgeslagen logboeken" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Pakt alle opgeslagen logboeken in een zipbestand." # AI Translated @@ -22212,7 +22216,7 @@ msgid "Authorizing..." msgstr "Autoriseren..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fout. Kan geen API-token voor autorisatie ophalen" # AI Translated diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 4a21d38a27..cc88aac759 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -6467,10 +6467,10 @@ msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Wczytaj model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importuj archiwum ZIP" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Wczytaj modele zawarte w archiwum ZIP" msgid "Import Configs" @@ -8309,8 +8309,8 @@ msgstr "Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zap msgid "Customized Preset" msgstr "Dostosowany profil" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Nazwa może zawierać nieczytelne znaki!" @@ -8331,10 +8331,10 @@ msgstr "Objętość tego obiektu wynosi zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Obiekt z pliku %s jest zbyt mały i możliwe, że jest określony w metrach lub calach.\n" -" Czy przeskalować na milimetry?" +"Czy przeskalować na milimetry?" msgid "Object too small" msgstr "Zbyt mały obiekt" @@ -11363,12 +11363,12 @@ msgid "No modifications need to be copied." msgstr "Nie ma modyfikacji do skopiowania." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiuj parametry" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Zmodyfikuj parametry %s" # AI Translated @@ -13060,22 +13060,27 @@ msgstr "mm lub %" msgid "Other layers" msgstr "Pozostałe warstwy" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje druku na Cool Plate SuperTack." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Cool Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Temperatura stołu dla warstw, z wyjątkiem pierwszej. Wartość 0 oznacza, że filament nie nadaje się do druku na Textured Cool Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Engineering Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na High Temp Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Textured PEI Plate." @@ -16448,7 +16453,7 @@ msgstr "Punkty początkowe i końcowe, od obszaru cięcia do kanału wyrzutowego msgid "Reduce infill retraction" msgstr "Zmniejszanie retrakcji wypełnienia" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Nie wykonuj retrakcji, gdy ruch odbywa się całkowicie w obszarze wypełnienia. Oznacza to, że wyciek nie będzie widoczny. Może to zmniejszyć liczbę retrakcji dla skomplikowanego modelu i zaoszczędzić czas druku, ale spowolnić krojenie i generowanie G-code" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16624,7 +16629,7 @@ msgstr "Wartość retrakcji po czyszczeniu" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Długość szybkiej retrakcji po czyszczeniu, względem długości retrakcji.\n" @@ -16671,7 +16676,7 @@ msgstr "Gdy retrakcja jest wyzwalana przed zmianą narzędzia, filament zostaje msgid "Z-hop height" msgstr "Wysokość Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Zawsze gdy wykonana jest retrakcja, dysza jest nieco podnoszona, aby stworzyć odstęp między dyszą a wydrukiem. Zapobiega to uderzeniu dyszy w wydruk podczas przemieszczania. Użycie linii spiralnej do podniesienia Z może zapobiec powstawaniu strun" msgid "Z-hop lower boundary" @@ -18504,7 +18509,7 @@ msgid "Current Z-hop" msgstr "Bieżący Z-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Zawiera z-hop obecny na początku bloku niestandardowego G-code" +msgstr "Zawiera Z-hop obecny na początku bloku niestandardowego G-code" msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Pozycja ekstrudera na początku bloku niestandardowego G-kodu. Jeśli niestandardowy G-code przemieszcza się gdzieś indziej, powinien zostać zapisany do tej zmiennej, aby OrcaSlicer wiedział, skąd się przemieszcza, gdy odzyska kontrolę." @@ -20394,19 +20399,19 @@ msgstr "Wyświetlane są jedynie drukarki ze zmienionymi profilami drukarki, fil msgid "Only display the filament names with changes to filament presets." msgstr "Wyświetlone są jedynie nazwy filamentów, które zostały zmodyfikowane w ustawieniach." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Wyświetlane są tylko nazwy drukarek z ustawieniami użytkownika, wybrany zestaw zostanie wyeksportowany jako plik zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Na liście widoczne są tylko nazwy filamentów ze zmodyfikowanymi ustawieniami, \n" "a dla każdej wybranej nazwy filamentu zostaną wyeksportowane wszystkie ustawienia jako archiwum zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Na liście widoczne są tylko nazwy drukarek ze zmodyfikowanymi ustawieniami procesu, \n" "a dla każdej wybranej nazwy drukarki zostaną wyeksportowane wszystkie \n" @@ -20653,7 +20658,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Potrzebujemy informacji do zdiagnozowania źródła problemu. Szczegółowy przewodnik znajdziesz na stronie wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Przycisk Spakuj zbiera plik projektu i dzienniki bieżącej sesji do pliku zip." # AI Translated @@ -20709,7 +20714,7 @@ msgid "Stored logs" msgstr "Zapisane dzienniki" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Pakuje wszystkie zapisane dzienniki do pliku zip." # AI Translated @@ -20797,7 +20802,7 @@ msgid "Authorizing..." msgstr "Autoryzowanie..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Błąd. Nie można uzyskać tokenu API do autoryzacji" # AI Translated diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 931d3d510b..5b9b7dcc42 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -6143,11 +6143,11 @@ msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carregar um modelo" -msgid "Import Zip Archive" -msgstr "Importar Arquivo Zip" +msgid "Import ZIP Archive" +msgstr "Importar Arquivo ZIP" -msgid "Load models contained within a zip archive" -msgstr "Carregar modelos contidos em um arquivo zip" +msgid "Load models contained within a ZIP archive" +msgstr "Carregar modelos contidos em um arquivo ZIP" msgid "Import Configs" msgstr "Importar Configurações" @@ -7897,7 +7897,7 @@ msgstr "Por favor, confirme se o G-code dentro dessas predefinições é seguro msgid "Customized Preset" msgstr "Predefinição Personalizada" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Os nomes dos componentes dentro do arquivo STEP não estão no formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7919,7 +7919,7 @@ msgstr "O volume do objeto é zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "O objeto do arquivo %s é muito pequeno, e pode estar em metros ou polegadas.\n" "Deseja redimensioná-lo para milímetros?" @@ -10740,11 +10740,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Nenhuma modificação precisa ser copiada." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar parâmetros" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar parâmetros de %s" #, c-format, boost-format @@ -12355,7 +12355,7 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Outras camadas" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Essa é a temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão na Placa Fria SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15252,7 +15252,6 @@ msgstr "Massa da mesa do eixo Y" msgid "The machine bed mass load of Y axis" msgstr "A carga de massa da mesa do equipamento no eixo Y" -# AI Translated msgid "g" msgstr "g" @@ -15565,7 +15564,7 @@ msgstr "Os pontos de início e fim que vão da área do cortador até a calha de msgid "Reduce infill retraction" msgstr "Reduzir retração durante o preenchimento" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Não retrair quando o movimento está completamente na área de preenchimento. Isso significa que o vazamento não pode ser visto. Isso pode reduzir o número de retratações para modelos complexos e economizar tempo de impressão, mas torna a geração de fatiamento e G-code mais lenta. Note que o Z-Hop também não é realizado em áreas onde a retração é omitida." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15730,7 +15729,7 @@ msgstr "Quantidade de retração depois da limpeza" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Este é o comprimento da retração rápida antes de uma limpeza, em relação ao comprimento da retração.\n" @@ -15766,18 +15765,16 @@ msgstr "Retração longa na troca de extrusora" msgid "Retraction distance when extruder change" msgstr "Distância de retração na troca de extrusora" -# AI Translated msgid "Retraction Length (Toolchange)" -msgstr "Comprimento da retração (Troca de ferramenta)" +msgstr "Comprimento da Retração (Troca de ferramenta)" -# AI Translated msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." msgstr "Quando a retração é acionada antes da troca de ferramenta, o filamento é puxado de volta na quantidade especificada (o comprimento é medido no filamento bruto, antes de entrar na extrusora)." msgid "Z-hop height" msgstr "Altura de Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Sempre que há uma retração, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linhas em espiral para levantar Z pode evitar stringing." msgid "Z-hop lower boundary" @@ -15867,9 +15864,8 @@ msgstr "Comprimento extra na retração" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Quando a retração é compensada após o movimento de deslocamento, a extrusora empurrará essa quantidade adicional de filamento. Esta configuração é raramente necessária." -# AI Translated msgid "Extra length on restart (Toolchange)" -msgstr "Comprimento extra na retração (Troca de ferramenta)" +msgstr "Comprimento extra no reinício (Troca de ferramenta)" msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Quando a retração é compensada após a troca de ferramenta, a extrusora empurrará essa quantidade adicional de filamento." @@ -16279,13 +16275,11 @@ msgstr "Troca de ferramenta na torre de purga" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Força o cabeçote de impressão a se deslocar até a torre de purga antes de emitir o comando de troca de ferramenta (Tx). Relevante apenas para impressoras com múltiplas extrusoras (múltiplos cabeçotes de impressão) que utilizam uma torre de purga Tipo 2. Por padrão, o Orca ignora o deslocamento em máquinas com múltiplos cabeçotes de impressão, pois o firmware gerencia a troca do cabeçote, o que pode resultar na emissão do comando Tx acima da peça impressa. Habilite esta opção se desejar que a troca de ferramenta seja sempre emitida acima da torre de purga." -# AI Translated msgid "Wait for temperature on wipe tower" msgstr "Aguardar a temperatura na torre de purga" -# AI Translated msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." -msgstr "Pega a nova ferramenta sem esperar que ela atinja a temperatura de impressão, desloca-se até a torre de purga e aguarda a temperatura ali, logo antes de purgar. O vazamento causado pelo aquecimento cai na torre em vez do modelo, e o deslocamento acontece durante o aquecimento. Relevante apenas para impressoras multiextrusora (multicabeça) que usam uma torre de purga do tipo 2. O firmware ou a macro de troca de ferramenta não devem aguardar a temperatura por conta própria. Quando desativado, a espera de temperatura é emitida logo após o comando de troca de ferramenta." +msgstr "Pega a nova ferramenta sem esperar que ela atinja a temperatura de impressão, desloca-se até a torre de purga e aguarda a temperatura ali, logo antes de purgar. O vazamento causado pelo aquecimento cai na torre em vez do modelo, e o deslocamento acontece junto com o aquecimento. Relevante apenas para impressoras multiextrusora (multicabeça) que usam uma torre de purga do Tipo 2. O firmware ou a macro de troca de ferramenta não devem aguardar a temperatura por conta própria. Quando desativado, a espera de temperatura é emitida logo após o comando de troca de ferramenta." msgid "No sparse layers (beta)" msgstr "Sem camadas esparsas (beta)" @@ -19315,19 +19309,19 @@ msgstr "Apenas impressoras com alterações nas predefinições de impressora, f msgid "Only display the filament names with changes to filament presets." msgstr "Exibir apenas os nomes dos filamentos com alterações nas predefinições de filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Apenas os nomes das impressoras com predefinições de impressora do usuário serão exibidos, e cada predefinição escolhida será exportada como um arquivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Apenas os nomes dos filamentos com predefinições de filamento do usuário serão exibidos, \n" "e todas as predefinições de filamento do usuário em cada nome de filamento selecionadas serão exportadas como um arquivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Apenas os nomes das impressoras com predefinições de processo alterados serão exibidos, \n" "e todas os predefinições de processo do usuário em cada nome de impressora selecionadas serão exportados como um arquivo zip." @@ -19556,7 +19550,7 @@ msgstr "Copiar informações do sistema para a área de transferência" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Precisamos de informações para diagnosticar a origem do problema. Consulte a página da wiki para obter um guia detalhado." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "O botão \"Empacotar\" reúne o arquivo do projeto e os logs da sessão atual em um arquivo ZIP." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19598,7 +19592,7 @@ msgstr "Nível de log" msgid "Stored logs" msgstr "Logs armazenados" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Compacta todos os logs armazenados em um arquivo ZIP." msgid "Profiles" @@ -19665,7 +19659,7 @@ msgstr "Tipo de impressora não encontrado, selecione manualmente." msgid "Authorizing..." msgstr "Autorizando…" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Erro. ​​Não foi possível obter o token de API para autorização" msgid "Could not parse server response." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index eb24ebc759..200d3cbb42 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -6376,10 +6376,10 @@ msgstr "Импорт 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Загрузка модели" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Импорт ZIP-архива" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Загрузка моделей, содержащихся в ZIP-архиве" msgid "Import Configs" @@ -8168,8 +8168,8 @@ msgstr "Во избежание повреждения принтера убед msgid "Customized Preset" msgstr "Пользовательский профиль" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Имена компонентов внутри файла STEP не в формате UTF8." +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Имена компонентов внутри файла STEP не в формате UTF-8." msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Из-за неподдерживаемой кодировки в названии могут присутствовать ошибочные символы." @@ -8190,7 +8190,7 @@ msgstr "Объём модели равен нулю" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Модель из файла %s слишком мала. Возможно, её размеры \n" "в метрах или дюймах. Внутренней единицей программы \n" @@ -11072,11 +11072,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Перенос изменений не требуется." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Копировать настройки" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Изменить настройки %s" #, c-format, boost-format @@ -12694,7 +12694,7 @@ msgstr "мм или %" msgid "Other layers" msgstr "Основная" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Температура стола для всех остальных слоёв. 0 – материал не поддерживает это покрытие." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -16223,7 +16223,7 @@ msgstr "Начальная и конечная точки траектории msgid "Reduce infill retraction" msgstr "Откат только при пересечении периметров" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" "Отключает откат (и подъём по Z), когда перемещения совершаются полностью над заполнением (где любые подтёки, вероятно, будут скрыты). Это поможет снизить количество откатов при печати сложных моделей и немного сэкономить время, но увеличит время нарезки и генерации G-кода.\n" "\n" @@ -16401,7 +16401,7 @@ msgstr "Вторичный откат" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Быстрый откат после очистки, выраженный в процентах от общей длины отката. В некоторых случаях позволяет значительно снизить количество «паутины».\n" @@ -16449,7 +16449,7 @@ msgstr "При срабатывании отката перед сменой и msgid "Z-hop height" msgstr "Высота подъёма" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "При каждом откате печатная голова немного приподнимается, создавая зазор между соплом и моделью. Это предотвращает столкновение сопла с моделью при перемещении. Использование спирального подъёма может помочь сократить образование \"паутины\"." msgid "Z-hop lower boundary" @@ -20306,21 +20306,21 @@ msgstr "Будут отображаться только изменённые п msgid "Only display the filament names with changes to filament presets." msgstr "Будут отображаться только изменённые профили материалов." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" "Будут отображаться только изменённые профили принтеров.\n" "Все они будут экспортированы в единый zip-файл." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Будут отображаться только изменённые профили материалов.\n" "Все они будут экспортированы в единый zip-файл." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Будут отображаться только профили принтеров с изменёнными настройками печати.\n" "Все изменённые профили настроек будут экспортированы в единый zip-файл." @@ -20560,7 +20560,7 @@ msgstr "Копировать в буфер обмена" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Эта информация требуется для диагностики проблем. Ознакомьтесь с руководством для получения подробностей." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Нажмите «Экспорт», чтобы сохранить текущий проект и журнал сессии в ZIP-архив." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -20602,7 +20602,7 @@ msgstr "Уровень ведения журнала" msgid "Stored logs" msgstr "Сохранённые журналы" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Нажмите «Экспорт», чтобы упаковать все сохранённые журналы в единый ZIP-архив" msgid "Profiles" @@ -20669,7 +20669,7 @@ msgstr "Требуется указать принтер вручную" msgid "Authorizing..." msgstr "Авторизация..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Ошибка получения токена авторизации" msgid "Could not parse server response." diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 52972e241a..fce8c33b10 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -6971,11 +6971,11 @@ msgid "Load a model" msgstr "Ladda modell" # AI Translated -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importera ZIP-arkiv" # AI Translated -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Läs in modeller som finns i ett ZIP-arkiv" msgid "Import Configs" @@ -8952,8 +8952,8 @@ msgstr "Bekräfta att G-koderna i dessa inställningar är säkra för att förh msgid "Customized Preset" msgstr "Anpassad inställning" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Komponent namnet i STEP filen är inte UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Komponent namnet i STEP filen är inte UTF-8 format!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "På grund av textkodning som inte stöds så kan skräptecken visas!" @@ -8974,7 +8974,7 @@ msgstr "Objektet är utan volym" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objektets fil %s är för litet, det är kanske i meter eller inches.\n" "Skala om till millimeter?" @@ -12190,12 +12190,12 @@ msgid "No modifications need to be copied." msgstr "Inga ändringar behöver kopieras." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiera parametrar" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Ändra parametrar för %s" # AI Translated @@ -14012,23 +14012,27 @@ msgstr "mm eller %" msgid "Other layers" msgstr "Andra lager" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Byggplattans temperatur för alla lager utom det första. Värdet 0 innebär att filamentet inte stöder utskrift på Cool Plate SuperTack." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Cool Plate." -# AI Translated +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Textured Cool Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Ett värde på 0 betyder att filamentet inte stöder utskrift på Engineering Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på High Temp Plate." +#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Byggplattans temperatur efter det första lagret. 0 betyder att filamentet inte stöds på den texturerade PEI-plattan." @@ -17720,8 +17724,8 @@ msgid "Reduce infill retraction" msgstr "Minska ifyllnads retraktionen" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Dra inte tillbaka när förflyttningen är helt i ett utfyllnadsområde. Det betyder att läckage av filament inte kan ses. Detta kan minska tiderna för indragning för komplexa modeller och spara utskriftstid, men gör beredning och generering av G-kod långsammare. Observera att z-hop inte heller utförs i områden där retraktionen hoppas över." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Dra inte tillbaka när förflyttningen är helt i ett utfyllnadsområde. Det betyder att läckage av filament inte kan ses. Detta kan minska tiderna för indragning för komplexa modeller och spara utskriftstid, men gör beredning och generering av G-kod långsammare. Observera att Z-hop inte heller utförs i områden där retraktionen hoppas över." # AI Translated msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -17913,7 +17917,7 @@ msgstr "Reduktionsmängd efter avtorkning" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Längden på den snabba reduktionen efter avtorkning, i förhållande till reduktionslängden.\n" @@ -17968,7 +17972,7 @@ msgstr "När reduktionen utlöses före ett verktygsbyte dras filamentet tillbak msgid "Z-hop height" msgstr "Z-hop-höjd" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "När det är en retraktion lyfts nozzel en aning för att skapa ett spel mellan nozzel och utskriften. Detta förhindrar att nozzel träffar utskriften när den förflyttas. Att använda spirallinjer för att lyfta z kan förhindra strängning" msgid "Z-hop lower boundary" @@ -22041,19 +22045,19 @@ msgstr "Endast printer med ändringar av inställningar för printer, filament o msgid "Only display the filament names with changes to filament presets." msgstr "Visa endast filament namnen vid ändringar av filament inställningar." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Endast printer namn med inställningar för printer visas, och varje inställning du väljer exporteras som zip-fil." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Endast filament namn med inställningar för användar filament visas, \n" "och alla inställningar för användar filament i varje filament namn du väljer exporteras som en zip-fil." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Endast printer namn med ändrade process inställningar visas, \n" "och alla användarprocess inställningar i varje printer namn som du väljer exporteras som zip-fil." @@ -22312,7 +22316,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Vi behöver information för att diagnostisera orsaken till problemet. Se wiki-sidan för en detaljerad guide." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketera-knappen samlar projektfilen och loggarna från den aktuella sessionen i en zip-fil." # AI Translated @@ -22368,7 +22372,7 @@ msgid "Stored logs" msgstr "Sparade loggar" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Paketerar alla sparade loggar i en zip-fil." # AI Translated @@ -22456,7 +22460,7 @@ msgid "Authorizing..." msgstr "Auktoriserar..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fel. Det går inte att hämta api-token för auktorisering" # AI Translated diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 4c4ac2d25f..ca12a4ced2 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -6302,10 +6302,10 @@ msgstr "นำเข้า 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "โหลดโมเดล" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "นำเข้าไฟล์ Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "โหลดโมเดลที่มีอยู่ในไฟล์ zip" msgid "Import Configs" @@ -8074,8 +8074,8 @@ msgstr "โปรดยืนยันว่ารหัส G ภายในค msgid "Customized Preset" msgstr "ค่าที่ตั้งไว้ล่วงหน้าที่กำหนดเอง" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "ชื่ออาจแสดงตัวอักษรขยะ!" @@ -8096,7 +8096,7 @@ msgstr "ปริมาตรของวัตถุเป็นศูนย์ #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "วัตถุจากไฟล์ %s มีขนาดเล็กเกินไป และอาจมีหน่วยเป็นเมตรหรือนิ้ว\n" " คุณต้องการขยายขนาดเป็นมิลลิเมตรหรือไม่?" @@ -10948,12 +10948,12 @@ msgid "No modifications need to be copied." msgstr "ไม่มีการแก้ไขที่ต้องคัดลอก" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "คัดลอกพารามิเตอร์" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "แก้ไขพารามิเตอร์ของ %s" # AI Translated @@ -12578,7 +12578,7 @@ msgstr "มม. หรือ %" msgid "Other layers" msgstr "ชั้นอื่นๆ" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "อุณหภูมิฐานพิมพ์สำหรับชั้นต่างๆ ยกเว้นอุณหภูมิเริ่มต้น ค่า 0 หมายความว่าเส้นพลาสติกไม่รองรับการพิมพ์บน Cool Plate SuperTack" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15827,8 +15827,8 @@ msgstr "จุดเริ่มต้นและจุดสิ้นสุด msgid "Reduce infill retraction" msgstr "ลดการดึงกลับในไส้ใน" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "อย่าถอยกลับเมื่อการเดินทางอยู่ภายในพื้นที่ที่ไส้ในเข้าไปทั้งหมด นั่นหมายความว่าไม่สามารถมองเห็นการรั่วไหลได้ วิธีนี้จะช่วยลดเวลาในการดึงกลับสำหรับโมเดลที่ซับซ้อนและประหยัดเวลาในการพิมพ์ แต่จะทำให้การแบ่งส่วนและการสร้าง G-code ช้าลง โปรดทราบว่า z-hop จะไม่ดำเนินการในพื้นที่ที่มีการข้ามการถอนกลับ" +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "อย่าถอยกลับเมื่อการเดินทางอยู่ภายในพื้นที่ที่ไส้ในเข้าไปทั้งหมด นั่นหมายความว่าไม่สามารถมองเห็นการรั่วไหลได้ วิธีนี้จะช่วยลดเวลาในการดึงกลับสำหรับโมเดลที่ซับซ้อนและประหยัดเวลาในการพิมพ์ แต่จะทำให้การแบ่งส่วนและการสร้าง G-code ช้าลง โปรดทราบว่า Z-hop จะไม่ดำเนินการในพื้นที่ที่มีการข้ามการถอนกลับ" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "ตัวเลือกนี้จะทำให้อุณหภูมิของชุดดันเส้นที่ไม่ใช้งานลดลงเพื่อป้องกันการไหลซึม" @@ -15997,7 +15997,7 @@ msgstr "ปริมาณการดึงกลับหลังเช็ด # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "ความยาวของการดึงกลับอย่างเร็วหลังเช็ดหัว สัมพันธ์กับความยาวการดึงกลับ\n" @@ -16044,7 +16044,7 @@ msgstr "เมื่อการดึงกลับทำงานก่อน msgid "Z-hop height" msgstr "ความสูงยกแกน Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "เมื่อใดก็ตามที่การดึงกลับเสร็จสิ้น หัวฉีดจะถูกยกขึ้นเล็กน้อยเพื่อสร้างระยะห่างระหว่างหัวฉีดและงานพิมพ์ ป้องกันไม่ให้หัวฉีดชนกับงานพิมพ์ขณะเคลื่อนตัว การใช้เส้นเกลียวเพื่อยก Z สามารถป้องกันการร้อยสายได้" msgid "Z-hop lower boundary" @@ -19632,19 +19632,19 @@ msgstr "แสดงเฉพาะชื่อเครื่องพิมพ msgid "Only display the filament names with changes to filament presets." msgstr "แสดงเฉพาะชื่อเส้นพลาสติกที่มีการเปลี่ยนแปลงการตั้งค่าล่วงหน้าของเส้นพลาสติก" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "เฉพาะชื่อเครื่องพิมพ์ที่มีการตั้งค่าเครื่องพิมพ์ล่วงหน้าของผู้ใช้เท่านั้นที่จะแสดง และการตั้งค่าล่วงหน้าแต่ละรายการที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "เฉพาะชื่อเส้นพลาสติกที่มีการตั้งค่าล่วงหน้าของเส้นพลาสติกผู้ใช้เท่านั้นที่จะถูกแสดง \n" "และค่าฟิลาเมนต์ของผู้ใช้ทั้งหมดที่กำหนดไว้ล่วงหน้าในแต่ละชื่อฟิลาเมนต์ที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "เฉพาะชื่อเครื่องพิมพ์ที่มีการตั้งค่าล่วงหน้าของกระบวนการที่เปลี่ยนแปลงเท่านั้นที่จะปรากฏขึ้น \n" "และกระบวนการของผู้ใช้ที่ตั้งไว้ล่วงหน้าในชื่อเครื่องพิมพ์แต่ละเครื่องที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" @@ -19885,7 +19885,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "เราต้องการข้อมูลเพื่อวินิจฉัยแหล่งที่มาของปัญหา ตรวจสอบหน้า wiki สำหรับคำแนะนำโดยละเอียด" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "ปุ่ม Pack จะรวบรวมไฟล์โปรเจกต์และบันทึกของเซสชันปัจจุบันลงในไฟล์ zip" # AI Translated @@ -19941,7 +19941,7 @@ msgid "Stored logs" msgstr "บันทึกที่จัดเก็บ" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "รวมบันทึกที่จัดเก็บทั้งหมดลงในไฟล์ zip" # AI Translated @@ -20021,7 +20021,7 @@ msgstr "ไม่พบประเภทเครื่องพิมพ์ msgid "Authorizing..." msgstr "กำลังอนุญาต..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "ข้อผิดพลาด ไม่สามารถรับโทเคน API สำหรับการอนุญาตได้" msgid "Could not parse server response." diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 833706ad70..b7a2c5b682 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -6370,10 +6370,10 @@ msgstr "3MF/STL/STEP/SVG/OBJ/AMF'yi içe aktar" msgid "Load a model" msgstr "Model yükle" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip Arşivini İçe Aktar" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Zip arşivindeki modelleri yükle" msgid "Import Configs" @@ -8171,8 +8171,8 @@ msgstr "Lütfen bu ön ayarlar içindeki G-code'larının makineye herhangi bir msgid "Customized Preset" msgstr "Özel Ayar" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Step dosyasındaki bileşenlerin adı UTF8 formatında değil!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Step dosyasındaki bileşenlerin adı UTF-8 formatında değil!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8194,10 +8194,10 @@ msgstr "Cismin hacmi sıfır" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s dosyasındaki nesne çok küçük; metre veya inç cinsinden olabilir.\n" -" Milimetreye ölçeklendirmek istiyor musunuz?" +"Milimetreye ölçeklendirmek istiyor musunuz?" msgid "Object too small" msgstr "Nesne çok küçük" @@ -11128,12 +11128,12 @@ msgid "No modifications need to be copied." msgstr "Kopyalanması gereken değişiklik yok." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parametreleri kopyala" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%s parametrelerini değiştir" # AI Translated @@ -12805,7 +12805,7 @@ msgstr "mm veya %" msgid "Other layers" msgstr "Diğer katmanlar" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "İlk katman hariç tüm katmanlar için yatak sıcaklığı. 0 değeri, filamentin Cool Plate SuperTack üzerine baskıyı desteklemediği anlamına gelir." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -16129,8 +16129,8 @@ msgid "Reduce infill retraction" msgstr "Dolguda geri çekmeyi azalt" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Hareket tamamen dolgu alanı içindeyken geri çekme yapılmaz. Bu, sızıntının görülemeyeceği anlamına gelir. Bu, karmaşık modellerde geri çekme sayısını azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi ve G-code oluşturmayı yavaşlatır. Geri çekmenin atlandığı alanlarda z-hop'un da uygulanmadığını unutmayın." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Hareket tamamen dolgu alanı içindeyken geri çekme yapılmaz. Bu, sızıntının görülemeyeceği anlamına gelir. Bu, karmaşık modellerde geri çekme sayısını azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi ve G-code oluşturmayı yavaşlatır. Geri çekmenin atlandığı alanlarda Z-hop'un da uygulanmadığını unutmayın." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Bu seçenek sızıntıyı önlemek için aktif olmayan ekstrüderlerin sıcaklığını düşürecektir." @@ -16305,7 +16305,7 @@ msgstr "Silme sonrası geri çekme miktarı" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Silme sonrasındaki hızlı geri çekmenin uzunluğu; geri çekme uzunluğuna göredir.\n" @@ -16352,7 +16352,7 @@ msgstr "Takım değişiminden önce geri çekme tetiklendiğinde, filament belir msgid "Z-hop height" msgstr "Z-Sıçrama yüksekliği" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Geri çekme işlemi her yapıldığında, nozul ile baskı arasında açıklık oluşturmak için nozul biraz kaldırılır. Hareket halindeyken nozulun baskıya çarpmasını önler. Z'yi kaldırmak için spiral çizgi kullanmak çekmeyi önleyebilir." msgid "Z-hop lower boundary" @@ -18155,10 +18155,10 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "Daha yeni sürüme sahip 3mf’nin dilimlenmesine izin ver." msgid "Current Z-hop" -msgstr "Mevcut z-hop" +msgstr "Mevcut Z-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Özel G-code bloğunun başında bulunan z-hop'u içerir." +msgstr "Özel G-code bloğunun başında bulunan Z-hop'u içerir." msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Ekstruderin özel G-code bloğunun başlangıcındaki konumu. Özel G-code başka bir yere seyahat ederse, Slicer'ın kontrolü geri aldığında nereden seyahat ettiğini bilmesi için bu değişkene yazması gerekir." @@ -20003,19 +20003,19 @@ msgstr "Yazıcı adlarını yalnızca yazıcı, filament ve işlem ön ayarları msgid "Only display the filament names with changes to filament presets." msgstr "Filament adlarını yalnızca filament ön ayarlarında yapılan değişikliklerle görüntüleyin." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek ve seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Yalnızca kullanıcı filamenti ön ayarlarına sahip filament adları \n" "görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti ön ayarları zip olarak dışa aktarılacaktır." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Yalnızca işlem ön ayarları değiştirilen yazıcı adları görüntülenecek \n" "ve seçtiğiniz her yazıcı adındaki tüm kullanıcı işlem ön ayarları zip olarak dışa aktarılacaktır." @@ -20260,7 +20260,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Sorunun kaynağını teşhis etmek için bilgiye ihtiyacımız var. Ayrıntılı kılavuz için wiki sayfasına bakın." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketle düğmesi, geçerli oturumun proje dosyasını ve günlüklerini bir zip dosyasında toplar." # AI Translated @@ -20316,7 +20316,7 @@ msgid "Stored logs" msgstr "Saklanan günlükler" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Saklanan tüm günlükleri bir zip dosyasında paketler." # AI Translated @@ -20402,7 +20402,7 @@ msgid "Authorizing..." msgstr "Yetkilendiriliyor..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Hata. Yetkilendirme için api belirteci alınamıyor" # AI Translated diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index df06c01684..8393e92947 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -6339,10 +6339,10 @@ msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Завантажте модель" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Імпорт Zip-архіву" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Завантажити моделі, що містяться в zip-архіві" msgid "Import Configs" @@ -8180,8 +8180,8 @@ msgid "Customized Preset" msgstr "Пристосований пресет" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Назви компонентів усередині файлу STEP не у форматі UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Назви компонентів усередині файлу STEP не у форматі UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Через непідтримуване кодування тексту можуть зʼявлятися непотрібні символи!" @@ -8202,7 +8202,7 @@ msgstr "Обʼєм обʼєкта дорівнює нулю" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Обʼєкт із файлу %s занадто малий, можливо, в метрах або дюймах.\n" "Ви хочете масштабувати до міліметрів?" @@ -11173,12 +11173,12 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Немає змін для копіювання." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Параметри копіювання" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Змінити параметри %s" # AI Translated @@ -12881,8 +12881,7 @@ msgstr "мм або %" msgid "Other layers" msgstr "Інші шари" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Температура столу для всіх шарів, крім першого. Значення 0 означає, що філамент не підтримує друк на Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -16313,8 +16312,8 @@ msgid "Reduce infill retraction" msgstr "Зменшити втягування заповнення" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Не втягувати, коли переміщення повністю проходить у зоні заповнення. Це означає, що витікання не буде видно. Це може зменшити кількість втягувань для складних моделей і заощадити час друку, але сповільнює нарізку та генерацію G-коду. Зверніть увагу, що z-hop також не виконується в зонах, де втягування пропускається." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Не втягувати, коли переміщення повністю проходить у зоні заповнення. Це означає, що витікання не буде видно. Це може зменшити кількість втягувань для складних моделей і заощадити час друку, але сповільнює нарізку та генерацію G-коду. Зверніть увагу, що Z-hop також не виконується в зонах, де втягування пропускається." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Цей параметр знижує температуру неактивних екструдерів, щоб запобігти підтіканням." @@ -16489,7 +16488,7 @@ msgstr "Величина втягування після протирання" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Довжина швидкого втягування після протирання, відносно довжини втягування.\n" @@ -16538,7 +16537,7 @@ msgstr "Коли втягування спрацьовує перед зміно msgid "Z-hop height" msgstr "Висота Z-підйому" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Під час кожного втягування сопло трохи піднімається, щоб створити зазор між соплом та об’єктом друку. Це запобігає зіткненню сопла з об’єктом друку під час переміщення. Використання спіральної лінії підняття по осі Z може запобігти появі ниток" msgid "Z-hop lower boundary" @@ -20244,12 +20243,12 @@ msgstr "Показувати лише назви принтерів зі змі msgid "Only display the filament names with changes to filament presets." msgstr "Показувати лише назви філаментів зі змінами у пресетах філаменту." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Будуть відображатися лише назви принтерів з пресетами принтера користувача, і кожен обраний пресет буде експортовано у форматі ZIP." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Будуть відображатися лише назви філаментів з налаштуваннями філаменту користувача, \n" "і всі налаштування філаменту користувача для кожної вибраної назви філаменту \n" @@ -20257,7 +20256,7 @@ msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Будуть відображатися лише назви принтерів зі зміненими налаштуваннями процесу, \n" "і всі налаштування процесу користувача для кожної вибраної назви принтера будуть \n" @@ -20499,7 +20498,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Нам потрібна інформація для встановлення джерела проблеми. Докладний посібник дивіться на сторінці wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Кнопка «Пакувати» збирає файл проєкту та журнали поточного сеансу в один zip-файл." # AI Translated @@ -20543,7 +20542,7 @@ msgstr "Рівень журналу" msgid "Stored logs" msgstr "Збережені логи" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Запаковує всі збережені логи у файл zip." msgid "Profiles" @@ -20610,7 +20609,7 @@ msgstr "Тип принтера не знайдено, будь ласка ви msgid "Authorizing..." msgstr "Авторизування..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Помилка. Не вдалося отримати api-токен для авторизування" msgid "Could not parse server response." diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index e78fc51687..936bb590c5 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -6687,10 +6687,10 @@ msgstr "Nhập 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Tải model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Nhập lưu trữ Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Tải các model chứa trong lưu trữ zip" msgid "Import Configs" @@ -8585,8 +8585,8 @@ msgstr "Vui lòng xác nhận G-code trong các preset này an toàn để ngăn msgid "Customized Preset" msgstr "Preset tùy chỉnh" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF8!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF-8!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8608,10 +8608,10 @@ msgstr "Thể tích của đối tượng bằng không" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Đối tượng từ file %s quá nhỏ, và có thể đang ở đơn vị mét hoặc inch.\n" -" Bạn có muốn chuyển đổi sang milimét?" +"Bạn có muốn chuyển đổi sang milimét?" msgid "Object too small" msgstr "Đối tượng quá nhỏ" @@ -11692,12 +11692,12 @@ msgid "No modifications need to be copied." msgstr "Không có thay đổi nào cần sao chép." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Sao chép tham số" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Sửa tham số của %s" # AI Translated @@ -13449,7 +13449,7 @@ msgstr "mm hoặc %" msgid "Other layers" msgstr "Lớp khác" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Nhiệt độ bàn cho các lớp ngoại trừ lớp đầu tiên. Giá trị 0 có nghĩa là filament không hỗ trợ in trên bản Cool SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -16846,8 +16846,8 @@ msgid "Reduce infill retraction" msgstr "Giảm rút infill" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Không rút khi di chuyển ở vùng infill hoàn toàn. Điều đó có nghĩa là chảy nhựa không thể nhìn thấy. Điều này có thể giảm số lần rút cho model phức tạp và tiết kiệm thời gian in, nhưng làm cho slice và tạo G-code chậm hơn. Lưu ý rằng z-hop cũng không được thực hiện ở những vùng bỏ qua việc rút." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Không rút khi di chuyển ở vùng infill hoàn toàn. Điều đó có nghĩa là chảy nhựa không thể nhìn thấy. Điều này có thể giảm số lần rút cho model phức tạp và tiết kiệm thời gian in, nhưng làm cho slice và tạo G-code chậm hơn. Lưu ý rằng Z-hop cũng không được thực hiện ở những vùng bỏ qua việc rút." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Tùy chọn này sẽ giảm nhiệt độ của các extruder không hoạt động để ngăn chảy nhựa." @@ -17022,7 +17022,7 @@ msgstr "Lượng rút sau khi lau" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Độ dài rút nhanh sau khi lau, tương đối so với độ dài rút.\n" @@ -17071,7 +17071,7 @@ msgstr "Khi rút được kích hoạt trước khi đổi công cụ, filament msgid "Z-hop height" msgstr "Chiều cao Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Bất cứ khi nào rút được thực hiện, đầu phun được nâng lên một chút để tạo khoảng trống giữa đầu phun và bản in. Nó ngăn đầu phun va vào bản in khi di chuyển. Sử dụng đường xoắn ốc để nâng Z có thể ngăn dây kéo." msgid "Z-hop lower boundary" @@ -20793,19 +20793,19 @@ msgstr "Chỉ hiển thị tên máy in có thay đổi đối với cài đặt msgid "Only display the filament names with changes to filament presets." msgstr "Chỉ hiển thị tên filament có thay đổi đối với cài đặt sẵn filament." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Chỉ tên máy in có cài đặt sẵn máy in người dùng sẽ được hiển thị, và mỗi cài đặt sẵn bạn chọn sẽ được xuất dưới dạng zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Chỉ tên filament có cài đặt sẵn filament người dùng sẽ được hiển thị, \n" "và tất cả cài đặt sẵn filament người dùng trong mỗi tên filament bạn chọn sẽ được xuất dưới dạng zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Chỉ tên máy in có cài đặt sẵn quy trình đã thay đổi sẽ được hiển thị, \n" "và tất cả cài đặt sẵn quy trình người dùng trong mỗi tên máy in bạn chọn sẽ được xuất dưới dạng zip." @@ -21057,7 +21057,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Chúng tôi cần thông tin để chẩn đoán nguồn gốc vấn đề. Hãy xem trang wiki để có hướng dẫn chi tiết." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Nút Đóng gói thu thập file dự án và nhật ký của phiên hiện tại vào một file zip." # AI Translated @@ -21113,7 +21113,7 @@ msgid "Stored logs" msgstr "Nhật ký đã lưu" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Đóng gói toàn bộ nhật ký đã lưu vào một file zip." # AI Translated @@ -21201,7 +21201,7 @@ msgid "Authorizing..." msgstr "Đang xác thực..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Lỗi. Không lấy được token api để xác thực" # AI Translated diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index d2f07d19ae..99a6cadd67 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6157,10 +6157,10 @@ msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "加载模型" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "导入 ZIP 压缩文件" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "从 ZIP 压缩文件中导入一个或多个模型" msgid "Import Configs" @@ -7905,8 +7905,8 @@ msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造 msgid "Customized Preset" msgstr "自定义的预设" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "STEP 文件中的部件名称不是 UTF8 格式!" +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "STEP 文件中的部件名称不是 UTF-8 格式!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7928,7 +7928,7 @@ msgstr "对象的体积为零" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "文件 %s 中对象的尺寸过小,似乎是以米(m)或者英寸(inch)为单位定义的。\n" "OrcaSlicer的内部单位为毫米(mm)。是否要转换成毫米(mm)?" @@ -10738,12 +10738,12 @@ msgid "No modifications need to be copied." msgstr "没有需要复制的修改。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "复制参数" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "修改 %s 的参数" # AI Translated @@ -12374,7 +12374,8 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它层" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首层外的其他层的热床温度。0值表示该耗材丝不支持在Cool Plate SuperTack上打印。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15583,7 +15584,7 @@ msgstr "从切割区域到垃圾桶的起始和结束点。" msgid "Reduce infill retraction" msgstr "减小填充回抽" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "当空驶完全在填充区域内时不触发回抽。这意味着即使漏料也是不可见的。对于复杂模型,该设置能够减少回抽次数以及打印时长,但是会造成G-code生成变慢" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15754,7 +15755,7 @@ msgstr "擦拭后的回抽量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "擦拭后快速回抽的长度,相对于回抽长度。\n" @@ -15801,7 +15802,7 @@ msgstr "在换工具头之前触发回抽时,耗材丝会按指定的长度回 msgid "Z-hop height" msgstr "Z抬升高度" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "回抽完成之后,喷嘴轻微抬升,和打印件之间产生一定间隙。这能够避免空驶时喷嘴和打印件剐蹭和碰撞。使用螺旋线抬升z能够减少拉丝。" msgid "Z-hop lower boundary" @@ -19386,17 +19387,17 @@ msgstr "仅显示对打印机、耗材和工艺预设有改动的打印机名称 msgid "Only display the filament names with changes to filament presets." msgstr "仅显示对耗材预设有改动的耗材名称。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "只显示带有用户打印机预设的打印机名称,并且您选择的每个预设都将导出为一个 ZIP 文件。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "只显示带有用户耗材预设的耗材名称,您选择的每个耗材名称中的所有用户耗材预设都将导出为一个 ZIP 文件。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "只显示带有更改的工艺预设的打印机名称,您选择的每个打印机名称中的所有用户工艺预设都将导出为一个 ZIP 文件。" msgid "Please select at least one printer or filament." @@ -19635,7 +19636,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "我们需要相关信息来诊断问题的根源。请查看 wiki 页面获取详细指南。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "“打包”按钮会将当前会话的项目文件和日志收集到一个 zip 文件中。" # AI Translated @@ -19691,7 +19692,7 @@ msgid "Stored logs" msgstr "已存储的日志" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "将所有已存储的日志打包到一个 zip 文件中。" # AI Translated @@ -19771,7 +19772,7 @@ msgstr "未找到打印机类型,请手动选择。" msgid "Authorizing..." msgstr "正在授权..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "错误。无法获取用于授权的 API 令牌" msgid "Could not parse server response." diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 456092deb5..86f5263b1b 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -6287,10 +6287,10 @@ msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "載入模型" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "匯入壓縮檔" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "載入壓縮檔中的模型" msgid "Import Configs" @@ -8066,7 +8066,7 @@ msgstr "請確認這些預設中的 G-code 是安全的,以防止對列印裝 msgid "Customized Preset" msgstr "自訂預設" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP 檔案內部元件的名稱不是 UTF-8 格式!" # AI Translated @@ -8089,7 +8089,7 @@ msgstr "物件的體積為零" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "檔案 %s 中的物件太小,可能以公尺(M)或英吋(Inches)為單位。\n" "是否要轉換成毫米(mm)?" @@ -10944,12 +10944,12 @@ msgid "No modifications need to be copied." msgstr "沒有需要複製的修改。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "複製參數" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "修改 %s 的參數" # AI Translated @@ -12578,7 +12578,8 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它層" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +#, fuzzy +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首層外的其他層的熱床溫度。0值表示該線材不支援在低溫增穩列印板上列印。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -15790,7 +15791,7 @@ msgstr "從切割區域到垃圾桶的起始和結束點。" msgid "Reduce infill retraction" msgstr "減小填充回抽" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "當空駛完全在填充區域內時不觸發回抽。這意味著即使漏料也是不可見的。對於複雜模型,該設定能夠減少回抽次數以及列印時長,但是會造成 G-code 產生變慢" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15961,7 +15962,7 @@ msgstr "擦拭後的回抽量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "擦拭後快速回抽的長度,相對於回抽長度。\n" @@ -16008,7 +16009,7 @@ msgstr "在換工具之前觸發回抽時,線材會依指定的長度回抽( msgid "Z-hop height" msgstr "Z 抬升高度" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "回抽完成之後,噴嘴輕微抬升,和列印物件之間產生一定間隙。這能夠避免空駛時噴嘴和列印物件剮蹭和碰撞。使用螺旋線抬升z能夠減少拉絲" msgid "Z-hop lower boundary" @@ -19573,19 +19574,19 @@ msgstr "僅顯示對列印裝置、線材和處理預設設定有變更的列印 msgid "Only display the filament names with changes to filament presets." msgstr "僅顯示對線材預設設定有變更的線材名稱。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "只有具有使用者列印裝置預設設定的列印裝置名稱會顯示,您選擇的每個預設設定將以 zip 檔案格式匯出。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "只有具有使用者線材預設設定的線材名稱會顯示,\n" "您選擇的每個線材名稱中的所有使用者線材預設設定將以 zip 檔案格式匯出。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "只有具有變更過處理預設設定的列印裝置名稱會顯示,\n" "您選擇的每個列印裝置名稱中的所有使用者處理預設設定將以 zip 檔案格式匯出。" @@ -19826,7 +19827,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "我們需要相關資訊以診斷問題來源。請查看 wiki 頁面以取得詳細指南。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "「打包」按鈕會將目前工作階段的專案檔案與記錄收集到一個 zip 檔案中。" # AI Translated @@ -19882,7 +19883,7 @@ msgid "Stored logs" msgstr "已儲存的記錄" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "將所有已儲存的記錄打包成一個 zip 檔案。" # AI Translated @@ -19962,7 +19963,7 @@ msgstr "找不到列印裝置類型,請手動選取。" msgid "Authorizing..." msgstr "授權中..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "錯誤。無法取得用於授權的 API token。" msgid "Could not parse server response." diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 17d7cee678..29362fcf39 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1130,8 +1130,7 @@ void PrintConfigDef::init_fff_params() // BBS def = this->add("supertack_plate_temp", coInts); def->label = L("Other layers"); - def->tooltip = L("Bed temperature for layers except the initial one. " - "A value of 0 means the filament does not support printing on the Cool Plate SuperTack."); + def->tooltip = L("This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack."); def->sidetext = L(u8"\u2103" /* °C */); // degrees Celsius, CIS languages need translation def->full_label = L("Bed temperature"); def->min = 0; @@ -2770,7 +2769,7 @@ void PrintConfigDef::init_fff_params() def = this->add("fan_cooling_layer_time", coFloats); def->label = L("Layer time"); def->tooltip = L("The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 1000; def->mode = comSimple; @@ -2923,7 +2922,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Filament load time"); def->tooltip = L("Time to load new filament when switch filament. It's usually applicable for single-extruder multi-material machines. " "For tool changers or multi-tool machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); @@ -2932,7 +2931,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Filament unload time"); def->tooltip = L("Time to unload old filament when switch filament. It's usually applicable for single-extruder multi-material machines. " "For tool changers or multi-tool machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); @@ -2941,7 +2940,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Tool change time"); def->tooltip = L("Time taken to switch tools. It's usually applicable for tool changers or multi-tool machines. " "For single-extruder multi-material machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat { 0. }); @@ -3087,7 +3086,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Time to wait after the filament is unloaded. " "May help to get reliable tool changes with flexible materials " "that may need more time to shrink to original dimensions."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 0. }); @@ -4206,7 +4205,7 @@ void PrintConfigDef::init_fff_params() "\nIt won't move fan commands from custom G-code (they act as a sort of 'barrier')." "\nIt won't move fan commands into the start G-code if the 'only custom start G-code' is activated." "\nUse 0 to deactivate."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -4222,7 +4221,7 @@ void PrintConfigDef::init_fff_params() "\nThis is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to " "get the fan up to speed faster." "\nSet to 0 to deactivate."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -4866,7 +4865,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Ironing expansion"); def->category = L("Quality"); def->tooltip = L("Expand or contract the ironing area."); - def->sidetext = L("mm"); + def->sidetext = L("mm"); // millimeters, CIS languages need translation def->min = -100; def->max = 100; def->mode = comExpert; @@ -4903,7 +4902,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Quality"); def->tooltip = L("Minimum Z-layer height.\n" "Also controls the slicing plane."); - def->sidetext = L("mm"); + def->sidetext = L("mm"); // millimeters, CIS languages need translation def->min = 0; def->max = 100; def->mode = comExpert; @@ -5102,7 +5101,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The allowed maximum output force of Y axis"); - def->sidetext = L("N"); + def->sidetext = L_CONTEXT("N", "Newton"); // Newtons, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5112,7 +5111,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The machine bed mass load of Y axis"); - def->sidetext = L("g"); + def->sidetext = L_CONTEXT("g", "gram"); // grams, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5122,7 +5121,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The allowed max printed mass on a plate"); - def->sidetext = L("g"); + def->sidetext = L_CONTEXT("g", "gram"); // grams, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5481,7 +5480,7 @@ void PrintConfigDef::init_fff_params() def = this->add("reduce_infill_retraction", coBool); def->label = L("Reduce infill retraction"); - def->tooltip = L("Don\'t retract when the travel is entirely within an infill area. That means the oozing can\'t been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped."); + def->tooltip = L("Don\'t retract when the travel is entirely within an infill area. That means the oozing can\'t been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -5736,7 +5735,7 @@ void PrintConfigDef::init_fff_params() def = this->add("retract_after_wipe", coPercents); def->label = L("Retract amount after wipe"); // xgettext:no-c-format, no-boost-format - def->tooltip = L("The length of fast retraction after wipe, relative to retraction length.\n" + def->tooltip = L("This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value."); def->sidetext = "%"; def->mode = comExpert; @@ -5802,7 +5801,7 @@ void PrintConfigDef::init_fff_params() def = this->add("z_hop", coFloats); def->label = L("Z-hop height"); - def->tooltip = L("Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing."); + def->tooltip = L("Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing."); def->sidetext = L("mm"); // millimeters, CIS languages need translation def->mode = comSimple; def->min = 0; @@ -6380,7 +6379,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Layer time"); def->tooltip = L("The printing speed in exported G-code will be slowed down when the estimated layer time is " "shorter than this value in order to get better cooling for these layers."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 1000; def->mode = comSimple; @@ -6533,7 +6532,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Preheat time"); def->tooltip = L("To reduce the waiting time after tool change, Orca can preheat the next tool while the current tool is still in use. " "This setting specifies the time in seconds to preheat the next tool. Orca will insert a M104 command to preheat the tool in advance."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 120; def->mode = comAdvanced; @@ -8025,7 +8024,7 @@ void PrintConfigDef::init_fff_params() def = this->add("machine_hotend_change_time", coFloat); def->label = L("Hotend change time"); def->tooltip = L("Time to change hotend."); - def->sidetext = L("s"); + def->sidetext = L_CONTEXT("s", "second"); def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index 10fa9653eb..3c2981d822 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -28,9 +28,9 @@ std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter &writer, std::st gcode << writer.retract(); // retract before z move or move if(z > EPSILON && layer_height >= 0){ - gcode << writer.travel_to_z(z, "z-hop"); // Perform z hop + gcode << writer.travel_to_z(z, "Z-hop"); // Perform z hop gcode << writer.travel_to_xy(pt, comment); // Travel with z move - gcode << writer.travel_to_z(layer_height, "undo z-hop"); // Undo z hop + gcode << writer.travel_to_z(layer_height, "undo Z-hop"); // Undo z hop }else { gcode << writer.travel_to_xy(pt, comment); } diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 063d1ce628..892576f0c0 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -3867,14 +3867,14 @@ void ExportConfigsDialog::select_curr_radiobox(std::vector<std::pair<RadioBox *, m_preset_sizer->Add(create_checkbox(m_presets_window, preset.second, printer_name, m_preset), 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(5)); } - m_serial_text->SetLabel(_L("Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive.")); } else if (export_type == m_exprot_type.filament_preset) { for (std::pair<std::string, std::vector<std::pair<std::string, Preset *>>> filament_name_to_preset : m_filament_name_to_presets) { if (filament_name_to_preset.second.empty()) continue; wxString filament_name = wxString::FromUTF8(filament_name_to_preset.first); m_preset_sizer->Add(create_checkbox(m_presets_window, filament_name, m_printer_name), 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(5)); } - m_serial_text->SetLabel(_L("Only the filament names with user filament presets will be displayed, \nand all user filament presets in each filament name you select will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only the filament names with user filament presets will be displayed, \nand all user filament presets in each filament name you select will be exported as a ZIP archive.")); } else if (export_type == m_exprot_type.process_preset) { for (std::pair<std::string, std::vector<Preset *>> presets : m_process_presets) { Preset * printer_preset = preset_bundle->printers.find_preset(presets.first, false); @@ -3890,7 +3890,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vector<std::pair<RadioBox *, } } - m_serial_text->SetLabel(_L("Only printer names with changed process presets will be displayed, \nand all user process presets in each printer name you select will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only printer names with changed process presets will be displayed, \nand all user process presets in each printer name you select will be exported as a ZIP archive.")); } //m_presets_window->SetSizerAndFit(m_preset_sizer); m_presets_window->Layout(); diff --git a/src/slic3r/GUI/FilamentMapDialog.cpp b/src/slic3r/GUI/FilamentMapDialog.cpp index 12ca3a2965..7bb6f51421 100644 --- a/src/slic3r/GUI/FilamentMapDialog.cpp +++ b/src/slic3r/GUI/FilamentMapDialog.cpp @@ -241,7 +241,7 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent, wxBoxSizer *mode_sizer = new wxBoxSizer(wxHORIZONTAL); - m_auto_btn = new CapsuleButton(this, PageType::ptAuto, only_saving_mode ? _L("Fila Saving") : _L("Auto"), false); + m_auto_btn = new CapsuleButton(this, PageType::ptAuto, only_saving_mode ? _L("File Saving") : _L("Auto"), false); m_manual_btn = new CapsuleButton(this, PageType::ptManual, _L("Custom"), false); if (show_default) m_default_btn = new CapsuleButton(this, PageType::ptDefault, _L("Same as Global"), true); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a81cb72ab9..7b8912fe5b 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2850,7 +2850,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) { m_plater->add_model(); } }, "", nullptr, [this](){return can_add_models(); }, this); #endif - append_menu_item(import_menu, wxID_ANY, _L("Import Zip Archive") + dots, _L("Load models contained within a zip archive"), + append_menu_item(import_menu, wxID_ANY, _L("Import ZIP Archive") + dots, _L("Load models contained within a ZIP archive"), [this](wxCommandEvent&) { if (m_plater) m_plater->import_zip_archive(); }, "menu_import", nullptr, [this]() { return can_add_models(); }); append_menu_item(import_menu, wxID_ANY, _L("Import Configs") + dots /*+ "\t" + ctrl + "I"*/, _L("Load configs"), diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 067b1fcd04..0347803dbc 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9016,7 +9016,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ if (!isUtf8StepFile) { const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn"); if (!no_warn) { - MessageDialog dlg(nullptr, _L("Component name(s) inside step file not in UTF8 format!") + "\n\n" + _L("Because of unsupported text encoding, garbage characters may appear!"), + MessageDialog dlg(nullptr, _L("Component name(s) inside step file not in UTF-8 format!") + "\n\n" + _L("Because of unsupported text encoding, garbage characters may appear!"), wxString(SLIC3R_APP_FULL_NAME " - ") + _L("Attention!"), wxOK | wxICON_INFORMATION); dlg.show_dsa_button(_L("Remember my choice.")); dlg.ShowModal(); @@ -9129,7 +9129,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ else if (model.looks_like_saved_in_meters()) { // BBS do not handle look like in meters MessageDialog dlg(q, - format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"), + format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); int answer = dlg.ShowModal(); @@ -9137,7 +9137,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_ } else if (model.looks_like_imperial_units()) { // BBS do not handle look like in meters MessageDialog dlg(q, - format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"), + format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); int answer = dlg.ShowModal(); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d65d7f68bd..644c5258a1 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -8404,7 +8404,7 @@ void Tab::sync_excluder() } } if (config_to_apply.empty()) { - MessageDialog md(wxGetApp().plater(), _L("No modifications need to be copied."), _L("Copy paramters"), wxICON_INFORMATION | wxOK); + MessageDialog md(wxGetApp().plater(), _L("No modifications need to be copied."), _L("Copy parameters"), wxICON_INFORMATION | wxOK); md.ShowModal(); return; } @@ -8412,7 +8412,7 @@ void Tab::sync_excluder() std::string pt = m_preset_bundle->printers.get_edited_preset().get_printer_type(m_preset_bundle); std::string active_nozzle_name = DevPrinterConfigUtil::get_toolhead_display_name(pt, active_index, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase); std::string other_nozzle_name = DevPrinterConfigUtil::get_toolhead_display_name(pt, 1 - active_index, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase); - wxString title = wxString::Format(_L("Modify paramters of %s"), _L(active_nozzle_name)); + wxString title = wxString::Format(_L("Modify parameters of %s"), _L(active_nozzle_name)); wxString header = wxString::Format(_L("Do you want to modify the following parameters of the %s to that of the %s?"), _L(active_nozzle_name), _L(other_nozzle_name)); UnsavedChangesDialog dlg(title, header, &config_origin, from_index, dest_index, active_index == 0, active_nozzle); diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index c1dee7ca5c..a8c36eb975 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -226,7 +226,7 @@ TroubleshootDialog::TroubleshootDialog() }; auto info_desc_1 = create_info_line(_L("We need information for diagnosing source of the issue. Check wiki page for detailed guide.")); - auto info_desc_2 = create_info_line(_L("Pack button collects project file and logs of current session onto a zip file.")); + auto info_desc_2 = create_info_line(_L("Pack button collects project file and logs of current session onto a ZIP archive.")); auto info_desc_3 = create_info_line(_L("Any additional visual examples like images or screen recordings might be helpful while reporting the issue.")); wxBoxSizer *info_desc_sizer = new wxBoxSizer(wxVERTICAL); info_desc_sizer->Add(info_desc_1, 0, wxEXPAND | wxBOTTOM, FromDIP(8)); @@ -292,7 +292,7 @@ TroubleshootDialog::TroubleshootDialog() auto log_level_szr = create_label(_L("Log level"), ""); log_level_szr->Add(create_item_log_level_combo(), 0, wxALIGN_CENTER_VERTICAL); - auto log_pack_szr = create_label(_L("Stored logs"), _L("Packs all stored logs onto a zip file.")); + auto log_pack_szr = create_label(_L("Stored logs"), _L("Packs all stored logs onto a ZIP archive.")); auto log_pack_btn = create_btn(_L("Pack") + "...", ""); log_pack_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { auto data_dir = boost::filesystem::path(Slic3r::data_dir()); diff --git a/src/slic3r/Utils/3DPrinterOS.cpp b/src/slic3r/Utils/3DPrinterOS.cpp index b177e37e38..61fcc80d5b 100755 --- a/src/slic3r/Utils/3DPrinterOS.cpp +++ b/src/slic3r/Utils/3DPrinterOS.cpp @@ -323,7 +323,7 @@ bool C3DPrinterOS::login(wxString& msg) const msg.clear(); std::string token = get_api_auth_token(msg); if (token.empty()) { - msg = _L("Error. Can't get api token for authorization"); + msg = _L("Error. Can't get API token for authorization"); return false; } From b81c0e30c1c17c6e16c2f12f10488e6d649a87ef Mon Sep 17 00:00:00 2001 From: Ian Bassi <ian.bassi@outlook.com> Date: Wed, 2 Sep 2026 10:27:18 -0300 Subject: [PATCH 17/23] Localization update (#15497) * gettext * AI Translated * Update OrcaSlicer_es.po --- localization/i18n/OrcaSlicer.pot | 143 ++++++++++-- localization/i18n/ca/OrcaSlicer_ca.po | 219 +++++++++++++++--- localization/i18n/cs/OrcaSlicer_cs.po | 229 ++++++++++++++++--- localization/i18n/de/OrcaSlicer_de.po | 215 ++++++++++++++++-- localization/i18n/en/OrcaSlicer_en.po | 142 ++++++++++-- localization/i18n/es/OrcaSlicer_es.po | 180 +++++++++++++-- localization/i18n/eu/OrcaSlicer_eu.po | 215 ++++++++++++++++-- localization/i18n/fr/OrcaSlicer_fr.po | 227 ++++++++++++++++--- localization/i18n/hu/OrcaSlicer_hu.po | 215 ++++++++++++++++-- localization/i18n/it/OrcaSlicer_it.po | 215 ++++++++++++++++-- localization/i18n/ja/OrcaSlicer_ja.po | 235 +++++++++++++++++--- localization/i18n/ko/OrcaSlicer_ko.po | 227 ++++++++++++++++--- localization/i18n/lt/OrcaSlicer_lt.po | 215 ++++++++++++++++-- localization/i18n/nl/OrcaSlicer_nl.po | 233 ++++++++++++++++--- localization/i18n/pl/OrcaSlicer_pl.po | 227 ++++++++++++++++--- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 215 ++++++++++++++++-- localization/i18n/ru/OrcaSlicer_ru.po | 215 ++++++++++++++++-- localization/i18n/sv/OrcaSlicer_sv.po | 233 ++++++++++++++++--- localization/i18n/th/OrcaSlicer_th.po | 219 +++++++++++++++--- localization/i18n/tr/OrcaSlicer_tr.po | 225 ++++++++++++++++--- localization/i18n/uk/OrcaSlicer_uk.po | 225 ++++++++++++++++--- localization/i18n/vi/OrcaSlicer_vi.po | 219 +++++++++++++++--- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 216 +++++++++++++++--- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 216 +++++++++++++++--- 24 files changed, 4459 insertions(+), 661 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 4f4e5079da..db62fb4443 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -3,11 +3,12 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # +#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -2761,6 +2762,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3038,6 +3042,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -7402,6 +7409,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, possible-boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7522,12 +7532,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, possible-c-format, possible-boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7699,6 +7733,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7893,6 +7933,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -9042,6 +9094,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -10806,27 +10861,6 @@ msgstr "" msgid "Please choose the filament colour" msgstr "" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "" @@ -11509,6 +11543,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11545,6 +11582,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -12957,6 +12997,7 @@ msgstr "" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "" +msgctxt "second" msgid "s" msgstr "" @@ -13250,6 +13291,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -14397,6 +14480,7 @@ msgstr "" msgid "The allowed maximum output force of Y axis" msgstr "" +msgctxt "Newton" msgid "N" msgstr "" @@ -14406,6 +14490,7 @@ msgstr "" msgid "The machine bed mass load of Y axis" msgstr "" +msgctxt "gram" msgid "g" msgstr "" @@ -15833,6 +15918,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16860,6 +16951,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" @@ -18960,7 +19054,7 @@ msgstr "" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "" -msgid "Fila Saving" +msgid "File Saving" msgstr "" msgid "Don't remind me again" @@ -19320,6 +19414,9 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" +msgid "s" +msgstr "" + msgid "Volumetric speed" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 873cf0d7fb..2b42f300ac 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -3015,6 +3015,10 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusiona amb" +# AI Translated +msgid "Decompose Color" +msgstr "Descompondre el color" + msgid "Delete this filament" msgstr "Elimina aquest filament" @@ -3316,6 +3320,10 @@ msgstr "Muntatge" msgid "Merge parts to an object" msgstr "Fusionar les peces en un objecte" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Utilitzar una alçada de capa variable juntament amb la subcapa de color mixt pot reduir la qualitat de la barreja de colors." + # AI Translated msgid "Add layers" msgstr "Afegir capes" @@ -7956,6 +7964,10 @@ msgstr "Personalitzar la placa actual" msgid "The %s nozzle can not print %s." msgstr "El broquet %s no pot imprimir %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filament de color mixt en una impressora d'un sol extrusor requereix canvis de filament i purgues freqüents, cosa que pot augmentar considerablement el malbaratament i el risc d'obstrucció del broquet o del conducte de residus." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No es recomana barrejar %1% amb %2% en la impressió.\n" @@ -8081,6 +8093,26 @@ msgstr "Sincronitzar la llista de filaments des d'AMS" msgid "Set filaments to use" msgstr "Configurar els filaments a utilitzar" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Afegir filament mixt" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mixt" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Eliminar l'últim filament mixt" + +# AI Translated +msgid "Add mixed filament" +msgstr "Afegir filament mixt" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "El filament mixt té components no vàlids o incoherents. Torneu a editar les entrades afectades." + msgid "Search plate, object and part." msgstr "Cercar placa, objecte i peça." @@ -8088,6 +8120,18 @@ msgstr "Cercar placa, objecte i peça." msgid "Pellets" msgstr "Pèl·lets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "El filament mixt té referències de components trencades" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editar / Esborrar / Fusionar" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "El filament mixt de destinació utilitza aquest filament físic com a component. En fusionar-los s'eliminarà aquest filament físic i el filament mixt pot quedar no vàlid. Voleu continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "En completar l'operació, el projecte %s es tancarà i es crearà un nou projecte." @@ -8275,6 +8319,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objecte de múltiples peces detectat" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associant les textures als filaments" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avís d'importació de textures" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar aquests fitxers com un sol objecte amb diverses peces?\n" @@ -8488,6 +8540,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronitza ara" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "No s'ha pogut importar la textura. El model sembla contenir dades de textura, però el procés d'importació no s'ha pogut completar. El model s'importarà només com a geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplicant els colors de textura..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Actualitzant la vista 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Colors de textura aplicats." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Podeu mantenir els perfils modificats al projecte nou o descartar-los" @@ -9780,6 +9848,10 @@ msgstr "Gerro en Espiral" msgid "First layer filament sequence" msgstr "Seqüència d'impressió de la primera capa" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La llista de filaments conté filaments mixtos. La seqüència de filaments personalitzada no tindrà efecte." + msgid "By Layer" msgstr "Per Capa" @@ -11715,29 +11787,6 @@ msgstr "Volums de purga per al canvi de filament" msgid "Please choose the filament colour" msgstr "Trieu el color del filament" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La visualització en directe nativa de Wayland requereix el sink de vídeo GTK de GStreamer. Instal·leu el connector gtksink per a GStreamer i reinicieu l'OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "No s'ha pogut inicialitzar el sink de vídeo natiu de GStreamer per a Wayland. Comproveu la instal·lació del connector GTK de GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "El Windows Media Player és necessari per a aquesta tasca. Voleu habilitar el \"Windows Media Player\" per al vostre sistema operatiu?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource no s'ha registrat correctament per a la reproducció multimèdia! Premeu Sí per tornar-lo a registrar. Seràs promocionat dues vegades" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Falta el component BambuSource registrat per a la reproducció multimèdia! Reinstal·leu OrcaSlicer o cerqueu ajuda a la comunitat." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Utilitzar un BambuSource des d'una instal·lació diferent, la reproducció de vídeo pot no funcionar correctament! Premeu Sí per solucionar-ho." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Al vostre sistema li falten còdecs H.264 per al GStreamer, necessaris per reproduir vídeo. (Proveu d'instal·lar els paquets gstreamer1.0-plugins-bad o gstreamer1.0-libav i, a continuació, reinicieu Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "L'agent del núvol no està disponible. Reinicieu l'OrcaSlicer i torneu-ho a provar." @@ -12465,6 +12514,10 @@ msgstr "Si tot i així voleu imprimir, podeu activar l'opció a Preferències / msgid "No extrusions under current settings." msgstr "No hi ha extrusions a la configuració actual." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "S'està utilitzant un filament mixt amb degradat, però 'Subcapa de color mixt' està desactivat. El degradat no s'imprimirà." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "El mode suau de timelapse no està permès quan la seqüència \"Per objecte\" està habilitada." @@ -12501,6 +12554,10 @@ msgstr "Potser voleu reduir la mida del model o canviar la configuració d'impre msgid "Variable layer height is not supported with Organic supports." msgstr "Alçada de Capa Variable no és compatible amb suports Orgànics." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "El filament de la torre de purga no pot ser un filament mixt." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "És possible que els diferents diàmetres de broquet i els diferents diàmetres de filament no funcionin bé quan la torre principal està activada. És molt experimental, així que si us plau, procediu amb precaució." @@ -14263,6 +14320,8 @@ msgstr "Temps de capa" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "S'habilitarà el ventilador de refrigeració de peces per a capes el temps estimat de les quals sigui inferior a aquest valor. La velocitat del ventilador s'interpola entre les velocitats mínima i màxima del ventilador segons el temps d'impressió per capes" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14572,6 +14631,62 @@ msgstr "Material de suport" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de suport s'utilitza habitualment per imprimir interfície de suport i suport" +# AI Translated +msgid "Is mixed filament" +msgstr "És filament mixt" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica si aquesta ranura de filament és un filament mixt compost per diversos filaments físics" + +# AI Translated +msgid "Mixed filament components" +msgstr "Components del filament mixt" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índexs (començant per 1) dels filaments components, separats per comes; p. ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporcions de subcapa del filament mixt" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valors de proporció separats per comes que sumin 1.0; p. ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Degradat del filament mixt" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Activa el mode de degradat en direcció Z per a les subcapes del filament mixt. En activar-lo, les proporcions de les subcapes varien linealment entre capes." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Rang del degradat del filament mixt" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporcions inicial i final del primer component en el mode de degradat. Parell separat per comes; p. ex. \"0.10,0.90\" significa del 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Corba del degradat del filament mixt" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Corba personalitzada opcional, a l'estil de Photoshop, que assigna el progrés en Z a la proporció del primer component. Es codifica com a punts de control separats per barres verticals, amb el format \"x,y\" (heretat) o \"x,y,m_in,m_out\" quan cal anul·lar la tangent (un valor buit o \"nan\" fa servir el valor PCHIP predeterminat). x està dins de [0,1]; y es limita al rang de proporcions configurat; p. ex. \"0,0.15|0.5,0.50|1,0.85\". Si es deixa buit, s'utilitza el gradient_range lineal." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Degradat per peça del filament mixt" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quan el mode de degradat està activat, aplica el degradat a cada peça d'un muntatge de manera independent en lloc de tractar tot el muntatge com un únic rang Z." + msgid "Filament printable" msgstr "Filament imprimible" @@ -15860,6 +15975,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Força de sortida màxima permesa de l'eix Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15872,6 +15988,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Càrrega de massa del llit de la màquina a l'eix Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17482,6 +17599,14 @@ msgstr "" "\n" "L'establiment d'un valor en la quantitat de retractació abans de l'esborrat es realitzarà qualsevol retracció en excés abans de la neteja, sinó es realitzarà després." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Subcapa de color mixt" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Activa la divisió en subcapes de color mixt. En activar-la, les capes que contenen filaments de color mixt es divideixen en subcapes per aconseguir efectes de barreja de colors." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La Torre de Purga es pot utilitzar per netejar els residus al broquet i estabilitzar la pressió de la cambra dins del broquet, per tal d'evitar defectes d'aparença en imprimir objectes." @@ -18573,6 +18698,10 @@ msgstr "La generació de malla del fitxer del model ha fallat o la forma no és msgid "The supplied file couldn't be read because it's empty." msgstr "El fitxer subministrat no s'ha pogut llegir perquè està buit" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "El format del fitxer és incompatible i no es pot analitzar." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fitxer desconegut. El fitxer d'entrada ha de tenir extensió .stl, .obj, .amf( .xml )." @@ -20928,8 +21057,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Activar l'assignació intel·ligent de filament: assigna un filament a diversos broquets per maximitzar l'estalvi" # AI Translated -msgid "Fila Saving" -msgstr "Estalvi de filament" +msgid "File Saving" +msgstr "Desament de fitxers" msgid "Don't remind me again" msgstr "No m'ho recordis més" @@ -21338,6 +21467,9 @@ msgstr "Reinicia ara" msgid "NO RAMMING AT ALL" msgstr "SENSE EMPENTA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocitat volumètrica" @@ -21989,6 +22121,41 @@ msgstr "" "Evitar la deformació( warping )\n" "Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La visualització en directe nativa de Wayland requereix el sink de vídeo GTK de GStreamer. Instal·leu el connector gtksink per a GStreamer i reinicieu l'OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "No s'ha pogut inicialitzar el sink de vídeo natiu de GStreamer per a Wayland. Comproveu la instal·lació del connector GTK de GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "El Windows Media Player és necessari per a aquesta tasca. Voleu habilitar el \"Windows Media Player\" per al vostre sistema operatiu?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource no s'ha registrat correctament per a la reproducció multimèdia! Premeu Sí per tornar-lo a registrar. Seràs promocionat dues vegades" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Falta el component BambuSource registrat per a la reproducció multimèdia! Reinstal·leu OrcaSlicer o cerqueu ajuda a la comunitat." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Utilitzar un BambuSource des d'una instal·lació diferent, la reproducció de vídeo pot no funcionar correctament! Premeu Sí per solucionar-ho." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Al vostre sistema li falten còdecs H.264 per al GStreamer, necessaris per reproduir vídeo. (Proveu d'instal·lar els paquets gstreamer1.0-plugins-bad o gstreamer1.0-libav i, a continuació, reinicieu Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Estalvi de filament" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index f51c5dc3e2..d2ef18cd2a 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -2977,6 +2977,10 @@ msgstr "Upravit" msgid "Merge with" msgstr "Sloučit s" +# AI Translated +msgid "Decompose Color" +msgstr "Rozložit barvu" + msgid "Delete this filament" msgstr "Smazat tento filament" @@ -3279,6 +3283,10 @@ msgstr "Sestava" msgid "Merge parts to an object" msgstr "Sloučit části do objektu" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Použití proměnné výšky vrstvy společně s podvrstvou míchané barvy může zhoršit kvalitu míchání barev." + # AI Translated msgid "Add layers" msgstr "Přidat vrstvy" @@ -7921,6 +7929,10 @@ msgstr "Přizpůsobit aktuální desku" msgid "The %s nozzle can not print %s." msgstr "Tryska %s nemůže tisknout %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Tisk filamentu s míchanou barvou na tiskárně s jedním extruderem vyžaduje časté výměny filamentu a čištění, což může výrazně zvýšit množství odpadu a riziko ucpání trysky nebo odpadního skluzu." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Míchání %1% s %2% při tisku není doporučeno.\n" @@ -8050,12 +8062,44 @@ msgstr "Synchronizovat seznam filamentů z AMS" msgid "Set filaments to use" msgstr "Nastavit používané filamenty" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Přidat míchaný filament" + +# AI Translated +msgid "Mixed Filament" +msgstr "Míchaný filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Odebrat poslední míchaný filament" + +# AI Translated +msgid "Add mixed filament" +msgstr "Přidat míchaný filament" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Míchaný filament má neplatné nebo neodpovídající komponenty. Upravte prosím dotčené položky znovu." + msgid "Search plate, object and part." msgstr "Hledat desku, objekt a díl." msgid "Pellets" msgstr "Pelety" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Míchaný filament má poškozené odkazy na komponenty" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Upravit / Smazat / Sloučit" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Cílový míchaný filament používá tento fyzický filament jako komponentu. Sloučením se tento fyzický filament odstraní a míchaný filament může přestat být platný. Pokračovat?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po dokončení operace bude projekt %s uzavřen a bude vytvořen nový projekt." @@ -8237,6 +8281,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Detekován vícedílný objekt" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Přiřazování textur k filamentům" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Upozornění při importu textury" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Načíst tyto soubory jako jeden objekt s více částmi?\n" @@ -8447,6 +8499,22 @@ msgstr "" msgid "Sync now" msgstr "Synchronizovat nyní" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Import textury se nezdařil. Zdá se, že model obsahuje data textury, ale proces importu nebylo možné dokončit. Model bude importován pouze jako geometrie." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplikují se barvy textury..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aktualizuje se 3D náhled..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Barvy textury byly použity." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Upravené předvolby můžete ponechat v novém projektu nebo je zahodit" @@ -9728,6 +9796,10 @@ msgstr "Spirálová váza" msgid "First layer filament sequence" msgstr "Pořadí filamentů v první vrstvě" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Seznam filamentů obsahuje míchané filamenty. Vlastní pořadí filamentů se neuplatní." + msgid "By Layer" msgstr "Podle vrstvy" @@ -11697,34 +11769,6 @@ msgstr "Objemy čištění při výměně filamentu" msgid "Please choose the filament colour" msgstr "Vyberte prosím barvu filamentu" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Nativní živý náhled ve Waylandu vyžaduje video sink GStreamer GTK. Nainstalujte prosím plugin gtksink pro GStreamer a poté restartujte OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nepodařilo se inicializovat nativní video sink GStreamer pro Wayland. Zkontrolujte prosím instalaci pluginu GStreamer GTK." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Pro tuto úlohu je vyžadován Windows Media Player! Chcete ve svém operačním systému povolit „Windows Media Player“?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource nebyl správně zaregistrován pro přehrávání médií! Stisknutím Ano jej znovu zaregistrujete. Budete vyzváni dvakrát" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Chybí komponenta BambuSource registrovaná pro přehrávání médií! Přeinstalujte prosím OrcaSlicer nebo požádejte o pomoc komunitu." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Používá se BambuSource z jiné instalace, přehrávání videa nemusí fungovat správně! Stisknutím Ano to opravíte." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ve vašem systému chybí kodeky H.264 pro GStreamer, které jsou nutné k přehrávání videa. (Zkuste nainstalovat balíčky gstreamer1.0-plugins-bad nebo gstreamer1.0-libav a poté restartovat Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Cloudový agent není dostupný. Restartujte prosím OrcaSlicer a zkuste to znovu." @@ -12446,6 +12490,10 @@ msgstr "Pokud chcete přesto tisknout, můžete povolit možnost v Nastavení / msgid "No extrusions under current settings." msgstr "Při aktuálním nastavení nejsou žádné extruze." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Je použit míchaný filament s gradientem, ale 'Podvrstva míchané barvy' je vypnutá. Gradient nebude vytištěn." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Plynulý režim časosběru není podporován, pokud je povoleno pořadí tisku „podle objektu“." @@ -12482,6 +12530,10 @@ msgstr "Možná budete chtít zmenšit velikost modelu nebo změnit aktuální n msgid "Variable layer height is not supported with Organic supports." msgstr "Proměnná výška vrstvy není podporována s organickými podporami." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament věže na očištění trysky nemůže být míchaný filament." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Různé průměry trysek a filamentu nemusí správně fungovat, pokud je povolena základní věž. Jedná se o velmi experimentální funkci, proto pokračujte opatrně." @@ -14232,6 +14284,8 @@ msgstr "Čas vrstvy" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Ventilátor chlazení části bude spuštěn u vrstev, jejichž odhadovaný čas je kratší než tato hodnota. Rychlost ventilátoru je interpolována mezi minimální a maximální podle času tisku vrstvy." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14540,6 +14594,62 @@ msgstr "Podpůrný materiál" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Podpůrný materiál se běžně používá pro tisk podpěr a rozhraní podpěr." +# AI Translated +msgid "Is mixed filament" +msgstr "Je míchaný filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Určuje, zda je tato pozice filamentu míchaným filamentem složeným z několika fyzických filamentů" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenty míchaného filamentu" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Čárkami oddělené indexy komponentních filamentů počítané od 1, např. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Poměry podvrstev míchaného filamentu" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Čárkami oddělené hodnoty poměrů, jejichž součet je 1.0, např. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient míchaného filamentu" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Zapne režim gradientu ve směru Z pro podvrstvy míchaného filamentu. Je-li zapnutý, poměry podvrstev se mění lineárně napříč vrstvami." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Rozsah gradientu míchaného filamentu" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Počáteční a koncový poměr první komponenty v režimu gradientu. Dvojice oddělená čárkou, např. \"0.10,0.90\" znamená 10% až 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Křivka gradientu míchaného filamentu" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Volitelná vlastní křivka ve stylu Photoshopu, která mapuje postup v ose Z na poměr první komponenty. Zapisuje se jako řídicí body oddělené svislými čarami, buď ve tvaru \"x,y\" (starší formát), nebo \"x,y,m_in,m_out\", pokud je potřeba přepsat tečnu (prázdná hodnota nebo \"nan\" použije výchozí PCHIP). x je v intervalu [0,1]; y je omezeno na nastavený rozsah poměrů, např. \"0,0.15|0.5,0.50|1,0.85\". Pokud je pole prázdné, použije se lineární gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient míchaného filamentu podle dílu" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Je-li zapnutý režim gradientu, aplikuje gradient na každý díl sestavy samostatně místo toho, aby se celá sestava brala jako jeden rozsah Z." + msgid "Filament printable" msgstr "Tisknutelný filament" @@ -15816,6 +15926,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Povolená maximální výstupní síla osy Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15828,6 +15939,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Zatížení osy Y hmotností podložky stroje" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17427,6 +17539,14 @@ msgstr "" "\n" "Nastavení hodnoty v parametru množství retrakce před očištěním níže provede případnou dodatečnou retrakci před očištěním, jinak bude provedena po něm." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Podvrstva míchané barvy" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Zapne dělení na podvrstvy míchané barvy. Je-li zapnuto, vrstvy obsahující filamenty s míchanou barvou se rozdělí na podvrstvy, aby vznikl efekt míchání barev." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Čistící věž lze použít k odstranění zbytků materiálu na trysce a ke stabilizaci tlaku v komoře trysky, aby se předešlo vizuálním vadám při tisku objektů." @@ -18500,6 +18620,10 @@ msgstr "Síťování modelového souboru selhalo nebo nebyl nalezen platný tvar msgid "The supplied file couldn't be read because it's empty." msgstr "Zadaný soubor nelze načíst, protože je prázdný." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Formát souboru není kompatibilní a nelze jej načíst." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Neznámý formát souboru. Vstupní soubor musí mít příponu .stl, .obj nebo .amf(.xml)." @@ -20851,8 +20975,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Povolit chytré přiřazení filamentu: přiřadit jeden filament více tryskám pro maximální úsporu" # AI Translated -msgid "Fila Saving" -msgstr "Úspora filamentu" +msgid "File Saving" +msgstr "Ukládání souboru" # AI Translated msgid "Don't remind me again" @@ -21308,6 +21432,9 @@ msgstr "Restartovat nyní" msgid "NO RAMMING AT ALL" msgstr "ŽÁDNÝ RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Objemová rychlost" @@ -21975,6 +22102,46 @@ msgstr "" "Zamezte kroucení\n" "Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Nativní živý náhled ve Waylandu vyžaduje video sink GStreamer GTK. Nainstalujte prosím plugin gtksink pro GStreamer a poté restartujte OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nepodařilo se inicializovat nativní video sink GStreamer pro Wayland. Zkontrolujte prosím instalaci pluginu GStreamer GTK." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Pro tuto úlohu je vyžadován Windows Media Player! Chcete ve svém operačním systému povolit „Windows Media Player“?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource nebyl správně zaregistrován pro přehrávání médií! Stisknutím Ano jej znovu zaregistrujete. Budete vyzváni dvakrát" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Chybí komponenta BambuSource registrovaná pro přehrávání médií! Přeinstalujte prosím OrcaSlicer nebo požádejte o pomoc komunitu." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Používá se BambuSource z jiné instalace, přehrávání videa nemusí fungovat správně! Stisknutím Ano to opravíte." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ve vašem systému chybí kodeky H.264 pro GStreamer, které jsou nutné k přehrávání videa. (Zkuste nainstalovat balíčky gstreamer1.0-plugins-bad nebo gstreamer1.0-libav a poté restartovat Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Úspora filamentu" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 8b27148a03..4ff61fb6ea 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher <hliebschergmail.com>\n" "Language-Team: \n" @@ -2917,6 +2917,10 @@ msgstr "Bearbeiten" msgid "Merge with" msgstr "Zusammenführen mit" +# AI Translated +msgid "Decompose Color" +msgstr "Farbe zerlegen" + msgid "Delete this filament" msgstr "Diesen Filament löschen" @@ -3216,6 +3220,10 @@ msgstr "Zusammenbau" msgid "Merge parts to an object" msgstr "Teile zu einem Objekt zusammenführen" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Die Verwendung einer variablen Schichthöhe zusammen mit der Mischfarben-Unterschicht kann zu einer schlechten Farbmischqualität führen." + # AI Translated msgid "Add layers" msgstr "Schichten hinzufügen" @@ -7791,6 +7799,10 @@ msgstr "Aktuelle Platte anpassen" msgid "The %s nozzle can not print %s." msgstr "Die %s Düse kann %s nicht drucken." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Der Druck von Mischfarben-Filament auf einem Drucker mit nur einem Extruder erfordert häufige Filamentwechsel und Spülvorgänge, was den Abfall und das Risiko einer Verstopfung von Düse bzw. Abfallschacht deutlich erhöhen kann." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mischen von %1% mit %2% im Druck wird nicht empfohlen.\n" @@ -7916,6 +7928,26 @@ msgstr "Filamentliste von AMS synchronisieren" msgid "Set filaments to use" msgstr "Zu verwendende Filamente einstellen" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Mischfilament hinzufügen" + +# AI Translated +msgid "Mixed Filament" +msgstr "Mischfilament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Letztes Mischfilament entfernen" + +# AI Translated +msgid "Add mixed filament" +msgstr "Mischfilament hinzufügen" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Das Mischfilament enthält ungültige oder nicht zusammenpassende Komponenten. Bitte bearbeiten Sie die betroffenen Einträge erneut." + msgid "Search plate, object and part." msgstr "Suche Platte, Objekt und Teil." @@ -7923,6 +7955,18 @@ msgstr "Suche Platte, Objekt und Teil." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Das Mischfilament enthält ungültige Komponentenverweise" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Bearbeiten / Löschen / Zusammenführen" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Das Ziel-Mischfilament verwendet dieses physische Filament als Komponente. Beim Zusammenführen wird dieses physische Filament entfernt und das Mischfilament kann dadurch ungültig werden. Fortfahren?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Nach Abschluss Ihrer Operation wird das %s-Projekt geschlossen und ein neues Projekt erstellt." @@ -8106,6 +8150,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Mehrteiliges Objekt erkannt" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Texturen werden den Filamenten zugeordnet" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Warnung beim Texturimport" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Diese Dateien als ein einziges Objekt mit mehreren Teilen laden?\n" @@ -8319,6 +8371,22 @@ msgstr "" msgid "Sync now" msgstr "Jetzt synchronisieren" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Der Texturimport ist fehlgeschlagen. Das Modell scheint Texturdaten zu enthalten, der Importvorgang konnte jedoch nicht abgeschlossen werden. Das Modell wird nur als Geometrie importiert." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Texturfarben werden angewendet..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D-Ansicht wird aktualisiert..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Texturfarben angewendet." + # AI Translated msgid "You can keep the modified presets for the new project or discard them" msgstr "Sie können die geänderten Profile für das neue Projekt beibehalten oder sie verwerfen" @@ -9563,6 +9631,10 @@ msgstr "Vasenmodus" msgid "First layer filament sequence" msgstr "Erste Filament-Schichtsequenz" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Die Filamentliste enthält Mischfilamente. Die benutzerdefinierte Filamentreihenfolge wird nicht wirksam." + msgid "By Layer" msgstr "Nach Schicht" @@ -11460,27 +11532,6 @@ msgstr "Reinigungsvolumen für Filamentwechsel" msgid "Please choose the filament colour" msgstr "Bitte wählen Sie die Filamentfarbe" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Native Wayland Liveview erfordert das GStreamer GTK Video Sink. Bitte installieren Sie das gtksink-Plugin für GStreamer und starten Sie OrcaSlicer neu." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Fehler beim Initialisieren des nativen Wayland GStreamer Video Sinks. Bitte überprüfen Ihre GStreamer GTK-Plugin-Installation." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player wird für diese Aufgabe benötigt! Möchten Sie 'Windows Media Player' für Ihr Betriebssystem aktivieren?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource wurde nicht korrekt für das Abspielen von Medien registriert! Drücken Sie Ja, um es erneut zu registrieren. Sie werden zweimal aufgefordert" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Fehlende BambuSource-Komponente, die für das Abspielen von Medien registriert ist! Bitte installieren Sie OrcaSlicer neu oder suchen Sie Hilfe in der Community." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Verwendung eines BambuSource aus einer anderen Installation, das Abspielen von Videos funktioniert möglicherweise nicht korrekt! Drücken Sie Ja, um es zu beheben." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ihr System fehlt H.264-Codecs für GStreamer, die zum Abspielen von Videos erforderlich sind. (Versuchen Sie, die Pakete gstreamer1.0-plugins-bad oder gstreamer1.0-libav zu installieren und starten Sie Orca Slicer neu?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Cloud-Agent ist nicht verfügbar. Bitte starten Sie OrcaSlicer neu und versuchen Sie es erneut." @@ -12185,6 +12236,10 @@ msgstr "Wenn Sie trotzdem drucken möchten, können Sie die Option in Einstellun msgid "No extrusions under current settings." msgstr "Keine Extrusion unter den aktuellen Einstellungen." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Es wird ein Mischfilament mit Verlauf verwendet, aber „Mischfarben-Unterschicht“ ist deaktiviert. Der Verlauf wird nicht gedruckt." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Der gewählte Zeitraffermodus wird nicht unterstützt, wenn die Sequenz \"nach Objekt\" aktiviert ist." @@ -12221,6 +12276,10 @@ msgstr "Sie möchten möglicherweise die Größe Ihres Modells reduzieren oder d msgid "Variable layer height is not supported with Organic supports." msgstr "Variable Schichthöhe wird nicht mit organischen Stützstrukturen unterstützt." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Das Filament des Reinigungsturms darf kein Mischfilament sein." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Unterschiedliche Düsendurchmesser und unterschiedliche Filamentdurchmesser funktionieren möglicherweise nicht gut, wenn der Reinigungsturm aktiviert ist. Es ist sehr experimentell, also gehen Sie bitte vorsichtig vor." @@ -13934,6 +13993,8 @@ msgstr "Schichtdauer" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Der Bauteillüfter wird für Schichten aktiviert, deren geschätzte Zeit kürzer als dieser Wert ist. Die Lüftergeschwindigkeit wird zwischen der minimalen und maximalen Geschwindigkeit entsprechend der Druckzeit der Schicht interpoliert." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14238,6 +14299,62 @@ msgstr "Stützmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Stützmaterial wird üblicherweise zum Drucken von Stützen und Stütz-Schnittstellen verwendet." +# AI Translated +msgid "Is mixed filament" +msgstr "Ist Mischfilament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Gibt an, ob dieser Filamentplatz ein Mischfilament aus mehreren physischen Filamenten ist" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenten des Mischfilaments" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Durch Kommas getrennte Indizes der Komponentenfilamente, beginnend bei 1, z. B. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Unterschicht-Anteile des Mischfilaments" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Durch Kommas getrennte Anteilswerte, die in der Summe 1.0 ergeben, z. B. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Verlauf des Mischfilaments" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Aktiviert den Verlaufsmodus in Z-Richtung für die Unterschichten des Mischfilaments. Wenn aktiviert, ändern sich die Anteile der Unterschichten linear über die Schichten hinweg." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Verlaufsbereich des Mischfilaments" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Start- und Endanteil der ersten Komponente im Verlaufsmodus. Durch Komma getrenntes Paar, z. B. \"0.10,0.90\" bedeutet 10% bis 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Verlaufskurve des Mischfilaments" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Optionale benutzerdefinierte Kurve im Photoshop-Stil, die den Z-Fortschritt auf den Anteil der ersten Komponente abbildet. Kodiert als durch senkrechte Striche getrennte Kontrollpunkte, entweder \"x,y\" (veraltet) oder \"x,y,m_in,m_out\", wenn die Tangente überschrieben werden soll (ein leerer Wert oder \"nan\" verwendet den PCHIP-Standard). x liegt in [0,1]; y wird auf den konfigurierten Anteilsbereich begrenzt, z. B. \"0,0.15|0.5,0.50|1,0.85\". Bleibt das Feld leer, wird stattdessen der lineare gradient_range verwendet." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Verlauf pro Teil beim Mischfilament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Wenn der Verlaufsmodus aktiviert ist, wird der Verlauf auf jedes Teil eines Zusammenbaus einzeln angewendet, anstatt den gesamten Zusammenbau als einen einzigen Z-Bereich zu behandeln." + msgid "Filament printable" msgstr "Filament druckbar" @@ -15478,6 +15595,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Die maximal zulässige Ausgangskraft der Y-Achse" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15488,6 +15606,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Die Maschinenbett-Massenlast der Y-Achse" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17070,6 +17189,14 @@ msgstr "" "\n" "Wenn ein Wert in der Einstellung \"Rückzugsmenge vor dem Wischen\" unten angegeben ist, wird ein überschüssiger Rückzug vor dem Wischen ausgeführt, ansonsten wird er danach ausgeführt." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Mischfarben-Unterschicht" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Aktiviert die Aufteilung in Mischfarben-Unterschichten. Wenn aktiviert, werden Schichten mit Mischfarben-Filamenten in Unterschichten aufgeteilt, um Farbmischeffekte zu erzielen." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Der Reinigungsturm kann verwendet werden, um Rückstände auf der Düse zu entfernen und den Kammerdruck im Inneren der Düse zu stabilisieren, um Erscheinungsdefekte beim Drucken von Objekten zu vermeiden." @@ -18140,6 +18267,10 @@ msgstr "Das Erstellen eines Netzes aus der Modelldatei ist fehlgeschlagen oder e msgid "The supplied file couldn't be read because it's empty." msgstr "Die angegebene Datei konnte nicht gelesen werden, weil sie leer ist." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Das Dateiformat ist nicht kompatibel und kann nicht gelesen werden." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Unbekanntes Dateiformat: Die Eingabedatei muss die Endung .stl, .obj oder .amf(.xml) haben." @@ -20398,8 +20529,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Intelligente Filamentzuweisung aktivieren: Ein Filament mehreren Düsen zuweisen, um Einsparungen zu maximieren" # AI Translated -msgid "Fila Saving" -msgstr "Filamentersparnis" +msgid "File Saving" +msgstr "Datei speichern" msgid "Don't remind me again" msgstr "Nicht mehr erinnern" @@ -20764,6 +20895,9 @@ msgstr "Jetzt neu starten" msgid "NO RAMMING AT ALL" msgstr "KEIN RAMMING ÜBERALL" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Volumetrische Geschwindigkeit" @@ -21388,6 +21522,39 @@ msgstr "" "Verwerfungen vermeiden\n" "Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Native Wayland Liveview erfordert das GStreamer GTK Video Sink. Bitte installieren Sie das gtksink-Plugin für GStreamer und starten Sie OrcaSlicer neu." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Fehler beim Initialisieren des nativen Wayland GStreamer Video Sinks. Bitte überprüfen Ihre GStreamer GTK-Plugin-Installation." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player wird für diese Aufgabe benötigt! Möchten Sie 'Windows Media Player' für Ihr Betriebssystem aktivieren?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource wurde nicht korrekt für das Abspielen von Medien registriert! Drücken Sie Ja, um es erneut zu registrieren. Sie werden zweimal aufgefordert" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Fehlende BambuSource-Komponente, die für das Abspielen von Medien registriert ist! Bitte installieren Sie OrcaSlicer neu oder suchen Sie Hilfe in der Community." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Verwendung eines BambuSource aus einer anderen Installation, das Abspielen von Videos funktioniert möglicherweise nicht korrekt! Drücken Sie Ja, um es zu beheben." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ihr System fehlt H.264-Codecs für GStreamer, die zum Abspielen von Videos erforderlich sind. (Versuchen Sie, die Pakete gstreamer1.0-plugins-bad oder gstreamer1.0-libav zu installieren und starten Sie Orca Slicer neu?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentersparnis" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0d0d0e2ddb..67d4d196d4 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -2758,6 +2758,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3035,6 +3038,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -7399,6 +7405,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7519,12 +7528,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7696,6 +7729,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7890,6 +7929,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -9039,6 +9090,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -10803,27 +10857,6 @@ msgstr "" msgid "Please choose the filament colour" msgstr "" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "" @@ -11506,6 +11539,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11542,6 +11578,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -12954,6 +12993,7 @@ msgstr "" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "" +msgctxt "second" msgid "s" msgstr "" @@ -13247,6 +13287,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -14394,6 +14476,7 @@ msgstr "" msgid "The allowed maximum output force of Y axis" msgstr "" +msgctxt "Newton" msgid "N" msgstr "" @@ -14403,6 +14486,7 @@ msgstr "" msgid "The machine bed mass load of Y axis" msgstr "" +msgctxt "gram" msgid "g" msgstr "" @@ -15830,6 +15914,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16857,6 +16947,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" @@ -18957,7 +19050,7 @@ msgstr "" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "" -msgid "Fila Saving" +msgid "File Saving" msgstr "" msgid "Don't remind me again" @@ -19317,6 +19410,9 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" +msgid "s" +msgstr "" + msgid "Volumetric speed" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 032516c978..bc8e1e9f79 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -2832,6 +2832,9 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusionar con" +msgid "Decompose Color" +msgstr "Descomponer color" + msgid "Delete this filament" msgstr "Eliminar este filamento" @@ -3113,6 +3116,9 @@ msgstr "Ensamblaje" msgid "Merge parts to an object" msgstr "Fusionar piezas en un objeto" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Usar altura de capa variable junto con la subcapa de color mezclado puede reducir la calidad de la mezcla de colores." + msgid "Add layers" msgstr "Añadir capas" @@ -7613,6 +7619,9 @@ msgstr "Personalizar cama actual" msgid "The %s nozzle can not print %s." msgstr "La boquilla %s no puede imprimir %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filamento de color mezclado en una impresora de un solo extrusor requiere cambios de filamento y purgas frecuentes, lo que puede aumentar considerablemente el desperdicio y el riesgo de obstrucción de la boquilla o del conducto de residuos." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No se recomienda mezclar %1% con %2% en la impresión.\n" @@ -7735,12 +7744,36 @@ msgstr "Sicronizar filamentos de la lista AMS" msgid "Set filaments to use" msgstr "Elegir filamentos para usar" +msgid "Add Mixed Filament" +msgstr "Añadir filamento mixto" + +msgid "Mixed Filament" +msgstr "Filamento mixto" + +msgid "Remove last mixed filament" +msgstr "Eliminar el último filamento mixto" + +msgid "Add mixed filament" +msgstr "Añadir filamento mixto" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "El filamento mixto tiene componentes no válidos o incoherentes. Vuelva a editar las entradas afectadas." + msgid "Search plate, object and part." msgstr "Buscar cama, objeto y parte." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "El filamento mixto tiene referencias de componentes rotas" + +msgid "Edit / Delete / Merge" +msgstr "Editar / Borrar / Fusionar" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "El filamento mixto de destino usa este filamento físico como componente. Al fusionarlos se eliminará este filamento físico y el filamento mixto puede quedar no válido. ¿Continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completar la operación, el proyecto %s se cerrará y se creará un nuevo proyecto." @@ -7919,6 +7952,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multipieza detectado" +msgid "Matching textures to filaments" +msgstr "Asociando texturas a los filamentos" + +msgid "Texture Import Warning" +msgstr "Aviso de importación de texturas" + msgid "Load these files as a single object with multiple parts?\n" msgstr "¿Cargar estos archivos como un objeto único con múltiples piezas?\n" @@ -8123,6 +8162,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar ahora" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "No se ha podido importar la textura. El modelo parece contener datos de textura, pero no se ha podido completar el proceso de importación. El modelo se importará solo como geometría." + +msgid "Applying texture colors..." +msgstr "Aplicando colores de textura..." + +msgid "Updating 3D view..." +msgstr "Actualizando la vista 3D..." + +msgid "Texture colors applied." +msgstr "Colores de textura aplicados." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Puedes mantener los perfiles modificados en el nuevo proyecto o descartarlos" @@ -9338,6 +9389,9 @@ msgstr "Vaso en espiral" msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La lista de filamentos contiene filamentos mixtos. La secuencia de filamentos personalizada no tendrá efecto." + msgid "By Layer" msgstr "Por Capa" @@ -11181,27 +11235,6 @@ msgstr "Volúmenes de purgado para el cambio de filamentos" msgid "Please choose the filament colour" msgstr "Por favor, elija el color del filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La función de visualización en directo nativa de Wayland requiere el receptor de vídeo GTK de GStreamer. Instale el plugin gtksink para GStreamer y, a continuación, reinicie OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "No se pudo inicializar el receptor de vídeo nativo de Wayland GStreamer. Compruebe la instalación del plugin GTK de GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Para esta tarea se necesita el Reproductor de Windows Media. ¿Desea activar el \"Reproductor de Windows Media\" en su sistema operativo?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource no se ha registrado correctamente para la reproducción multimedia. Pulse Sí para volver a registrarlo. Será promocionado dos veces" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "¡Falta el componente BambuSource para la reproducción de medios! Reinstale OrcaSlicer o busque ayuda en la comunidad." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Si utiliza una BambuSource de una instalación diferente, es posible que la reproducción de vídeo no funcione correctamente. Pulsa Sí para solucionarlo." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "A tu sistema le faltan los codecs H.264 para GStreamer, necesarios para reproducir vídeo. (Prueba a instalar los paquetes gstreamer1.0-plugins-bad o gstreamer1.0-libav y, a continuación, reinicia Orca Slicer...)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "El proveedor de servicios en la nube no está disponible. Reinicia OrcaSlicer e inténtalo de nuevo." @@ -11891,6 +11924,9 @@ msgstr "Si aún así quieres imprimir, puedes activar la opción en Preferencias msgid "No extrusions under current settings." msgstr "No hay extrusiones con los ajustes actuales." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Se está usando un filamento mixto con degradado, pero 'Subcapa de color mezclado' está desactivado. El degradado no se imprimirá." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Modo de timelapse suave no está soportado cuando la secuencia \"por objeto\" está activada." @@ -11927,6 +11963,9 @@ msgstr "Es posible que desee reducir el tamaño de su modelo o cambiar la config msgid "Variable layer height is not supported with Organic supports." msgstr "La altura de capa adaptativa no es compatible con los soportes orgánicos." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "El filamento de la torre de purga no puede ser un filamento mixto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diámetros de boquillas y diámetros de filamento diferentes pueden no funcionar correctamente cuando la torre de purga está activada. Esta función es experimental, así que proceda con cautela." @@ -13611,6 +13650,7 @@ msgstr "Tiempo de capa" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "El ventilador de refrigeración de la pieza se activará para las capas cuyo tiempo estimado sea inferior a este valor. La velocidad del ventilador se interpola entre las velocidades mínima y máxima del ventilador en función del tiempo de impresión de cada capa." +msgctxt "second" msgid "s" msgstr "s" @@ -13916,6 +13956,50 @@ msgstr "Material de soporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de soporte se utiliza habitualmente para imprimir soportes y la interfaz de los soportes." +msgid "Is mixed filament" +msgstr "Es filamento mixto" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica si esta ranura de filamento es un filamento mixto compuesto por varios filamentos físicos" + +msgid "Mixed filament components" +msgstr "Componentes del filamento mixto" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índices (empezando en 1) de los filamentos componentes, separados por comas; p. ej. \"1,3\"" + +msgid "Mixed filament sublayer ratios" +msgstr "Proporciones de subcapa del filamento mixto" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valores de proporción separados por comas cuya suma sea 1.0; p. ej. \"0.7,0.3\"" + +msgid "Mixed filament gradient" +msgstr "Degradado del filamento mixto" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Activa el modo de degradado en dirección Z para las subcapas del filamento mixto. Al activarlo, las proporciones de las subcapas varían linealmente entre capas." + +msgid "Mixed filament gradient range" +msgstr "Rango del degradado del filamento mixto" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporciones inicial y final del primer componente en el modo de degradado. Par separado por comas; p. ej. \"0.10,0.90\" significa del 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Curva del degradado del filamento mixto" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizada opcional, al estilo de Photoshop, que asigna el progreso en Z a la proporción del primer componente. Se codifica como puntos de control separados por barras verticales, con el formato \"x,y\" (heredado) o \"x,y,m_in,m_out\" cuando se necesita anular la tangente (un valor vacío o \"nan\" usa el valor PCHIP predeterminado). x está en [0,1]; y se limita al rango de proporciones configurado; p. ej. \"0,0.15|0.5,0.50|1,0.85\". Si se deja vacío, se usa el gradient_range lineal." + +msgid "Mixed filament per-part gradient" +msgstr "Degradado por pieza del filamento mixto" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Cuando el modo de degradado está activado, aplica el degradado a cada pieza de un ensamblaje de forma independiente en lugar de tratar todo el ensamblaje como un único rango Z." + msgid "Filament printable" msgstr "Filamento imprimible" @@ -15150,6 +15234,7 @@ msgstr "Fuerza máxima del eje Y" msgid "The allowed maximum output force of Y axis" msgstr "La fuerza máxima permitida del eje Y" +msgctxt "Newton" msgid "N" msgstr "N" @@ -15159,6 +15244,7 @@ msgstr "Masa de la cama del eje Y" msgid "The machine bed mass load of Y axis" msgstr "La carga de la masa de la cama de la máquina del eje Y" +msgctxt "gram" msgid "g" msgstr "g" @@ -16715,6 +16801,14 @@ msgstr "" "\n" "Fijando un valor en la cantidad de retracción antes del purgado se realizará cualquier exceso de retracción antes del purgado, de lo contrario se realizará después." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Subcapa de color mezclado" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Activa la división en subcapas de color mezclado. Al activarlo, las capas que contienen filamentos de color mezclado se dividen en subcapas para lograr efectos de mezcla de colores." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre de purga puede utilizarse para limpiar los residuos de la boquilla y estabilizar la presión de la recámara en el interior de la boquilla, con el fin de evitar defectos visuales al imprimir objetos." @@ -17771,6 +17865,10 @@ msgstr "La generación de la malla del archivo del modelo falló o no hay una fo msgid "The supplied file couldn't be read because it's empty." msgstr "No se ha podido leer el archivo proporcionado porque está vacío." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "El formato del archivo es incompatible y no se puede analizar." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de archivo desconocido: el archivo de entrada debe tener extensión .STL, .obj o .amf (.xml)." @@ -20027,8 +20125,9 @@ msgstr "Eliminado" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Activar la asignación inteligente de filamento: asigna un filamento a varias boquillas para maximizar el ahorro" -msgid "Fila Saving" -msgstr "Ahorro de filamento" +# AI Translated +msgid "File Saving" +msgstr "Guardado de archivo" msgid "Don't remind me again" msgstr "No me recuerdes de nuevo" @@ -20387,6 +20486,9 @@ msgstr "Reiniciar ahora" msgid "NO RAMMING AT ALL" msgstr "NO CHOCAR EN ABSOLUTO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocidad volumétrica" @@ -20963,6 +21065,36 @@ msgstr "" "Evita la deformación\n" "¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La función de visualización en directo nativa de Wayland requiere el receptor de vídeo GTK de GStreamer. Instale el plugin gtksink para GStreamer y, a continuación, reinicie OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "No se pudo inicializar el receptor de vídeo nativo de Wayland GStreamer. Compruebe la instalación del plugin GTK de GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Para esta tarea se necesita el Reproductor de Windows Media. ¿Desea activar el \"Reproductor de Windows Media\" en su sistema operativo?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource no se ha registrado correctamente para la reproducción multimedia. Pulse Sí para volver a registrarlo. Será promocionado dos veces" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "¡Falta el componente BambuSource para la reproducción de medios! Reinstale OrcaSlicer o busque ayuda en la comunidad." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Si utiliza una BambuSource de una instalación diferente, es posible que la reproducción de vídeo no funcione correctamente. Pulsa Sí para solucionarlo." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "A tu sistema le faltan los codecs H.264 para GStreamer, necesarios para reproducir vídeo. (Prueba a instalar los paquetes gstreamer1.0-plugins-bad o gstreamer1.0-libav y, a continuación, reinicia Orca Slicer...)." + +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "g" + +#~ msgid "Fila Saving" +#~ msgstr "Ahorro de filamento" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 26185f6514..9ee2e6451d 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana <mgoiogana@gmail.com>\n" "Language-Team: \n" @@ -2868,6 +2868,10 @@ msgstr "Editatu" msgid "Merge with" msgstr "Batu honekin" +# AI Translated +msgid "Decompose Color" +msgstr "Deskonposatu kolorea" + msgid "Delete this filament" msgstr "Ezabatu filamentu hau" @@ -3149,6 +3153,10 @@ msgstr "Multzoa" msgid "Merge parts to an object" msgstr "Batu piezak objektu batean" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Geruza-altuera aldakorra kolore nahasiaren azpigeruzarekin batera erabiltzeak kolore-nahasketaren kalitatea okertu dezake." + msgid "Add layers" msgstr "Geruzak gehitu" @@ -7679,6 +7687,10 @@ msgstr "Pertsonalizatu uneko plaka" msgid "The %s nozzle can not print %s." msgstr "%s pitak ezin du %s inprimatu." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Kolore nahasiko filamentua estrusore bakarreko inprimagailu batean inprimatzeak filamentu-aldaketa eta purgatze ugari eskatzen ditu, eta horrek nabarmen handitu ditzake hondakinak eta pita edo hondakin-hodia buxatzeko arriskua." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Ez da gomendatzen inprimatzean %1% eta %2% nahastea.\n" @@ -7801,12 +7813,44 @@ msgstr "Sinkronizatu filamentuen zerrenda AMSarekin" msgid "Set filaments to use" msgstr "Ezarri erabili beharreko filamentuak" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Gehitu filamentu nahasia" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamentu nahasia" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Kendu azken filamentu nahasia" + +# AI Translated +msgid "Add mixed filament" +msgstr "Gehitu filamentu nahasia" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filamentu nahasiak baliogabeko edo bat ez datozen osagaiak ditu. Editatu berriro kaltetutako sarrerak." + msgid "Search plate, object and part." msgstr "Bilatu plaka, objektua eta pieza." msgid "Pellets" msgstr "Pelletak" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filamentu nahasiak hautsitako osagai-erreferentziak ditu" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editatu / Ezabatu / Batu" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Helburuko filamentu nahasiak filamentu fisiko hau erabiltzen du osagai gisa. Batzeak filamentu fisiko hau ezabatuko du eta filamentu nahasia baliogabetu dezake. Jarraitu?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Eragiketa amaitzean, %s proiektua itxi eta proiektu berri bat sortuko da." @@ -7985,6 +8029,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Pieza anitzeko objektua detektatu da" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Testurak filamentuekin parekatzen" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Testura inportatzeko abisua" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Kargatu fitxategi hauek pieza anitzeko objektu bakar gisa?\n" @@ -8189,6 +8241,22 @@ msgstr "" msgid "Sync now" msgstr "Sinkronizatu orain" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Testura inportatzeak huts egin du. Badirudi modeloak testura-datuak dituela, baina ezin izan da inportatze-prozesua osatu. Modeloa geometria gisa soilik inportatuko da." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Testura-koloreak aplikatzen..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D ikuspegia eguneratzen..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Testura-koloreak aplikatuta." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Aldatutako aurrezarpenak proiektu berrirako gorde edo baztertu ditzakezu" @@ -9406,6 +9474,10 @@ msgstr "Espiral formako loreontzia" msgid "First layer filament sequence" msgstr "Lehen geruzako filamentuen sekuentzia" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filamentu-zerrendak filamentu nahasiak ditu. Filamentu-sekuentzia pertsonalizatuak ez du eraginik izango." + msgid "By Layer" msgstr "Geruzaren arabera" @@ -11273,27 +11345,6 @@ msgstr "Filamentua aldatzeko purgatze-bolumenak" msgid "Please choose the filament colour" msgstr "Hautatu filamentuen kolorea" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Waylanden jatorrizko zuzeneko ikuspegiak GStreamer GTK bideo-hustubidea behar du. Instalatu GStreamerrerako gtksink plugina eta berrabiarazi OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Ezin izan da Waylanden jatorrizko GStreamer bideo-hustubidea hasieratu. Egiaztatu GStreamer GTK pluginaren instalazioa." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player behar da zeregin honetarako! 'Windows Media Player' gaitu nahi duzu zure sistema eragilean?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource ez da behar bezala erregistratu multimedia erreproduzitzeko! Sakatu Bai berriro erregistratzeko. Bi aldiz galdetuko zaizu" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Multimedia erreproduzitzeko erregistratutako BambuSource osagaia falta da! Berrinstalatu OrcaSlicer edo eskatu laguntza komunitateari." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Beste instalazio bateko BambuSource erabiltzen ari zara; baliteke bideo-erreprodukzioak behar bezala ez funtzionatzea! Sakatu Bai konpontzeko." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Zure sisteman GStreamer-erako H.264 kodekak falta dira, eta beharrezkoak dira bideoa erreproduzitzeko. (Saiatu gstreamer1.0-plugins-bad edo gstreamer1.0-libav paketeak instalatzen, eta berrabiarazi OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Hodeiko agentea ez dago erabilgarri. Berrabiarazi OrcaSlicer eta saiatu berriro." @@ -11993,6 +12044,10 @@ msgstr "Hala ere inprimatu nahi baduzu, aukera hau gaitu dezakezu: Hobespenak / msgid "No extrusions under current settings." msgstr "Uneko ezarpenekin ez dago estrusiorik." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Gradientedun filamentu nahasi bat erabiltzen ari da, baina 'Kolore nahasiaren azpigeruza' desgaituta dago. Gradientea ez da inprimatuko." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Timelapsearen modu leuna ez da onartzen \"objektuka\" sekuentzia gaituta dagoenean." @@ -12029,6 +12084,10 @@ msgstr "Modeloaren tamaina txikitu edo uneko inprimatze-ezarpenak aldatu eta ber msgid "Variable layer height is not supported with Organic supports." msgstr "Geruza-altuera aldakorra ez da onartzen euskarri organikoekin." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Purgatze-dorrearen filamentua ezin da filamentu nahasia izan." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Pitaren diametro eta filamentu-diametro desberdinek agian ez dute ondo funtzionatuko purgatze-dorrea gaituta dagoenean. Oso esperimentala da; jarraitu kontuz." @@ -13729,6 +13788,8 @@ msgstr "Geruza-denbora" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Piezaren hozte-haizagailua gaituko da estimatutako denbora balio hau baino laburragoa duten geruzetan. Haizagailuaren abiadura gutxienekoaren eta gehienekoaren artean interpolatuko da geruzaren inprimatze-denboraren arabera." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14034,6 +14095,62 @@ msgstr "Euskarri-materiala" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Euskarri-materiala euskarriak eta euskarri-interfazeak inprimatzeko erabiltzen da normalean." +# AI Translated +msgid "Is mixed filament" +msgstr "Filamentu nahasia da" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Filamentu-zirrikitu hau hainbat filamentu fisikoz osatutako filamentu nahasia den adierazten du" + +# AI Translated +msgid "Mixed filament components" +msgstr "Filamentu nahasiaren osagaiak" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Osagai-filamentuen indizeak, komaz bereizita eta 1etik hasita; adib. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Filamentu nahasiaren azpigeruza-ratioak" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Komaz bereizitako ratio-balioak, guztira 1.0 ematen dutenak; adib. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Filamentu nahasiaren gradientea" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Z norabideko gradiente modua gaitzen du filamentu nahasiaren azpigeruzetarako. Gaituta dagoenean, azpigeruzen ratioak linealki aldatzen dira geruzaz geruza." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Filamentu nahasiaren gradiente-barrutia" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Lehen osagaiaren hasierako eta amaierako ratioak gradiente moduan. Komaz bereizitako parea; adib. \"0.10,0.90\" %10etik %90era esan nahi du." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Filamentu nahasiaren gradiente-kurba" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Aukerako Photoshop estiloko kurba pertsonalizatua, Z progresioa lehen osagaiaren ratioarekin lotzen duena. Barra bertikalez bereizitako kontrol-puntu gisa kodetzen da, \"x,y\" (zaharra) edo \"x,y,m_in,m_out\" formatuan, tangentea gainidatzi behar denean (balio hutsak edo \"nan\" balioak PCHIP lehenetsia erabiltzen du). x [0,1] tartean dago; y konfiguratutako ratio-barrutira mugatzen da; adib. \"0,0.15|0.5,0.50|1,0.85\". Hutsik uzten bada, gradient_range lineala erabiltzen da haren ordez." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Filamentu nahasiaren gradientea pieza bakoitzeko" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gradiente modua gaituta dagoenean, gradientea multzoko pieza bakoitzari modu independentean aplikatzen zaio, multzo osoa Z barruti bakar gisa hartu beharrean." + msgid "Filament printable" msgstr "Filamentua inprimagarria" @@ -15285,6 +15402,8 @@ msgstr "Y ardatzaren gehieneko indarra" msgid "The allowed maximum output force of Y axis" msgstr "Y ardatzaren gehieneko irteera-indar baimendua" +# AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15294,6 +15413,8 @@ msgstr "Y ardatzeko ohearen masa" msgid "The machine bed mass load of Y axis" msgstr "Y ardatzeko makinaren oheak jasaten duen masa-karga" +# AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16859,6 +16980,14 @@ msgstr "" "\n" "Beheko garbitu aurreko atzera-egite kantitatearen ezarpenean balio batezarriz gero, gehiegizko atzera-egitea garbiketa baino lehen egingo da; bestela, ondoren egingo da." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Kolore nahasiaren azpigeruza" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Kolore nahasiaren azpigeruzatan zatitzea gaitzen du. Gaituta dagoenean, kolore nahasiko filamentuak dituzten geruzak azpigeruzatan zatitzen dira kolore-nahasketa efektuak lortzeko." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Purgatze-dorrea pitaren hondarrak garbitzeko eta pitaren barruko ganbera-presioa egonkortzeko erabil daiteke, objektuetan itxura-akatsak saihesteko." @@ -17917,6 +18046,10 @@ msgstr "Modelo-fitxategiaren sareztatzeak huts egin du edo ez dago baliozko form msgid "The supplied file couldn't be read because it's empty." msgstr "Emandako fitxategia ezin izan da irakurri hutsik dagoelako." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Fitxategi-formatua bateraezina da eta ezin da analizatu." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Fitxategi-formatu ezezaguna: sarrerako fitxategiak .stl, .obj edo .amf(.xml) luzapena izan behar du." @@ -20179,8 +20312,9 @@ msgstr "Ezabatuta" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Gaitu filamentuen esleipen adimenduna: esleitu filamentua hainbat pitatara aurrezpena maximizatzeko" -msgid "Fila Saving" -msgstr "Filamentu-aurrezpena" +# AI Translated +msgid "File Saving" +msgstr "Fitxategia gordetzea" msgid "Don't remind me again" msgstr "Ez gogorarazi berriro" @@ -20541,6 +20675,9 @@ msgstr "Berrabiarazi orain" msgid "NO RAMMING AT ALL" msgstr "MUTURRAREN MOLDAKETARIK EZ INONDIK INORA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Abiadura bolumetrikoa" @@ -21117,6 +21254,36 @@ msgstr "" "Saihestu okertzea\n" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Waylanden jatorrizko zuzeneko ikuspegiak GStreamer GTK bideo-hustubidea behar du. Instalatu GStreamerrerako gtksink plugina eta berrabiarazi OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Ezin izan da Waylanden jatorrizko GStreamer bideo-hustubidea hasieratu. Egiaztatu GStreamer GTK pluginaren instalazioa." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player behar da zeregin honetarako! 'Windows Media Player' gaitu nahi duzu zure sistema eragilean?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource ez da behar bezala erregistratu multimedia erreproduzitzeko! Sakatu Bai berriro erregistratzeko. Bi aldiz galdetuko zaizu" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Multimedia erreproduzitzeko erregistratutako BambuSource osagaia falta da! Berrinstalatu OrcaSlicer edo eskatu laguntza komunitateari." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Beste instalazio bateko BambuSource erabiltzen ari zara; baliteke bideo-erreprodukzioak behar bezala ez funtzionatzea! Sakatu Bai konpontzeko." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Zure sisteman GStreamer-erako H.264 kodekak falta dira, eta beharrezkoak dira bideoa erreproduzitzeko. (Saiatu gstreamer1.0-plugins-bad edo gstreamer1.0-libav paketeak instalatzen, eta berrabiarazi OrcaSlicer?)" + +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "g" + +#~ msgid "Fila Saving" +#~ msgstr "Filamentu-aurrezpena" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 28a2e27a01..e56aee63a7 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -2896,6 +2896,10 @@ msgstr "Éditer" msgid "Merge with" msgstr "Fusionner avec" +# AI Translated +msgid "Decompose Color" +msgstr "Décomposer la couleur" + msgid "Delete this filament" msgstr "Supprimer ce filament" @@ -3178,6 +3182,10 @@ msgstr "Assemblé" msgid "Merge parts to an object" msgstr "Fusionner les pièces en un objet" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "L’utilisation d’une hauteur de couche variable avec la sous-couche de couleur mixte peut dégrader la qualité du mélange des couleurs." + msgid "Add layers" msgstr "Ajouter des couches" @@ -7733,6 +7741,10 @@ msgstr "Personnaliser le plateau actuel" msgid "The %s nozzle can not print %s." msgstr "La buse %s ne peut pas imprimer %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "L’impression d’un filament de couleur mixte sur une imprimante à extrudeur unique nécessite des changements de filament et des purges fréquents, ce qui peut augmenter considérablement les déchets et le risque d’obstruction de la buse ou de la goulotte à déchets." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Le mélange de %1% avec %2% lors de l'impression n'est pas recommandé.\n" @@ -7858,12 +7870,44 @@ msgstr "Synchroniser la liste des filaments depuis l'AMS" msgid "Set filaments to use" msgstr "Définir les filaments à utiliser" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Ajouter un filament mixte" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mixte" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Supprimer le dernier filament mixte" + +# AI Translated +msgid "Add mixed filament" +msgstr "Ajouter un filament mixte" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Le filament mixte comporte des composants invalides ou incohérents. Veuillez modifier à nouveau les entrées concernées." + msgid "Search plate, object and part." msgstr "Recherche de plaque, d'objet et de pièce." msgid "Pellets" msgstr "Granulés" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Le filament mixte comporte des références de composants invalides" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Éditer / Supprimer / Fusionner" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Le filament mixte cible utilise ce filament physique comme composant. La fusion supprimera ce filament physique et risque de rendre le filament mixte invalide. Continuer ?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Une fois votre opération terminée, le projet %s sera fermé et un nouveau projet sera créé." @@ -8042,6 +8086,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objet en plusieurs pièces détecté" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Association des textures aux filaments" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avertissement d’importation de texture" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Charger ces fichiers en tant qu'objet unique avec plusieurs parties ?\n" @@ -8246,6 +8298,22 @@ msgstr "" msgid "Sync now" msgstr "Synchroniser maintenant" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Échec de l’importation de la texture. Le modèle semble contenir des données de texture, mais le processus d’importation n’a pas pu être mené à son terme. Le modèle sera importé en tant que géométrie uniquement." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Application des couleurs de texture..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Mise à jour de la vue 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Couleurs de texture appliquées." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Vous pouvez conserver les préréglages modifiés dans le nouveau projet ou les supprimer" @@ -9477,6 +9545,10 @@ msgstr "Vase spirale" msgid "First layer filament sequence" msgstr "Séquence d’impression de la première couche" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La liste des filaments contient des filaments mixtes. La séquence de filaments personnalisée ne sera pas appliquée." + msgid "By Layer" msgstr "Par Couche" @@ -11369,27 +11441,6 @@ msgstr "Volumes de purge pour le changement de filament" msgid "Please choose the filament colour" msgstr "Veuillez choisir la couleur du filament" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "L’aperçu en direct natif sous Wayland nécessite le récepteur vidéo GStreamer GTK. Veuillez installer le plugin gtksink pour GStreamer, puis redémarrer OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Échec de l’initialisation du récepteur vidéo GStreamer natif sous Wayland. Veuillez vérifier l’installation de votre plugin GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player est nécessaire pour cette tâche ! Voulez-vous activer ‘Windows Media Player’ pour votre système d’exploitation ?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource n’a pas été correctement enregistré pour la lecture de médias ! Appuyez sur Oui pour le réenregistrer. Vous recevrez deux fois la demande de permission" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Composant BambuSource manquant pour la lecture multimédia ! Veuillez réinstaller OrcaSlicer ou demander de l'aide à la communauté." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Si vous utilisez une BambuSource provenant d’une autre installation, la lecture de la vidéo peut ne pas fonctionner correctement ! Appuyez sur Oui pour résoudre le problème." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Il manque à votre système les codecs H.264 pour GStreamer, qui sont nécessaires pour lire la vidéo. (Essayez d’installer les paquets gstreamer1.0-plugins-bad ou gstreamer1.0-libav, puis redémarrez Orca Slicer)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "L’agent cloud n’est pas disponible. Veuillez redémarrer OrcaSlicer et réessayer." @@ -12092,6 +12143,10 @@ msgstr "Si vous souhaitez tout de même imprimer, vous pouvez activer l’option msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Un filament mixte avec dégradé est utilisé, mais « Sous-couche de couleur mixte » est désactivé. Le dégradé ne sera pas imprimé." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Le mode fluide du timelapse n'est pas pris en charge lorsque le mode d'impression « par objet » est activé." @@ -12128,6 +12183,10 @@ msgstr "Vous devez réduire la taille de votre modèle ou modifier les paramètr msgid "Variable layer height is not supported with Organic supports." msgstr "La hauteur de couche variable n’est pas prise en charge avec les supports organiques." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Le filament de la tour d’essuyage ne peut pas être un filament mixte." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Différents diamètres de buses et de filaments peuvent ne pas fonctionner correctement lorsque la tour d’amorçage est activée. Il s’agit d’un projet très expérimental, il convient donc de procéder avec prudence." @@ -12475,27 +12534,21 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Autres couches" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Température du plateau pour les couches sauf la première. Une valeur de 0 signifie que le filament ne prend pas en charge l'impression sur la Cool Plate SuperTack." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur la plaque \"Cool plate\"." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Température du plateau pour les couches à l’exception de la couche initiale. La valeur 0 signifie que le filament ne peut pas être imprimé sur la plaque Cool Plate texturée." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur la plaque Engineering." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Il s'agit de la température du plateau pour toutes les couches à l'exception de la première. Une valeur à 0 signifie que ce filament ne peut pas être imprimé sur le plateau haute température (\"High Temp plate\")." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Température du plateau après la première couche. 0 signifie que le filament ne peut pas être imprimé sur la plaque PEI texturée." @@ -13837,6 +13890,8 @@ msgstr "Temps de couche" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Le ventilateur de refroidissement des pièces sera activé pour les couches dont le temps estimé est inférieur à cette valeur. La vitesse du ventilateur est interpolée entre les vitesses minimale et maximale du ventilateur en fonction du temps d'impression de la couche" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14143,6 +14198,62 @@ msgstr "Supports" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Le matériau de support est généralement utilisé pour imprimer le support et les interfaces de support" +# AI Translated +msgid "Is mixed filament" +msgstr "Est un filament mixte" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indique si cet emplacement de filament est un filament mixte composé de plusieurs filaments physiques" + +# AI Translated +msgid "Mixed filament components" +msgstr "Composants du filament mixte" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Indices (à partir de 1) des filaments composants, séparés par des virgules ; par ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proportions des sous-couches du filament mixte" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valeurs de proportion séparées par des virgules dont la somme vaut 1.0 ; par ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Dégradé du filament mixte" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Active le mode dégradé dans la direction Z pour les sous-couches du filament mixte. Lorsqu’il est activé, les proportions des sous-couches varient linéairement d’une couche à l’autre." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Plage du dégradé du filament mixte" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proportions de début et de fin du premier composant en mode dégradé. Paire séparée par une virgule ; par ex. \"0.10,0.90\" signifie de 10% à 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Courbe du dégradé du filament mixte" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Courbe personnalisée facultative, de style Photoshop, associant la progression en Z à la proportion du premier composant. Encodée sous forme de points de contrôle séparés par des barres verticales, au format \"x,y\" (ancien) ou \"x,y,m_in,m_out\" lorsqu’une tangente doit être forcée (une valeur vide ou \"nan\" utilise la valeur PCHIP par défaut). x est compris dans [0,1] ; y est limité à la plage de proportions configurée ; par ex. \"0,0.15|0.5,0.50|1,0.85\". Si le champ est vide, le gradient_range linéaire est utilisé à la place." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Dégradé par pièce du filament mixte" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Lorsque le mode dégradé est activé, applique le dégradé à chaque pièce d’un assemblage indépendamment au lieu de traiter l’assemblage entier comme une seule plage Z." + msgid "Filament printable" msgstr "Filament imprimable" @@ -15388,6 +15499,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Force de sortie maximale autorisée sur l'axe Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15398,6 +15510,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Charge massique du plateau de la machine sur l'axe Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16971,6 +17084,14 @@ msgstr "" "\n" "Le réglage d’une valeur dans le paramètre de quantité de rétraction avant essuyage ci-dessous permet d’effectuer toute rétraction excédentaire avant l’essuyage, sinon elle sera effectuée après l’essuyage." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sous-couche de couleur mixte" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Active la division en sous-couches de couleur mixte. Lorsqu’elle est activée, les couches contenant des filaments de couleur mixte sont divisées en sous-couches afin d’obtenir des effets de mélange de couleurs." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La tour de purge peut être utilisée pour nettoyer les résidus sur la buse et stabiliser la pression du caisson à l'intérieur de la buse afin d'éviter les défauts d'apparence lors de l'impression d'objets." @@ -18037,6 +18158,10 @@ msgstr "Le maillage d'un fichier modèle a échoué ou la forme n'est pas valide msgid "The supplied file couldn't be read because it's empty." msgstr "Le fichier fourni n'a pas pu être lu car il est vide" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Le format du fichier est incompatible et ne peut pas être analysé." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fichier inconnu : le fichier d'entrée doit porter l'extension .stl, .obj ou .amf (.xml)." @@ -20296,8 +20421,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Activer l'attribution intelligente de filament : attribuer un filament à plusieurs buses pour maximiser les économies" # AI Translated -msgid "Fila Saving" -msgstr "Économie de filament" +msgid "File Saving" +msgstr "Enregistrement du fichier" msgid "Don't remind me again" msgstr "Ne plus me rappeler" @@ -20662,6 +20787,9 @@ msgstr "Redémarrer maintenant" msgid "NO RAMMING AT ALL" msgstr "AUCUN BOURRAGE" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Vitesse volumétrique" @@ -21194,7 +21322,8 @@ msgstr "" "Divisez vos impressions en plateaux\n" "Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le processus de suivi de toutes les pièces." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -21266,7 +21395,8 @@ msgstr "" "Améliorer la solidité\n" "Saviez-vous que vous pouvez définir un plus grand nombre de périmètre et une densité de remplissage plus élevée pour améliorer la résistance du modèle ?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer +#: door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." @@ -21282,6 +21412,39 @@ msgstr "" "Éviter la déformation\n" "Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "L’aperçu en direct natif sous Wayland nécessite le récepteur vidéo GStreamer GTK. Veuillez installer le plugin gtksink pour GStreamer, puis redémarrer OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Échec de l’initialisation du récepteur vidéo GStreamer natif sous Wayland. Veuillez vérifier l’installation de votre plugin GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player est nécessaire pour cette tâche ! Voulez-vous activer ‘Windows Media Player’ pour votre système d’exploitation ?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource n’a pas été correctement enregistré pour la lecture de médias ! Appuyez sur Oui pour le réenregistrer. Vous recevrez deux fois la demande de permission" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Composant BambuSource manquant pour la lecture multimédia ! Veuillez réinstaller OrcaSlicer ou demander de l'aide à la communauté." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Si vous utilisez une BambuSource provenant d’une autre installation, la lecture de la vidéo peut ne pas fonctionner correctement ! Appuyez sur Oui pour résoudre le problème." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Il manque à votre système les codecs H.264 pour GStreamer, qui sont nécessaires pour lire la vidéo. (Essayez d’installer les paquets gstreamer1.0-plugins-bad ou gstreamer1.0-libav, puis redémarrez Orca Slicer)." + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Économie de filament" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 1dbfe0b1b7..a15d471073 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2948,6 +2948,10 @@ msgstr "Szerkesztés" msgid "Merge with" msgstr "Egyesítés ezzel" +# AI Translated +msgid "Decompose Color" +msgstr "Szín szétbontása" + msgid "Delete this filament" msgstr "Filament törlése" @@ -3247,6 +3251,10 @@ msgstr "Összeállítás" msgid "Merge parts to an object" msgstr "Tárgyak egyesítése egy objektummá" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "A változó rétegmagasság és a kevert színű alréteg együttes használata ronthatja a színkeverés minőségét." + # AI Translated msgid "Add layers" msgstr "Rétegek hozzáadása" @@ -7847,6 +7855,10 @@ msgstr "Aktuális tálca testreszabása" msgid "The %s nozzle can not print %s." msgstr "A(z) %s fúvóka nem tudja nyomtatni ezt: %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "A kevert színű filament nyomtatása egyextruderes nyomtatón gyakori filamentcserét és öblítést igényel, ami jelentősen növelheti a hulladék mennyiségét, valamint a fúvóka vagy a hulladékcsúszda eltömődésének kockázatát." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "A(z) %1% és %2% keverése nyomtatás közben nem ajánlott.\n" @@ -7972,12 +7984,44 @@ msgstr "Filamentlista szinkronizálása az AMS-ből" msgid "Set filaments to use" msgstr "Használni kívánt filament beállítása" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Kevert filament hozzáadása" + +# AI Translated +msgid "Mixed Filament" +msgstr "Kevert filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Utolsó kevert filament eltávolítása" + +# AI Translated +msgid "Add mixed filament" +msgstr "Kevert filament hozzáadása" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "A kevert filament érvénytelen vagy nem egyező összetevőket tartalmaz. Szerkessze újra az érintett bejegyzéseket." + msgid "Search plate, object and part." msgstr "Tálca, objektum és tárgy keresése." msgid "Pellets" msgstr "Pelletek" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "A kevert filament hibás összetevő-hivatkozásokat tartalmaz" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Szerkesztés / Törlés / Egyesítés" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "A cél kevert filament ezt a fizikai filamentet használja összetevőként. Az egyesítés eltávolítja ezt a fizikai filamentet, és a kevert filament érvénytelenné válhat. Folytatja?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "A művelet befejezésekor a(z) %s projekt bezárul, majd új projekt jön létre." @@ -8160,6 +8204,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Több részből álló objektum észlelve" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Textúrák hozzárendelése a filamentekhez" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Textúraimportálási figyelmeztetés" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Betöltöd ezeket a fájlokat több részből álló egyetlen objektumként?\n" @@ -8371,6 +8423,22 @@ msgstr "" msgid "Sync now" msgstr "Szinkronizálás most" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "A textúra importálása sikertelen. Úgy tűnik, hogy a modell textúraadatokat tartalmaz, de az importálási folyamatot nem sikerült befejezni. A modell csak geometriaként lesz importálva." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Textúraszínek alkalmazása..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D nézet frissítése..." + +# AI Translated +msgid "Texture colors applied." +msgstr "A textúraszínek alkalmazva." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Megtarthatod az új projekt módosított beállításait, vagy elvetheted őket" @@ -9633,6 +9701,10 @@ msgstr "Spirál (váza)" msgid "First layer filament sequence" msgstr "Kezdőréteg filament sorrendje" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "A filamentlista kevert filamenteket tartalmaz. Az egyéni filamentsorrend nem lép érvénybe." + # AI Translated msgid "By Layer" msgstr "Rétegenként" @@ -11552,27 +11624,6 @@ msgstr "Filamentcsere öblítési mennyisége" msgid "Please choose the filament colour" msgstr "Kérlek, válaszd ki a filament színét" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "A natív Wayland élőképhez a GStreamer GTK videonyelő szükséges. Telepítsd a gtksink beépülő modult a GStreamerhez, majd indítsd újra az OrcaSlicert." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nem sikerült inicializálni a natív Wayland GStreamer videonyelőt. Ellenőrizd a GStreamer GTK bővítmény telepítését." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Ehhez a művelethez Windows Media Player szükséges. Szeretnéd engedélyezni a \"Windows Media Player\"-t az operációs rendszerben?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "A BambuSource nincs megfelelően regisztrálva médialejátszáshoz. Kattints az Igen gombra az újbóli regisztráláshoz. Kétszer kapsz majd megerősítési kérést." - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "A médialejátszáshoz szükséges BambuSource-összetevő hiányzik. Kérlek, telepítsd újra az OrcaSlicert, vagy kérj segítséget a közösségtől." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Ha egy másik telepítésből származó BambuSource van használatban, előfordulhat, hogy a videólejátszás nem működik megfelelően. Kattints az Igen gombra a javításhoz." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "A rendszerből hiányoznak a GStreamer H.264 kodekjei, amelyek szükségesek a videolejátszáshoz. (Próbáld telepíteni a gstreamer1.0-plugins-bad vagy a gstreamer1.0-libav csomagokat, majd indítsd újra az Orca Slicert.)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "A felhőszolgáltatás nem érhető el. Indítsd újra az OrcaSlicert, majd próbáld újra." @@ -12282,6 +12333,10 @@ msgstr "Ha továbbra is szeretnél nyomtatni, engedélyezheted az opciót itt: B msgid "No extrusions under current settings." msgstr "A jelenlegi beállításokkal nincsenek extrudálások." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Színátmenetes kevert filament van használatban, de a 'Kevert színű alréteg' ki van kapcsolva. A színátmenet nem lesz kinyomtatva." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "A sima Timelapse nem használható, ha a nyomtatási sorrend \"Tárgyanként\"." @@ -12318,6 +12373,10 @@ msgstr "Próbáld meg csökkenteni a modell méretét vagy módosítani a jelenl msgid "Variable layer height is not supported with Organic supports." msgstr "A változó rétegmagasság nem működik az organikus támaszokkal." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "A törlőtorony filamentje nem lehet kevert filament." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Eltérő fúvókaátmérők és eltérő filamentátmérők mellett a törlőtorony nem biztos, hogy megfelelően működik. Ez nagyon kísérleti funkció, ezért körültekintően használd." @@ -14063,6 +14122,8 @@ msgstr "Rétegidő" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "A tárgyhűtő ventilátor azon rétegek esetében lesz engedélyezve, amelyek becsült ideje rövidebb ennél az értéknél. A ventilátor fordulatszáma a rétegnyomtatási időnek megfelelően skálázódik a minimális és maximális ventilátor fordulatszám között" +# AI Translated +msgctxt "second" msgid "s" msgstr "mp" @@ -14370,6 +14431,62 @@ msgstr "Támaszanyag" msgid "Support material is commonly used to print supports and support interfaces." msgstr "A támaszanyagot általában a támaszok és azok érintkező felületeinek nyomtatására használják." +# AI Translated +msgid "Is mixed filament" +msgstr "Kevert filament-e" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Megadja, hogy ez a filamenthely több fizikai filamentből álló kevert filament-e" + +# AI Translated +msgid "Mixed filament components" +msgstr "Kevert filament összetevői" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Az összetevő filamentek vesszővel elválasztott, 1-től induló indexei, pl. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Kevert filament alréteg-arányai" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Vesszővel elválasztott arányértékek, amelyek összege 1.0, pl. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Kevert filament színátmenete" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Bekapcsolja a Z irányú színátmenet módot a kevert filament alrétegeihez. Bekapcsolva az alrétegek arányai lineárisan változnak a rétegek mentén." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Kevert filament színátmenetének tartománya" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Az első összetevő kezdő és záró aránya színátmenet módban. Vesszővel elválasztott számpár, pl. a \"0.10,0.90\" 10%-tól 90%-ig tartót jelent." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Kevert filament színátmenet-görbéje" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Opcionális, Photoshop stílusú egyéni görbe, amely a Z irányú haladást az első összetevő arányához rendeli. Függőleges vonallal elválasztott vezérlőpontokként van kódolva, \"x,y\" (régi) vagy \"x,y,m_in,m_out\" formában, ha az érintő felülbírálására van szükség (üres érték vagy \"nan\" esetén a PCHIP alapértelmezés érvényes). x a [0,1] tartományban van; y a beállított aránytartományra van korlátozva, pl. \"0,0.15|0.5,0.50|1,0.85\". Ha üresen marad, helyette a lineáris gradient_range kerül felhasználásra." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Kevert filament színátmenete tárgyanként" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Ha a színátmenet mód be van kapcsolva, a színátmenet az összeállítás minden tárgyára külön-külön érvényesül, ahelyett hogy az egész összeállítást egyetlen Z tartományként kezelné." + msgid "Filament printable" msgstr "Filament nyomtatható" @@ -15633,6 +15750,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Az Y tengely megengedett maximális kimeneti ereje" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15643,6 +15761,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Az Y tengely gépasztaltömeg-terhelése" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17233,6 +17352,14 @@ msgstr "" "\n" "Ha az alábbi \"visszahúzási mennyiség törlés előtt\" beállításban értéket adsz meg, akkor az esetleges többletvisszahúzás a törlés előtt történik meg, különben utána." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Kevert színű alréteg" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Bekapcsolja a kevert színű alrétegekre bontást. Bekapcsolva a kevert színű filamentet tartalmazó rétegek alrétegekre lesznek bontva a színkeverési hatás eléréséhez." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A törlőtorony a fúvókán lévő maradék eltávolítására és a fúvóka belsejében lévő nyomás stabilizálására szolgál, hogy elkerülhetők legyenek a megjelenésbeli hibák az objektumok nyomtatásakor." @@ -18306,6 +18433,10 @@ msgstr "A modellfájl hálósítása sikertelen volt, vagy nincs érvényes alak msgid "The supplied file couldn't be read because it's empty." msgstr "A megadott fájl nem olvasható be, mert üres" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "A fájlformátum nem kompatibilis, ezért nem értelmezhető." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Ismeretlen fájlformátum. A bemeneti fájlnak .stl, .obj vagy .amf(.xml) kiterjesztésűnek kell lennie." @@ -20654,8 +20785,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Intelligens filament-hozzárendelés bekapcsolása: egy filament több fúvókához rendelése a megtakarítás maximalizálásához" # AI Translated -msgid "Fila Saving" -msgstr "Filamentmegtakarítás" +msgid "File Saving" +msgstr "Fájl mentése" msgid "Don't remind me again" msgstr "Ne emlékeztessen újra" @@ -21058,6 +21189,9 @@ msgstr "Újraindítás most" msgid "NO RAMMING AT ALL" msgstr "EGYÁLTALÁN NINCS TÖMÖRÍTÉS" +msgid "s" +msgstr "mp" + msgid "Volumetric speed" msgstr "Volumetrikus sebesség" @@ -21709,6 +21843,39 @@ msgstr "" "Kunkorodás elkerülése\n" "Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor az asztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "A natív Wayland élőképhez a GStreamer GTK videonyelő szükséges. Telepítsd a gtksink beépülő modult a GStreamerhez, majd indítsd újra az OrcaSlicert." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nem sikerült inicializálni a natív Wayland GStreamer videonyelőt. Ellenőrizd a GStreamer GTK bővítmény telepítését." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Ehhez a művelethez Windows Media Player szükséges. Szeretnéd engedélyezni a \"Windows Media Player\"-t az operációs rendszerben?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "A BambuSource nincs megfelelően regisztrálva médialejátszáshoz. Kattints az Igen gombra az újbóli regisztráláshoz. Kétszer kapsz majd megerősítési kérést." + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "A médialejátszáshoz szükséges BambuSource-összetevő hiányzik. Kérlek, telepítsd újra az OrcaSlicert, vagy kérj segítséget a közösségtől." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Ha egy másik telepítésből származó BambuSource van használatban, előfordulhat, hogy a videólejátszás nem működik megfelelően. Kattints az Igen gombra a javításhoz." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "A rendszerből hiányoznak a GStreamer H.264 kodekjei, amelyek szükségesek a videolejátszáshoz. (Próbáld telepíteni a gstreamer1.0-plugins-bad vagy a gstreamer1.0-libav csomagokat, majd indítsd újra az Orca Slicert.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentmegtakarítás" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index f9d31456bf..9af642f536 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2953,6 +2953,10 @@ msgstr "Modifica" msgid "Merge with" msgstr "Unisci con" +# AI Translated +msgid "Decompose Color" +msgstr "Scomponi colore" + msgid "Delete this filament" msgstr "Elimina questo filamento" @@ -3252,6 +3256,10 @@ msgstr "Assemblaggio" msgid "Merge parts to an object" msgstr "Unisci parti in un oggetto" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "L'uso dell'altezza strato variabile insieme al sottostrato di colore misto può ridurre la qualità della miscelazione dei colori." + # AI Translated msgid "Add layers" msgstr "Aggiungi strati" @@ -7851,6 +7859,10 @@ msgstr "Personalizza il piatto corrente" msgid "The %s nozzle can not print %s." msgstr "L'ugello %s non può stampare %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "La stampa di filamento a colore misto su una stampante a estrusore singolo richiede frequenti cambi di filamento e spurghi, il che può aumentare notevolmente gli scarti e il rischio di intasamento dell'ugello o dello scivolo di scarto." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Non è consigliato miscelare %1% con %2% nella stampa.\n" @@ -7976,12 +7988,44 @@ msgstr "Sincronizza l'elenco filamenti dall'AMS" msgid "Set filaments to use" msgstr "Imposta filamenti da usare" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Aggiungi filamento misto" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamento misto" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Rimuovi l'ultimo filamento misto" + +# AI Translated +msgid "Add mixed filament" +msgstr "Aggiungi filamento misto" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Il filamento misto ha componenti non validi o incoerenti. Modificare nuovamente le voci interessate." + msgid "Search plate, object and part." msgstr "Cerca piatto, oggetto e parte." msgid "Pellets" msgstr "Granuli" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Il filamento misto ha riferimenti a componenti non validi" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Modifica / Elimina / Unisci" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Il filamento misto di destinazione utilizza questo filamento fisico come componente. L'unione rimuoverà questo filamento fisico e potrebbe invalidare il filamento misto. Continuare?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completamento dell'operazione, il progetto %s verrà chiuso e ne verrà creato uno nuovo." @@ -8161,6 +8205,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Rilevato oggetto in più parti" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associazione delle trame ai filamenti" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avviso di importazione trama" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Caricare questi file come un singolo oggetto con più parti?\n" @@ -8371,6 +8423,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronizza ora" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Importazione della trama non riuscita. Il modello sembra contenere dati di trama, ma non è stato possibile completare il processo di importazione. Il modello verrà importato solo come geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Applicazione dei colori della trama..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aggiornamento della vista 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Colori della trama applicati." + msgid "You can keep the modified presets for the new project or discard them" msgstr "È possibile conservare i profili modificati per il nuovo progetto o scartarli" @@ -9654,6 +9722,10 @@ msgstr "Vaso a spirale" msgid "First layer filament sequence" msgstr "Sequenza filamenti primo strato" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "L'elenco dei filamenti contiene filamenti misti. La sequenza di filamenti personalizzata non avrà effetto." + msgid "By Layer" msgstr "Per strato" @@ -11571,27 +11643,6 @@ msgstr "Volumi di spurgo per cambio filamento" msgid "Please choose the filament colour" msgstr "Scegliere il colore del filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La funzione di visualizzazione in tempo reale nativa di Wayland richiede il ricevitore video GTK di GStreamer. Installare il modulo gtksink per GStreamer e riavviare OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Impossibile inizializzare il ricevitore video nativo di Wayland GStreamer. Verificare l'installazione del modulo GTK di GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Per questa operazione è necessario Windows Media Player! Desideri abilitare 'Windows Media Player' sul il tuo sistema operativo?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource non è stato registrato correttamente per la riproduzione multimediale! Fare clic su Sì per effettuare nuovamente la registrazione. Sarai promosso due volte" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Componente BambuSource mancante per la riproduzione multimediale! Reinstallare OrcaSlicer o cercare aiuto nella comunità." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "È in uso una versione di BambuSource da un'installazione diversa. La riproduzione video potrebbe non funzionare correttamente! Fare clic su Sì per risolvere il problema." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Nel tuo sistema mancano i codec H.264 per GStreamer, necessari per riprodurre i video. (Provare a installare i pacchetti gstreamer1.0-plugins-bad o gstreamer1.0-libav e riavviare OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Il fornitore di servizi cloud non è disponibile. Riavviare OrcaSlicer e riprovare." @@ -12303,6 +12354,10 @@ msgstr "Se desideri comunque stampare, puoi abilitare l'opzione in Preferenze / msgid "No extrusions under current settings." msgstr "Nessuna estrusione con le impostazioni attuali." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "È in uso un filamento misto con gradiente, ma 'Sottostrato di colore misto' è disattivato. Il gradiente non verrà stampato." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "La modalità fluida del timelapse non è supportata quando è abilitata la sequenza \"Per oggetto\"." @@ -12339,6 +12394,10 @@ msgstr "È possibile ridurre le dimensioni del modello o modificare le impostazi msgid "Variable layer height is not supported with Organic supports." msgstr "Altezza strato adattiva non è compatibile con i Supporti organici." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Il filamento della torre di spurgo non può essere un filamento misto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Ugelli e filamenti di diverso diametro potrebbero non funzionare correttamente quando è abilitata la torre di spurgo. Questa funzione è sperimentale, quindi procedere con cautela." @@ -14082,6 +14141,8 @@ msgstr "Durata strato" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "La ventola di raffreddamento verrà attivata per gli strati in cui il tempo stimato è inferiore a questo valore. La velocità della ventola varierà tra la velocità minima e massima in base alla durata stimata di stampa dello strato." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14388,6 +14449,62 @@ msgstr "Materiale di supporto" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Il materiale di supporto viene comunemente utilizzato per stampare supporti e interfacce di supporto." +# AI Translated +msgid "Is mixed filament" +msgstr "È filamento misto" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica se questo slot di filamento è un filamento misto composto da più filamenti fisici" + +# AI Translated +msgid "Mixed filament components" +msgstr "Componenti del filamento misto" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Indici (a partire da 1) dei filamenti componenti, separati da virgole; es. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporzioni dei sottostrati del filamento misto" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valori di proporzione separati da virgole la cui somma sia 1.0; es. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradiente del filamento misto" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Attiva la modalità gradiente in direzione Z per i sottostrati del filamento misto. Se attivata, le proporzioni dei sottostrati variano linearmente tra gli strati." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Intervallo del gradiente del filamento misto" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporzioni iniziale e finale del primo componente in modalità gradiente. Coppia separata da virgola; es. \"0.10,0.90\" significa dal 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Curva del gradiente del filamento misto" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizzata opzionale, in stile Photoshop, che mappa l'avanzamento in Z sulla proporzione del primo componente. Codificata come punti di controllo separati da barre verticali, nel formato \"x,y\" (legacy) oppure \"x,y,m_in,m_out\" quando è necessario forzare la tangente (un valore vuoto o \"nan\" usa il valore PCHIP predefinito). x è compreso in [0,1]; y viene limitato all'intervallo di proporzioni configurato; es. \"0,0.15|0.5,0.50|1,0.85\". Se vuoto, viene usato il gradient_range lineare." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradiente per parte del filamento misto" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quando la modalità gradiente è attiva, applica il gradiente a ciascuna parte di un assemblaggio in modo indipendente anziché trattare l'intero assemblaggio come un unico intervallo Z." + msgid "Filament printable" msgstr "Filamento stampabile" @@ -15655,6 +15772,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "La forza di uscita massima consentita dell'asse Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15665,6 +15783,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Il carico di massa del piano della macchina sull'asse Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17258,6 +17377,14 @@ msgstr "" "\n" "Impostando un valore di quantità di retrazione prima dell'impostazione di spurgo di seguito, verra eseguita qualsiasi retrazione in eccesso prima dello spurgo. Altrimenti verrà eseguita dopo." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sottostrato di colore misto" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Attiva la suddivisione in sottostrati di colore misto. Se attivata, gli strati che contengono filamenti a colore misto vengono suddivisi in sottostrati per ottenere effetti di miscelazione dei colori." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre di spurgo può essere utilizzata per pulire i residui presenti sull'ugello e stabilizzare la pressione della camera all'interno dell'ugello, al fine di evitare difetti estetici durante la stampa." @@ -18329,6 +18456,10 @@ msgstr "La generazione della mesh del file del modello è fallita o la forma non msgid "The supplied file couldn't be read because it's empty." msgstr "Impossibile leggere il file fornito perché è vuoto" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Il formato del file non è compatibile e non può essere interpretato." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato file sconosciuto: il file di input deve avere un'estensione .stl, .obj o .amf(.xml)." @@ -20672,8 +20803,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Abilita l'assegnazione intelligente del filamento: assegna un filamento a più ugelli per massimizzare il risparmio" # AI Translated -msgid "Fila Saving" -msgstr "Risparmio filamento" +msgid "File Saving" +msgstr "Salvataggio file" msgid "Don't remind me again" msgstr "Non ricordarmelo più" @@ -21082,6 +21213,9 @@ msgstr "Riavvia ora" msgid "NO RAMMING AT ALL" msgstr "NESSUNA SPINTA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocità volumetrica" @@ -21733,6 +21867,39 @@ msgstr "" "Evita le deformazioni\n" "Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La funzione di visualizzazione in tempo reale nativa di Wayland richiede il ricevitore video GTK di GStreamer. Installare il modulo gtksink per GStreamer e riavviare OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Impossibile inizializzare il ricevitore video nativo di Wayland GStreamer. Verificare l'installazione del modulo GTK di GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Per questa operazione è necessario Windows Media Player! Desideri abilitare 'Windows Media Player' sul il tuo sistema operativo?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource non è stato registrato correttamente per la riproduzione multimediale! Fare clic su Sì per effettuare nuovamente la registrazione. Sarai promosso due volte" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Componente BambuSource mancante per la riproduzione multimediale! Reinstallare OrcaSlicer o cercare aiuto nella comunità." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "È in uso una versione di BambuSource da un'installazione diversa. La riproduzione video potrebbe non funzionare correttamente! Fare clic su Sì per risolvere il problema." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Nel tuo sistema mancano i codec H.264 per GStreamer, necessari per riprodurre i video. (Provare a installare i pacchetti gstreamer1.0-plugins-bad o gstreamer1.0-libav e riavviare OrcaSlicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Risparmio filamento" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 9c819dd7c1..8ee8813f1d 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2969,6 +2969,10 @@ msgstr "編集" msgid "Merge with" msgstr "結合" +# AI Translated +msgid "Decompose Color" +msgstr "色を分解" + msgid "Delete this filament" msgstr "このフィラメントを削除" @@ -3266,6 +3270,10 @@ msgstr "アセンブリ" msgid "Merge parts to an object" msgstr "パーツをオブジェクトに結合" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "可変積層ピッチと混色サブレイヤーを併用すると、混色の品質が低下する場合があります。" + # AI Translated msgid "Add layers" msgstr "積層を追加" @@ -7859,6 +7867,10 @@ msgstr "現在のプレートをカスタマイズ" msgid "The %s nozzle can not print %s." msgstr "%sノズルは%sを印刷できません。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "単一押出機のプリンターで混色フィラメントを印刷すると、フィラメント交換とフラッシュが頻繁に発生し、廃材やノズル/廃棄シュートの詰まりのリスクが大幅に増加する可能性があります。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%と%2%を混合して印刷することは推奨されません。\n" @@ -7984,12 +7996,44 @@ msgstr "AMSと素材を同期" msgid "Set filaments to use" msgstr "フィラメントを選択" +# AI Translated +msgid "Add Mixed Filament" +msgstr "混合フィラメントを追加" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合フィラメント" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "最後の混合フィラメントを削除" + +# AI Translated +msgid "Add mixed filament" +msgstr "混合フィラメントを追加" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合フィラメントのコンポーネントが無効か一致していません。該当する項目を編集し直してください。" + msgid "Search plate, object and part." msgstr "プレート、オブジェクト、パーツを検索。" msgid "Pellets" msgstr "ペレット" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合フィラメントのコンポーネント参照が壊れています" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "編集 / 削除 / 結合" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "対象の混合フィラメントはこの物理フィラメントをコンポーネントとして使用しています。結合するとこの物理フィラメントは削除され、混合フィラメントが無効になる可能性があります。続行しますか?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "操作完了後、%sプロジェクトが閉じられ、新しいプロジェクトが作成されます。" @@ -8176,6 +8220,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "マルチパーツ検出" +# AI Translated +msgid "Matching textures to filaments" +msgstr "テクスチャをフィラメントに対応付けています" + +# AI Translated +msgid "Texture Import Warning" +msgstr "テクスチャインポートの警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "これらのファイルを一つのオブジェクトとしてロードしますか?\n" @@ -8389,6 +8441,22 @@ msgstr "" msgid "Sync now" msgstr "今すぐ同期" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "テクスチャのインポートに失敗しました。モデルにテクスチャデータが含まれているようですが、インポート処理を完了できませんでした。モデルはジオメトリのみとしてインポートされます。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "テクスチャの色を適用しています..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3Dビューを更新しています..." + +# AI Translated +msgid "Texture colors applied." +msgstr "テクスチャの色を適用しました。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "変更したプリセットをプロジェクト内に保存するか、破棄もできます" @@ -9676,6 +9744,10 @@ msgstr "スパイラル" msgid "First layer filament sequence" msgstr "初期レイヤーフィラメント順序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "フィラメントリストに混合フィラメントが含まれています。カスタムフィラメント順序は適用されません。" + msgid "By Layer" msgstr "レイヤー別" @@ -11591,33 +11663,6 @@ msgstr "フィラメントを入替える為のフラッシュ量" msgid "Please choose the filament colour" msgstr "フィラメントの色を選択してください" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "ネイティブWaylandのライブビューにはGStreamer GTKビデオシンクが必要です。GStreamer用のgtksinkプラグインをインストールし、OrcaSlicerを再起動してください。" - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "ネイティブWaylandのGStreamerビデオシンクの初期化に失敗しました。GStreamer GTKプラグインのインストール状況をご確認ください。" - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "このタスクにはWindows Media Playerが必要です!お使いのOSで「Windows Media Player」を有効にしますか?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "メディア再生用のBambuSourceが正しく登録されていません!「はい」を押して再登録してください。確認が2回表示されます" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "メディア再生用のBambuSourceコンポーネントが見つかりません!OrcaSlicerを再インストールするかコミュニティに助けを求めてください。" - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "別のインストール環境のBambuSourceを使用しているため、動画が正しく再生されない可能性があります!「はい」を押して修正してください。" - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "お使いのシステムには、動画再生に必要なGStreamer用のH.264コーデックがありません。(gstreamer1.0-plugins-badまたはgstreamer1.0-libavパッケージをインストールし、Orca Slicerを再起動してみてください)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "クラウドエージェントが利用できません。OrcaSlicerを再起動して再試行してください。" @@ -12343,6 +12388,10 @@ msgstr "それでも印刷する場合は、環境設定 / 制御 / スライス msgid "No extrusions under current settings." msgstr "現在の設定では造形しません" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "グラデーション付きの混合フィラメントが使用されていますが、「混色サブレイヤー」が無効です。グラデーションは印刷されません。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "オブジェクト順で造形するでは、この機能を使用できません。" @@ -12379,6 +12428,10 @@ msgstr "モデルのサイズを小さくするか、現在のプリント設定 msgid "Variable layer height is not supported with Organic supports." msgstr "可変レイヤー高さはオーガニックサポートではサポートされていません。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "ワイプタワーのフィラメントに混合フィラメントは使用できません。" + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "ノズル径やフィラメント径が異なる場合、プライムタワーを有効にすると正しく動作しないことがあります。非常に実験的な機能ですので、慎重にお進みください。" @@ -12756,29 +12809,23 @@ msgstr "mm 或は %" msgid "Other layers" msgstr "他の層" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはCool Plate SuperTackでの印刷に対応していません。" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが常温プレートで使用できないという意味です。" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはTextured Cool Plateでの印刷に対応していません。" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントがエンジニアリング プレートで使用できないという意味です。" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが高温プレートで使用できないという意味です。" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -msgstr "1層目以外のベッド温度。値が0の場合、フィラメントがPEIプレートをサポートしない意味をします。" +msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはTextured PEI Plateでの印刷に対応していません。" msgid "First layer" msgstr "1層目" @@ -14204,6 +14251,8 @@ msgstr "積層時間" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "パーツ冷却ファンは、積層造形時間がこの値より短い時に作動します。" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14522,6 +14571,62 @@ msgstr "サポート材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "サポート素材は、サポート又はサポート接触面の造形によく使われます。" +# AI Translated +msgid "Is mixed filament" +msgstr "混合フィラメントかどうか" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "このフィラメントスロットが複数の物理フィラメントで構成される混合フィラメントかどうか" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合フィラメントのコンポーネント" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "構成フィラメントの番号(1 始まり)をカンマ区切りで指定します。例: \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合フィラメントのサブレイヤー比率" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "合計が 1.0 になる比率をカンマ区切りで指定します。例: \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合フィラメントのグラデーション" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "混合フィラメントのサブレイヤーに対して Z 方向のグラデーションモードを有効にします。有効にすると、サブレイヤーの比率が積層ごとに直線的に変化します。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合フィラメントのグラデーション範囲" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "グラデーションモードにおける最初のコンポーネントの開始比率と終了比率。カンマ区切りの 2 つの値で指定します。例: \"0.10,0.90\" は 10% から 90% を意味します。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合フィラメントのグラデーションカーブ" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z 方向の進行度を最初のコンポーネントの比率に対応付ける、Photoshop 風のカスタムカーブ(省略可)。制御点を縦棒区切りでエンコードし、\"x,y\"(旧形式)または接線を上書きする場合は \"x,y,m_in,m_out\" の形式で指定します(空欄または \"nan\" は PCHIP の既定値を使用します)。x は [0,1] の範囲で、y は設定された比率範囲に制限されます。例: \"0,0.15|0.5,0.50|1,0.85\"。空欄の場合は線形の gradient_range が使用されます。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合フィラメントのパーツ別グラデーション" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "グラデーションモードが有効な場合、アセンブリ全体を 1 つの Z 範囲として扱うのではなく、アセンブリ内の各パーツに個別にグラデーションを適用します。" + msgid "Filament printable" msgstr "フィラメント印刷可能" @@ -15898,6 +16003,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y軸の許容最大出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15908,6 +16014,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y軸のマシンベッド質量" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17637,6 +17744,14 @@ msgstr "" "\n" "下の「ワイプ前のリトラクション量」設定に値を設定すると、超過分のリトラクションはワイプの前に行われます。それ以外の場合はワイプの後に行われます。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色サブレイヤー" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "混色サブレイヤーへの分割を有効にします。有効にすると、混色フィラメントを含む積層がサブレイヤーに分割され、色を混ぜる効果が得られます。" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "ワイプタワーは、ノズルに残った樹脂を除去し、ノズル内のチャンバー圧力を安定させることで、オブジェクト印刷時の外観不良を防ぐために使用できます。" @@ -18808,6 +18923,10 @@ msgstr "モデルファイルのメッシュ処理に失敗したか、有効な msgid "The supplied file couldn't be read because it's empty." msgstr "提供されたファイルは空であるため読み込めませんでした。" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "ファイル形式に互換性がないため、解析できません。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "ファイル形式が不明です。入力ファイルの拡張子は .stl、.obj、.amf(.xml)である必要があります。" @@ -21230,8 +21349,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "スマートフィラメント割り当てを有効にする: 1つのフィラメントを複数のノズルに割り当てて節約を最大化します" # AI Translated -msgid "Fila Saving" -msgstr "フィラ節約" +msgid "File Saving" +msgstr "ファイル保存" msgid "Don't remind me again" msgstr "再度通知しない" @@ -21638,6 +21757,9 @@ msgstr "今すぐ再起動" msgid "NO RAMMING AT ALL" msgstr "ラミングなし" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "体積速度" @@ -22300,6 +22422,45 @@ msgstr "" "反りを避ける\n" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "ネイティブWaylandのライブビューにはGStreamer GTKビデオシンクが必要です。GStreamer用のgtksinkプラグインをインストールし、OrcaSlicerを再起動してください。" + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "ネイティブWaylandのGStreamerビデオシンクの初期化に失敗しました。GStreamer GTKプラグインのインストール状況をご確認ください。" + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "このタスクにはWindows Media Playerが必要です!お使いのOSで「Windows Media Player」を有効にしますか?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "メディア再生用のBambuSourceが正しく登録されていません!「はい」を押して再登録してください。確認が2回表示されます" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "メディア再生用のBambuSourceコンポーネントが見つかりません!OrcaSlicerを再インストールするかコミュニティに助けを求めてください。" + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "別のインストール環境のBambuSourceを使用しているため、動画が正しく再生されない可能性があります!「はい」を押して修正してください。" + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "お使いのシステムには、動画再生に必要なGStreamer用のH.264コーデックがありません。(gstreamer1.0-plugins-badまたはgstreamer1.0-libavパッケージをインストールし、Orca Slicerを再起動してみてください)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "フィラ節約" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 61d785ef2e..c415c90195 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz <crwusiz@gmail.com>\n" "Language-Team: \n" @@ -2970,6 +2970,10 @@ msgstr "편집" msgid "Merge with" msgstr "병합" +# AI Translated +msgid "Decompose Color" +msgstr "색상 분해" + msgid "Delete this filament" msgstr "이 필라멘트 삭제" @@ -3266,6 +3270,10 @@ msgstr "조립" msgid "Merge parts to an object" msgstr "부품을 하나의 객체로 병합" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "가변 레이어 높이를 혼색 서브레이어와 함께 사용하면 색상 혼합 품질이 떨어질 수 있습니다." + # AI Translated msgid "Add layers" msgstr "레이어 추가" @@ -7871,6 +7879,10 @@ msgstr "사용자 정의 플레이트" msgid "The %s nozzle can not print %s." msgstr "%s 노즐은 %s 을 인쇄할 수 없습니다." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "단일 압출기 프린터에서 혼색 필라멘트를 출력하면 필라멘트 교체와 플러시가 자주 발생하여 낭비되는 재료와 노즐 / 폐기물 슈트 막힘 위험이 크게 늘어날 수 있습니다." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%와 %2% 혼합 출력을 권장하지 않습니다.\n" @@ -7997,12 +8009,44 @@ msgstr "AMS에서 필라멘트 목록 동기화" msgid "Set filaments to use" msgstr "사용할 필라멘트 설정" +# AI Translated +msgid "Add Mixed Filament" +msgstr "혼합 필라멘트 추가" + +# AI Translated +msgid "Mixed Filament" +msgstr "혼합 필라멘트" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "마지막 혼합 필라멘트 제거" + +# AI Translated +msgid "Add mixed filament" +msgstr "혼합 필라멘트 추가" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "혼합 필라멘트의 구성 요소가 잘못되었거나 일치하지 않습니다. 해당 항목을 다시 편집하세요." + msgid "Search plate, object and part." msgstr "플레이트, 객체 및 부품을 검색합니다." msgid "Pellets" msgstr "펠릿" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "혼합 필라멘트의 구성 요소 참조가 손상되었습니다" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "편집 / 삭제 / 병합" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "대상 혼합 필라멘트가 이 물리 필라멘트를 구성 요소로 사용합니다. 병합하면 이 물리 필라멘트가 제거되어 혼합 필라멘트가 무효가 될 수 있습니다. 계속할까요?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "작업을 완료하면 %s 프로젝트가 닫히고 새 프로젝트가 만들어집니다." @@ -8195,6 +8239,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "여러 부품으로 구성된 객체 감지됨" +# AI Translated +msgid "Matching textures to filaments" +msgstr "텍스처를 필라멘트에 매칭하는 중" + +# AI Translated +msgid "Texture Import Warning" +msgstr "텍스처 가져오기 경고" + msgid "Load these files as a single object with multiple parts?\n" msgstr "이 파일을 여러 부품이 있는 단일 객체로 로드하시겠습니까?\n" @@ -8423,6 +8475,22 @@ msgstr "" msgid "Sync now" msgstr "지금 동기화" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "텍스처 가져오기에 실패했습니다. 모델에 텍스처 데이터가 포함된 것으로 보이지만 텍스처 가져오기 과정을 완료하지 못했습니다. 모델은 형상만 가져옵니다." + +# AI Translated +msgid "Applying texture colors..." +msgstr "텍스처 색상 적용 중..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D 뷰 업데이트 중..." + +# AI Translated +msgid "Texture colors applied." +msgstr "텍스처 색상이 적용되었습니다." + msgid "You can keep the modified presets for the new project or discard them" msgstr "수정된 사전 설정을 새 프로젝트에 유지하거나 삭제할 수 있습니다" @@ -9766,6 +9834,10 @@ msgstr "나선형 꽃병 모드" msgid "First layer filament sequence" msgstr "첫 번째 레이어 필라멘트 순서" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "필라멘트 목록에 혼합 필라멘트가 있습니다. 사용자 지정 필라멘트 순서는 적용되지 않습니다." + msgid "By Layer" msgstr "레이어별" @@ -11723,30 +11795,6 @@ msgstr "필라멘트 교체를 위한 버리기 볼륨" msgid "Please choose the filament colour" msgstr "필라멘트 색상을 선택하세요" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "네이티브 Wayland 실시간 보기에는 GStreamer GTK 비디오 싱크가 필요합니다. GStreamer용 gtksink 플러그인을 설치한 후 OrcaSlicer를 다시 시작하십시오." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "네이티브 Wayland GStreamer 비디오 싱크를 초기화하지 못했습니다. GStreamer GTK 플러그인 설치 상태를 확인하십시오." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "이 작업에는 Windows Media Player가 필요합니다! 운영 체제에서 Windows Media Player를 활성화하시겠습니까?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "뱀부소스가 미디어 재생에 올바르게 등록되지 않았습니다! 다시 등록하려면 예를 누르세요. 두 번 승격됩니다" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "미디어 재생용으로 등록된 BambuSource 구성 요소가 없습니다! OrcaSlicer를 다시 설치하거나 커뮤니티에 도움을 요청하십시오." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "다른 설치 버전의 뱀부소스를 사용하면 동영상 재생이 제대로 작동하지 않을 수 있습니다! 예를 눌러 문제를 해결하세요." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "시스템에 동영상 재생을 위해 필요한 GStreamer용 H.264 코덱이 존재하지 않습니다. (gstreamer1.0-plugins-bad 또는 gstreamer1.0-libav 패키지를 설치한 다음 Orca Slicer를 다시 실행하십시오.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "클라우드 에이전트를 사용할 수 없습니다. OrcaSlicer를 다시 시작한 후 다시 시도하십시오." @@ -12475,6 +12523,10 @@ msgstr "그래도 출력하려면 기본 설정 / 제어 / 슬라이싱 / 혼합 msgid "No extrusions under current settings." msgstr "현재 설정에 압출기가 없습니다." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "그라데이션 혼합 필라멘트가 사용 중이지만 '혼색 서브레이어'가 비활성화되어 있습니다. 그라데이션은 출력되지 않습니다." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "타임랩스의 유연 모드는 \"객체별\" 출력순서가 활성화된 경우 지원되지 않습니다." @@ -12513,6 +12565,10 @@ msgstr "모델 크기를 줄이거나 현재 출력 설정을 변경하고 다 msgid "Variable layer height is not supported with Organic supports." msgstr "유기체 서포트에서는 가변 레이어 높이가 지원되지 않습니다." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "프라임 타워 필라멘트는 혼합 필라멘트일 수 없습니다." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "프라임 타워를 활성화하면 노즐 직경과 필라멘트 직경이 다르면 제대로 작동하지 않을 수 있습니다. 매우 실험적인 기능이므로 주의해서 사용하시기 바랍니다." @@ -12889,27 +12945,21 @@ msgstr "mm 또는 %" msgid "Other layers" msgstr "다른 레이어" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "초기 레이어를 제외한 레이어의 베드 온도입니다. 값이 0이면 해당 필라멘트가 쿨 플레이트 슈퍼택에서의 출력을 지원하지 않음을 의미합니다." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 쿨 플레이트 출력을 지원하지 않음을 의미합니다." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도입니다. 값 0은 필라멘트가 텍스처드 쿨 플레이트에서 출력를 지원하지 않음을 의미합니다." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 엔지니어링 플레이트 출력을 지원하지 않음을 의미합니다." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 고온 플레이트 출력을 지원하지 않음을 의미합니다." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "초기 레이어를 제외한 레이어의 베드 온도. 값 0은 필라멘트가 텍스처 PEI 플레이트 출력을 지원하지 않음을 의미합니다." @@ -14312,6 +14362,8 @@ msgstr "레이어 시간" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "예상 시간이 이 값보다 짧은 레이어에 대해 출력물 냉각 팬이 활성화됩니다. 팬 속도는 레이어 출력 시간에 따라 최소 및 최대 팬 속도 사이에서 보간됩니다" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14625,6 +14677,62 @@ msgstr "서포트 재료" msgid "Support material is commonly used to print supports and support interfaces." msgstr "서포트 재료는 일반적으로 서포트 및 서포트 접점을 출력하는 데 사용됩니다" +# AI Translated +msgid "Is mixed filament" +msgstr "혼합 필라멘트 여부" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "이 필라멘트 슬롯이 여러 물리 필라멘트로 구성된 혼합 필라멘트인지 여부" + +# AI Translated +msgid "Mixed filament components" +msgstr "혼합 필라멘트 구성 요소" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "구성 필라멘트의 1부터 시작하는 인덱스를 쉼표로 구분하여 입력합니다. 예: \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "혼합 필라멘트 서브레이어 비율" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "합이 1.0이 되는 비율 값을 쉼표로 구분하여 입력합니다. 예: \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "혼합 필라멘트 그라데이션" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "혼합 필라멘트 서브레이어에 대해 Z 방향 그라데이션 모드를 활성화합니다. 활성화하면 서브레이어 비율이 레이어에 따라 선형으로 변합니다." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "혼합 필라멘트 그라데이션 범위" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "그라데이션 모드에서 첫 번째 구성 요소의 시작 및 종료 비율입니다. 쉼표로 구분된 한 쌍이며, 예를 들어 \"0.10,0.90\"은 10%에서 90%를 의미합니다." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "혼합 필라멘트 그라데이션 곡선" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z 진행도를 첫 번째 구성 요소의 비율에 매핑하는 선택적 Photoshop 스타일 사용자 지정 곡선입니다. 제어점을 세로줄로 구분하여 \"x,y\"(레거시) 또는 접선을 재정의해야 할 때는 \"x,y,m_in,m_out\" 형식으로 인코딩합니다(빈 값 또는 \"nan\"은 PCHIP 기본값을 사용). x는 [0,1] 범위이며, y는 설정된 비율 범위로 제한됩니다. 예: \"0,0.15|0.5,0.50|1,0.85\". 비워 두면 대신 선형 gradient_range가 사용됩니다." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "혼합 필라멘트 부품별 그라데이션" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "그라데이션 모드가 활성화되면 조립 전체를 하나의 Z 범위로 처리하지 않고 조립의 각 부품에 그라데이션을 개별적으로 적용합니다." + msgid "Filament printable" msgstr "필라멘트 출력 가능" @@ -15943,6 +16051,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y축의 허용 최대 출력 힘" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15953,6 +16062,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y축 장비 베드 질량 하중" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17584,6 +17694,14 @@ msgstr "" "\n" "아래의 와이프 전 후퇴량 설정에서 값을 설정하면 와이프 전에 초과 후퇴가 수행되고, 그렇지 않으면 와이프 후에 수행됩니다." +# AI Translated +msgid "Mixed color sublayer" +msgstr "혼색 서브레이어" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "혼색 서브레이어 분할을 활성화합니다. 활성화하면 혼색 필라멘트가 포함된 레이어가 서브레이어로 분할되어 색상 혼합 효과를 얻습니다." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "프라임 타워는 객체를 출력할 때 외관 결함을 방지하기 위해 노즐의 잔류물을 청소하고 노즐 내부의 압력을 안정화하는 데 사용할 수 있습니다." @@ -18687,6 +18805,10 @@ msgstr "모델 파일의 메싱이 실패했거나 유효한 형태가 없습니 msgid "The supplied file couldn't be read because it's empty." msgstr "제공된 파일이 비어 있어 읽을 수 없습니다" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "파일 형식이 호환되지 않아 해석할 수 없습니다." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "알 수 없는 파일 형식: 입력 파일의 확장자는 .stl, .obj 또는 .amf(.xml)여야 합니다." @@ -21080,8 +21202,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "스마트 필라멘트 할당 활성화: 하나의 필라멘트를 여러 노즐에 할당하여 절약을 극대화합니다" # AI Translated -msgid "Fila Saving" -msgstr "필라멘트 절약" +msgid "File Saving" +msgstr "파일 저장" msgid "Don't remind me again" msgstr "다시 알리지 마세요" @@ -21511,6 +21633,9 @@ msgstr "지금 다시 시작" msgid "NO RAMMING AT ALL" msgstr "채워넣기 전혀 없음" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "압출 속도" @@ -22164,6 +22289,42 @@ msgstr "" "뒤틀림 방지\n" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "네이티브 Wayland 실시간 보기에는 GStreamer GTK 비디오 싱크가 필요합니다. GStreamer용 gtksink 플러그인을 설치한 후 OrcaSlicer를 다시 시작하십시오." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "네이티브 Wayland GStreamer 비디오 싱크를 초기화하지 못했습니다. GStreamer GTK 플러그인 설치 상태를 확인하십시오." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "이 작업에는 Windows Media Player가 필요합니다! 운영 체제에서 Windows Media Player를 활성화하시겠습니까?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "뱀부소스가 미디어 재생에 올바르게 등록되지 않았습니다! 다시 등록하려면 예를 누르세요. 두 번 승격됩니다" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "미디어 재생용으로 등록된 BambuSource 구성 요소가 없습니다! OrcaSlicer를 다시 설치하거나 커뮤니티에 도움을 요청하십시오." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "다른 설치 버전의 뱀부소스를 사용하면 동영상 재생이 제대로 작동하지 않을 수 있습니다! 예를 눌러 문제를 해결하세요." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "시스템에 동영상 재생을 위해 필요한 GStreamer용 H.264 코덱이 존재하지 않습니다. (gstreamer1.0-plugins-bad 또는 gstreamer1.0-libav 패키지를 설치한 다음 Orca Slicer를 다시 실행하십시오.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "필라멘트 절약" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index e1ce2f18b2..b3458ec0e4 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n" "Language-Team: \n" @@ -2936,6 +2936,10 @@ msgstr "Redaguoti" msgid "Merge with" msgstr "Sujungti su" +# AI Translated +msgid "Decompose Color" +msgstr "Išskaidyti spalvą" + msgid "Delete this filament" msgstr "Ištrinti šią giją" @@ -3237,6 +3241,10 @@ msgstr "Surinkimas" msgid "Merge parts to an object" msgstr "Sujungti dalis į objektą" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Kintamo sluoksnio aukščio naudojimas kartu su mišrios spalvos posluoksniu gali pabloginti spalvų maišymo kokybę." + # AI Translated msgid "Add layers" msgstr "Pridėti sluoksnių" @@ -7834,6 +7842,10 @@ msgstr "Individualizuoti esamą plokštę" msgid "The %s nozzle can not print %s." msgstr "%s purkštukas negali spausdinti %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Spausdinant mišrios spalvos giją vieno ekstruderio spausdintuvu reikia dažnai keisti giją ir pravalyti, todėl gali gerokai padidėti atliekų kiekis ir purkštuko arba atliekų latako užsikimšimo rizika." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7967,12 +7979,44 @@ msgstr "Sinchronizuoti gijų sąrašą iš AMS" msgid "Set filaments to use" msgstr "Nustatyti gijas naudojimui" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Pridėti mišrią giją" + +# AI Translated +msgid "Mixed Filament" +msgstr "Mišri gija" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Pašalinti paskutinę mišrią giją" + +# AI Translated +msgid "Add mixed filament" +msgstr "Pridėti mišrią giją" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Mišri gija turi netinkamų arba neatitinkančių komponentų. Iš naujo suredaguokite susijusius įrašus." + msgid "Search plate, object and part." msgstr "Plokštės, objekto ir dalies paieška." msgid "Pellets" msgstr "Granulės" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Mišri gija turi sugadintų komponentų nuorodų" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Redaguoti / Ištrinti / Sujungti" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Paskirties mišri gija naudoja šią fizinę giją kaip komponentą. Sujungus ši fizinė gija bus pašalinta ir mišri gija gali tapti netinkama. Tęsti?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Baigus šią operaciją, projektas „%s“ bus uždarytas ir bus sukurtas naujas projektas." @@ -8151,6 +8195,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Aptiktas kelių dalių objektas" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Tekstūros priskiriamos gijoms" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Tekstūros importavimo įspėjimas" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ar įkelti šiuos failus kaip vieną objektą su keliomis detalėmis?\n" @@ -8365,6 +8417,22 @@ msgstr "" msgid "Sync now" msgstr "Sinchronizuoti dabar" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Tekstūros importuoti nepavyko. Panašu, kad modelyje yra tekstūros duomenų, tačiau importavimo proceso nepavyko užbaigti. Modelis bus importuotas tik kaip geometrija." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Taikomos tekstūros spalvos..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Atnaujinamas 3D vaizdas..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Tekstūros spalvos pritaikytos." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Pakeistus profilius galite išsaugoti naujam projektui arba juos atmesti" @@ -9594,6 +9662,10 @@ msgstr "Spiralinė vaza" msgid "First layer filament sequence" msgstr "Pirmojo sluoksnio gijos eiga" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Gijų sąraše yra mišrių gijų. Pasirinktinė gijų seka nebus taikoma." + msgid "By Layer" msgstr "Pagal sluoksnį" @@ -11497,27 +11569,6 @@ msgstr "Išmetimo tūris keičiant gijas" msgid "Please choose the filament colour" msgstr "Pasirinkite gijos spalvą" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Tiesioginei „Native Wayland“ peržiūrai reikalingas „GStreamer GTK“ vaizdo sinchronizatorius (video sink). Įdiekite „GStreamer“ skirtą „gtksink“ papildinį, tada iš naujo paleiskite „OrcaSlicer“." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nepavyko inicijuoti „native Wayland GStreamer“ vaizdo sinchronizatoriaus (video sink). Patikrinkite „GStreamer GTK“ papildinio įdiegimą." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Šiai užduočiai atlikti reikalingas \"Windows Media Player\"! Ar norite įjungti \"Windows Media Player\" savo operacinėje sistemoje?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "„BambuSource“ neteisingai užregistruotas medijos atkūrimui! Paspauskite „Taip“, kad jį perregistruotumėte. Jums reikės patvirtinti du kartus." - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Trūksta BambuSource komponento, užregistruoto medijos atkūrimui! Iš naujo įdiekite OrcaSlicer arba kreipkitės pagalbos į bendruomenę." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Naudojant \"BambuSource\" iš kito diegimo šaltinio, vaizdo įrašų atkūrimas gali būti neteisingas! Paspauskite Taip, kad tai ištaisytumėte." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Jūsų sistemoje nėra \"GStreamer\" H.264 kodekų, reikalingų vaizdo įrašams atkurti. (Pabandykite įdiegti gstreamer1.0-plugins-bad arba gstreamer1.0-libav paketus, tada iš naujo paleiskite \"Orca Slicer\")" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Debesies agentas nepasiekiamas. Iš naujo paleiskite „OrcaSlicer“ ir bandykite vėl." @@ -12225,6 +12276,10 @@ msgstr "Jei vis tiek norite spausdinti, galite įjungti šią parinktį skiltyje msgid "No extrusions under current settings." msgstr "Pagal dabartinius nustatymus nėra išspaudimų." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Naudojama mišri gija su gradientu, tačiau 'Mišrios spalvos posluoksnis' yra išjungtas. Gradientas nebus atspausdintas." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Sklandus pakadrinio filmavimo (timelapse) režimas nepalaikomas, kai įjungta spausdinimo seka „pagal objektą“." @@ -12261,6 +12316,10 @@ msgstr "Galbūt norėsite sumažinti modelio dydį arba pakeisti esamus spausdin msgid "Variable layer height is not supported with Organic supports." msgstr "Kintamas sluoksnio aukštis nepalaikomas su \" Organinėmis atramomis\"." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Valymo bokšto gija negali būti mišri gija." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Skirtingo skersmens purkštukai ir skirtingo skersmens gijos gali neveikti gerai, kai įjungtas valymo bokštas. Tai labai eksperimentinė priemonė, todėl elkitės atsargiai." @@ -13961,6 +14020,8 @@ msgstr "Sluoksnio laikas" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Detalės aušinimo ventiliatorius bus suaktyvintas tiems sluoksniams, kurių preliminarus spausdinimo laikas yra trumpesnis už šią reikšmę. Ventiliatoriaus sūkiai bus interpoliuojami tarp minimalaus ir maksimalaus greičio, priklausomai nuo sluoksnio spausdinimo trukmės." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14268,6 +14329,62 @@ msgstr "Atramų gija" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Atramų gija paprastai naudojama atramoms ir atramų skiriamiesiems sluoksniams spausdinti." +# AI Translated +msgid "Is mixed filament" +msgstr "Yra mišri gija" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Nurodo, ar ši gijos vieta yra mišri gija, sudaryta iš kelių fizinių gijų" + +# AI Translated +msgid "Mixed filament components" +msgstr "Mišrios gijos komponentai" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Kableliais atskirti komponentinių gijų indeksai, skaičiuojami nuo 1, pvz. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Mišrios gijos posluoksnių santykiai" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Kableliais atskirtos santykio reikšmės, kurių suma lygi 1.0, pvz. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Mišrios gijos gradientas" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Įjungia gradiento režimą Z kryptimi mišrios gijos posluoksniams. Įjungus posluoksnių santykiai tarp sluoksnių kinta tiesiškai." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Mišrios gijos gradiento intervalas" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Pirmojo komponento pradinis ir galutinis santykis gradiento režimu. Kableliu atskirta pora, pvz. \"0.10,0.90\" reiškia nuo 10% iki 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Mišrios gijos gradiento kreivė" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Neprivaloma pasirinktinė Photoshop stiliaus kreivė, susiejanti Z eigą su pirmojo komponento santykiu. Užrašoma kaip vertikaliais brūkšniais atskirti valdymo taškai, formatu \"x,y\" (senasis) arba \"x,y,m_in,m_out\", kai reikia nustatyti liestinę (tuščia reikšmė arba \"nan\" reiškia numatytąjį PCHIP). x priklauso [0,1]; y apribojamas iki nustatyto santykių intervalo, pvz. \"0,0.15|0.5,0.50|1,0.85\". Jei palikta tuščia, naudojamas tiesinis gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Mišrios gijos gradientas kiekvienai daliai" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Kai gradiento režimas įjungtas, gradientas taikomas kiekvienai surinkimo daliai atskirai, o ne visam surinkimui kaip vienam Z intervalui." + msgid "Filament printable" msgstr "Gija tinkama spausdinti" @@ -15518,6 +15635,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Leidžiama didžiausia Y ašies išvesties jėga" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15530,6 +15648,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Įrenginio pagrindo masės apkrova Y ašiai" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17098,6 +17217,14 @@ msgstr "" "\n" "Jei žemiau esančiame nustatyme „Įtraukimo kiekis prieš nuvalymą“ nurodysite reikšmę, perteklinis gijos įtraukimas bus atliktas prieš nuvalymą, kitu atveju – po jo." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Mišrios spalvos posluoksnis" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Įjungia skaidymą į mišrios spalvos posluoksnius. Įjungus sluoksniai, kuriuose yra mišrios spalvos gijų, skaidomi į posluoksnius, kad būtų pasiektas spalvų maišymo efektas." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Valymo bokštelis (angl. \"wiping tower\") gali būti naudojamas likučiams nuo purkštuko nuvalyti ir purkštuko viduje esančiam slėgiui stabilizuoti, siekiant išvengti išvaizdos defektų spausdinant objektus." @@ -18181,6 +18308,10 @@ msgstr "Nepavyko suformuoti modelio failo poligonažo arba jame nėra tinkamos g msgid "The supplied file couldn't be read because it's empty." msgstr "Pateikto failo nepavyko nuskaityti, nes jis yra tuščias." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Failo formatas nesuderinamas ir jo nepavyksta perskaityti." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nežinomas failo formatas: įvesties failas privalo turėti .stl, .obj arba .amf(.xml) plėtinį." @@ -20447,8 +20578,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Įjungti išmanųjį gijos priskyrimą: priskirkite vieną giją keliems purkštukams, kad sutaupytumėte kuo daugiau" # AI Translated -msgid "Fila Saving" -msgstr "Gijos taupymas" +msgid "File Saving" +msgstr "Failo įrašymas" msgid "Don't remind me again" msgstr "Daugiau neberodyti šio priminimo" @@ -20813,6 +20944,9 @@ msgstr "Paleisti iš naujo dabar" msgid "NO RAMMING AT ALL" msgstr "VISIŠKAI NENAUDOTI SUTANKINIMO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Tūrinis greitis" @@ -21435,6 +21569,39 @@ msgstr "" "Venkite deformacijų (warping)\n" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Tiesioginei „Native Wayland“ peržiūrai reikalingas „GStreamer GTK“ vaizdo sinchronizatorius (video sink). Įdiekite „GStreamer“ skirtą „gtksink“ papildinį, tada iš naujo paleiskite „OrcaSlicer“." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nepavyko inicijuoti „native Wayland GStreamer“ vaizdo sinchronizatoriaus (video sink). Patikrinkite „GStreamer GTK“ papildinio įdiegimą." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Šiai užduočiai atlikti reikalingas \"Windows Media Player\"! Ar norite įjungti \"Windows Media Player\" savo operacinėje sistemoje?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "„BambuSource“ neteisingai užregistruotas medijos atkūrimui! Paspauskite „Taip“, kad jį perregistruotumėte. Jums reikės patvirtinti du kartus." + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Trūksta BambuSource komponento, užregistruoto medijos atkūrimui! Iš naujo įdiekite OrcaSlicer arba kreipkitės pagalbos į bendruomenę." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Naudojant \"BambuSource\" iš kito diegimo šaltinio, vaizdo įrašų atkūrimas gali būti neteisingas! Paspauskite Taip, kad tai ištaisytumėte." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Jūsų sistemoje nėra \"GStreamer\" H.264 kodekų, reikalingų vaizdo įrašams atkurti. (Pabandykite įdiegti gstreamer1.0-plugins-bad arba gstreamer1.0-libav paketus, tada iš naujo paleiskite \"Orca Slicer\")" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Gijos taupymas" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 4284378cd1..4fd3601c0e 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3197,6 +3197,10 @@ msgstr "Bewerken" msgid "Merge with" msgstr "Samenvoegen met" +# AI Translated +msgid "Decompose Color" +msgstr "Kleur ontleden" + # AI Translated msgid "Delete this filament" msgstr "Dit filament verwijderen" @@ -3519,6 +3523,10 @@ msgstr "Montage" msgid "Merge parts to an object" msgstr "Onderdelen samenvoegen tot een object" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Het gebruik van variabele laaghoogte in combinatie met de sublaag met gemengde kleur kan de kwaliteit van de kleurmenging verslechteren." + # AI Translated msgid "Add layers" msgstr "Lagen toevoegen" @@ -8552,6 +8560,10 @@ msgstr "Huidig printbed aanpassen" msgid "The %s nozzle can not print %s." msgstr "Het %s-mondstuk kan %s niet printen." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Het printen van filament met gemengde kleur op een printer met één extruder vereist frequente filamentwissels en spoelbeurten, wat het afval en het risico op verstopping van het mondstuk of de afvalgoot aanzienlijk kan vergroten." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8695,6 +8707,26 @@ msgstr "Synchroniseer filamentlijst vanuit AMS" msgid "Set filaments to use" msgstr "Stel filamenten in om te gebruiken" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Gemengd filament toevoegen" + +# AI Translated +msgid "Mixed Filament" +msgstr "Gemengd filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Laatste gemengde filament verwijderen" + +# AI Translated +msgid "Add mixed filament" +msgstr "Gemengd filament toevoegen" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Het gemengde filament bevat ongeldige of niet-overeenkomende componenten. Bewerk de betrokken items opnieuw." + msgid "Search plate, object and part." msgstr "Zoek plaat, object en onderdeel." @@ -8702,6 +8734,18 @@ msgstr "Zoek plaat, object en onderdeel." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Het gemengde filament bevat ongeldige componentverwijzingen" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Bewerken / Verwijderen / Samenvoegen" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Het gemengde doelfilament gebruikt dit fysieke filament als component. Bij het samenvoegen wordt dit fysieke filament verwijderd en kan het gemengde filament ongeldig worden. Doorgaan?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8903,6 +8947,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Object met meerdere onderdelen gedetecteerd" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Texturen aan filamenten koppelen" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Waarschuwing bij importeren van textuur" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Wilt u deze bestanden laden als een enkel object bestaande uit meerdere onderdelen?\n" @@ -9134,6 +9186,22 @@ msgstr "" msgid "Sync now" msgstr "Nu synchroniseren" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Het importeren van de textuur is mislukt. Het model lijkt textuurgegevens te bevatten, maar het importproces kon niet worden voltooid. Het model wordt alleen als geometrie geïmporteerd." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Textuurkleuren toepassen..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D-weergave bijwerken..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Textuurkleuren toegepast." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project of ze laten vervallen" @@ -10527,6 +10595,10 @@ msgstr "Spiraalvaas" msgid "First layer filament sequence" msgstr "Eerste laag filamentvolgorde" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "De filamentlijst bevat gemengde filamenten. De aangepaste filamentvolgorde wordt niet toegepast." + msgid "By Layer" msgstr "Op laag" @@ -12618,33 +12690,6 @@ msgstr "Volumes reinigen voor filament wijziging" msgid "Please choose the filament colour" msgstr "Kies de filamentkleur" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Voor de native Wayland-liveview is de GStreamer GTK-videosink nodig. Installeer de gtksink-plug-in voor GStreamer en start OrcaSlicer opnieuw." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Initialiseren van de native Wayland GStreamer-videosink is mislukt. Controleer de installatie van uw GStreamer GTK-plug-in." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Voor deze taak is Windows Media Player vereist! Wilt u 'Windows Media Player' inschakelen voor uw besturingssysteem?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource is niet correct geregistreerd voor het afspelen van media! Klik op Ja om het opnieuw te registreren. U krijgt twee keer een melding" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Ontbrekend BambuSource-component geregistreerd voor media afspelen! Installeer OrcaSlicer opnieuw of zoek hulp in de community." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Er wordt een BambuSource van een andere installatie gebruikt; het afspelen van video werkt mogelijk niet correct! Klik op Ja om dit te herstellen." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Op uw systeem ontbreken H.264-codecs voor GStreamer, die nodig zijn om video af te spelen. (Probeer de pakketten gstreamer1.0-plugins-bad of gstreamer1.0-libav te installeren en Orca Slicer opnieuw te starten.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "De cloudagent is niet beschikbaar. Start OrcaSlicer opnieuw en probeer het nogmaals." @@ -13410,6 +13455,10 @@ msgstr "Als u toch wilt printen, kunt u de optie inschakelen via Voorkeuren / Be msgid "No extrusions under current settings." msgstr "Geen extrusion onder de huidige instellingen" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Er wordt een gemengd filament met verloop gebruikt, maar 'Sublaag met gemengde kleur' is uitgeschakeld. Het verloop wordt niet geprint." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Vloeiende modus van timelapse wordt niet ondersteund wanneer \"per object\" sequentie is ingeschakeld." @@ -13452,6 +13501,10 @@ msgstr "Verklein eventueel uw model of wijzig de huidige printinstellingen en pr msgid "Variable layer height is not supported with Organic supports." msgstr "Variabele laaghoogte wordt niet ondersteund met organische steunen." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Het filament van het afveegblok mag geen gemengd filament zijn." + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Verschillende mondstukdiameters en verschillende filamentdiameters werken mogelijk niet goed wanneer de prime toren is ingeschakeld. Dit is zeer experimenteel; ga daarom voorzichtig te werk." @@ -13843,27 +13896,21 @@ msgstr "mm of %" msgid "Other layers" msgstr "Andere lagen" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Cool Plate SuperTack niet ondersteunt." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament het afdrukken op de Cool Plate niet ondersteunt." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Textured Cool Plate niet ondersteunt." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van 0 betekent dat het filament afdrukken op de Engineering Plate niet ondersteunt." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Dit is de bedtemperatuur voor lagen, behalve voor de eerste. Een waarde van 0 betekent dat het filament printen op de High Temp Plate niet ondersteunt." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Bedtemperatuur na de eerste laag. 0 betekent dat het filament niet wordt ondersteund op de getextureerde PEI-plaat." @@ -15369,6 +15416,8 @@ msgstr "Laag tijd" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "De printkop ventilator wordt ingeschakeld voor lagen waarvan de geschatte printtijd korter is dan deze waarde. Ventilatorsnelheid wordt geïnterpoleerd tussen de minimale en maximale ventilatorsnelheden volgens de printtijd van de laag" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15728,6 +15777,62 @@ msgstr "Support materiaal" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support materiaal wordt vaak gebruikt om support en support interfaces af te drukken." +# AI Translated +msgid "Is mixed filament" +msgstr "Is gemengd filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Geeft aan of dit filamentslot een gemengd filament is dat uit meerdere fysieke filamenten bestaat" + +# AI Translated +msgid "Mixed filament components" +msgstr "Componenten van gemengd filament" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Door komma's gescheiden indexen van de componentfilamenten, beginnend bij 1, bijv. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Sublaagverhoudingen van gemengd filament" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Door komma's gescheiden verhoudingswaarden die samen 1.0 zijn, bijv. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Verloop van gemengd filament" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Schakelt de verloopmodus in Z-richting in voor de sublagen van gemengd filament. Wanneer ingeschakeld variëren de sublaagverhoudingen lineair over de lagen." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Verloopbereik van gemengd filament" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Begin- en eindverhouding van de eerste component in de verloopmodus. Door een komma gescheiden paar, bijv. \"0.10,0.90\" betekent 10% tot 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Verloopcurve van gemengd filament" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Optionele aangepaste curve in Photoshop-stijl die de Z-voortgang koppelt aan de verhouding van de eerste component. Gecodeerd als door verticale strepen gescheiden controlepunten, in de vorm \"x,y\" (verouderd) of \"x,y,m_in,m_out\" wanneer de raaklijn moet worden overschreven (een lege waarde of \"nan\" gebruikt de PCHIP-standaard). x ligt in [0,1]; y wordt begrensd tot het ingestelde verhoudingsbereik, bijv. \"0,0.15|0.5,0.50|1,0.85\". Wanneer het veld leeg is, wordt het lineaire gradient_range gebruikt." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Verloop per onderdeel van gemengd filament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Wanneer de verloopmodus is ingeschakeld, wordt het verloop op elk onderdeel van een montage afzonderlijk toegepast in plaats van de hele montage als één Z-bereik te behandelen." + # AI Translated msgid "Filament printable" msgstr "Filament printbaar" @@ -17166,6 +17271,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "De maximaal toegestane uitgangskracht van de Y-as" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -17176,6 +17282,7 @@ msgid "The machine bed mass load of Y axis" msgstr "De massabelasting van het machinebed op de Y-as" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -18951,6 +19058,14 @@ msgstr "" "\n" "Als u hieronder een waarde instelt bij de terugtrekhoeveelheid vóór het vegen, wordt de overtollige terugtrekking vóór het vegen uitgevoerd; anders gebeurt dat erna." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sublaag met gemengde kleur" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Schakelt het opsplitsen in sublagen met gemengde kleur in. Wanneer ingeschakeld worden lagen die filamenten met gemengde kleur bevatten opgesplitst in sublagen om kleurmengeffecten te bereiken." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "De veegtoren kan worden gebruikt om resten op het mondstuk te verwijderen en de druk in het mondstuk te stabiliseren om uiterlijke gebreken bij het printen van objecten te voorkomen." @@ -20217,6 +20332,10 @@ msgstr "Het meshen van een modelbestand is mislukt of er is geen geldige vorm." msgid "The supplied file couldn't be read because it's empty." msgstr "Het opgegeven bestand kon niet worden gelezen omdat het leeg is." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "De bestandsindeling is niet compatibel en kan niet worden gelezen." + # AI Translated msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Onbekende bestandsindeling: het invoerbestand moet de extensie .stl, .obj of .amf(.xml) hebben." @@ -22765,8 +22884,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Slimme filamenttoewijzing inschakelen: wijs één filament aan meerdere mondstukken toe om de besparing te maximaliseren" # AI Translated -msgid "Fila Saving" -msgstr "Filamentbesparing" +msgid "File Saving" +msgstr "Bestand opslaan" # AI Translated msgid "Don't remind me again" @@ -23221,6 +23340,9 @@ msgstr "Nu opnieuw starten" msgid "NO RAMMING AT ALL" msgstr "HELEMAAL GEEN RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Volumetrische snelheid" @@ -23887,6 +24009,45 @@ msgstr "" "Kromtrekken voorkomen\n" "Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Voor de native Wayland-liveview is de GStreamer GTK-videosink nodig. Installeer de gtksink-plug-in voor GStreamer en start OrcaSlicer opnieuw." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Initialiseren van de native Wayland GStreamer-videosink is mislukt. Controleer de installatie van uw GStreamer GTK-plug-in." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Voor deze taak is Windows Media Player vereist! Wilt u 'Windows Media Player' inschakelen voor uw besturingssysteem?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource is niet correct geregistreerd voor het afspelen van media! Klik op Ja om het opnieuw te registreren. U krijgt twee keer een melding" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Ontbrekend BambuSource-component geregistreerd voor media afspelen! Installeer OrcaSlicer opnieuw of zoek hulp in de community." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Er wordt een BambuSource van een andere installatie gebruikt; het afspelen van video werkt mogelijk niet correct! Klik op Ja om dit te herstellen." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Op uw systeem ontbreken H.264-codecs voor GStreamer, die nodig zijn om video af te spelen. (Probeer de pakketten gstreamer1.0-plugins-bad of gstreamer1.0-libav te installeren en Orca Slicer opnieuw te starten.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentbesparing" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index cc88aac759..0f6fa10e3b 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n" "Language-Team: \n" @@ -3012,6 +3012,10 @@ msgstr "Edytuj" msgid "Merge with" msgstr "Scal z" +# AI Translated +msgid "Decompose Color" +msgstr "Rozłóż kolor" + msgid "Delete this filament" msgstr "Usuń ten filament" @@ -3319,6 +3323,10 @@ msgstr "Złożenie" msgid "Merge parts to an object" msgstr "Scal części w obiekt" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Użycie zmiennej wysokości warstwy razem z podwarstwą mieszanego koloru może pogorszyć jakość mieszania kolorów." + # AI Translated msgid "Add layers" msgstr "Dodaj warstwy" @@ -8030,6 +8038,10 @@ msgstr "Dostosuj bieżący stół" msgid "The %s nozzle can not print %s." msgstr "Dysza %s nie może drukować %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Drukowanie filamentu o mieszanym kolorze na drukarce z jednym ekstruderem wymaga częstych zmian filamentu i płukania, co może znacznie zwiększyć ilość odpadów oraz ryzyko zatkania dyszy lub rynny na odpady." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mieszanie %1% z %2% podczas druku nie jest zalecane.\n" @@ -8156,12 +8168,44 @@ msgstr "Synchronizuj listę filamentów z AMS" msgid "Set filaments to use" msgstr "Wybierz filamenty do użycia" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Dodaj filament mieszany" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mieszany" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Usuń ostatni filament mieszany" + +# AI Translated +msgid "Add mixed filament" +msgstr "Dodaj filament mieszany" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filament mieszany ma nieprawidłowe lub niezgodne składniki. Proszę ponownie edytować odpowiednie pozycje." + msgid "Search plate, object and part." msgstr "Szukaj stołu, obiektu i części." msgid "Pellets" msgstr "Granulat" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filament mieszany ma uszkodzone odwołania do składników" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Edytuj / Usuń / Scal" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Docelowy filament mieszany używa tego fizycznego filamentu jako składnika. Scalenie usunie ten fizyczny filament i może unieważnić filament mieszany. Kontynuować?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po zakończeniu operacji projekt %s zostanie zamknięty i zostanie utworzony nowy projekt." @@ -8351,6 +8395,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Wykryto obiekt składający się z wielu części" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Dopasowywanie tekstur do filamentów" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Ostrzeżenie importu tekstury" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Czy wczytać te pliki jako pojedynczy obiekt składający się z wielu części?\n" @@ -8579,6 +8631,22 @@ msgstr "" msgid "Sync now" msgstr "Synchronizuj teraz" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Import tekstury nie powiódł się. Model zdaje się zawierać dane tekstury, ale nie udało się ukończyć procesu importu. Model zostanie zaimportowany wyłącznie jako geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Stosowanie kolorów tekstury..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aktualizowanie widoku 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Zastosowano kolory tekstury." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Można zachować zmodyfikowane profile w nowym projekcie lub je odrzucić." @@ -9922,6 +9990,10 @@ msgstr "Tryb wazy" msgid "First layer filament sequence" msgstr "Sekwencja koloru pierwszej warstwy" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Lista filamentów zawiera filamenty mieszane. Niestandardowa kolejność filamentów nie zostanie zastosowana." + msgid "By Layer" msgstr "Wg warstwy" @@ -11896,30 +11968,6 @@ msgstr "Objętości płukania przy zmianie filamentu" msgid "Please choose the filament colour" msgstr "Proszę wybrać kolor filamentu" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Natywny podgląd na żywo w Wayland wymaga ujścia wideo GStreamer GTK. Zainstaluj wtyczkę gtksink dla GStreamer, a następnie uruchom ponownie OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nie udało się zainicjować natywnego ujścia wideo GStreamer dla Wayland. Sprawdź instalację wtyczki GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Do wykonania tego zadania wymagany jest Windows Media Player! Czy włączyć „Windows Media Player” dla systemu operacyjnego?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Brak zarejestrowanego komponentu BambuSource do odtwarzania multimediów! Zainstaluj ponownie OrcaSlicer lub poszukaj pomocy w społeczności." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Jeśli używasz BambuSource z innej instalacji programu, odtwarzanie wideo może nie działać poprawnie! Naciśnij Tak, aby to naprawić." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Agent chmury jest niedostępny. Uruchom ponownie OrcaSlicer i spróbuj jeszcze raz." @@ -12646,6 +12694,10 @@ msgstr "Jeśli mimo to chcesz drukować, możesz włączyć opcję w Preferencje msgid "No extrusions under current settings." msgstr "Brak ekstruzji przy obecnych ustawieniach." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Używany jest filament mieszany z gradientem, ale opcja 'Podwarstwa mieszanego koloru' jest wyłączona. Gradient nie zostanie wydrukowany." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Tryb „Wygładzony” timelapse nie jest obsługiwany, gdy włączona jest sekwencja druku „według obiektu”." @@ -12684,6 +12736,10 @@ msgstr "Może być konieczne zmniejszenie rozmiaru modelu lub zmiana bieżących msgid "Variable layer height is not supported with Organic supports." msgstr "Zmienna wysokość warstwy nie jest dostępna w przypadku podpór organicznych." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament wieży czyszczącej nie może być filamentem mieszanym." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Różne średnice dysz i filamentu mogą nie działać poprawnie, gdy włączona jest wieża czyszcząca. Jest to mocno eksperymentalna funkcja, więc zaleca się ostrożność." @@ -13060,27 +13116,21 @@ msgstr "mm lub %" msgid "Other layers" msgstr "Pozostałe warstwy" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje druku na Cool Plate SuperTack." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Cool Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Temperatura stołu dla warstw, z wyjątkiem pierwszej. Wartość 0 oznacza, że filament nie nadaje się do druku na Textured Cool Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Engineering Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na High Temp Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje drukowania na Textured PEI Plate." @@ -14482,6 +14532,8 @@ msgstr "Czas warstwy" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Wentylator chłodzący części zostanie włączony dla warstw, których szacowany czas jest krótszy niż ta wartość. Prędkość wentylatora jest interpolowana między minimalną a maksymalną prędkością wentylatora zgodnie z czasem druku warstwy" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14792,6 +14844,62 @@ msgstr "Materiał podporowy" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Materiał podporowy jest powszechnie używany do drukowania podpór i warstw łączących podpory z modelem" +# AI Translated +msgid "Is mixed filament" +msgstr "Jest filamentem mieszanym" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Określa, czy to gniazdo filamentu jest filamentem mieszanym złożonym z kilku fizycznych filamentów" + +# AI Translated +msgid "Mixed filament components" +msgstr "Składniki filamentu mieszanego" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Rozdzielone przecinkami indeksy filamentów składowych liczone od 1, np. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporcje podwarstw filamentu mieszanego" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Rozdzielone przecinkami wartości proporcji sumujące się do 1.0, np. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient filamentu mieszanego" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Włącza tryb gradientu w kierunku Z dla podwarstw filamentu mieszanego. Po włączeniu proporcje podwarstw zmieniają się liniowo między warstwami." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Zakres gradientu filamentu mieszanego" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Początkowa i końcowa proporcja pierwszego składnika w trybie gradientu. Para rozdzielona przecinkiem, np. \"0.10,0.90\" oznacza od 10% do 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Krzywa gradientu filamentu mieszanego" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Opcjonalna własna krzywa w stylu Photoshopa odwzorowująca postęp w osi Z na proporcję pierwszego składnika. Zapisywana jako punkty kontrolne rozdzielone pionowymi kreskami, w postaci \"x,y\" (starszy format) lub \"x,y,m_in,m_out\", gdy potrzebne jest nadpisanie stycznej (pusta wartość lub \"nan\" oznacza domyślną wartość PCHIP). x należy do [0,1]; y jest ograniczane do skonfigurowanego zakresu proporcji, np. \"0,0.15|0.5,0.50|1,0.85\". Gdy pole jest puste, używany jest liniowy gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient filamentu mieszanego dla każdej części" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gdy tryb gradientu jest włączony, gradient jest stosowany do każdej części złożenia niezależnie, zamiast traktować całe złożenie jako jeden zakres Z." + msgid "Filament printable" msgstr "Filament do druku" @@ -16112,6 +16220,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Dopuszczalna maksymalna siła wyjściowa na osi Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -16122,6 +16231,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Obciążenie masowe stołu maszyny na osi Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17762,6 +17872,14 @@ msgstr "" "\n" "Ustawienie wartości w ilości cofania przed ustawieniem czyszczenia poniżej spowoduje wykonanie nadmiernego cofania przed czyszczeniem, w przeciwnym razie zostanie wykonane po nim." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Podwarstwa mieszanego koloru" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Włącza podział na podwarstwy mieszanego koloru. Po włączeniu warstwy zawierające filamenty o mieszanym kolorze są dzielone na podwarstwy w celu uzyskania efektu mieszania kolorów." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wieża czyszcząca może być używana do czyszczenia resztek na dyszy i stabilizacji ciśnienia w komorze wewnątrz dyszy, aby uniknąć defektów wyglądu podczas drukowania obiektów." @@ -18863,6 +18981,10 @@ msgstr "Siatkowanie pliku modelu nie powiodło się lub nie ma prawidłowego ksz msgid "The supplied file couldn't be read because it's empty." msgstr "Dostarczony plik nie mógł być odczytany, ponieważ jest pusty" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Format pliku jest niezgodny i nie można go odczytać." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .stl, .obj, .amf(.xml)." @@ -21264,8 +21386,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Włącz inteligentne przypisywanie filamentu: przypisz jeden filament do wielu dysz, aby zmaksymalizować oszczędności" # AI Translated -msgid "Fila Saving" -msgstr "Oszczędność fil." +msgid "File Saving" +msgstr "Zapisywanie pliku" msgid "Don't remind me again" msgstr "Nie przypominaj mi ponownie" @@ -21696,6 +21818,9 @@ msgstr "Uruchom ponownie teraz" msgid "NO RAMMING AT ALL" msgstr "BRAK WYCISKANIA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Prędkości Przepływu" @@ -22341,6 +22466,42 @@ msgstr "" "Unikaj odkształceń\n" "Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Natywny podgląd na żywo w Wayland wymaga ujścia wideo GStreamer GTK. Zainstaluj wtyczkę gtksink dla GStreamer, a następnie uruchom ponownie OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nie udało się zainicjować natywnego ujścia wideo GStreamer dla Wayland. Sprawdź instalację wtyczki GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Do wykonania tego zadania wymagany jest Windows Media Player! Czy włączyć „Windows Media Player” dla systemu operacyjnego?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Brak zarejestrowanego komponentu BambuSource do odtwarzania multimediów! Zainstaluj ponownie OrcaSlicer lub poszukaj pomocy w społeczności." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Jeśli używasz BambuSource z innej instalacji programu, odtwarzanie wideo może nie działać poprawnie! Naciśnij Tak, aby to naprawić." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Oszczędność fil." + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 5b9b7dcc42..0d9698d746 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -2836,6 +2836,10 @@ msgstr "Editar" msgid "Merge with" msgstr "Mesclar com" +# AI Translated +msgid "Decompose Color" +msgstr "Decompor Cor" + msgid "Delete this filament" msgstr "Apagar este filamento" @@ -3118,6 +3122,10 @@ msgstr "Montagem" msgid "Merge parts to an object" msgstr "Mesclar peças com um objeto" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Usar altura de camada variável junto com a subcamada de cor mista pode resultar em uma mistura de cores de baixa qualidade." + msgid "Add layers" msgstr "Adicionar camadas" @@ -7631,6 +7639,10 @@ msgstr "Personalizar a placa atual" msgid "The %s nozzle can not print %s." msgstr "O bico %s não pode imprimir %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filamento de cor mista em uma impressora de extrusora única exige trocas de filamento e purgas frequentes, o que pode aumentar significativamente o desperdício e o risco de entupimento do bico ou da calha de resíduos." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Misturar %1% com %2% na impressão não é recomendado.\n" @@ -7755,12 +7767,44 @@ msgstr "Sincronizar lista de filamentos do AMS" msgid "Set filaments to use" msgstr "Definir filamentos para usar" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Adicionar Filamento Misto" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamento Misto" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Remover o último filamento misto" + +# AI Translated +msgid "Add mixed filament" +msgstr "Adicionar filamento misto" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "O filamento misto tem componentes inválidos ou incompatíveis. Edite novamente as entradas afetadas." + msgid "Search plate, object and part." msgstr "Pesquisar placa, objeto e peça." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "O filamento misto tem referências de componentes quebradas" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editar / Excluir / Mesclar" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "O filamento misto de destino usa este filamento físico como componente. Mesclar removerá este filamento físico e poderá invalidar o filamento misto. Continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Após a conclusão da sua operação, o projeto %s será encerrado e um novo projeto será criado." @@ -7939,6 +7983,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multi-peça detectado" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associando texturas aos filamentos" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Aviso de Importação de Textura" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar esses arquivos como um único objeto com múltiplas peças?\n" @@ -8146,6 +8198,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar agora" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Falha ao importar a textura. O modelo parece conter dados de textura, mas o processo de importação não pôde ser concluído. O modelo será importado apenas como geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplicando cores de textura..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Atualizando a visualização 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Cores de textura aplicadas." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Você pode manter as predefinições modificadas no novo projeto ou descartá-las" @@ -9379,6 +9447,10 @@ msgstr "Vaso espiral" msgid "First layer filament sequence" msgstr "Sequência de filamento da primeira camada" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "A lista de filamentos contém filamentos mistos. A sequência de filamentos personalizada não terá efeito." + msgid "By Layer" msgstr "Por Camada" @@ -11255,27 +11327,6 @@ msgstr "Volumes de purga para troca de filamento" msgid "Please choose the filament colour" msgstr "Escolha a cor do filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "A visualização ao vivo nativa do Wayland requer o receptor de vídeo GTK do GStreamer. Instale o plugin gtksink para GStreamer e reinicie o OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Falha ao inicializar o receptor de vídeo nativo do Wayland GStreamer. Verifique a instalação do plugin GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "O Windows Media Player é necessário para esta tarefa! Você quer habilitar o 'Windows Media Player' para seu sistema operacional?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource não foi registrado corretamente para reprodução de mídia! Pressione Sim para registrá-lo novamente. Você será promovido duas vezes" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Componente BambuSource registrado para reprodução de mídia não encontrado! Por favor, reinstale o OrcaSlicer ou procure ajuda da comunidade." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Usando um BambuSource de uma instalação diferente, a reprodução de vídeo pode não funcionar corretamente! Pressione Sim para consertar." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Seu sistema não possui codecs H.264 para o GStreamer, que são necessários para reproduzir vídeos. (Tente instalar os pacotes gstreamer1.0-plugins-bad ou gstreamer1.0-libav e depois reinicie o OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "O agente na nuvem não está disponível. Reinicie o OrcaSlicer e tente novamente." @@ -11973,6 +12024,10 @@ msgstr "Se ainda assim desejar imprimir, você pode ativar a opção em Preferê msgid "No extrusions under current settings." msgstr "Nenhuma extrusão com as configurações atuais." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Um filamento misto com gradiente está em uso, mas 'Subcamada de cor mista' está desativado. O gradiente não será impresso." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "O modo suave do timelapse não é suportado quando a sequência \"por objeto\" está ativada." @@ -12009,6 +12064,10 @@ msgstr "Você pode querer reduzir o tamanho do seu modelo ou alterar as configur msgid "Variable layer height is not supported with Organic supports." msgstr "A altura de camada variável não é suportada com suportes Orgânicos." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "O filamento da torre de purga não pode ser um filamento misto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diferentes diâmetros de bico e diferentes diâmetros de filamento podem não funcionar bem quando a torre de purga estiver habilitada. É muito experimental, então prossiga com cautela." @@ -13702,6 +13761,8 @@ msgstr "Tempo da camada" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "A ventoinha de resfriamento de peças será ativado para camadas cujo tempo estimado seja mais curto que esse valor. A velocidade da ventoinha é interpolada entre as velocidades mínima e máxima da ventoinha de acordo com o tempo de impressão da camada." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14007,6 +14068,62 @@ msgstr "Material de suporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "O material de suporte é comumente usado para imprimir suportes e interfaces de suporte." +# AI Translated +msgid "Is mixed filament" +msgstr "É filamento misto" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Define se este slot de filamento é um filamento misto composto por vários filamentos físicos" + +# AI Translated +msgid "Mixed filament components" +msgstr "Componentes do filamento misto" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índices (começando em 1) dos filamentos componentes, separados por vírgulas; ex.: \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporções de subcamada do filamento misto" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valores de proporção separados por vírgulas cuja soma seja 1.0; ex.: \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradiente do filamento misto" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Ativa o modo de gradiente na direção Z para as subcamadas do filamento misto. Quando ativado, as proporções das subcamadas variam linearmente ao longo das camadas." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Faixa do gradiente do filamento misto" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporções inicial e final do primeiro componente no modo de gradiente. Par separado por vírgula; ex.: \"0.10,0.90\" significa de 10% a 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Curva do gradiente do filamento misto" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizada opcional, no estilo do Photoshop, que mapeia o progresso em Z para a proporção do primeiro componente. Codificada como pontos de controle separados por barras verticais, no formato \"x,y\" (legado) ou \"x,y,m_in,m_out\" quando é necessário substituir a tangente (um valor vazio ou \"nan\" usa o padrão PCHIP). x está em [0,1]; y é limitado à faixa de proporção configurada; ex.: \"0,0.15|0.5,0.50|1,0.85\". Quando vazio, o gradient_range linear é usado." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradiente por peça do filamento misto" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quando o modo de gradiente está ativado, aplica o gradiente a cada peça de uma montagem de forma independente, em vez de tratar toda a montagem como uma única faixa Z." + msgid "Filament printable" msgstr "Filamento imprimível" @@ -15243,6 +15360,8 @@ msgstr "Força máxima do eixo Y" msgid "The allowed maximum output force of Y axis" msgstr "A força máxima de saída permitida do eixo Y" +# AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15252,6 +15371,8 @@ msgstr "Massa da mesa do eixo Y" msgid "The machine bed mass load of Y axis" msgstr "A carga de massa da mesa do equipamento no eixo Y" +# AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16802,6 +16923,14 @@ msgstr "" "\n" "Definir um valor na configuração de quantidade de retração antes da limpeza abaixo executará qualquer retração em excesso antes da limpeza, caso contrário, será realizada após." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Subcamada de cor mista" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Ativa a divisão em subcamadas de cor mista. Quando ativado, as camadas que contêm filamentos de cor mista são divididas em subcamadas para obter efeitos de mistura de cores." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A torre de purga pode ser usada para limpar o resíduo no bico e estabilizar a pressão na câmara dentro do bico, a fim de evitar defeitos de aparência ao imprimir objetos." @@ -17858,6 +17987,10 @@ msgstr "A geração da malha do arquivo do modelo falhou ou não há forma váli msgid "The supplied file couldn't be read because it's empty." msgstr "O arquivo fornecido não pôde ser lido porque está vazio." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "O formato do arquivo é incompatível e não pode ser lido." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .stl, .obj, .amf(.xml)." @@ -20105,8 +20238,9 @@ msgstr "Removido" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Ativar atribuição inteligente de filamento: Atribui um filamento a vários bicos para maximizar a economia" -msgid "Fila Saving" -msgstr "Econo Filamento" +# AI Translated +msgid "File Saving" +msgstr "Salvamento de Arquivo" msgid "Don't remind me again" msgstr "Não me avise novamente" @@ -20465,6 +20599,9 @@ msgstr "Reiniciar Agora" msgid "NO RAMMING AT ALL" msgstr "SEM NENHUM MOLDEAMENTO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocidade volumétrica" @@ -21041,6 +21178,36 @@ msgstr "" "Evitar empenamento\n" "Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "A visualização ao vivo nativa do Wayland requer o receptor de vídeo GTK do GStreamer. Instale o plugin gtksink para GStreamer e reinicie o OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Falha ao inicializar o receptor de vídeo nativo do Wayland GStreamer. Verifique a instalação do plugin GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "O Windows Media Player é necessário para esta tarefa! Você quer habilitar o 'Windows Media Player' para seu sistema operacional?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource não foi registrado corretamente para reprodução de mídia! Pressione Sim para registrá-lo novamente. Você será promovido duas vezes" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Componente BambuSource registrado para reprodução de mídia não encontrado! Por favor, reinstale o OrcaSlicer ou procure ajuda da comunidade." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Usando um BambuSource de uma instalação diferente, a reprodução de vídeo pode não funcionar corretamente! Pressione Sim para consertar." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Seu sistema não possui codecs H.264 para o GStreamer, que são necessários para reproduzir vídeos. (Tente instalar os pacotes gstreamer1.0-plugins-bad ou gstreamer1.0-libav e depois reinicie o OrcaSlicer?)" + +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "g" + +#~ msgid "Fila Saving" +#~ msgstr "Econo Filamento" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 200d3cbb42..112fbc2834 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n" @@ -2911,6 +2911,10 @@ msgstr "Правка" msgid "Merge with" msgstr "Объединить с" +# AI Translated +msgid "Decompose Color" +msgstr "Разложить цвет" + msgid "Delete this filament" msgstr "Удалить материал" @@ -3222,6 +3226,10 @@ msgstr "Сборка" msgid "Merge parts to an object" msgstr "Сборка моделей" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Использование переменной высоты слоя вместе с подслоем смешанного цвета может ухудшить качество смешивания цветов." + # Запись в истории действий msgid "Add layers" msgstr "Добавление слоёв" @@ -7891,6 +7899,10 @@ msgstr "Настроить стол" msgid "The %s nozzle can not print %s." msgstr "Внимание: «%s» экструдер не может печатать %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Печать материала смешанного цвета на принтере с одним экструдером требует частой смены материала и прочистки, что может значительно увеличить количество отходов и риск засорения сопла или жёлоба для отходов." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Совмещение %1% с %2% при печати не рекомендуется.\n" @@ -8021,12 +8033,44 @@ msgstr "Синхронизировать материалы" msgid "Set filaments to use" msgstr "Выбрать материал" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Добавить смешанный материал" + +# AI Translated +msgid "Mixed Filament" +msgstr "Смешанный материал" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Удалить последний смешанный материал" + +# AI Translated +msgid "Add mixed filament" +msgstr "Добавить смешанный материал" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "У смешанного материала недопустимые или несовпадающие компоненты. Пожалуйста, отредактируйте затронутые записи заново." + msgid "Search plate, object and part." msgstr "Поиск стола, модели или части..." msgid "Pellets" msgstr "Гранулы" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "У смешанного материала нарушены ссылки на компоненты" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Изменить / Удалить / Объединить" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Целевой смешанный материал использует этот физический материал в качестве компонента. Объединение удалит этот физический материал и может сделать смешанный материал недействительным. Продолжить?" + # Порядок слов сильно зависит от контекста; не могу воспроизвести в интерфейсе. По идее, выводится при bool Sidebar::is_new_project_in_gcode3mf(), но что-либо менять в нарезанном .gcode.3mf вообще нельзя #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8211,6 +8255,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Обнаружена модель, состоящая из нескольких частей" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Сопоставление текстур с материалами" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Предупреждение при импорте текстуры" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Загрузить эти файлы как единую модель, состоящую из нескольких частей?\n" @@ -8425,6 +8477,22 @@ msgstr "" msgid "Sync now" msgstr "Синхронизировать" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Не удалось импортировать текстуру. Похоже, модель содержит данные текстуры, но завершить импорт не удалось. Модель будет импортирована только как геометрия." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Применение цветов текстуры..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Обновление 3D-вида..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Цвета текстуры применены." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Вы можете перенести сделанные изменения в новый проект или отказаться от их сохранения" @@ -9671,6 +9739,10 @@ msgstr "Режим вазы" msgid "First layer filament sequence" msgstr "Очерёдность материалов на первом слое" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Список материалов содержит смешанные материалы. Пользовательская последовательность материалов не будет применена." + msgid "By Layer" msgstr "Послойно" @@ -11586,27 +11658,6 @@ msgstr "Объёмы прочистки при смене материала" msgid "Please choose the filament colour" msgstr "Изменение цвета" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Для нативного отображения трансляции в Wayland требуется gtksink (плагин для GStreamer). Установите необходимый пакет плагинов и перезапустите OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Не удалось запустить нативную трансляцию GSteramer через Wayland. Проверьте наличие установленного пакета плагинов GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Для этой задачи требуется Windows Media Player! Хотите включить его в своей ОС?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "Компонент BambuSource неправильно зарегистрирован для воспроизведения медиафайлов! Нажмите «Да», чтобы повторно зарегистрировать его" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Отсутствует компонент BambuSource для воспроизведения медиа. Переустановите OrcaSlicer или обратитесь за помощью к сообществу." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "При использовании компонентов BambuSource из другого инсталлятора, воспроизведение видео может работать некорректно! Нажмите «Да», чтобы исправить это." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "В вашей системе отсутствуют кодеки H.264 для GStreamer, которые необходимы для воспроизведения видео (попробуйте установить пакеты gstreamer1.0-plugins-bad или gstreamer1.0-libav, а затем перезапустить Orca Slicer)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Облачный агент недоступен. Перезапустите OrcaSlicer и повторите попытку." @@ -12303,6 +12354,10 @@ msgstr "Если вас это не пугает, эту проверку мож msgid "No extrusions under current settings." msgstr "При текущих настройках экструзия отсутствует." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Используется смешанный материал с градиентом, но параметр «Подслой смешанного цвета» отключён. Градиент не будет напечатан." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавный режим таймлапса не поддерживается, когда включена последовательность печати моделей по очереди." @@ -12341,6 +12396,10 @@ msgstr "Попробуйте уменьшить размер модели или msgid "Variable layer height is not supported with Organic supports." msgstr "Функция переменной высоты слоя несовместима с органическим стилем древовидных поддержек." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Материал черновой башни не может быть смешанным материалом." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Совместное использование черновой башни с разными диаметрами сопел и прутков может привести к некорректной нарезке при включённой черновой башне. Этот метод работы экспериментальный, поэтому будьте осторожны при использовании." @@ -14159,6 +14218,8 @@ msgstr "Время слоя" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Вентилятор охлаждения моделей будет включён для слоёв, расчётное время которых меньше этого значения. Скорость вентилятора интерполируется между минимальной и максимальной скоростями зависимости от времени печати слоя." +# AI Translated +msgctxt "second" msgid "s" msgstr "с" @@ -14488,6 +14549,62 @@ msgstr "Материал поддержки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Обычно используется для печати поддержки и связующего слоя (интерфейса)." +# AI Translated +msgid "Is mixed filament" +msgstr "Является смешанным материалом" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Определяет, является ли этот слот материала смешанным материалом, состоящим из нескольких физических материалов" + +# AI Translated +msgid "Mixed filament components" +msgstr "Компоненты смешанного материала" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Разделённые запятыми индексы материалов-компонентов, начиная с 1, например \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Доли подслоёв смешанного материала" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Разделённые запятыми значения долей, дающие в сумме 1.0, например \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Градиент смешанного материала" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Включает режим градиента по оси Z для подслоёв смешанного материала. При включении доли подслоёв линейно меняются от слоя к слою." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Диапазон градиента смешанного материала" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Начальная и конечная доли первого компонента в режиме градиента. Пара значений через запятую, например \"0.10,0.90\" означает от 10% до 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Кривая градиента смешанного материала" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Необязательная пользовательская кривая в стиле Photoshop, сопоставляющая прогресс по оси Z с долей первого компонента. Задаётся как контрольные точки, разделённые вертикальной чертой, в виде \"x,y\" (устаревший формат) или \"x,y,m_in,m_out\", если требуется переопределить касательную (пустое значение или \"nan\" означает использование значения PCHIP по умолчанию). x лежит в [0,1]; y ограничивается заданным диапазоном долей, например \"0,0.15|0.5,0.50|1,0.85\". Если поле пустое, вместо этого используется линейный gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Градиент смешанного материала по частям" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Если включён режим градиента, градиент применяется к каждой части сборки отдельно, а не ко всей сборке как к единому диапазону Z." + # ??? Настройка в режиме разработчика. Должна отображаться где-то в настройках # профиля, но поиском не ищется. msgid "Filament printable" @@ -15878,6 +15995,8 @@ msgstr "Максимальное усилие оси Y" msgid "The allowed maximum output force of Y axis" msgstr "Максимально допустимое усилие по оси Y." +# AI Translated +msgctxt "Newton" msgid "N" msgstr "Н" @@ -15887,6 +16006,8 @@ msgstr "Масса стола (оси Y)" msgid "The machine bed mass load of Y axis" msgstr "Пассивная нагрузка механики оси Y массой стола." +# AI Translated +msgctxt "gram" msgid "g" msgstr "г" @@ -17660,6 +17781,14 @@ msgstr "" "\n" "Внимание: процент первичного отката будет увеличен, если длины очистки окажется недостаточно при текущей скорости отката (или из-за иных ограничений)." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Подслой смешанного цвета" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Включает разбиение на подслои смешанного цвета. При включении слои, содержащие материалы смешанного цвета, разбиваются на подслои для получения эффекта смешивания цветов." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Черновая башня – специальная структура, которая используется для прочистки сопла от остатков материала и стабилизации давления внутри сопла при смене экструдера, чтобы избежать дефектов на поверхности печатаемой модели." @@ -18818,6 +18947,10 @@ msgstr "Не удалось обнаружить форму или создат msgid "The supplied file couldn't be read because it's empty." msgstr "Невозможно прочитать файл, так как он пуст." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Формат файла несовместим и не может быть прочитан." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Неизвестный формат файла: входной файл должен иметь расширение *.stl, *.obj или *.amf(.xml)." @@ -21120,8 +21253,9 @@ msgstr "Удалено" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Включить умное назначение материалов: назначить один материал нескольким соплам для максимальной экономии" -msgid "Fila Saving" -msgstr "Экономия материала" +# AI Translated +msgid "File Saving" +msgstr "Сохранение файла" msgid "Don't remind me again" msgstr "Больше не показывать" @@ -21486,6 +21620,9 @@ msgstr "Перезапустить сейчас" msgid "NO RAMMING AT ALL" msgstr "Рэмминг отключён" +msgid "s" +msgstr "с" + # Тянется только в окно настроек рэмминга msgid "Volumetric speed" msgstr "Объёмный расход" @@ -22081,6 +22218,36 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Для нативного отображения трансляции в Wayland требуется gtksink (плагин для GStreamer). Установите необходимый пакет плагинов и перезапустите OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Не удалось запустить нативную трансляцию GSteramer через Wayland. Проверьте наличие установленного пакета плагинов GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Для этой задачи требуется Windows Media Player! Хотите включить его в своей ОС?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "Компонент BambuSource неправильно зарегистрирован для воспроизведения медиафайлов! Нажмите «Да», чтобы повторно зарегистрировать его" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Отсутствует компонент BambuSource для воспроизведения медиа. Переустановите OrcaSlicer или обратитесь за помощью к сообществу." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "При использовании компонентов BambuSource из другого инсталлятора, воспроизведение видео может работать некорректно! Нажмите «Да», чтобы исправить это." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "В вашей системе отсутствуют кодеки H.264 для GStreamer, которые необходимы для воспроизведения видео (попробуйте установить пакеты gstreamer1.0-plugins-bad или gstreamer1.0-libav, а затем перезапустить Orca Slicer)." + +#~ msgid "N" +#~ msgstr "Н" + +#~ msgid "g" +#~ msgstr "г" + +#~ msgid "Fila Saving" +#~ msgstr "Экономия материала" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index fce8c33b10..7ec20d136d 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3289,6 +3289,10 @@ msgstr "Redigera" msgid "Merge with" msgstr "Slå ihop med" +# AI Translated +msgid "Decompose Color" +msgstr "Dela upp färg" + # AI Translated msgid "Delete this filament" msgstr "Radera detta filament" @@ -3610,6 +3614,10 @@ msgstr "Montering" msgid "Merge parts to an object" msgstr "Slå ihop delar till ett objekt" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Att använda variabel lagerhöjd tillsammans med underlager med blandad färg kan ge sämre färgblandningskvalitet." + # AI Translated msgid "Add layers" msgstr "Lägg till lager" @@ -8644,6 +8652,10 @@ msgstr "Anpassa aktuell platta" msgid "The %s nozzle can not print %s." msgstr "Nozzeln %s kan inte skriva ut %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Att skriva ut filament med blandad färg på en skrivare med en enda extruder kräver täta filamentbyten och rensningar, vilket kan öka spillet och risken för stopp i nozzeln eller avfallsrännan avsevärt." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8787,6 +8799,26 @@ msgstr "Synkronisera filament listan från AMS" msgid "Set filaments to use" msgstr "Ställ in filament som ska användas" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Lägg till blandat filament" + +# AI Translated +msgid "Mixed Filament" +msgstr "Blandat filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Ta bort det senaste blandade filamentet" + +# AI Translated +msgid "Add mixed filament" +msgstr "Lägg till blandat filament" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Det blandade filamentet har ogiltiga eller inkompatibla komponenter. Redigera de berörda posterna igen." + msgid "Search plate, object and part." msgstr "Sök platta, objekt och del." @@ -8794,6 +8826,18 @@ msgstr "Sök platta, objekt och del." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Det blandade filamentet har trasiga komponentreferenser" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Redigera / Radera / Slå ihop" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Det blandade målfilamentet använder detta fysiska filament som komponent. Sammanslagningen tar bort det fysiska filamentet och kan göra det blandade filamentet ogiltigt. Fortsätt?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8994,6 +9038,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objekt i flera delar har upptäckts" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Matchar texturer mot filament" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Varning vid texturimport" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ladda dessa filer som ett enkelt objekt med multipla delar?\n" @@ -9223,6 +9275,22 @@ msgstr "" msgid "Sync now" msgstr "Synkronisera nu" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Texturimporten misslyckades. Modellen verkar innehålla texturdata, men importprocessen kunde inte slutföras. Modellen importeras endast som geometri." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Tillämpar texturfärger..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Uppdaterar 3D-vyn..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Texturfärger tillämpade." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Fortsätt med redigerings inställningarna till nytt projekt eller avfärda dem" @@ -10641,6 +10709,10 @@ msgstr "Spiral vas" msgid "First layer filament sequence" msgstr "Första lagrets filament sekvens" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filamentlistan innehåller blandade filament. Den anpassade filamentordningen får ingen effekt." + msgid "By Layer" msgstr "Per lager" @@ -12783,33 +12855,6 @@ msgstr "Rensnings volym för filament byte" msgid "Please choose the filament colour" msgstr "Välj filamentfärg" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Liveview i Wayland kräver GStreamers GTK-videosink. Installera insticksmodulen gtksink för GStreamer och starta sedan om OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Det gick inte att initiera Waylands GStreamer-videosink. Kontrollera installationen av din GStreamer GTK-insticksmodul." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player krävs för den här uppgiften! Vill du aktivera 'Windows Media Player' i ditt operativsystem?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource har inte registrerats korrekt för mediauppspelning! Tryck på Ja för att registrera om den. Du får två frågor" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Saknad BambuSource-komponent registrerad för mediauppspelning! Installera om OrcaSlicer eller sök hjälp i gemenskapen." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Du använder en BambuSource från en annan installation, videouppspelningen kanske inte fungerar korrekt! Tryck på Ja för att åtgärda det." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ditt system saknar H.264-kodekar för GStreamer, som krävs för att spela upp video. (Prova att installera paketen gstreamer1.0-plugins-bad eller gstreamer1.0-libav och starta sedan om Orca Slicer.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Molnagenten är inte tillgänglig. Starta om OrcaSlicer och försök igen." @@ -13572,6 +13617,10 @@ msgstr "Om du ändå vill skriva ut kan du aktivera alternativet i Inställninga msgid "No extrusions under current settings." msgstr "Nuvarande inställning har ingen extrudering." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Ett blandat filament med gradient används, men 'Underlager med blandad färg' är inaktiverat. Gradienten kommer inte att skrivas ut." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Smooth läge för timelapse stöds inte när ”per objekt” -sekvens är aktiverad." @@ -13614,6 +13663,10 @@ msgstr "Du kan behöva minska modellens storlek eller ändra de aktuella utskrif msgid "Variable layer height is not supported with Organic supports." msgstr "Variabel lagerhöjd stöds inte med organiska support." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filamentet för prime tornet kan inte vara ett blandat filament." + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Olika nozzeldiametrar och olika filamentdiametrar kanske inte fungerar bra när prime tornet är aktiverat. Det är mycket experimentellt, så var försiktig." @@ -14012,27 +14065,21 @@ msgstr "mm eller %" msgid "Other layers" msgstr "Andra lager" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Byggplattans temperatur för alla lager utom det första. Värdet 0 innebär att filamentet inte stöder utskrift på Cool Plate SuperTack." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Cool Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Textured Cool Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Ett värde på 0 betyder att filamentet inte stöder utskrift på Engineering Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på High Temp Plate." -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." msgstr "Byggplattans temperatur efter det första lagret. 0 betyder att filamentet inte stöds på den texturerade PEI-plattan." @@ -15538,6 +15585,8 @@ msgstr "Lager tid" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Del kylfläkten kommer att aktiveras för lager vars beräknade tid är kortare än detta värde. Fläkthastigheten interpoleras mellan den lägsta och högsta fläkthastigheten enligt utskriftstiden för lager" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15916,6 +15965,62 @@ msgstr "Supportmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support material används ofta för att skriva ut support och stödja gränssnittet" +# AI Translated +msgid "Is mixed filament" +msgstr "Är blandat filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Anger om denna filamentplats är ett blandat filament som består av flera fysiska filament" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenter i blandat filament" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Kommaseparerade index för komponentfilamenten, med start på 1, t.ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Underlagerandelar för blandat filament" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Kommaseparerade andelsvärden vars summa är 1.0, t.ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient för blandat filament" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Aktiverar gradientläge i Z-riktningen för det blandade filamentets underlager. När det är aktiverat varierar underlagrens andelar linjärt över lagren." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Gradientintervall för blandat filament" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Start- och slutandel för den första komponenten i gradientläge. Kommaseparerat par, t.ex. \"0.10,0.90\" betyder 10% till 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Gradientkurva för blandat filament" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Valfri anpassad kurva i Photoshop-stil som mappar Z-förloppet till den första komponentens andel. Kodas som kontrollpunkter separerade med lodstreck, antingen \"x,y\" (äldre format) eller \"x,y,m_in,m_out\" när tangenten behöver åsidosättas (ett tomt värde eller \"nan\" använder PCHIP-standarden). x ligger i [0,1]; y begränsas till det konfigurerade andelsintervallet, t.ex. \"0,0.15|0.5,0.50|1,0.85\". Om fältet är tomt används det linjära gradient_range i stället." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient per del för blandat filament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "När gradientläget är aktiverat tillämpas gradienten på varje del i en montering separat i stället för att behandla hela monteringen som ett enda Z-intervall." + # AI Translated msgid "Filament printable" msgstr "Filament utskrivbart" @@ -17363,6 +17468,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Den maximalt tillåtna utgående kraften för Y-axeln" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -17373,6 +17479,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Maskinbäddens massbelastning på Y-axeln" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -19172,6 +19279,14 @@ msgstr "" "\n" "Om du anger ett värde i inställningen reduktionsmängd före avtorkning nedan utförs eventuell överskjutande reduktion före avtorkningen, annars utförs den efteråt." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Underlager med blandad färg" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Aktiverar uppdelning i underlager med blandad färg. När det är aktiverat delas lager som innehåller filament med blandad färg upp i underlager för att skapa färgblandningseffekter." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Avstryknings tornet kan användas för att avlägsna rester på munstycket och stabilisera kammartrycket inuti munstycket för att undvika utseendefel vid utskrift av objekt." @@ -20445,6 +20560,10 @@ msgstr "Det gick inte att skapa mesh från modellfilen, eller så saknas en gilt msgid "The supplied file couldn't be read because it's empty." msgstr "Den medföljande filen kunde inte läsas eftersom den är tom." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Filformatet är inkompatibelt och kan inte tolkas." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Okänt filformat: indata filen måste ha tillägget .stl, .obj eller .amf(.xml)." @@ -23021,8 +23140,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Aktivera smart filamenttilldelning: Tilldela ett filament till flera nozzlar för att maximera besparingen" # AI Translated -msgid "Fila Saving" -msgstr "Filamentbesparing" +msgid "File Saving" +msgstr "Filsparande" # AI Translated msgid "Don't remind me again" @@ -23495,6 +23614,9 @@ msgstr "Starta om nu" msgid "NO RAMMING AT ALL" msgstr "INGEN RAMMING ALLS" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Volymetrisk hastighet" @@ -24175,6 +24297,45 @@ msgstr "" "Undvik vridning\n" "Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Liveview i Wayland kräver GStreamers GTK-videosink. Installera insticksmodulen gtksink för GStreamer och starta sedan om OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Det gick inte att initiera Waylands GStreamer-videosink. Kontrollera installationen av din GStreamer GTK-insticksmodul." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player krävs för den här uppgiften! Vill du aktivera 'Windows Media Player' i ditt operativsystem?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource har inte registrerats korrekt för mediauppspelning! Tryck på Ja för att registrera om den. Du får två frågor" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Saknad BambuSource-komponent registrerad för mediauppspelning! Installera om OrcaSlicer eller sök hjälp i gemenskapen." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Du använder en BambuSource från en annan installation, videouppspelningen kanske inte fungerar korrekt! Tryck på Ja för att åtgärda det." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ditt system saknar H.264-kodekar för GStreamer, som krävs för att spela upp video. (Prova att installera paketen gstreamer1.0-plugins-bad eller gstreamer1.0-libav och starta sedan om Orca Slicer.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentbesparing" + # AI Translated #~ msgid "" #~ "Layer height is too small.\n" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index ca12a4ced2..16dcb17ab1 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -2942,6 +2942,10 @@ msgstr "แก้ไข" msgid "Merge with" msgstr "รวมกับ" +# AI Translated +msgid "Decompose Color" +msgstr "แยกสี" + msgid "Delete this filament" msgstr "ลบเส้นพลาสติกนี้" @@ -3237,6 +3241,10 @@ msgstr "การประกอบ" msgid "Merge parts to an object" msgstr "รวมชิ้นส่วนเป็นวัตถุเดียว" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "การใช้ความสูงเลเยอร์แบบแปรผันร่วมกับซับเลเยอร์สีผสมอาจทำให้คุณภาพการผสมสีไม่ดี" + # AI Translated msgid "Add layers" msgstr "เพิ่มเลเยอร์" @@ -7807,6 +7815,10 @@ msgstr "ปรับแต่งแผ่นปัจจุบัน" msgid "The %s nozzle can not print %s." msgstr "หัวฉีด %s ไม่สามารถพิมพ์ %s ได้" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "การพิมพ์เส้นพลาสติกสีผสมบนเครื่องพิมพ์ที่มีชุดดันเส้นเดียวต้องเปลี่ยนเส้นพลาสติกและไล่เส้นบ่อยครั้ง ซึ่งอาจเพิ่มเศษวัสดุและความเสี่ยงที่หัวฉีดหรือช่องทิ้งเศษวัสดุจะอุดตันอย่างมาก" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "ไม่แนะนำให้ผสม %1% กับ %2% ในการพิมพ์\n" @@ -7932,12 +7944,44 @@ msgstr "ประสานรายการเส้นพลาสติกจ msgid "Set filaments to use" msgstr "ตั้งค่าเส้นพลาสติกที่จะใช้" +# AI Translated +msgid "Add Mixed Filament" +msgstr "เพิ่มเส้นพลาสติกผสม" + +# AI Translated +msgid "Mixed Filament" +msgstr "เส้นพลาสติกผสม" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "ลบเส้นพลาสติกผสมล่าสุด" + +# AI Translated +msgid "Add mixed filament" +msgstr "เพิ่มเส้นพลาสติกผสม" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "เส้นพลาสติกผสมมีส่วนประกอบที่ไม่ถูกต้องหรือไม่ตรงกัน กรุณาแก้ไขรายการที่ได้รับผลกระทบอีกครั้ง" + msgid "Search plate, object and part." msgstr "ค้นหาจาน วัตถุ และชิ้นส่วน" msgid "Pellets" msgstr "เม็ด" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "เส้นพลาสติกผสมมีการอ้างอิงส่วนประกอบที่เสียหาย" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "แก้ไข / ลบ / รวม" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "เส้นพลาสติกผสมปลายทางใช้เส้นพลาสติกจริงนี้เป็นส่วนประกอบ การรวมจะลบเส้นพลาสติกจริงนี้และอาจทำให้เส้นพลาสติกผสมใช้ไม่ได้ ดำเนินการต่อหรือไม่?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "หลังจากเสร็จสิ้นการดำเนินการของคุณ โครงการ %s จะถูกปิดและสร้างโครงการใหม่" @@ -8116,6 +8160,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "ตรวจพบวัตถุที่มีหลายส่วน" +# AI Translated +msgid "Matching textures to filaments" +msgstr "กำลังจับคู่พื้นผิวกับเส้นพลาสติก" + +# AI Translated +msgid "Texture Import Warning" +msgstr "คำเตือนการนำเข้าพื้นผิว" + msgid "Load these files as a single object with multiple parts?\n" msgstr "โหลดไฟล์เหล่านี้เป็นออบเจ็กต์เดียวที่มีหลายส่วนใช่ไหม\n" @@ -8326,6 +8378,22 @@ msgstr "" msgid "Sync now" msgstr "ซิงค์เลย" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "การนำเข้าพื้นผิวล้มเหลว โมเดลดูเหมือนจะมีข้อมูลพื้นผิว แต่ไม่สามารถดำเนินการนำเข้าพื้นผิวจนเสร็จสิ้นได้ โมเดลจะถูกนำเข้าเป็นเรขาคณิตเท่านั้น" + +# AI Translated +msgid "Applying texture colors..." +msgstr "กำลังใช้สีพื้นผิว..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "กำลังอัปเดตมุมมอง 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "ใช้สีพื้นผิวแล้ว" + msgid "You can keep the modified presets for the new project or discard them" msgstr "คุณสามารถเก็บค่าที่ตั้งไว้ล่วงหน้าที่แก้ไขแล้วไว้ในโปรเจ็กต์ใหม่หรือทิ้งก็ได้" @@ -9568,6 +9636,10 @@ msgstr "แจกันเกลียว" msgid "First layer filament sequence" msgstr "ลำดับเส้นพลาสติกชั้นแรก" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "รายการเส้นพลาสติกมีเส้นพลาสติกผสมอยู่ ลำดับเส้นพลาสติกที่กำหนดเองจะไม่มีผล" + msgid "By Layer" msgstr "โดยเลเยอร์" @@ -11469,27 +11541,6 @@ msgstr "ปริมาณการไล่เส้นชิ่งสำหร msgid "Please choose the filament colour" msgstr "กรุณาเลือกสีเส้นพลาสติก" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Native Wayland liveview ต้องใช้ GStreamer GTK video sink โปรดติดตั้งปลั๊กอิน gtksink สำหรับ GStreamer จากนั้นรีสตาร์ท OrcaSlicer" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "ไม่สามารถเริ่มต้น sink วิดีโอ Wayland GStreamer ดั้งเดิมได้ โปรดตรวจสอบการติดตั้งปลั๊กอิน GStreamer GTK ของคุณ" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "งานนี้ต้องใช้ Windows Media Player! คุณต้องการเปิดใช้งาน 'Windows Media Player' สำหรับระบบปฏิบัติการของคุณหรือไม่?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource ยังไม่ได้รับการลงทะเบียนอย่างถูกต้องสำหรับการเล่นสื่อ! กดใช่เพื่อลงทะเบียนใหม่ คุณจะได้รับการเลื่อนตำแหน่งสองครั้ง" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "ไม่มีส่วนประกอบ BambuSource ที่ลงทะเบียนสำหรับการเล่นสื่อ! โปรดติดตั้ง OrcaSlicer ใหม่หรือขอความช่วยเหลือจากชุมชน" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "การใช้ BambuSource จากการติดตั้งอื่น การเล่นวิดีโออาจทำงานไม่ถูกต้อง! กดใช่เพื่อแก้ไข" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "ระบบของคุณไม่มีตัวแปลงสัญญาณ H.264 สำหรับ GStreamer ซึ่งจำเป็นในการเล่นวิดีโอ (ลองติดตั้งแพ็คเกจ gstreamer1.0-plugins-bad หรือ gstreamer1.0-libav จากนั้นรีสตาร์ท Orca Slicer หรือไม่)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "ตัวแทนระบบคลาวด์ไม่พร้อมใช้งาน โปรดรีสตาร์ท OrcaSlicer แล้วลองอีกครั้ง" @@ -12193,6 +12244,10 @@ msgstr "หากคุณยังต้องการพิมพ์ คุ msgid "No extrusions under current settings." msgstr "ไม่มีการอัดขึ้นรูปภายใต้การตั้งค่าปัจจุบัน" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "มีการใช้เส้นพลาสติกผสมแบบเกรเดียนต์ แต่ 'ซับเลเยอร์สีผสม' ถูกปิดใช้งาน เกรเดียนต์จะไม่ถูกพิมพ์" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "ไม่รองรับโหมดไทม์แลปส์แบบราบรื่นเมื่อเปิดใช้งานลำดับ \"ตามวัตถุ\"" @@ -12229,6 +12284,10 @@ msgstr "คุณอาจต้องการลดขนาดแบบจำ msgid "Variable layer height is not supported with Organic supports." msgstr "ไม่รองรับความสูงของเลเยอร์ที่แปรผันได้ด้วยการรองรับแบบออร์แกนิก" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "เส้นพลาสติกของ Wipe Tower ไม่สามารถเป็นเส้นพลาสติกผสมได้" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "เส้นผ่านศูนย์กลางของหัวฉีดที่แตกต่างกันและเส้นผ่านศูนย์กลางของเส้นพลาสติกที่แตกต่างกันอาจทำงานได้ไม่ดีนักเมื่อเปิดใช้งาน Prime Tower ยังเป็นการทดลองอยู่มาก ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง" @@ -13941,6 +14000,8 @@ msgstr "เวลาเลเยอร์" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "พัดลมระบายความร้อนบางส่วนจะถูกเปิดใช้งานสำหรับเลเยอร์ที่เวลาโดยประมาณสั้นกว่าค่านี้ ความเร็วพัดลมจะถูกประมาณค่าระหว่างความเร็วพัดลมขั้นต่ำและสูงสุดตามเวลาการพิมพ์เลเยอร์" +# AI Translated +msgctxt "second" msgid "s" msgstr "วินาที" @@ -14248,6 +14309,62 @@ msgstr "วัสดุส่วนรองรับ" msgid "Support material is commonly used to print supports and support interfaces." msgstr "วัสดุรองรับมักใช้ในการพิมพ์ส่วนรองรับและอินเทอร์เฟซรองรับ" +# AI Translated +msgid "Is mixed filament" +msgstr "เป็นเส้นพลาสติกผสมหรือไม่" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "กำหนดว่าช่องเส้นพลาสติกนี้เป็นเส้นพลาสติกผสมที่ประกอบด้วยเส้นพลาสติกจริงหลายเส้นหรือไม่" + +# AI Translated +msgid "Mixed filament components" +msgstr "ส่วนประกอบของเส้นพลาสติกผสม" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "ลำดับของเส้นพลาสติกส่วนประกอบโดยเริ่มจาก 1 คั่นด้วยเครื่องหมายจุลภาค เช่น \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "สัดส่วนซับเลเยอร์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "ค่าสัดส่วนที่คั่นด้วยเครื่องหมายจุลภาคและรวมกันได้ 1.0 เช่น \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "เกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "เปิดใช้โหมดเกรเดียนต์ในแนวแกน Z สำหรับซับเลเยอร์ของเส้นพลาสติกผสม เมื่อเปิดใช้ สัดส่วนของซับเลเยอร์จะเปลี่ยนแปลงเชิงเส้นตามเลเยอร์" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "ช่วงเกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "สัดส่วนเริ่มต้นและสิ้นสุดของส่วนประกอบแรกในโหมดเกรเดียนต์ เป็นคู่ค่าที่คั่นด้วยเครื่องหมายจุลภาค เช่น \"0.10,0.90\" หมายถึง 10% ถึง 90%" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "เส้นโค้งเกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "เส้นโค้งกำหนดเองสไตล์ Photoshop (ไม่บังคับ) ที่แมปความคืบหน้าในแกน Z กับสัดส่วนของส่วนประกอบแรก เข้ารหัสเป็นจุดควบคุมที่คั่นด้วยเครื่องหมายขีดตั้ง ในรูปแบบ \"x,y\" (รูปแบบเดิม) หรือ \"x,y,m_in,m_out\" เมื่อจำเป็นต้องกำหนดค่าแทนเจนต์เอง (ค่าว่างหรือ \"nan\" หมายถึงใช้ค่าเริ่มต้นของ PCHIP) x อยู่ในช่วง [0,1] ส่วน y จะถูกจำกัดให้อยู่ในช่วงสัดส่วนที่ตั้งค่าไว้ เช่น \"0,0.15|0.5,0.50|1,0.85\" หากเว้นว่างไว้ จะใช้ gradient_range แบบเชิงเส้นแทน" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "เกรเดียนต์แยกตามชิ้นส่วนของเส้นพลาสติกผสม" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "เมื่อเปิดใช้โหมดเกรเดียนต์ จะใช้เกรเดียนต์กับแต่ละชิ้นส่วนของการประกอบแยกกัน แทนที่จะถือว่าการประกอบทั้งหมดเป็นช่วง Z เดียว" + msgid "Filament printable" msgstr "พิมพ์เส้นพลาสติกได้" @@ -15502,8 +15619,9 @@ msgid "The allowed maximum output force of Y axis" msgstr "แรงขับออกสูงสุดที่อนุญาตของแกน Y" # AI Translated +msgctxt "Newton" msgid "N" -msgstr "N" +msgstr "นิวตัน" # AI Translated msgid "Bed mass of the Y axis" @@ -15514,8 +15632,9 @@ msgid "The machine bed mass load of Y axis" msgstr "ภาระมวลฐานของเครื่องบนแกน Y" # AI Translated +msgctxt "gram" msgid "g" -msgstr "g" +msgstr "กรัม" # AI Translated msgid "The allowed max printed mass" @@ -17088,6 +17207,14 @@ msgstr "" "\n" "การตั้งค่าในจำนวนการถอนก่อนการล้างการตั้งค่าด้านล่างจะทำการถอนส่วนที่เกินก่อนการล้าง มิฉะนั้นจะดำเนินการหลังจากนั้น" +# AI Translated +msgid "Mixed color sublayer" +msgstr "ซับเลเยอร์สีผสม" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "เปิดใช้การแบ่งซับเลเยอร์สีผสม เมื่อเปิดใช้ เลเยอร์ที่มีเส้นพลาสติกสีผสมจะถูกแบ่งเป็นซับเลเยอร์เพื่อให้เกิดเอฟเฟกต์การผสมสี" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe Tower สามารถใช้เพื่อทำความสะอาดสิ่งตกค้างบนหัวฉีด และทำให้แรงดันในห้องภายในหัวฉีดคงที่ เพื่อหลีกเลี่ยงข้อบกพร่องในลักษณะที่ปรากฏเมื่อพิมพ์วัตถุ" @@ -18171,6 +18298,10 @@ msgstr "การประสานไฟล์โมเดลล้มเหล msgid "The supplied file couldn't be read because it's empty." msgstr "ไม่สามารถอ่านไฟล์ที่ให้มาได้เนื่องจากไฟล์ว่างเปล่า" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "รูปแบบไฟล์ไม่รองรับ จึงไม่สามารถอ่านข้อมูลได้" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "รูปแบบไฟล์ที่ไม่รู้จัก ไฟล์อินพุตต้องมีนามสกุล .stl, .obj, .amf(.xml)" @@ -20473,8 +20604,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "เปิดใช้การกำหนดเส้นพลาสติกอัจฉริยะ: กำหนดเส้นพลาสติกหนึ่งชนิดให้กับหัวฉีดหลายตัวเพื่อประหยัดสูงสุด" # AI Translated -msgid "Fila Saving" -msgstr "การประหยัดเส้นพลาสติก" +msgid "File Saving" +msgstr "การบันทึกไฟล์" msgid "Don't remind me again" msgstr "ไม่ต้องเตือนฉันอีก" @@ -20839,6 +20970,9 @@ msgstr "เริ่มใหม่ตอนนี้" msgid "NO RAMMING AT ALL" msgstr "ไม่มีการกระแทกเลย" +msgid "s" +msgstr "วินาที" + msgid "Volumetric speed" msgstr "ความเร็วปริมาตร" @@ -21463,6 +21597,39 @@ msgstr "" "หลีกเลี่ยงการบิดเบี้ยว\n" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Native Wayland liveview ต้องใช้ GStreamer GTK video sink โปรดติดตั้งปลั๊กอิน gtksink สำหรับ GStreamer จากนั้นรีสตาร์ท OrcaSlicer" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "ไม่สามารถเริ่มต้น sink วิดีโอ Wayland GStreamer ดั้งเดิมได้ โปรดตรวจสอบการติดตั้งปลั๊กอิน GStreamer GTK ของคุณ" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "งานนี้ต้องใช้ Windows Media Player! คุณต้องการเปิดใช้งาน 'Windows Media Player' สำหรับระบบปฏิบัติการของคุณหรือไม่?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource ยังไม่ได้รับการลงทะเบียนอย่างถูกต้องสำหรับการเล่นสื่อ! กดใช่เพื่อลงทะเบียนใหม่ คุณจะได้รับการเลื่อนตำแหน่งสองครั้ง" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "ไม่มีส่วนประกอบ BambuSource ที่ลงทะเบียนสำหรับการเล่นสื่อ! โปรดติดตั้ง OrcaSlicer ใหม่หรือขอความช่วยเหลือจากชุมชน" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "การใช้ BambuSource จากการติดตั้งอื่น การเล่นวิดีโออาจทำงานไม่ถูกต้อง! กดใช่เพื่อแก้ไข" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "ระบบของคุณไม่มีตัวแปลงสัญญาณ H.264 สำหรับ GStreamer ซึ่งจำเป็นในการเล่นวิดีโอ (ลองติดตั้งแพ็คเกจ gstreamer1.0-plugins-bad หรือ gstreamer1.0-libav จากนั้นรีสตาร์ท Orca Slicer หรือไม่)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "การประหยัดเส้นพลาสติก" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index b7a2c5b682..0e51b7ca9c 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -2969,6 +2969,10 @@ msgstr "Düzenle" msgid "Merge with" msgstr "Şununla birleştir" +# AI Translated +msgid "Decompose Color" +msgstr "Rengi ayrıştır" + msgid "Delete this filament" msgstr "Bu filamenti sil" @@ -3269,6 +3273,10 @@ msgstr "Birleştir" msgid "Merge parts to an object" msgstr "Parçaları bir nesnede birleştir" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Değişken katman yüksekliğinin karışık renk alt katmanı ile birlikte kullanılması renk karışımının kalitesini düşürebilir." + # AI Translated msgid "Add layers" msgstr "Katman ekle" @@ -7897,6 +7905,10 @@ msgstr "Mevcut plakayı özelleştir" msgid "The %s nozzle can not print %s." msgstr "%s püskürtme ucu %s'yi yazdıramıyor." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Karışık renkli filamenti tek ekstruderli bir yazıcıda basmak sık filament değişimi ve yıkama gerektirir; bu da atığı ve nozul ya da atık oluğu tıkanma riskini önemli ölçüde artırabilir." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Yazdırmada %1% ile %2%'nin karıştırılması önerilmez.\n" @@ -8022,12 +8034,44 @@ msgstr "Filament listesini AMS'den senkronize edin" msgid "Set filaments to use" msgstr "Kullanılacak filamentleri ayarla" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Karışık Filament Ekle" + +# AI Translated +msgid "Mixed Filament" +msgstr "Karışık Filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Son karışık filamenti kaldır" + +# AI Translated +msgid "Add mixed filament" +msgstr "Karışık filament ekle" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Karışık filamentte geçersiz veya uyumsuz bileşenler var. Lütfen etkilenen girdileri yeniden düzenleyin." + msgid "Search plate, object and part." msgstr "Arama plakası, nesne ve parça." msgid "Pellets" msgstr "Peletler" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Karışık filamentin bileşen referansları bozuk" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Düzenle / Sil / Birleştir" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Hedef karışık filament bu fiziksel filamenti bileşen olarak kullanıyor. Birleştirme bu fiziksel filamenti kaldıracak ve karışık filamenti geçersiz kılabilir. Devam edilsin mi?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "İşleminizi tamamladıktan sonra %s projesi kapatılacak ve yeni bir proje oluşturulacak." @@ -8214,6 +8258,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Çok parçalı nesne algılandı" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Dokular filamentlerle eşleştiriliyor" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Doku İçe Aktarma Uyarısı" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Bu dosyalar birden fazla parçadan oluşan tek bir nesne olarak mı yüklensin?\n" @@ -8425,6 +8477,22 @@ msgstr "" msgid "Sync now" msgstr "Şimdi senkronize et" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Doku içe aktarılamadı. Model doku verisi içeriyor gibi görünüyor, ancak içe aktarma işlemi tamamlanamadı. Model yalnızca geometri olarak içe aktarılacak." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Doku renkleri uygulanıyor..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D görünüm güncelleniyor..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Doku renkleri uygulandı." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Değiştirilen ön ayarları yeni projede tutabilir veya silebilirsiniz" @@ -9712,6 +9780,10 @@ msgstr "Spiral vazo" msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filament listesi karışık filamentler içeriyor. Özel filament sırası etkili olmayacak." + msgid "By Layer" msgstr "Katmana göre" @@ -11653,29 +11725,6 @@ msgstr "Filament değişimi için temizleme hacmi" msgid "Please choose the filament colour" msgstr "Lütfen filament rengini seçin" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Yerel Wayland canlı görüntüsü, GStreamer GTK video alıcısını gerektirir. Lütfen GStreamer için gtksink eklentisini yükleyin ve ardından OrcaSlicer'ı yeniden başlatın." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Yerel Wayland GStreamer video alıcısı başlatılamadı. Lütfen GStreamer GTK eklentisi kurulumunuzu denetleyin." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için ‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden kaydetmek için Evet’e basın" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen OrcaSlicer'ı yeniden yükleyin veya topluluk yardımı isteyin." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Farklı bir kurulumdan bir BambuSource kullanıyorsunuz, video oynatma doğru çalışmayabilir! Düzeltmek için Evet’e basın." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav paketlerini kurmayı deneyin, ardından Orca Slicer’ı yeniden başlatın)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Bulut aracısı kullanılamıyor. Lütfen OrcaSlicer'ı yeniden başlatıp yeniden deneyin." @@ -12401,6 +12450,10 @@ msgstr "Yine de yazdırmak istiyorsanız Tercihler / Denetim / Dilimleme / Karı msgid "No extrusions under current settings." msgstr "Mevcut ayarlarda ekstrüzyon yok." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Gradyanlı bir karışık filament kullanılıyor ancak 'Karışık renk alt katmanı' devre dışı. Gradyan basılmayacak." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "\"Nesneye göre\" dizisi etkinleştirildiğinde, hızlandırılmış çekimin yumuşak modu desteklenmez." @@ -12437,6 +12490,10 @@ msgstr "Modelinizin boyutunu küçültmek veya mevcut yazdırma ayarlarını de msgid "Variable layer height is not supported with Organic supports." msgstr "Değişken katman yüksekliği Organik desteklerle desteklenmez." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Silme kulesi filamenti karışık filament olamaz." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Farklı püskürtme ucu çapları ve farklı filament çapları, ana kule etkinleştirildiğinde iyi çalışmayabilir. Oldukça deneysel olduğundan lütfen dikkatli ilerleyin." @@ -14193,6 +14250,8 @@ msgstr "Katman süresi" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Tahmini süresi bu değerden kısa olan katlarda parça soğutma fanı devreye girecektir. Fan hızı, katman yazdırma süresine göre minimum ve maksimum fan hızları arasında enterpole edilir." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14502,6 +14561,62 @@ msgstr "Destek malzemesi" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için kullanılır." +# AI Translated +msgid "Is mixed filament" +msgstr "Karışık filament mi" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Bu filament yuvasının birden fazla fiziksel filamentten oluşan bir karışık filament olup olmadığını belirler" + +# AI Translated +msgid "Mixed filament components" +msgstr "Karışık filament bileşenleri" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Bileşen filamentlerin virgülle ayrılmış, 1'den başlayan sıra numaraları; ör. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Karışık filament alt katman oranları" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Toplamı 1.0 olan, virgülle ayrılmış oran değerleri; ör. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Karışık filament gradyanı" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Karışık filamentin alt katmanları için Z yönünde gradyan modunu etkinleştirir. Etkinleştirildiğinde alt katman oranları katmanlar boyunca doğrusal olarak değişir." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Karışık filament gradyan aralığı" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Gradyan modunda ilk bileşenin başlangıç ve bitiş oranları. Virgülle ayrılmış çift; ör. \"0.10,0.90\" %10 ile %90 arasını ifade eder." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Karışık filament gradyan eğrisi" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z ilerlemesini ilk bileşenin oranına eşleyen, isteğe bağlı Photoshop tarzı özel eğri. Dikey çizgiyle ayrılmış kontrol noktaları olarak kodlanır; \"x,y\" (eski) veya teğetin geçersiz kılınması gerektiğinde \"x,y,m_in,m_out\" biçiminde (boş değer ya da \"nan\" varsayılan PCHIP değerini kullanır). x [0,1] aralığındadır; y yapılandırılmış oran aralığına kırpılır; ör. \"0,0.15|0.5,0.50|1,0.85\". Boş bırakıldığında bunun yerine doğrusal gradient_range kullanılır." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Karışık filamentte parça başına gradyan" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gradyan modu etkinleştirildiğinde, gradyan montajın tamamı tek bir Z aralığı olarak ele alınmak yerine montajdaki her parçaya bağımsız olarak uygulanır." + msgid "Filament printable" msgstr "Filament yazdırılabilir" @@ -15793,6 +15908,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y ekseninin izin verilen maksimum çıkış kuvveti" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15805,6 +15921,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y ekseninin makine yatağı kütle yükü" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17417,6 +17534,14 @@ msgstr "" "\n" "Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi takdirde silme işleminden sonra gerçekleştirilecektir." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Karışık renk alt katmanı" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Karışık renk alt katmanlarına bölmeyi etkinleştirir. Etkinleştirildiğinde, karışık renkli filament içeren katmanlar renk karışımı efektleri elde etmek için alt katmanlara bölünür." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Temizleme kulesi, nesneleri yazdırırken görünüm kusurlarını önlemek amacıyla nozul üzerindeki kalıntıları temizlemek ve nozul içindeki oda basıncını dengelemek için kullanılabilir." @@ -18505,6 +18630,10 @@ msgstr "Bir model dosyasının meshlenmesi başarısız oldu veya geçerli bir msgid "The supplied file couldn't be read because it's empty." msgstr "Seçilen dosya boş olduğundan okunamıyor." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Dosya biçimi uyumsuz olduğundan ayrıştırılamıyor." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Bilinmeyen dosya formatı. Giriş dosyası .stl, .obj, .amf(.xml) uzantılı olmalıdır." @@ -20859,8 +20988,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Akıllı filament atamasını etkinleştir: Tasarrufu en üst düzeye çıkarmak için bir filamenti birden çok nozula atayın" # AI Translated -msgid "Fila Saving" -msgstr "Filament Tasarrufu" +msgid "File Saving" +msgstr "Dosya Kaydetme" msgid "Don't remind me again" msgstr "Bana bir daha hatırlatma" @@ -21268,6 +21397,9 @@ msgstr "Şimdi Yeniden Başlat" msgid "NO RAMMING AT ALL" msgstr "HİÇBİR ŞEKİLDE ÇARPMA YOK" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Hacimsel hız" @@ -21829,7 +21961,8 @@ msgstr "" "Baskılarınızı plakalara ayırın\n" "Çok sayıda parçası olan bir modeli baskıya hazır ayrı kalıplara bölebileceğinizi biliyor muydunuz? Bu, tüm parçaları takip etme sürecini basitleştirecektir." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -21902,7 +22035,8 @@ msgstr "" "Gücü artırın\n" "Modelin gücünü artırmak için daha fazla duvar halkası ve daha yüksek seyrek dolgu yoğunluğu kullanabileceğinizi biliyor muydunuz?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer +#: door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." @@ -21918,6 +22052,41 @@ msgstr "" "Eğilmeyi önleyin\n" "ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Yerel Wayland canlı görüntüsü, GStreamer GTK video alıcısını gerektirir. Lütfen GStreamer için gtksink eklentisini yükleyin ve ardından OrcaSlicer'ı yeniden başlatın." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Yerel Wayland GStreamer video alıcısı başlatılamadı. Lütfen GStreamer GTK eklentisi kurulumunuzu denetleyin." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için ‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden kaydetmek için Evet’e basın" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen OrcaSlicer'ı yeniden yükleyin veya topluluk yardımı isteyin." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Farklı bir kurulumdan bir BambuSource kullanıyorsunuz, video oynatma doğru çalışmayabilir! Düzeltmek için Evet’e basın." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav paketlerini kurmayı deneyin, ardından Orca Slicer’ı yeniden başlatın)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filament Tasarrufu" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 8393e92947..3d23f7bbb1 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk <andm1zyk@proton.me>\n" "Language-Team: Ukrainian\n" @@ -2906,6 +2906,10 @@ msgstr "Змінити" msgid "Merge with" msgstr "Обʼєднати з" +# AI Translated +msgid "Decompose Color" +msgstr "Розкласти колір" + msgid "Delete this filament" msgstr "Видалити цей філамент" @@ -3197,6 +3201,10 @@ msgstr "Збірка" msgid "Merge parts to an object" msgstr "Обʼєднати частини в обʼєкт" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Використання змінної висоти шару разом із підшаром змішаного кольору може погіршити якість змішування кольорів." + msgid "Add layers" msgstr "Додати шари" @@ -7891,6 +7899,10 @@ msgstr "Пристосувати поточну пластину" msgid "The %s nozzle can not print %s." msgstr "Сопло %s не може друкувати %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Друк філаменту змішаного кольору на принтері з одним екструдером потребує частої зміни філаменту та промивок, що може суттєво збільшити кількість відходів і ризик засмічення сопла або жолоба для відходів." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Змішування %1% з %2% в друці не рекомендується.\n" @@ -8019,12 +8031,44 @@ msgstr "Синхронізувати список ниток з AMS" msgid "Set filaments to use" msgstr "Встановити філаменти для використання" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Додати змішаний філамент" + +# AI Translated +msgid "Mixed Filament" +msgstr "Змішаний філамент" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Вилучити останній змішаний філамент" + +# AI Translated +msgid "Add mixed filament" +msgstr "Додати змішаний філамент" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "У змішаного філаменту недійсні або невідповідні компоненти. Будь ласка, відредагуйте відповідні записи ще раз." + msgid "Search plate, object and part." msgstr "Пошук пластини, об’єкта і деталі." msgid "Pellets" msgstr "Гранули" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "У змішаного філаменту пошкоджені посилання на компоненти" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Редагувати / Видалити / Обʼєднати" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Цільовий змішаний філамент використовує цей фізичний філамент як компонент. Обʼєднання вилучить цей фізичний філамент і може зробити змішаний філамент недійсним. Продовжити?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8223,6 +8267,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Виявлено обʼєкт, що складається з кількох частин" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Зіставлення текстур із філаментами" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Попередження під час імпорту текстури" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Завантажити ці файли як єдиний обʼєкт з кількома частинами?\n" @@ -8433,6 +8485,22 @@ msgstr "" msgid "Sync now" msgstr "Синхронізувати зараз" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Не вдалося імпортувати текстуру. Схоже, модель містить дані текстури, але завершити процес імпорту не вдалося. Модель буде імпортовано лише як геометрію." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Застосування кольорів текстури..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Оновлення 3D-вигляду..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Кольори текстури застосовано." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Ви можете зберегти змінені пресети у новому проекті або відмовитися від них" @@ -9714,6 +9782,10 @@ msgstr "Спіральна ваза" msgid "First layer filament sequence" msgstr "Послідовність філаменту першого шару" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Список філаментів містить змішані філаменти. Власна послідовність філаментів не діятиме." + msgid "By Layer" msgstr "По шарах" @@ -11717,30 +11789,6 @@ msgstr "Обʼєми промивки для зміни філаменту" msgid "Please choose the filament colour" msgstr "Будь ласка, виберіть колір філаменту" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Нативний перегляд у Wayland потребує відеоприймача GStreamer GTK. Встановіть плагін gtksink для GStreamer, а потім перезапустіть OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Не вдалося ініціалізувати нативний відеоприймач GStreamer для Wayland. Перевірте встановлення плагіна GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Для виконання цього завдання потрібен Windows Media Player! Бажаєте увімкнути 'Windows Media Player' для вашої операційної системи?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource не було правильно зареєстровано для відтворення медіафайлів! Натисніть \"Так\", щоб зареєструвати його повторно. Вас буде сповіщено двічі" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Відсутній компонент BambuSource, зареєстрований для відтворення медіа! Перевстановіть OrcaSlicer або зверніться по допомогу до спільноти." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Використовується BambuSource з іншої інсталяції, відтворення відео може працювати неправильно! Натисніть \"Так\", щоб виправити це." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Вашій системі бракує кодеків H.264 для GStreamer, які необхідні для відтворення відео. (Спробуйте встановити пакети gstreamer1.0-plugins-bad або gstreamer1.0-libav, а потім перезапустіть Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Хмарний агент недоступний. Перезапустіть OrcaSlicer і спробуйте ще раз." @@ -12462,6 +12510,10 @@ msgstr "Якщо ви все одно хочете друкувати, може msgid "No extrusions under current settings." msgstr "Немає екструзій під час поточних налаштувань." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Використовується змішаний філамент із градієнтом, але параметр «Підшар змішаного кольору» вимкнено. Градієнт не буде надруковано." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавний режим таймлапсу не підтримується, коли послідовність \"по обʼєкт\" увімкнено." @@ -12502,6 +12554,10 @@ msgstr "Можливо, ви захочете зменшити розмір мо msgid "Variable layer height is not supported with Organic supports." msgstr "Змінна висота шару не підтримується з Органічними підтримками." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Філамент вежі протирання не може бути змішаним філаментом." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Різні діаметри сопел та різні діаметри філаменту можуть працювати некоректно коли ввімкнена підготовча вежа. Це експериментальна функція, тому використовуйте її з обережністю." @@ -14295,8 +14351,10 @@ msgstr "Час шару" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Вентилятор охолодження деталей вмикається для шарів, розрахунковий час яких менший за це значення. Швидкість вентилятора інтерполюється між мінімальною та максимальною швидкістю вентилятора відповідно до часу друку шару" +# AI Translated +msgctxt "second" msgid "s" -msgstr "c" +msgstr "с" msgid "Default color" msgstr "Типовий колір" @@ -14626,6 +14684,62 @@ msgstr "Матеріал підтримки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Допоміжний матеріал зазвичай використовується для друку підтримки" +# AI Translated +msgid "Is mixed filament" +msgstr "Є змішаним філаментом" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Визначає, чи є цей слот філаменту змішаним філаментом, складеним з кількох фізичних філаментів" + +# AI Translated +msgid "Mixed filament components" +msgstr "Компоненти змішаного філаменту" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Розділені комами індекси філаментів-компонентів, починаючи з 1, наприклад \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Частки підшарів змішаного філаменту" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Розділені комами значення часток, сума яких дорівнює 1.0, наприклад \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Градієнт змішаного філаменту" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Вмикає режим градієнта за віссю Z для підшарів змішаного філаменту. Коли увімкнено, частки підшарів змінюються лінійно від шару до шару." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Діапазон градієнта змішаного філаменту" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Початкова та кінцева частки першого компонента в режимі градієнта. Пара значень через кому, наприклад \"0.10,0.90\" означає від 10% до 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Крива градієнта змішаного філаменту" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Необовʼязкова власна крива у стилі Photoshop, що зіставляє поступ за віссю Z із часткою першого компонента. Записується як контрольні точки, розділені вертикальними рисками, у вигляді \"x,y\" (застарілий формат) або \"x,y,m_in,m_out\", коли потрібно перевизначити дотичну (порожнє значення або \"nan\" означає типове значення PCHIP). x належить до [0,1]; y обмежується налаштованим діапазоном часток, наприклад \"0,0.15|0.5,0.50|1,0.85\". Якщо поле порожнє, замість цього використовується лінійний gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Градієнт змішаного філаменту для кожної частини" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Коли режим градієнта увімкнено, градієнт застосовується до кожної частини збірки окремо, а не до всієї збірки як до єдиного діапазону Z." + msgid "Filament printable" msgstr "Філамент придатний для друку" @@ -15972,8 +16086,9 @@ msgid "The allowed maximum output force of Y axis" msgstr "Максимальна дозволена вихідна сила осі Y" # AI Translated +msgctxt "Newton" msgid "N" -msgstr "N" +msgstr "Н" msgid "Bed mass of the Y axis" msgstr "Маса столу осі Y" @@ -15981,6 +16096,8 @@ msgstr "Маса столу осі Y" msgid "The machine bed mass load of Y axis" msgstr "Маса навантаження столу машини на вісь Y" +# AI Translated +msgctxt "gram" msgid "g" msgstr "г" @@ -17621,6 +17738,14 @@ msgstr "" "\n" "Якщо встановити значення у параметрі \"Кількість втягування перед витиранням\" нижче, надлишкове втягування буде виконано перед витиранням, інакше воно буде виконано після нього." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Підшар змішаного кольору" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Вмикає розбиття на підшари змішаного кольору. Коли увімкнено, шари, що містять філаменти змішаного кольору, розбиваються на підшари для отримання ефекту змішування кольорів." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Вежа протирання може використовуватися для очищення залишків на соплі та стабілізації тиску в камері всередині сопла, щоб уникнути дефектів зовнішнього вигляду під час друку обʼєктів." @@ -18727,6 +18852,10 @@ msgstr "Не вдалося побудувати сітку файлу моде msgid "The supplied file couldn't be read because it's empty." msgstr "Наданий файл не вдалося прочитати, оскільки він порожній" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Формат файлу несумісний, і його не вдається прочитати." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Невідомий формат файлу: вхідний файл повинен мати розширення .stl, .obj або .amf (.xml)." @@ -21073,8 +21202,9 @@ msgstr "Вилучено" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Дозволити розумне призначення філаменту: Призначте одну нитку до кількох сопел, щоб максимально заощадити" -msgid "Fila Saving" -msgstr "Збереження філаменту" +# AI Translated +msgid "File Saving" +msgstr "Збереження файлу" msgid "Don't remind me again" msgstr "Не нагадувати мені більше" @@ -21444,6 +21574,9 @@ msgstr "Перезапустити зараз" msgid "NO RAMMING AT ALL" msgstr "ВЗАГАЛІ БЕЗ УТРАМБУВАННЯ" +msgid "s" +msgstr "c" + msgid "Volumetric speed" msgstr "Обʼємна швидкість" @@ -22080,6 +22213,40 @@ msgstr "" "Уникнення деформації\n" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Нативний перегляд у Wayland потребує відеоприймача GStreamer GTK. Встановіть плагін gtksink для GStreamer, а потім перезапустіть OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Не вдалося ініціалізувати нативний відеоприймач GStreamer для Wayland. Перевірте встановлення плагіна GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Для виконання цього завдання потрібен Windows Media Player! Бажаєте увімкнути 'Windows Media Player' для вашої операційної системи?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource не було правильно зареєстровано для відтворення медіафайлів! Натисніть \"Так\", щоб зареєструвати його повторно. Вас буде сповіщено двічі" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Відсутній компонент BambuSource, зареєстрований для відтворення медіа! Перевстановіть OrcaSlicer або зверніться по допомогу до спільноти." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Використовується BambuSource з іншої інсталяції, відтворення відео може працювати неправильно! Натисніть \"Так\", щоб виправити це." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Вашій системі бракує кодеків H.264 для GStreamer, які необхідні для відтворення відео. (Спробуйте встановити пакети gstreamer1.0-plugins-bad або gstreamer1.0-libav, а потім перезапустіть Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "г" + +#~ msgid "Fila Saving" +#~ msgstr "Збереження філаменту" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 936bb590c5..8ec3447568 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -3077,6 +3077,10 @@ msgstr "Chỉnh sửa" msgid "Merge with" msgstr "Gộp với" +# AI Translated +msgid "Decompose Color" +msgstr "Phân tách màu" + # AI Translated msgid "Delete this filament" msgstr "Xóa filament này" @@ -3389,6 +3393,10 @@ msgstr "Lắp ráp" msgid "Merge parts to an object" msgstr "Gộp các phần thành một vật thể" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Sử dụng chiều cao lớp biến đổi cùng với lớp con màu pha trộn có thể làm giảm chất lượng pha màu." + # AI Translated msgid "Add layers" msgstr "Thêm lớp" @@ -8288,6 +8296,10 @@ msgstr "Tùy chỉnh bản hiện tại" msgid "The %s nozzle can not print %s." msgstr "Đầu phun %s không thể in %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Việc in filament màu pha trộn trên máy in một extruder đòi hỏi thay filament và xả thường xuyên, điều này có thể làm tăng đáng kể lượng phế liệu và nguy cơ tắc đầu phun / máng chứa phế liệu." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8430,12 +8442,44 @@ msgstr "Đồng bộ danh sách filament từ AMS" msgid "Set filaments to use" msgstr "Đặt filament để sử dụng" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Thêm filament pha trộn" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament pha trộn" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Xóa filament pha trộn cuối cùng" + +# AI Translated +msgid "Add mixed filament" +msgstr "Thêm filament pha trộn" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filament pha trộn có thành phần không hợp lệ hoặc không khớp. Vui lòng chỉnh sửa lại các mục bị ảnh hưởng." + msgid "Search plate, object and part." msgstr "Tìm kiếm bản, đối tượng và phần." msgid "Pellets" msgstr "Viên" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filament pha trộn có tham chiếu thành phần bị lỗi" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Chỉnh sửa / Xóa / Gộp" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Filament pha trộn đích sử dụng filament vật lý này làm thành phần. Việc gộp sẽ xóa filament vật lý này và có thể làm filament pha trộn không còn hợp lệ. Tiếp tục?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8628,6 +8672,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Phát hiện đối tượng nhiều phần" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Đang khớp kết cấu với filament" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Cảnh báo nhập kết cấu" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Tải các file này như một đối tượng đơn với nhiều phần?\n" @@ -8857,6 +8909,22 @@ msgstr "" msgid "Sync now" msgstr "Đồng bộ ngay" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Nhập kết cấu thất bại. Mô hình có vẻ chứa dữ liệu kết cấu, nhưng không thể hoàn tất quá trình nhập kết cấu. Mô hình sẽ chỉ được nhập dưới dạng hình học." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Đang áp dụng màu kết cấu..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Đang cập nhật khung nhìn 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Đã áp dụng màu kết cấu." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Bạn có thể giữ các preset đã chỉnh sửa cho dự án mới hoặc loại bỏ chúng" @@ -10227,6 +10295,10 @@ msgstr "Bình xoắn ốc" msgid "First layer filament sequence" msgstr "Trình tự filament lớp đầu tiên" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Danh sách filament có chứa filament pha trộn. Trình tự filament tùy chỉnh sẽ không có hiệu lực." + msgid "By Layer" msgstr "Theo lớp" @@ -12266,29 +12338,6 @@ msgstr "Khối lượng xả khi thay filament" msgid "Please choose the filament colour" msgstr "Vui lòng chọn màu filament" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Xem trực tiếp trên Wayland thuần cần GStreamer GTK video sink. Vui lòng cài đặt plugin gtksink cho GStreamer, sau đó khởi động lại OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Khởi tạo GStreamer video sink trên Wayland thuần thất bại. Vui lòng kiểm tra việc cài đặt plugin GStreamer GTK của bạn." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player là cần thiết cho tác vụ này! Bạn có muốn bật 'Windows Media Player' cho hệ điều hành của bạn?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource chưa được đăng ký chính xác để phát media! Nhấn Có để đăng ký lại. Bạn sẽ được nhắc hai lần" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Thiếu thành phần BambuSource đã đăng ký để phát media! Vui lòng cài đặt lại OrcaSlicer hoặc tìm kiếm sự giúp đỡ từ cộng đồng." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Đang sử dụng BambuSource từ cài đặt khác, phát video có thể không hoạt động đúng! Nhấn Có để sửa nó." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Hệ thống của bạn thiếu codec H.264 cho GStreamer, cần thiết để phát video. (Hãy thử cài đặt gói gstreamer1.0-plugins-bad hoặc gstreamer1.0-libav, sau đó khởi động lại Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Tác nhân cloud không khả dụng. Vui lòng khởi động lại OrcaSlicer rồi thử lại." @@ -13037,6 +13086,10 @@ msgstr "Nếu bạn vẫn muốn in, bạn có thể bật tùy chọn trong Tù msgid "No extrusions under current settings." msgstr "Không có đùn dưới cài đặt hiện tại." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Đang dùng filament pha trộn có gradient, nhưng 'Lớp con màu pha trộn' đã bị tắt. Gradient sẽ không được in." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Chế độ mượt của timelapse không được hỗ trợ khi trình tự \"theo đối tượng\" được bật." @@ -13075,6 +13128,10 @@ msgstr "Bạn có thể muốn giảm kích thước model của mình hoặc th msgid "Variable layer height is not supported with Organic supports." msgstr "Chiều cao lớp thay đổi không được hỗ trợ với support hữu cơ." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament của wipe tower không thể là filament pha trộn." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Đường kính đầu phun khác nhau và đường kính filament khác nhau có thể không hoạt động tốt khi prime tower được bật. Nó rất thử nghiệm, vì vậy vui lòng tiến hành thận trọng." @@ -14857,6 +14914,8 @@ msgstr "Thời gian lớp" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Quạt làm mát phần sẽ được bật cho các lớp có thời gian ước tính ngắn hơn giá trị này. Tốc độ quạt được nội suy giữa tốc độ quạt tối thiểu và tối đa theo thời gian in lớp." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15196,6 +15255,62 @@ msgstr "Vật liệu support" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Vật liệu support thường được sử dụng để in support và giao diện support." +# AI Translated +msgid "Is mixed filament" +msgstr "Là filament pha trộn" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Xác định xem khe filament này có phải là filament pha trộn gồm nhiều filament vật lý hay không" + +# AI Translated +msgid "Mixed filament components" +msgstr "Thành phần của filament pha trộn" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Chỉ số của các filament thành phần, bắt đầu từ 1, phân tách bằng dấu phẩy, ví dụ \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Tỷ lệ lớp con của filament pha trộn" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Các giá trị tỷ lệ phân tách bằng dấu phẩy, có tổng bằng 1.0, ví dụ \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient của filament pha trộn" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Bật chế độ gradient theo phương Z cho các lớp con của filament pha trộn. Khi bật, tỷ lệ các lớp con thay đổi tuyến tính qua các lớp." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Phạm vi gradient của filament pha trộn" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Tỷ lệ đầu và cuối của thành phần thứ nhất ở chế độ gradient. Cặp giá trị phân tách bằng dấu phẩy, ví dụ \"0.10,0.90\" nghĩa là từ 10% đến 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Đường cong gradient của filament pha trộn" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Đường cong tùy chỉnh kiểu Photoshop (tùy chọn) ánh xạ tiến trình theo Z sang tỷ lệ của thành phần thứ nhất. Được mã hóa dưới dạng các điểm điều khiển phân tách bằng dấu gạch đứng, theo dạng \"x,y\" (kiểu cũ) hoặc \"x,y,m_in,m_out\" khi cần ghi đè tiếp tuyến (giá trị trống hoặc \"nan\" nghĩa là dùng mặc định PCHIP). x nằm trong [0,1]; y bị giới hạn trong phạm vi tỷ lệ đã cấu hình, ví dụ \"0,0.15|0.5,0.50|1,0.85\". Khi để trống, gradient_range tuyến tính sẽ được dùng thay thế." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient theo từng phần của filament pha trộn" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Khi chế độ gradient được bật, áp dụng gradient cho từng phần của một cụm lắp ráp một cách độc lập thay vì coi toàn bộ cụm lắp ráp là một phạm vi Z duy nhất." + # AI Translated msgid "Filament printable" msgstr "Filament in được" @@ -16508,6 +16623,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Lực đầu ra tối đa cho phép của trục Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -16520,6 +16636,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Tải khối lượng bàn máy của trục Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -18140,6 +18257,14 @@ msgstr "" "\n" "Đặt giá trị trong cài đặt lượng rút trước khi lau bên dưới sẽ thực hiện bất kỳ rút dư nào trước khi lau, nếu không nó sẽ được thực hiện sau." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Lớp con màu pha trộn" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Bật việc chia thành lớp con màu pha trộn. Khi bật, các lớp có chứa filament màu pha trộn sẽ được chia thành các lớp con để tạo hiệu ứng pha màu." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe tower có thể được sử dụng để làm sạch cặn trên đầu phun và ổn định áp suất buồng bên trong đầu phun, để tránh khuyết điểm bề ngoài khi in đối tượng." @@ -19260,6 +19385,10 @@ msgstr "Tạo lưới cho file mô hình thất bại hoặc không có hình d msgid "The supplied file couldn't be read because it's empty." msgstr "File được cung cấp không thể đọc được vì nó trống" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Định dạng tệp không tương thích nên không thể phân tích." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Định dạng file không xác định. File đầu vào phải có phần mở rộng .stl, .obj, .amf(.xml)." @@ -21681,8 +21810,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Bật gán filament thông minh: Gán một filament cho nhiều đầu phun để tối đa hóa tiết kiệm" # AI Translated -msgid "Fila Saving" -msgstr "Tiết kiệm fila" +msgid "File Saving" +msgstr "Lưu tệp" # AI Translated msgid "Don't remind me again" @@ -22138,6 +22267,9 @@ msgstr "Khởi động lại ngay" msgid "NO RAMMING AT ALL" msgstr "HOÀN TOÀN KHÔNG RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Tốc độ thể tích" @@ -22804,6 +22936,41 @@ msgstr "" "Tránh cong vênh\n" "Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?" +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Xem trực tiếp trên Wayland thuần cần GStreamer GTK video sink. Vui lòng cài đặt plugin gtksink cho GStreamer, sau đó khởi động lại OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Khởi tạo GStreamer video sink trên Wayland thuần thất bại. Vui lòng kiểm tra việc cài đặt plugin GStreamer GTK của bạn." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player là cần thiết cho tác vụ này! Bạn có muốn bật 'Windows Media Player' cho hệ điều hành của bạn?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource chưa được đăng ký chính xác để phát media! Nhấn Có để đăng ký lại. Bạn sẽ được nhắc hai lần" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Thiếu thành phần BambuSource đã đăng ký để phát media! Vui lòng cài đặt lại OrcaSlicer hoặc tìm kiếm sự giúp đỡ từ cộng đồng." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Đang sử dụng BambuSource từ cài đặt khác, phát video có thể không hoạt động đúng! Nhấn Có để sửa nó." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Hệ thống của bạn thiếu codec H.264 cho GStreamer, cần thiết để phát video. (Hãy thử cài đặt gói gstreamer1.0-plugins-bad hoặc gstreamer1.0-libav, sau đó khởi động lại Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Tiết kiệm fila" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 99a6cadd67..81cd5a402b 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle <mail@bysb.net>\n" "Language-Team: \n" @@ -2843,6 +2843,10 @@ msgstr "编辑" msgid "Merge with" msgstr "与其合并" +# AI Translated +msgid "Decompose Color" +msgstr "分解颜色" + msgid "Delete this filament" msgstr "移除此耗材" @@ -3124,6 +3128,10 @@ msgstr "组合体" msgid "Merge parts to an object" msgstr "合并零件到对象" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "同时使用可变层高与混色子层可能导致混色质量不佳。" + msgid "Add layers" msgstr "添加层" @@ -7638,6 +7646,10 @@ msgstr "自定义当前盘" msgid "The %s nozzle can not print %s." msgstr "%s 喷嘴无法打印 %s。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "在单挤出机打印机上打印混色耗材丝需要频繁换料和冲刷,可能显著增加废料以及喷嘴/废料槽堵塞的风险。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建议在打印时将 %1% 与 %2% 混合。\n" @@ -7763,12 +7775,44 @@ msgstr "从AMS同步材料列表" msgid "Set filaments to use" msgstr "配置可选择的材料" +# AI Translated +msgid "Add Mixed Filament" +msgstr "添加混合耗材丝" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合耗材丝" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "移除最后一个混合耗材丝" + +# AI Translated +msgid "Add mixed filament" +msgstr "添加混合耗材丝" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合耗材丝的组分无效或不匹配。请重新编辑受影响的条目。" + msgid "Search plate, object and part." msgstr "搜索盘、模型和零件。" msgid "Pellets" msgstr "颗粒" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合耗材丝的组分引用已失效" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "编辑 / 删除 / 合并" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "目标混合耗材丝将此物理耗材丝用作组分。合并将移除此物理耗材丝,并可能使该混合耗材丝失效。是否继续?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作后,%s 项目将关闭并创建一个新项目。" @@ -7949,6 +7993,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "检测到多部分对象" +# AI Translated +msgid "Matching textures to filaments" +msgstr "正在将纹理匹配到耗材丝" + +# AI Translated +msgid "Texture Import Warning" +msgstr "纹理导入警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "将这些文件加载为一个多零件对象?\n" @@ -8154,6 +8206,22 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "纹理导入失败。模型中似乎包含纹理数据,但纹理导入过程未能完成。将仅导入模型的几何数据。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "正在应用纹理颜色..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "正在更新 3D 视图..." + +# AI Translated +msgid "Texture colors applied." +msgstr "纹理颜色已应用。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以保留修改的预设到新项目中或者忽略这些修改" @@ -9389,6 +9457,10 @@ msgstr "旋转花瓶" msgid "First layer filament sequence" msgstr "首层耗材打印顺序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "耗材丝列表中包含混合耗材丝。自定义耗材丝顺序将不会生效。" + msgid "By Layer" msgstr "逐层" @@ -11258,27 +11330,6 @@ msgstr "耗材丝更换时的冲刷体积" msgid "Please choose the filament colour" msgstr "请选择耗材丝颜色" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "原生 Wayland 实时画面需要 GStreamer GTK 视频接收器。请安装 GStreamer 的 gtksink 插件,然后重启 OrcaSlicer。" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "原生 Wayland GStreamer 视频接收器初始化失败。请检查您的 GStreamer GTK 插件安装情况。" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "此任务需要 Windows Media Player!您是否要为您的操作系统启用'Windows Media Player'?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource 未正确注册用于媒体播放!按是重新注册它。您将被提示两次" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "缺少用于媒体播放的已注册 BambuSource 组件!请重新安装 OrcaSlicer 或寻求社区帮助。" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "使用来自不同安装的 BambuSource,视频播放可能无法正常工作!按是修复它。" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "您的系统缺少 GStreamer 所需的 H.264 编解码器,这是播放视频所必需的。(尝试安装 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 软件包,然后重新启动 Orca Slicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "云代理不可用。请重启 OrcaSlicer 后重试。" @@ -11991,6 +12042,10 @@ msgstr "如果您仍要打印,可以在 偏好设置 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根据当前设置,不会生成任何打印。" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "使用了渐变混合耗材丝,但“混色子层”已关闭。渐变将不会被打印。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "平滑模式的延时摄影不支持在逐件打印模式下使用。" @@ -12027,6 +12082,10 @@ msgstr "或许您想要缩小模型的尺寸,或者更改当前打印设置, msgid "Variable layer height is not supported with Organic supports." msgstr "Organic支撑不支持可变层高。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "擦拭塔耗材丝不能是混合耗材丝。" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "当启用擦拭塔时,不同的喷嘴直径和不同的耗材丝直径可能无法很好地工作。这是非常实验性的,所以请谨慎操作。" @@ -12374,7 +12433,6 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它层" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首层外的其他层的热床温度。0值表示该耗材丝不支持在Cool Plate SuperTack上打印。" @@ -13696,6 +13754,8 @@ msgstr "层时间" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "当层预估打印时间小于该数值时,部件冷却风扇将会被开启。风扇转速将根据层打印时间在最大和最小风扇转速之间插值获得" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14014,6 +14074,62 @@ msgstr "支撑材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撑材料通常用于打印支撑体和支撑接触面" +# AI Translated +msgid "Is mixed filament" +msgstr "是否为混合耗材丝" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "该耗材丝槽位是否为由多种物理耗材丝组成的混合耗材丝" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合耗材丝组分" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "以逗号分隔的组分耗材丝序号(从 1 开始),例如 \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合耗材丝子层比例" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "以逗号分隔、总和为 1.0 的比例值,例如 \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合耗材丝渐变" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "为混合耗材丝的子层启用 Z 方向渐变模式。启用后,子层比例会随层数线性变化。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合耗材丝渐变范围" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "渐变模式下第一个组分的起始和结束比例。以逗号分隔的一对数值,例如 \"0.10,0.90\" 表示从 10% 到 90%。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合耗材丝渐变曲线" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "可选的 Photoshop 风格自定义曲线,将 Z 方向进度映射到第一个组分的比例。以竖线分隔的控制点进行编码,格式为 \"x,y\"(旧格式)或在需要覆盖切线时使用 \"x,y,m_in,m_out\"(留空或填 \"nan\" 表示使用 PCHIP 默认值)。x 取值范围为 [0,1];y 会被限制在所配置的比例范围内,例如 \"0,0.15|0.5,0.50|1,0.85\"。留空时改用线性的 gradient_range。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合耗材丝逐零件渐变" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "启用渐变模式时,对组合体中的每个零件分别应用渐变,而不是将整个组合体视为一个 Z 范围。" + msgid "Filament printable" msgstr "可打印耗材" @@ -15265,6 +15381,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y 轴允许的最大输出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15277,6 +15394,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y 轴的机器热床质量负载" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16848,6 +16966,14 @@ msgstr "" "\n" "在下方的擦拭前回抽量设置中输入一个数值,将在擦拭动作之前执行任何超出部分的回抽,否则超出部分的回抽将在擦拭之后执行。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色子层" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "启用混色子层拆分。启用后,含有混色耗材丝的层将被拆分为子层,以实现混色效果。" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "擦拭塔可以用来清理喷嘴上的残留料和让喷嘴内部的腔压达到稳定状态,以避免打印物体时出现外观瑕疵。" @@ -17923,6 +18049,10 @@ msgstr "模型文件的网格划分失败,或缺少有效的形状。" msgid "The supplied file couldn't be read because it's empty." msgstr "无法读取提供的文件,因为该文件内容为空。" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "文件格式不兼容,无法解析。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "未知的文件格式。输入文件的扩展名必须为 .stl、.obj 或 .amf(.xml)。" @@ -20222,8 +20352,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "启用智能耗材分配:将一种耗材分配给多个喷嘴以最大化节省" # AI Translated -msgid "Fila Saving" -msgstr "耗材节省" +msgid "File Saving" +msgstr "文件保存" msgid "Don't remind me again" msgstr "不再提醒" @@ -20588,6 +20718,9 @@ msgstr "立即重启" msgid "NO RAMMING AT ALL" msgstr "完全不挤压" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "体积流量" @@ -21212,6 +21345,39 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "原生 Wayland 实时画面需要 GStreamer GTK 视频接收器。请安装 GStreamer 的 gtksink 插件,然后重启 OrcaSlicer。" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "原生 Wayland GStreamer 视频接收器初始化失败。请检查您的 GStreamer GTK 插件安装情况。" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "此任务需要 Windows Media Player!您是否要为您的操作系统启用'Windows Media Player'?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource 未正确注册用于媒体播放!按是重新注册它。您将被提示两次" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "缺少用于媒体播放的已注册 BambuSource 组件!请重新安装 OrcaSlicer 或寻求社区帮助。" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "使用来自不同安装的 BambuSource,视频播放可能无法正常工作!按是修复它。" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "您的系统缺少 GStreamer 所需的 H.264 编解码器,这是播放视频所必需的。(尝试安装 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 软件包,然后重新启动 Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "耗材节省" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 86f5263b1b..ded90c8950 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-02 09:39-0300\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -2913,6 +2913,10 @@ msgstr "編輯" msgid "Merge with" msgstr "合併到" +# AI Translated +msgid "Decompose Color" +msgstr "分解顏色" + msgid "Delete this filament" msgstr "刪除此線材" @@ -3209,6 +3213,10 @@ msgstr "組合體" msgid "Merge parts to an object" msgstr "合併零件為物件" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "同時使用可變層高與混色子層可能導致混色品質不佳。" + # AI Translated msgid "Add layers" msgstr "新增層" @@ -7799,6 +7807,10 @@ msgstr "自訂列印板參數" msgid "The %s nozzle can not print %s." msgstr "%s 噴嘴無法列印 %s。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "在單擠出機列印裝置上列印混色線材需要頻繁換料與清理,可能大幅增加廢料以及噴嘴/廢料槽堵塞的風險。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建議在列印時混用 %1% 和 %2%。\n" @@ -7924,12 +7936,44 @@ msgstr "從 AMS 同步線材清單" msgid "Set filaments to use" msgstr "設定可選擇的線材" +# AI Translated +msgid "Add Mixed Filament" +msgstr "新增混合線材" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合線材" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "移除最後一個混合線材" + +# AI Translated +msgid "Add mixed filament" +msgstr "新增混合線材" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合線材的成分無效或不相符。請重新編輯受影響的項目。" + msgid "Search plate, object and part." msgstr "搜尋列印板、物件和零件。" msgid "Pellets" msgstr "顆粒" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合線材的成分參照已失效" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "編輯 / 刪除 / 合併" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "目標混合線材使用此實體線材作為成分。合併將移除此實體線材,並可能使該混合線材失效。是否繼續?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作後,%s 專案將關閉並建立新專案。" @@ -8110,6 +8154,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "偵測到多部分物件" +# AI Translated +msgid "Matching textures to filaments" +msgstr "正在將紋理對應到線材" + +# AI Translated +msgid "Texture Import Warning" +msgstr "紋理匯入警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "將這些檔案載入為一個多零件物件?\n" @@ -8320,6 +8372,22 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "紋理匯入失敗。模型中似乎包含紋理資料,但紋理匯入程序未能完成。將僅匯入模型的幾何資料。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "正在套用紋理顏色..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "正在更新 3D 檢視..." + +# AI Translated +msgid "Texture colors applied." +msgstr "紋理顏色已套用。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以將修改後的預設檔保留到新專案中或者忽略這些修改" @@ -9563,6 +9631,10 @@ msgstr "螺旋花瓶模式" msgid "First layer filament sequence" msgstr "首層線材列印順序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "線材清單中包含混合線材。自訂線材順序將不會生效。" + msgid "By Layer" msgstr "逐層" @@ -11466,27 +11538,6 @@ msgstr "線材更換時產生的廢料體積" msgid "Please choose the filament colour" msgstr "請選擇線材顏色" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "原生 Wayland 即時檢視需要 GStreamer GTK 視訊接收器。請為 GStreamer 安裝 gtksink 外掛程式,然後重新啟動 OrcaSlicer。" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "無法初始化原生 Wayland GStreamer 視訊接收器。請檢查您的 GStreamer GTK 外掛程式安裝。" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "執行此設定需要 Windows Media Player!您是否要啟用 Windows Media Player?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "「BambuSource 未正確註冊為媒體播放模組!請點選『是』進行重新註冊,過程中會有兩次提示" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "缺少用於媒體播放的已註冊 BambuSource 元件!請重新安裝 OrcaSlicer 或尋求社群協助。" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "BambuSource 來自其他安裝版本,可能導致影片播放異常!請點選『是』進行修復。" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "您的系統缺少 GStreamer 的 H.264 編解碼器,這是播放影片所必需的。(請嘗試安裝 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 套件,然後重新啟動 Orca Slicer。)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "雲端代理無法使用。請重新啟動 OrcaSlicer 後再試一次。" @@ -12195,6 +12246,10 @@ msgstr "如果您仍想列印,可以在「偏好設定 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根據目前設定,不會進行任何列印。" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "使用了漸層混合線材,但「混色子層」已停用。漸層將不會列印。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "逐件列印模式下不支援使用平滑模式的縮時錄影。" @@ -12231,6 +12286,10 @@ msgstr "您可能想要減小模型的尺寸或更改目前的列印設定並重 msgid "Variable layer height is not supported with Organic supports." msgstr "有機樹支撐不支持可變層高。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "換料塔線材不能是混合線材。" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "當啟用換料時,不同的噴嘴直徑和線材直徑可能無法正常配合。此功能屬於實驗性階段,請小心使用。" @@ -12578,7 +12637,6 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它層" -#, fuzzy msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首層外的其他層的熱床溫度。0值表示該線材不支援在低溫增穩列印板上列印。" @@ -13909,6 +13967,8 @@ msgstr "每一層列印時間" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "當層預估列印時間小於該數值時,物件冷卻風扇將會被開啟。風扇轉速將根據層列印時間在最大和最小風扇轉速之間自動調整" +# AI Translated +msgctxt "second" msgid "s" msgstr "秒" @@ -14214,6 +14274,62 @@ msgstr "支撐材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撐材料通常用於列印支撐體和支撐接觸面" +# AI Translated +msgid "Is mixed filament" +msgstr "是否為混合線材" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "此線材槽是否為由多種實體線材組成的混合線材" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合線材成分" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "以逗號分隔的成分線材序號(從 1 開始),例如 \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合線材子層比例" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "以逗號分隔、總和為 1.0 的比例值,例如 \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合線材漸層" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "為混合線材的子層啟用 Z 方向漸層模式。啟用後,子層比例會隨層數線性變化。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合線材漸層範圍" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "漸層模式下第一個成分的起始與結束比例。以逗號分隔的一對數值,例如 \"0.10,0.90\" 表示從 10% 到 90%。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合線材漸層曲線" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "選用的 Photoshop 風格自訂曲線,將 Z 方向進度對應到第一個成分的比例。以直立線分隔的控制點進行編碼,格式為 \"x,y\"(舊格式)或在需要覆寫切線時使用 \"x,y,m_in,m_out\"(留空或填入 \"nan\" 表示使用 PCHIP 預設值)。x 的取值範圍為 [0,1];y 會被限制在所設定的比例範圍內,例如 \"0,0.15|0.5,0.50|1,0.85\"。留空時改用線性的 gradient_range。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合線材逐零件漸層" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "啟用漸層模式時,對組合體中的每個零件分別套用漸層,而不是將整個組合體視為單一 Z 範圍。" + msgid "Filament printable" msgstr "線材可列印" @@ -15466,6 +15582,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y 軸允許的最大輸出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15478,6 +15595,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y 軸的機器床台質量負載" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17042,6 +17160,14 @@ msgstr "" "\n" "在以下的『擦拭前的回抽量』設定中設定一個值,將在擦拭之前執行任何額外的回抽操作;否則,將在擦拭之後執行。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色子層" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "啟用混色子層分割。啟用後,含有混色線材的層將被分割為子層,以達成混色效果。" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "換料塔的功能是用於清除噴嘴上的殘留物,同時穩定噴嘴內的壓力,從而避免列印物件時出現外觀瑕疵。" @@ -18111,6 +18237,10 @@ msgstr "模型檔案網格化失敗或沒有有效形狀" msgid "The supplied file couldn't be read because it's empty." msgstr "無法讀取提供的檔案,因為該檔案為空" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "檔案格式不相容,無法解析。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "檔案格式未知。輸入的檔案必須是 .stl、.obj 或 .amf(.xml) 格式。" @@ -20415,8 +20545,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "啟用智慧線材指派:將一種線材指派給多個噴嘴以最大化節省" # AI Translated -msgid "Fila Saving" -msgstr "線材節省" +msgid "File Saving" +msgstr "檔案儲存" msgid "Don't remind me again" msgstr "不要再提醒我" @@ -20781,6 +20911,9 @@ msgstr "立即重新啟動" msgid "NO RAMMING AT ALL" msgstr "完全不擠壓" +msgid "s" +msgstr "秒" + msgid "Volumetric speed" msgstr "體積速度" @@ -21426,6 +21559,39 @@ msgstr "" "避免翹曲\n" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "原生 Wayland 即時檢視需要 GStreamer GTK 視訊接收器。請為 GStreamer 安裝 gtksink 外掛程式,然後重新啟動 OrcaSlicer。" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "無法初始化原生 Wayland GStreamer 視訊接收器。請檢查您的 GStreamer GTK 外掛程式安裝。" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "執行此設定需要 Windows Media Player!您是否要啟用 Windows Media Player?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "「BambuSource 未正確註冊為媒體播放模組!請點選『是』進行重新註冊,過程中會有兩次提示" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "缺少用於媒體播放的已註冊 BambuSource 元件!請重新安裝 OrcaSlicer 或尋求社群協助。" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "BambuSource 來自其他安裝版本,可能導致影片播放異常!請點選『是』進行修復。" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "您的系統缺少 GStreamer 的 H.264 編解碼器,這是播放影片所必需的。(請嘗試安裝 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 套件,然後重新啟動 Orca Slicer。)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "線材節省" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" From 51fd6327fee6c8e0a7d082906c3a8c56f35c477c Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Thu, 3 Sep 2026 00:15:18 +0300 Subject: [PATCH 18/23] Fix omitted assembly parts with height ranges (#15499) --- src/libslic3r/PrintApply.cpp | 8 +++++--- src/libslic3r/PrintObjectSlice.cpp | 13 ++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index f03271bf73..90d60b5917 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -560,9 +560,11 @@ static inline bool model_volume_solid_or_modifier(const ModelVolume &mv) static inline Transform3f trafo_for_bbox(const Transform3d &object_trafo, const Transform3d &volume_trafo) { - Transform3d m = object_trafo * volume_trafo; - m.translation().x() = 0.; - m.translation().y() = 0.; + // Orca: Keep the volume's local XY offset for multipart overlap checks, but remove the object's bed placement. + Transform3d object_trafo_local = object_trafo; + object_trafo_local.translation().x() = 0.; + object_trafo_local.translation().y() = 0.; + Transform3d m = object_trafo_local * volume_trafo; return m.cast<float>(); } diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index f6a6b43e09..d16e381604 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -304,11 +304,16 @@ static std::vector<std::vector<ExPolygons>> slices_to_regions( float z = zs[z_idx]; int idx_first_printable_region = -1; bool complex = false; + std::vector<int> printable_region_ids; for (int idx_region = 0; idx_region < int(layer_range.volume_regions.size()); ++ idx_region) { const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[idx_region]; if (region.bbox->min().z() <= z && region.bbox->max().z() >= z) { - if (idx_first_printable_region == -1 && region.model_volume->is_model_part()) + if (region.model_volume->is_model_part()) + printable_region_ids.push_back(idx_region); + + if (idx_first_printable_region == -1 && region.model_volume->is_model_part()) { idx_first_printable_region = idx_region; + } else if (idx_first_printable_region != -1) { // Test for overlap with some other region. for (int idx_region2 = idx_first_printable_region; idx_region2 < idx_region; ++ idx_region2) { @@ -324,8 +329,10 @@ static std::vector<std::vector<ExPolygons>> slices_to_regions( if (complex) zs_complex.push_back({ z_idx, z }); else if (idx_first_printable_region >= 0) { - const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[idx_first_printable_region]; - slices_by_region[region.region->print_object_region_id()][z_idx] = std::move(volume_slices_find_by_id(volume_slices, region.model_volume->id()).slices[z_idx]); + for (int printable_region_id : printable_region_ids) { + const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[printable_region_id]; + append(slices_by_region[region.region->print_object_region_id()][z_idx], std::move(volume_slices_find_by_id(volume_slices, region.model_volume->id()).slices[z_idx])); + } } } } From 8bf1d3ea84253cf4a0d63d5137650e23369e6f24 Mon Sep 17 00:00:00 2001 From: Kris Austin <kris.austin@gmail.com> Date: Wed, 2 Sep 2026 16:18:17 -0500 Subject: [PATCH 19/23] fix: clear 12 warning sites that only appear away from Windows (#15437) --- src/slic3r/GUI/CreatePresetsDialog.cpp | 4 +++- src/slic3r/GUI/Field.cpp | 18 +++++++++++++++--- src/slic3r/GUI/GUI_ObjectLayers.cpp | 2 +- src/slic3r/GUI/Jobs/PlaterWorker.hpp | 5 ++++- src/slic3r/GUI/MainFrame.cpp | 14 +++++++------- 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 892576f0c0..e6fb6e0782 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -599,7 +599,9 @@ static char* read_json_file(const std::string &preset_path) return NULL; } - fread(json_contents, 1, file_size, json_file); + const size_t read_bytes = fread(json_contents, 1, file_size, json_file); + if (read_bytes != static_cast<size_t>(file_size)) + BOOST_LOG_TRIVIAL(error) << "Read " << read_bytes << " of " << file_size << " bytes from the JSON file"; fclose(json_file); return json_contents; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index b0302f2cf8..142cf70522 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -941,7 +941,11 @@ void TextCtrl::BUILD() { temp->SetToolTip(get_tooltip_text(text_value)); if (!m_opt.multiline) { - text_ctrl->Bind(wxEVT_TEXT_ENTER, ([this, temp](wxEvent &e) + text_ctrl->Bind(wxEVT_TEXT_ENTER, ([ +#if !defined(__WXGTK__) + temp, +#endif // __WXGTK__ + this](wxEvent &e) { #if !defined(__WXGTK__) e.Skip(); @@ -973,7 +977,11 @@ void TextCtrl::BUILD() { temp->GetToolTip()->Enable(flag); }), text_ctrl->GetId()); - temp->Bind(wxEVT_KILL_FOCUS, ([this, temp](wxEvent &e) + temp->Bind(wxEVT_KILL_FOCUS, ([ +#if !defined(__WXGTK__) + temp, +#endif // __WXGTK__ + this](wxEvent &e) { e.Skip(); #if !defined(__WXGTK__) @@ -2597,7 +2605,11 @@ void ColourPicker::BUILD() // // recast as a wxWindow to fit the calling convention window = dynamic_cast<wxWindow*>(temp); - temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([this,temp](wxCommandEvent e) { + temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([ + #ifdef __WXMSW__ + temp, + #endif + this](wxCommandEvent e) { #ifdef __WXMSW__ draw_bmp_btn(temp, temp->GetColour()); #endif diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index bbd7294ae5..93bdeec9ee 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -48,7 +48,7 @@ void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_ed * And as a result we couldn't edit this control. * */ #ifdef __WXOSX__ - wxTheApp->CallAfter([editor]() { + wxTheApp->CallAfter([]() { #endif //editor->SetFocus(); //editor->SelectAll(); diff --git a/src/slic3r/GUI/Jobs/PlaterWorker.hpp b/src/slic3r/GUI/Jobs/PlaterWorker.hpp index d38a57b6a6..f22bd6d511 100644 --- a/src/slic3r/GUI/Jobs/PlaterWorker.hpp +++ b/src/slic3r/GUI/Jobs/PlaterWorker.hpp @@ -79,9 +79,12 @@ class PlaterWorker: public Worker { steady_clock::time_point finalize_end = steady_clock::now(); long long finalize_duration = duration_cast<milliseconds>(finalize_end - finalize_start).count(); + // Bound first so typeid's operand is not a call. typeid evaluates it for a + // polymorphic type, which clang reports as -Wpotentially-evaluated-expression. + const Job &job = *m_job; BOOST_LOG_TRIVIAL(info) << std::fixed // do not use scientific notations - << "Job '" << typeid(*m_job).name() << "' " + << "Job '" << typeid(job).name() << "' " << "spend " << m_process_duration + finalize_duration << "ms " << "(process " << m_process_duration << "ms + finalize " << finalize_duration << "ms)"; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 7b8912fe5b..675bc8da27 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -3068,10 +3068,10 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return can_clone(); }, this); editMenu->AppendSeparator(); append_menu_item(editMenu, wxID_ANY, _L("Duplicate Current Plate"), - _L("Duplicate the current plate"),[this, handle_key_event](wxCommandEvent&) { + _L("Duplicate the current plate"),[this](wxCommandEvent&) { m_plater->duplicate_plate(); }, - "", nullptr, [this](){return true;}, this); + "", nullptr, [](){return true;}, this); editMenu->AppendSeparator(); #endif @@ -3338,11 +3338,11 @@ void MainFrame::init_menubar_as_editor() //parent_menu->Insert(0, about_item); append_menu_item( parent_menu, wxID_ANY, _L(about_title), "", - [this](wxCommandEvent &) { Slic3r::GUI::about();}, + [](wxCommandEvent &) { Slic3r::GUI::about();}, "", nullptr, []() { return true; }, this, 0); append_menu_item( parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { wxGetApp().open_preferences(); }, "", nullptr, []() { return true; }, this, 1); @@ -3530,13 +3530,13 @@ void MainFrame::init_menubar_as_editor() into_u8(_L("Syncing presets from cloud\u2026"))); wxGetApp().restart_sync_user_preset(); }, "", nullptr, - [this]() { + []() { return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); }, this); fileMenu->AppendSeparator(); append_menu_item( - fileMenu, wxID_ANY, _L("Plugins"), "", [this](wxCommandEvent&) { wxGetApp().open_plugins_dialog(); }, "", nullptr, + fileMenu, wxID_ANY, _L("Plugins"), "", [](wxCommandEvent&) { wxGetApp().open_plugins_dialog(); }, "", nullptr, []() { return true; }, this); fileMenu->AppendSeparator(); @@ -3640,7 +3640,7 @@ void MainFrame::init_menubar_as_editor() [this]() {return m_plater->is_view3D_shown();; }, this); // help append_menu_item(calib_menu, wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, + [](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); m_menubar->Append(calib_menu,wxString::Format("&%s", _L("Calibration"))); From 3605614ee7e13a0601ff9eb9d7dcb0d2b12cbb3f Mon Sep 17 00:00:00 2001 From: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Date: Wed, 2 Sep 2026 19:06:01 -0300 Subject: [PATCH 20/23] More Labels (#15511) --- .github/workflows/pr-label-bot.yml | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr-label-bot.yml b/.github/workflows/pr-label-bot.yml index 1214db0776..fe74841831 100644 --- a/.github/workflows/pr-label-bot.yml +++ b/.github/workflows/pr-label-bot.yml @@ -32,13 +32,21 @@ jobs: } const allowedLabels = [ + // kind of change + 'crash', 'bug-fix', 'enhancement', - 'Localization', - 'profile', 'QoL', + 'optimization', + // area 'UI/UX', - 'dependencies' + 'profile', + 'Localization', + // infrastructure + 'build', + 'test', + 'dependencies', + 'documentation' ]; const pr = context.payload.pull_request; const labelsList = `${allowedLabels @@ -182,13 +190,21 @@ jobs: } const allowedLabels = [ + // kind of change + 'crash', 'bug-fix', 'enhancement', - 'Localization', - 'profile', 'QoL', + 'optimization', + // area 'UI/UX', - 'dependencies' + 'profile', + 'Localization', + // infrastructure + 'build', + 'test', + 'dependencies', + 'documentation' ]; const issue = context.payload.issue; From 53c26a572449e1869b824975edb8fb954139fe2e Mon Sep 17 00:00:00 2001 From: Vladislav Khmelevsky <och95v@gmail.com> Date: Thu, 3 Sep 2026 03:21:27 +0400 Subject: [PATCH 21/23] fix: save 3d mouse settings (#15397) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- src/libslic3r/AppConfig.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 2d0c6a5d8d..29eb96aa5b 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -1440,6 +1440,7 @@ void AppConfig::set_mouse_device(const std::string& name, double translation_spe it->second["invert_yaw"] = invert_yaw ? "1" : "0"; it->second["invert_pitch"] = invert_pitch ? "1" : "0"; it->second["invert_roll"] = invert_roll ? "1" : "0"; + m_dirty = true; } std::vector<std::string> AppConfig::get_mouse_device_names() const From e6501bb1cecea4459df5481bfe76216cffaae2fa Mon Sep 17 00:00:00 2001 From: Kris Austin <kris.austin@gmail.com> Date: Wed, 2 Sep 2026 19:45:16 -0500 Subject: [PATCH 22/23] build: stop rebuilding the Flatpak dependencies on every run (#15501) --- .github/workflows/build_all.yml | 14 ++++- build_flatpak.sh | 3 + scripts/build_flatpak_with_docker.sh | 3 + scripts/flatpak/.gitignore | 1 + scripts/flatpak/check_manifest_cacheable.sh | 52 ++++++++++++++++++ scripts/flatpak/com.orcaslicer.OrcaSlicer.yml | 9 +-- scripts/flatpak/make_deps_tar.sh | 55 +++++++++++++++++++ scripts/flatpak/setup_env_ubuntu24.04.sh | 7 ++- 8 files changed, 135 insertions(+), 9 deletions(-) create mode 100755 scripts/flatpak/check_manifest_cacheable.sh create mode 100755 scripts/flatpak/make_deps_tar.sh diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index d991bedca6..0ab9cfe41d 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -279,20 +279,24 @@ jobs: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash + - name: Compute the flatpak-builder cache key + id: fp_cache_key + run: echo "key=flatpak-builder-${{ matrix.variant.arch }}-${{ hashFiles('deps/**', 'scripts/flatpak/com.orcaslicer.OrcaSlicer.yml', 'scripts/flatpak/make_deps_tar.sh') }}" >> "$GITHUB_OUTPUT" + shell: bash # Manage flatpak-builder cache externally so PRs restore but never upload - name: Restore flatpak-builder cache if: github.event_name == 'pull_request' uses: actions/cache/restore@v6 with: path: .flatpak-builder - key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.event.pull_request.base.sha }} + key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Save/restore flatpak-builder cache if: github.event_name != 'pull_request' uses: actions/cache@v6 with: path: .flatpak-builder - key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.sha }} + key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Disable debug info for faster CI builds run: | @@ -304,6 +308,12 @@ jobs: sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/com.orcaslicer.OrcaSlicer.yml shell: bash + - name: Check the manifest keeps orca_deps cacheable + run: ./scripts/flatpak/check_manifest_cacheable.sh + shell: bash + - name: Pack deps/ for the Flatpak manifest + run: ./scripts/flatpak/make_deps_tar.sh + shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak diff --git a/build_flatpak.sh b/build_flatpak.sh index b805bb3422..12ccac372b 100755 --- a/build_flatpak.sh +++ b/build_flatpak.sh @@ -260,6 +260,9 @@ if [[ ! -f "./scripts/flatpak/com.orcaslicer.OrcaSlicer.yml" ]]; then exit 1 fi +echo -e "${YELLOW}Packing deps/ for the manifest...${NC}" +./scripts/flatpak/make_deps_tar.sh + # Build the Flatpak echo -e "${YELLOW}Building Flatpak package...${NC}" echo -e "This may take a while (30+ minutes depending on your system)..." diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh index 9e8805af2f..eedfe53692 100755 --- a/scripts/build_flatpak_with_docker.sh +++ b/scripts/build_flatpak_with_docker.sh @@ -122,6 +122,9 @@ sed "/name: OrcaSlicer/{ \1 git_commit_hash: \"$GIT_COMMIT_HASH\"| }" > "$MANIFEST_DOCKER" +# ---------- pack deps/ ---------- +./scripts/flatpak/make_deps_tar.sh + # ---------- run build in Docker ---------- DOCKER="${DOCKER:-docker}" diff --git a/scripts/flatpak/.gitignore b/scripts/flatpak/.gitignore index 3b01f15d01..21abf7a876 100644 --- a/scripts/flatpak/.gitignore +++ b/scripts/flatpak/.gitignore @@ -1,3 +1,4 @@ builddir .flatpak-builder *.docker.yml +deps.tar* diff --git a/scripts/flatpak/check_manifest_cacheable.sh b/scripts/flatpak/check_manifest_cacheable.sh new file mode 100755 index 0000000000..e82190ca81 --- /dev/null +++ b/scripts/flatpak/check_manifest_cacheable.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Check a Flatpak manifest for `type: dir` sources at or before the orca_deps +# module. +# +# Usage: check_manifest_cacheable.sh [manifest] +# Defaults to com.orcaslicer.OrcaSlicer.yml next to this script. +# +# Exits 0 when none are found, 1 when any are, listing them as file:line, and +# 2 when the manifest is missing or has no orca_deps module. + +set -euo pipefail + +anchor=orca_deps +manifest=${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/com.orcaslicer.OrcaSlicer.yml} + +module_re='^ - name: ' +dir_re='(^|[-{,[:space:]])type:[[:space:]]*dir([,}[:space:]]|$)' + +if [ ! -f "$manifest" ]; then + echo "$manifest: no such file" >&2 + exit 2 +fi + +anchor_start=$(grep -n "${module_re}${anchor}[[:space:]]*$" "$manifest" | cut -d: -f1 || true) +if [ -z "$anchor_start" ]; then + echo "$manifest: no module named '$anchor'; this check needs updating" >&2 + exit 2 +fi + +# First module header after the anchor, or EOF if the anchor is last. +anchor_end=$(grep -n "$module_re" "$manifest" | cut -d: -f1 | + awk -v s="$anchor_start" '$1 > s { print $1; exit }') +[ -n "$anchor_end" ] || anchor_end=$(awk 'END { print NR + 1 }' "$manifest") + +violations=$(awk -v e="$anchor_end" -v f="$manifest" -v mre="$module_re" -v dre="$dir_re" ' + { sub(/\r$/, "") } + /^[[:space:]]*#/ { next } + $0 ~ mre { module = $3 } + NR < e && $0 ~ dre { + printf "%s:%d: %s (module %s)\n", f, NR, $0, module + }' "$manifest") + +if [ -n "$violations" ]; then + printf '%s\n' "$violations" >&2 + echo >&2 + echo "flatpak-builder cannot checksum a directory, so each of these makes" >&2 + echo "$anchor and every module after it rebuild from scratch on every run." >&2 + echo "See the $anchor sources in this manifest for the tarball used instead." >&2 + exit 1 +fi + +echo "manifest OK: no 'type: dir' source at or before $anchor" diff --git a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml index a3efaced8c..00aa430f84 100644 --- a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml @@ -144,6 +144,7 @@ modules: env: BUILD_DIR: deps/build_flatpak build-commands: + - tar xf deps.tar - | cmake -S deps -B $BUILD_DIR \ -DFLATPAK=ON \ @@ -169,10 +170,10 @@ modules: - /libpython/include sources: - # OrcaSlicer deps/ directory (avoids copying .git from worktree) - - type: dir - path: ../../deps - dest: deps + # flatpak-builder cannot checksum a directory, so a `type: dir` here would + # rebuild every dependency on every run. Generated by make_deps_tar.sh. + - type: file + path: deps.tar # --------------------------------------------------------------- # Pre-downloaded dependency archives diff --git a/scripts/flatpak/make_deps_tar.sh b/scripts/flatpak/make_deps_tar.sh new file mode 100755 index 0000000000..e561da2e7b --- /dev/null +++ b/scripts/flatpak/make_deps_tar.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Pack deps/ into scripts/flatpak/deps.tar for the Flatpak manifest's orca_deps +# module. +# +# Usage: make_deps_tar.sh +# Requires GNU tar. On macOS, brew install gnu-tar. +# +# The archive is byte-reproducible. Member order, mtimes, ownership and the +# group/other write bits are pinned, so identical deps/ contents always produce +# an identical file. deps/build* and deps/DL_CACHE are excluded. +# +# Prints the output path, size and sha256. + +set -euo pipefail + +if [ "$#" -ne 0 ]; then + echo "usage: ${0##*/}" >&2 + exit 2 +fi + +tar_bin=$(command -v gtar || command -v tar || true) +tar_version=$([ -n "$tar_bin" ] && "$tar_bin" --version 2>/dev/null || true) +case $tar_version in + *"GNU tar"*) ;; + *) echo "${0##*/}: needs GNU tar; on macOS run 'brew install gnu-tar'" >&2 + exit 2 ;; +esac + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +repo_root=$(cd "$script_dir/../.." && pwd) +out=$script_dir/deps.tar +tmp=$out.tmp +trap 'rm -f "$tmp"' EXIT + +"$tar_bin" --format=gnu \ + --sort=name \ + --mtime=@0 \ + --owner=0 --group=0 --numeric-owner \ + --mode=go-w \ + --exclude='deps/build*' \ + --exclude='deps/DL_CACHE' \ + -cf "$tmp" \ + -C "$repo_root" deps + +mv -f "$tmp" "$out" + +if command -v sha256sum >/dev/null 2>&1; then + sum=$(sha256sum "$out" | cut -d' ' -f1) +elif command -v shasum >/dev/null 2>&1; then + sum=$(shasum -a 256 "$out" | cut -d' ' -f1) +else + sum=unavailable +fi + +echo "Wrote $out ($(du -h "$out" | cut -f1), sha256 $sum)" diff --git a/scripts/flatpak/setup_env_ubuntu24.04.sh b/scripts/flatpak/setup_env_ubuntu24.04.sh index a0ccbb9b32..74b7629f60 100755 --- a/scripts/flatpak/setup_env_ubuntu24.04.sh +++ b/scripts/flatpak/setup_env_ubuntu24.04.sh @@ -8,8 +8,9 @@ flatpak install flathub org.gnome.Platform//50 org.gnome.Sdk//50 org.freedesktop ## # in OrcaSlicer folder, run following command to build Orca -# # First time build -# flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user --force-clean build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml -# # Subsequent builds (only rebuilding OrcaSlicer) +# # First time build +# ./scripts/flatpak/make_deps_tar.sh && flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user --force-clean build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + +# # Subsequent builds (only rebuilding OrcaSlicer; run make_deps_tar.sh first if deps/ changed) # flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml --build-only=OrcaSlicer \ No newline at end of file From f92bd811904b6223241fd967c54cfa1554e6f017 Mon Sep 17 00:00:00 2001 From: Kris Austin <kris.austin@gmail.com> Date: Thu, 3 Sep 2026 07:56:33 -0500 Subject: [PATCH 23/23] fix: build_win.bat builds with whatever clang-cl is first on PATH (#15504) * fix: build_win.bat builds with whatever clang-cl is first on PATH VsDevCmd appends the Visual Studio LLVM directory to the end of PATH, so a standalone LLVM already on it shadows the Visual Studio one. -l -x passed a bare clang-cl.exe for CMake to resolve, so the build ran on whichever copy came first. For one reporter that was an LLVM 11, which failed the compiler check before anything was compiled: -- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe - broken lld-link: error: undefined symbol: __guard_eh_cont_table The compiler is now resolved through vswhere and passed as a full path, so PATH order no longer matters. CMake derives the linker from the compiler directory, so lld-link follows. Only a configure passes it to CMake, so -p and --no-configure resolve nothing and stay buildable on a machine with no clang installed. When Visual Studio has no clang toolset the script falls back to the first clang-cl on PATH and names it. With none installed at all it now errors with what to add, instead of failing later inside CMake. Every clang-cl run that configures prints the compiler it resolved. The suite gains a clang-cl fixture earlier on PATH than the Visual Studio one, and an empty ProgramFiles(x86) to put vswhere out of reach, which covers both fallbacks without touching the machine. * fix: build_win.bat pointed at a solution file that is not there The Visual Studio 2026 generator writes OrcaSlicer.slnx and the releases before it OrcaSlicer.sln. The summary hard-coded the second, so the path it printed after an MSVC build against 2026 was wrong. --- build_win.bat | 79 +++++++++++++++++++++++++++++++++---- scripts/test_build_win.ps1 | 80 +++++++++++++++++++++++++++++++++----- 2 files changed, 142 insertions(+), 17 deletions(-) diff --git a/build_win.bat b/build_win.bat index 926468687b..15399d5e3d 100644 --- a/build_win.bat +++ b/build_win.bat @@ -370,13 +370,13 @@ if "%use_ninja%" == "ON" ( set "using_ninja=ON" ) +call :resolve_clang_cl +%repeat_error% + if "%using_ninja%" == "ON" ( if "%use_clang_cl%" == "ON" ( - REM Bare, so it resolves from the PATH the dev shell just set up, which - REM is the clang shipped with Visual Studio. --clang-path names another. - set "clang_exe=clang-cl.exe" - if not "%clang_path%" == "" set "clang_exe="%clang_path%"" - set "gen_args=-DCMAKE_C_COMPILER=!clang_exe! -DCMAKE_CXX_COMPILER=!clang_exe!" + REM Quoted, because the resolved path has spaces in it. + set "gen_args=-DCMAKE_C_COMPILER="!clang_exe!" -DCMAKE_CXX_COMPILER="!clang_exe!"" ) ) else ( set "gen_args=-A !arch!" @@ -473,6 +473,7 @@ REM forward slashes, and anything that prints the directory has to show a REM real path rather than one glued onto the repository root. for %%p in ("!build_dir!") do set "build_full=%%~fp" echo Configuration: %build_type%, %arch% +if not "%clang_exe%" == "" echo Compiler: %clang_exe% set "SIG_FLAG=" if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" @@ -734,6 +735,14 @@ REM worked out the same way in either run. set "slicer_exe=%build_dir%\src\%build_type%\orca-slicer.exe" if "%install_slicer%" == "ON" set "slicer_exe=%build_dir%\OrcaSlicer\orca-slicer.exe" for %%p in ("!slicer_exe!") do set "slicer_full=%%~fp" + REM The 2026 generator writes OrcaSlicer.slnx, the releases before it + REM OrcaSlicer.sln. A file already there wins, in case an older CMake + REM configured the build. + set "solution=OrcaSlicer.sln" + if "%vs_version%" == "2026" set "solution=OrcaSlicer.slnx" + if exist "!build_full!\OrcaSlicer.sln" set "solution=OrcaSlicer.sln" + if exist "!build_full!\OrcaSlicer.slnx" set "solution=OrcaSlicer.slnx" + REM Naming a target builds it and its dependencies, not its dependents, REM so only a full build or the executable's own target relinks. set "linked=ON" @@ -751,14 +760,14 @@ REM worked out the same way in either run. if "%build_deps%" == "ON" echo Dependencies !dep_full! if "%build_slicer%" == "ON" if "%linked%" == "ON" echo OrcaSlicer !slicer_full! if "%build_slicer%" == "ON" if not "%linked%" == "ON" echo Target %slicer_target% - if "%build_slicer%" == "ON" if not "%using_ninja%" == "ON" echo Solution %build_full%\OrcaSlicer.sln + if "%build_slicer%" == "ON" if not "%using_ninja%" == "ON" echo Solution %build_full%\!solution! if "%pack_deps%" == "ON" if defined bundle echo Bundle !bundle! echo. echo Next if "%build_slicer%" == "ON" ( if "%linked%" == "ON" echo Run it !slicer_exe! - if not "%using_ninja%" == "ON" echo Open in Visual Studio %build_dir%\OrcaSlicer.sln + if not "%using_ninja%" == "ON" echo Open in Visual Studio %build_dir%\!solution! if "%linked%" == "ON" echo Rebuild after edits build_win.bat -s!recall! --no-configure if not "%linked%" == "ON" echo Relink the binary build_win.bat -s!recall! --no-configure if "%linked%" == "ON" if "%using_ninja%" == "ON" echo Rebuild one target build_win.bat -s!recall! --no-configure --slicer-target libslic3r @@ -1080,6 +1089,62 @@ REM echo_var <variable> exit /b 0 +REM resolve_clang_cl - set clang_exe to the clang-cl a Ninja build uses. +REM VsDevCmd appends the Visual Studio LLVM directory to the end of PATH, +REM so a standalone LLVM already there shadows it. Name a full path. +:resolve_clang_cl + set "clang_exe=" + if not "%using_ninja%" == "ON" exit /b 0 + if not "%use_clang_cl%" == "ON" exit /b 0 + REM Only a configure uses it, so -p and --no-configure need none. + if "%no_configure%" == "ON" exit /b 0 + if "%build_deps%%build_slicer%" == "" exit /b 0 + + REM --clang-path wins. Forward slashes either way, so CMake does not + REM read a backslash as an escape. + if not "%clang_path%" == "" ( + set "clang_exe=%clang_path:\=/%" + exit /b 0 + ) + + setlocal + + REM Keyed on the host, not %arch%, because the x64 compiler + REM cross-compiles to ARM64. + set "llvm_host=x64" + if /I "%PROCESSOR_ARCHITECTURE%" == "ARM64" set "llvm_host=ARM64" + + set "found=" + %VSWHERE% -nologo >nul 2>nul + if !errorlevel! == 0 ( + for /f "tokens=*" %%i in ('%VSWHERE% -nologo -products * -latest -property resolvedInstallationPath') do ( + if exist "%%i\VC\Tools\Llvm\!llvm_host!\bin\clang-cl.exe" ( + set "found=%%i\VC\Tools\Llvm\!llvm_host!\bin\clang-cl.exe" + ) + ) + ) + + REM No clang toolset in Visual Studio. where lists every match, and the + REM first is the one PATH would resolve. + if "!found!" == "" ( + for /f "tokens=*" %%i in ('where clang-cl.exe 2^>nul') do ( + if "!found!" == "" set "found=%%i" + ) + if not "!found!" == "" echo Visual Studio has no clang-cl; using !found! from PATH. + ) + + if "!found!" == "" ( + echo No clang-cl found. Add the C++ Clang Compiler component with + echo %script_name% --install-vs ide -l + echo or name a standalone one with --clang-path. + endlocal + exit /b 1 + ) + + endlocal & set "clang_exe=%found:\=/%" + + exit /b 0 + REM clean_tree <path> - remove a build tree, refusing anything that is not REM one. Nothing here should ever fire; it is a floor under a bug that REM produced a path far shorter than it looks. diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 index 62eaaae77b..563430559f 100644 --- a/scripts/test_build_win.ps1 +++ b/scripts/test_build_win.ps1 @@ -85,6 +85,24 @@ foreach ($v in @{ old = '1.11.1'; new = '1.12.0' }.GetEnumerator()) { $ninjaPaths[$v.Key] = "$d;$env:PATH" } +# A clang-cl earlier on PATH than the Visual Studio one, which is what the +# compiler used to resolve to. Nothing runs it; the script only locates it. +$clangDir = Join-Path $fixtures 'clang' +New-Item -ItemType Directory -Force -Path $clangDir | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $clangDir 'clang-cl.exe') -Force +$clangOnPath = "$clangDir;$env:PATH" + +# ProgramFiles(x86) is where the script looks for vswhere, so an empty one +# stands in for a machine whose Visual Studio has no clang toolset. +$noVs = Join-Path $fixtures 'no-vs' +New-Item -ItemType Directory -Force -Path $noVs | Out-Null + +# A build directory that already holds a classic solution, for the case where +# what is on disk disagrees with what the generator would write. +$slnDir = Join-Path $fixtures 'sln' +New-Item -ItemType Directory -Force -Path $slnDir | Out-Null +Set-Content -Path (Join-Path $slnDir 'OrcaSlicer.sln') -Value '' -Encoding ascii + # The pack stamp is checked against real dates, so a locale-dependent parse # in the script cannot pass by looking date-shaped. Yesterday is accepted too, # so a run that crosses midnight does not flake. @@ -131,7 +149,36 @@ $cases = @( Contains = @('-G "Ninja Multi-Config"') NotContains = @('clang-cl', '-A x64') } @{ Name = '-l -x builds with clang-cl under Ninja'; Args = @('-d', '-l', '-x') - Contains = @('-G "Ninja Multi-Config"', '-DCMAKE_C_COMPILER=clang-cl.exe', '-DCMAKE_CXX_COMPILER=clang-cl.exe') } + Contains = @('-G "Ninja Multi-Config"') + Match = @('-DCMAKE_C_COMPILER="[^"]+/clang-cl\.exe"', '-DCMAKE_CXX_COMPILER="[^"]+/clang-cl\.exe"') } + # PATH order used to decide the compiler. VsDevCmd appends the Visual + # Studio LLVM directory to the end of PATH, so a standalone LLVM already + # there was resolved instead, and an old one failed the compiler check. + @{ Name = 'the compiler is resolved from Visual Studio, not PATH'; Args = @('-s', '-l', '-x') + Env = @{ PATH = $clangOnPath } + Match = @('^Compiler: .*/VC/Tools/Llvm/[^/]+/bin/clang-cl\.exe$') } + @{ Name = 'msvc names no compiler, having resolved none'; Args = @('-s') + NotContains = @('Compiler: ') } + @{ Name = '-l without -x names none either, the toolset picks it'; Args = @('-s', '-l') + NotContains = @('Compiler: ') } + # An empty ProgramFiles(x86) puts vswhere out of reach, which is a machine + # whose Visual Studio has no clang toolset. + @{ Name = 'without a Visual Studio clang the one on PATH is used and named'; Args = @('-s', '-l', '-x') + Env = @{ 'ProgramFiles(x86)' = $noVs; PATH = $clangOnPath } + Contains = @('Visual Studio has no clang-cl') + Match = @('^Compiler: .*/clang/clang-cl\.exe$') } + @{ Name = 'no clang-cl anywhere stops before configuring'; Args = @('-s', '-l', '-x'); ExpectExit = 1 + Env = @{ 'ProgramFiles(x86)' = $noVs; PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('No clang-cl found', '--install-vs ide -l') + NotContains = @('cmake -B') } + # Only a configure passes the compiler to CMake, so an action that does + # not configure resolves none, and cannot start needing one installed. + @{ Name = 'packing resolves no compiler'; Args = @('-p', '-l', '-x') + Contains = @('Packing the dependencies') + NotContains = @('Compiler: ') } + @{ Name = '--no-configure resolves none either'; Args = @('-s', '-l', '-x', '--no-configure') + Contains = @('cmake --build "build-clang"') + NotContains = @('Compiler: ') } @{ Name = '-l alone uses the ClangCL toolset on the VS generator'; Args = @('-d', '-l') Contains = @('-G "Visual Studio', '-T ClangCL') NotContains = @('-DCMAKE_C_COMPILER') } @@ -148,11 +195,13 @@ $cases = @( NotContains = @('clang-cl') } @{ Name = '--msbuild with -l gives the VS generator and the ClangCL toolset'; Args = @('-d', '--msbuild', '-l') Contains = @('-G "Visual Studio', '-T ClangCL') } - # A developer with a standalone LLVM points at it; the VS-bundled clang - # is what a bare clang-cl.exe resolves to after the dev shell runs. + # A developer with a standalone LLVM points at it, and the path is passed + # with forward slashes so CMake cannot read a backslash as an escape. @{ Name = '--clang-path names the compiler, quoted for its spaces'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') - Contains = @('-DCMAKE_C_COMPILER="C:\Program Files\LLVM\bin\clang-cl.exe"', - '-DCMAKE_CXX_COMPILER="C:\Program Files\LLVM\bin\clang-cl.exe"') } + Contains = @('-DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe"', + '-DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe"') } + @{ Name = '--clang-path beats the Visual Studio clang'; Args = @('-s', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('Compiler: C:/Program Files/LLVM/bin/clang-cl.exe') } @{ Name = '--clang-path is a clang request on its own'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') Contains = @('deps/build-clang') } @{ Name = '--clang-path needs Ninja to take effect'; Args = @('-d', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe'); ExpectExit = 1 @@ -195,7 +244,8 @@ $cases = @( @{ Name = 'the architecture is matched case-insensitively'; Args = @('-d', '--arch', 'ARM64') Contains = @('-A ARM64', 'deps/build-arm64') } @{ Name = 'arm64 under Ninja has no -A but keeps the arm64 tree'; Args = @('-d', '--arch', 'arm64', '-x', '-l') - Contains = @('deps/build-clang-arm64', '-DCMAKE_C_COMPILER=clang-cl.exe') + Contains = @('deps/build-clang-arm64') + Match = @('-DCMAKE_C_COMPILER="[^"]+/clang-cl\.exe"') NotContains = @('-A ') } 'build configurations' @@ -699,18 +749,28 @@ $cases = @( Contains = @('Next', 'Rebuild after edits') } 'pointing at the solution' + # The extension follows the generator, so these two pin the release and a + # build directory that cannot already hold a solution of either kind. + @{ Name = 'the 2026 generator gets the XML solution'; Args = @('-s', '--vs', '2026', '--build-dir', 'D:\tree') + Contains = @('Solution D:\tree\OrcaSlicer.slnx', 'Open in Visual Studio D:\tree\OrcaSlicer.slnx') } + @{ Name = 'the releases before it get the classic one'; Args = @('-s', '--vs', '2022', '--build-dir', 'D:\tree') + Contains = @('Solution D:\tree\OrcaSlicer.sln', 'Open in Visual Studio D:\tree\OrcaSlicer.sln') } + @{ Name = 'a solution already on disk wins over the generator'; Args = @('-s', '--vs', '2026', '--build-dir', $slnDir) + Match = @('^ Solution .*\\OrcaSlicer\.sln$') } + # Extension-agnostic from here: these cases are about the directory, and + # the release is whatever is installed. @{ Name = 'the VS generator says where the solution is'; Args = @('-s') - Match = @('^ Solution .*\\build\\OrcaSlicer\.sln$') } + Match = @('^ Solution .*\\build\\OrcaSlicer\.slnx?$') } @{ Name = 'the solution path follows the configuration'; Args = @('-s', '--config', 'debug') - Match = @('^ Solution .*\\build-dbg\\OrcaSlicer\.sln$') } + Match = @('^ Solution .*\\build-dbg\\OrcaSlicer\.slnx?$') } @{ Name = 'the solution line survives an install'; Args = @('-s', '-i') Contains = @(' Solution ') } # The path is resolved, not pasted onto the repository root, so it is # right whether --build-dir came absolute or with forward slashes. @{ Name = 'a moved build still prints one real path'; Args = @('-s', '--build-dir', 'out/build/x64-clang') - Match = @('^ Solution [A-Za-z]:\\[^/]+\\OrcaSlicer\.sln$') } + Match = @('^ Solution [A-Za-z]:\\[^/]+\\OrcaSlicer\.slnx?$') } @{ Name = 'an absolute --build-dir is not glued onto the repo root'; Args = @('-s', '--build-dir', 'D:\tree') - Contains = @('Solution D:\tree\OrcaSlicer.sln') } + Match = @('^ Solution D:\\tree\\OrcaSlicer\.slnx?$') } ) function Invoke-BuildScript {