Update translations. Code dedup and cleanup

This commit is contained in:
Lam Wei Lun
2026-09-11 13:05:39 +08:00
parent 42bee12481
commit 7c2991d00c
47 changed files with 2559 additions and 1180 deletions
+6
View File
@@ -49,6 +49,12 @@ jobs:
cmakeVersion: "~4.3.0" # use most recent 4.3.x version cmakeVersion: "~4.3.0" # use most recent 4.3.x version
useLocalCache: true useLocalCache: true
useCloudCache: true useCloudCache: true
- name: Run web dialog JS tests
timeout-minutes: 5
shell: bash
run: |
node resources/web/js/fuzzy-search.test.js
node resources/web/dialog/SpeedDial/speeddial.test.js
- name: Unpackage and Run Unit Tests - name: Unpackage and Run Unit Tests
timeout-minutes: 20 timeout-minutes: 20
shell: bash shell: bash
+57 -19
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -2293,13 +2293,6 @@ msgstr ""
msgid "%s has been removed." msgid "%s has been removed."
msgstr "" msgstr ""
msgid "Select the language"
msgstr ""
msgid "Language"
msgstr ""
#, possible-c-format, possible-boost-format #, possible-c-format, possible-boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "" msgstr ""
@@ -2327,6 +2320,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "" msgstr ""
msgid "Plugins refreshed."
msgstr ""
#, possible-c-format, possible-boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "" msgstr ""
@@ -4322,6 +4328,12 @@ msgid ""
"Error message: %1%" "Error message: %1%"
msgstr "" msgstr ""
#, possible-boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, possible-boost-format #, possible-boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "" msgstr ""
@@ -6129,6 +6141,9 @@ msgstr ""
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
msgid "Open speed dial..."
msgstr ""
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
@@ -8292,7 +8307,6 @@ msgstr ""
msgid "Language selection" msgid "Language selection"
msgstr "" msgstr ""
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "" msgstr ""
@@ -8386,6 +8400,9 @@ msgstr ""
msgid "General" msgid "General"
msgstr "" msgstr ""
msgid "Language"
msgstr ""
msgid "Metric" msgid "Metric"
msgstr "" msgstr ""
@@ -8568,6 +8585,12 @@ msgstr ""
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "" msgstr ""
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "" msgstr ""
@@ -9232,6 +9255,9 @@ msgstr ""
msgid "Detach from parent" msgid "Detach from parent"
msgstr "" msgstr ""
msgid "Save without parent"
msgstr ""
msgid "Unique preset" msgid "Unique preset"
msgstr "" msgstr ""
@@ -10983,6 +11009,16 @@ msgstr ""
msgid "Switch table page" msgid "Switch table page"
msgstr "" msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr ""
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "" msgstr ""
@@ -11138,13 +11174,6 @@ msgstr ""
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "" msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr ""
msgid "Open actions speed dial"
msgstr ""
msgid "Plater" msgid "Plater"
msgstr "" msgstr ""
@@ -11403,7 +11432,7 @@ msgstr ""
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "" msgstr ""
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
@@ -11412,6 +11441,12 @@ msgstr ""
msgid " updated to " msgid " updated to "
msgstr "" msgstr ""
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr ""
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "" msgstr ""
@@ -12754,6 +12789,9 @@ msgstr ""
msgid "Concentric" msgid "Concentric"
msgstr "" msgstr ""
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "" msgstr ""
@@ -12823,7 +12861,7 @@ msgid "Top surface fill order"
msgstr "" msgstr ""
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
@@ -12832,7 +12870,7 @@ msgid "Bottom surface fill order"
msgstr "" msgstr ""
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
+86 -30
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2025-03-15 10:55+0100\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -2522,13 +2522,6 @@ msgstr "Hi ha una actualització disponible. Obriu el quadre de diàleg del paqu
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s s'ha eliminat." msgstr "%s s'ha eliminat."
msgid "Select the language"
msgstr "Seleccioneu l'idioma"
msgid "Language"
msgstr "Idioma"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2566,6 +2559,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "No s'ha pogut obrir el quadre de diàleg de Connectors (error desconegut)." msgstr "No s'ha pogut obrir el quadre de diàleg de Connectors (error desconegut)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal de connectors" msgstr "Terminal de connectors"
@@ -4687,6 +4693,12 @@ msgstr ""
"Error en copiar el codi-G temporal al codi-G de sortida. Potser la targeta SD està bloquejada contra escriptura?\n" "Error en copiar el codi-G temporal al codi-G de sortida. Potser la targeta SD està bloquejada contra escriptura?\n"
"Missatge d'error: %1%" "Missatge d'error: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Error en copiar el codi-G temporal al codi-G de sortida. Hi pot haver un problema amb el dispositiu de destinació, intenteu exportar novament o utilitzeu un dispositiu diferent. El codi-G de sortida malmès és a %1%.tmp." msgstr "Error en copiar el codi-G temporal al codi-G de sortida. Hi pot haver un problema amb el dispositiu de destinació, intenteu exportar novament o utilitzeu un dispositiu diferent. El codi-G de sortida malmès és a %1%.tmp."
@@ -6599,6 +6611,9 @@ msgstr "Mostrar el contorn al voltant de l'objecte seleccionat a l'escena 3D"
msgid "Preferences" msgid "Preferences"
msgstr "Preferències" msgstr "Preferències"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8922,7 +8937,6 @@ msgstr "Voleu continuar?"
msgid "Language selection" msgid "Language selection"
msgstr "Selecció d'idiomes" msgstr "Selecció d'idiomes"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Àsia-Pacífic" msgstr "Àsia-Pacífic"
@@ -9028,6 +9042,9 @@ msgstr "Ruta de la Instància Actual: "
msgid "General" msgid "General"
msgstr "General" msgstr "General"
msgid "Language"
msgstr "Idioma"
msgid "Metric" msgid "Metric"
msgstr "Mètric" msgstr "Mètric"
@@ -9236,6 +9253,12 @@ msgstr "Gestió multidispositiu"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Amb aquesta opció habilitada, podeu enviar una tasca a diversos dispositius alhora i gestionar múltiples dispositius." msgstr "Amb aquesta opció habilitada, podeu enviar una tasca a diversos dispositius alhora i gestionar múltiples dispositius."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Finestra emergent per seleccionar el mode d'agrupació de filaments" msgstr "Finestra emergent per seleccionar el mode d'agrupació de filaments"
@@ -9989,6 +10012,9 @@ msgstr "Copia en aquest perfil tots els valors heretats del perfil pare i elimin
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Desvincula del pare" msgstr "Desvincula del pare"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Perfil únic" msgstr "Perfil únic"
@@ -11912,6 +11938,17 @@ msgstr "Mostrar/Amagar quadre de diàleg Configuració de Dispositius 3Dconnexio
msgid "Switch table page" msgid "Switch table page"
msgstr "Canviar de pàgina de taula" msgstr "Canviar de pàgina de taula"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espai"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Mostrar la llista de dreceres de teclat" msgstr "Mostrar la llista de dreceres de teclat"
@@ -12077,15 +12114,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Canviar entre Preparar/Previsualitzar" msgstr "Canviar entre Preparar/Previsualitzar"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espai"
# AI Translated
msgid "Open actions speed dial"
msgstr "Obrir el marcatge ràpid d'accions"
msgid "Plater" msgid "Plater"
msgstr "Plataforma" msgstr "Plataforma"
@@ -12359,8 +12387,8 @@ msgstr "Reparació cancel·lada"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "La còpia del fitxer %1% a %2% ha fallat: %3%" msgstr "La còpia del fitxer %1% a %2% ha fallat: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Cal comprovar els canvis no desats abans de les actualitzacions de configuració." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Paquet de configuració: " msgstr "Paquet de configuració: "
@@ -12368,6 +12396,12 @@ msgstr "Paquet de configuració: "
msgid " updated to " msgid " updated to "
msgstr " actualitzat a " msgstr " actualitzat a "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Cal comprovar els canvis no desats abans de les actualitzacions de configuració."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Obre el fitxer de Codi-G:" msgstr "Obre el fitxer de Codi-G:"
@@ -13991,6 +14025,9 @@ msgstr "Alineat Rectilini"
msgid "Concentric" msgid "Concentric"
msgstr "Concèntric" msgstr "Concèntric"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Corba de Hilbert" msgstr "Corba de Hilbert"
@@ -14080,29 +14117,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Ordre d'emplenament de la superfície superior" msgstr "Ordre d'emplenament de la superfície superior"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direcció en què s'omplen les superfícies superiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n"
"Cap a fora comença al centre de la superfície, de manera que l'excés de material es desplaça cap a la vora, on és menys visible. Cap a dins comença a la vora i acaba amb les corbes tancades del centre.\n"
"Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Ordre d'emplenament de la superfície inferior" msgstr "Ordre d'emplenament de la superfície inferior"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direcció en què s'omplen les superfícies inferiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n"
"Cap a dins comença cada superfície amb les corbes exteriors més amples, cosa que millora l'adherència de la capa inicial en plaques on les corbes tancades del centre poden no adherir-se. Cap a fora comença al centre i desplaça l'excés de material cap a la vora.\n"
"Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Patró de farciment sòlid intern" msgstr "Patró de farciment sòlid intern"
@@ -22204,6 +22233,33 @@ msgstr ""
"Evitar la deformació( warping )\n" "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ó?" "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ó?"
#~ msgid "Select the language"
#~ msgstr "Seleccioneu l'idioma"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Obrir el marcatge ràpid d'accions"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direcció en què s'omplen les superfícies superiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n"
#~ "Cap a fora comença al centre de la superfície, de manera que l'excés de material es desplaça cap a la vora, on és menys visible. Cap a dins comença a la vora i acaba amb les corbes tancades del centre.\n"
#~ "Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direcció en què s'omplen les superfícies inferiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n"
#~ "Cap a dins comença cada superfície amb les corbes exteriors més amples, cosa que millora l'adherència de la capa inicial en plaques on les corbes tancades del centre poden no adherir-se. Cap a fora comença al centre i desplaça l'excés de material cap a la vora.\n"
#~ "Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Jakub Hencl\n" "Last-Translator: Jakub Hencl\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2482,13 +2482,6 @@ msgstr "Je k dispozici aktualizace. Otevřete dialog balíčku předvoleb a prov
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s bylo odstraněno." msgstr "%s bylo odstraněno."
msgid "Select the language"
msgstr "Zvolte jazyk"
msgid "Language"
msgstr "Jazyk"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2526,6 +2519,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Nepodařilo se otevřít dialog Pluginy (neznámá chyba)." msgstr "Nepodařilo se otevřít dialog Pluginy (neznámá chyba)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminál pluginu" msgstr "Terminál pluginu"
@@ -4647,6 +4653,12 @@ msgstr ""
"Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Možná je SD karta uzamčená pro zápis?\n" "Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Možná je SD karta uzamčená pro zápis?\n"
"Chybová zpráva: %1%" "Chybová zpráva: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Může být problém s cílovým zařízením, zkuste prosím exportovat znovu nebo použijte jiné zařízení. Poškozený výstupní G-kód je na %1%.tmp." msgstr "Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Může být problém s cílovým zařízením, zkuste prosím exportovat znovu nebo použijte jiné zařízení. Poškozený výstupní G-kód je na %1%.tmp."
@@ -6564,6 +6576,9 @@ msgstr "Zobrazit obrys kolem vybraného objektu ve 3D scéně."
msgid "Preferences" msgid "Preferences"
msgstr "Předvolby" msgstr "Předvolby"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8880,7 +8895,6 @@ msgstr "Chcete pokračovat?"
msgid "Language selection" msgid "Language selection"
msgstr "Výběr jazyka" msgstr "Výběr jazyka"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asie-Pacifik" msgstr "Asie-Pacifik"
@@ -8986,6 +9000,9 @@ msgstr "Cesta k aktuální instanci: "
msgid "General" msgid "General"
msgstr "Obecné" msgstr "Obecné"
msgid "Language"
msgstr "Jazyk"
msgid "Metric" msgid "Metric"
msgstr "Metrika" msgstr "Metrika"
@@ -9190,6 +9207,12 @@ msgstr "Správa více zařízení"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Pokud je tato volba povolena, můžete odeslat úlohu na více zařízení současně a spravovat více zařízení." msgstr "Pokud je tato volba povolena, můžete odeslat úlohu na více zařízení současně a spravovat více zařízení."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Zobrazit dialog pro výběr režimu seskupení filamentů" msgstr "Zobrazit dialog pro výběr režimu seskupení filamentů"
@@ -9938,6 +9961,9 @@ msgstr "Zkopíruje do této předvolby všechny hodnoty zděděné z nadřazené
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Oddělit od nadřazeného" msgstr "Oddělit od nadřazeného"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Samostatná předvolba" msgstr "Samostatná předvolba"
@@ -11899,6 +11925,17 @@ msgstr "Zobrazit/Skrýt dialog nastavení zařízení 3Dconnexion"
msgid "Switch table page" msgid "Switch table page"
msgstr "Přepnout stránku tabulky" msgstr "Přepnout stránku tabulky"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Mezerník"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Zobrazit seznam klávesových zkratek" msgstr "Zobrazit seznam klávesových zkratek"
@@ -12061,15 +12098,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Přepnout mezi Přípravou/Náhledem" msgstr "Přepnout mezi Přípravou/Náhledem"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Mezerník"
# AI Translated
msgid "Open actions speed dial"
msgstr "Otevřít rychlou nabídku akcí"
msgid "Plater" msgid "Plater"
msgstr "Deska" msgstr "Deska"
@@ -12343,8 +12371,8 @@ msgstr "Oprava zrušena"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Kopírování souboru %1% do %2% selhalo: %3%" msgstr "Kopírování souboru %1% do %2% selhalo: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Nejprve je třeba zkontrolovat neuložené změny před aktualizací konfigurace." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Balíček konfigurace: " msgstr "Balíček konfigurace: "
@@ -12352,6 +12380,12 @@ msgstr "Balíček konfigurace: "
msgid " updated to " msgid " updated to "
msgstr " aktualizováno na " msgstr " aktualizováno na "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Nejprve je třeba zkontrolovat neuložené změny před aktualizací konfigurace."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Otevřít G-code soubor:" msgstr "Otevřít G-code soubor:"
@@ -13956,6 +13990,9 @@ msgstr "Zarovnaná pravoúhlá"
msgid "Concentric" msgid "Concentric"
msgstr "Koncentrický" msgstr "Koncentrický"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbertova křivka" msgstr "Hilbertova křivka"
@@ -14045,29 +14082,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Pořadí vyplňování horního povrchu" msgstr "Pořadí vyplňování horního povrchu"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Směr, ve kterém jsou horní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n"
"Ven začíná ve středu povrchu, takže je přebytečný materiál vytlačen k okraji, kde je nejméně viditelný. Dovnitř začíná u okraje a končí těsnými oblouky ve středu.\n"
"Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Pořadí vyplňování spodního povrchu" msgstr "Pořadí vyplňování spodního povrchu"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Směr, ve kterém jsou spodní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n"
"Dovnitř začíná každý povrch širšími vnějšími oblouky, což zlepšuje přilnavost první vrstvy na podložkách, kde se těsné oblouky ve středu nemusí přichytit. Ven začíná ve středu a přebytečný materiál vytlačuje k okraji.\n"
"Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Vzor vnitřní plné výplně" msgstr "Vzor vnitřní plné výplně"
@@ -22185,6 +22214,33 @@ msgstr ""
"Zamezte kroucení\n" "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í?" "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í?"
#~ msgid "Select the language"
#~ msgstr "Zvolte jazyk"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Otevřít rychlou nabídku akcí"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Směr, ve kterém jsou horní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n"
#~ "Ven začíná ve středu povrchu, takže je přebytečný materiál vytlačen k okraji, kde je nejméně viditelný. Dovnitř začíná u okraje a končí těsnými oblouky ve středu.\n"
#~ "Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Směr, ve kterém jsou spodní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n"
#~ "Dovnitř začíná každý povrch širšími vnějšími oblouky, což zlepšuje přilnavost první vrstvy na podložkách, kde se těsné oblouky ve středu nemusí přichytit. Ven začíná ve středu a přebytečný materiál vytlačuje k okraji.\n"
#~ "Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Nativní živý náhled ve Waylandu vyžaduje video sink GStreamer GTK. Nainstalujte prosím plugin gtksink pro GStreamer a poté restartujte OrcaSlicer."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n" "Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2430,13 +2430,6 @@ msgstr "Es ist ein Update verfügbar. Öffnen Sie den Profilbündel-Dialog, um e
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s wurde entfernt." msgstr "%s wurde entfernt."
msgid "Select the language"
msgstr "Sprache wählen"
msgid "Language"
msgstr "Sprache"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2474,6 +2467,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Öffnen des Plugins-Dialogs fehlgeschlagen (unbekannter Fehler)." msgstr "Öffnen des Plugins-Dialogs fehlgeschlagen (unbekannter Fehler)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Plugin-Terminal" msgstr "Plugin-Terminal"
@@ -4554,6 +4560,12 @@ msgstr ""
"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Ist die SD-Karte schreibgeschützt?\n" "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Ist die SD-Karte schreibgeschützt?\n"
"Fehlermeldung: %1%" "Fehlermeldung: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Es könnte ein Problem mit dem Zielgerät geben. Versuchen Sie es erneut oder verwenden Sie ein anderes Gerät. Der beschädigte Ausgabe-G-Code befindet sich in %1%.tmp." msgstr "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Es könnte ein Problem mit dem Zielgerät geben. Versuchen Sie es erneut oder verwenden Sie ein anderes Gerät. Der beschädigte Ausgabe-G-Code befindet sich in %1%.tmp."
@@ -6452,6 +6464,9 @@ msgstr "Kontur um das ausgewählte Objekt in der 3D-Szene anzeigen."
msgid "Preferences" msgid "Preferences"
msgstr "Einstellungen" msgstr "Einstellungen"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8752,7 +8767,6 @@ msgstr "Möchten Sie fortfahren?"
msgid "Language selection" msgid "Language selection"
msgstr "Sprachauswahl" msgstr "Sprachauswahl"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asien-Pazifik" msgstr "Asien-Pazifik"
@@ -8857,6 +8871,9 @@ msgstr "Aktueller Instanzpfad: "
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
msgid "Language"
msgstr "Sprache"
msgid "Metric" msgid "Metric"
msgstr "Metrisch" msgstr "Metrisch"
@@ -9061,6 +9078,12 @@ msgstr "Multi-Geräte-Verwaltung"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Wenn diese Option aktiviert ist, können Sie eine Aufgabe gleichzeitig an mehrere Geräte senden und mehrere Geräte verwalten." msgstr "Wenn diese Option aktiviert ist, können Sie eine Aufgabe gleichzeitig an mehrere Geräte senden und mehrere Geräte verwalten."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Popup zum Auswählen des Filament-Gruppierungsmodus" msgstr "Popup zum Auswählen des Filament-Gruppierungsmodus"
@@ -9771,6 +9794,9 @@ msgstr "Kopiert alle vom übergeordneten Profil geerbten Werte in dieses Profil
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Vom übergeordneten Element trennen" msgstr "Vom übergeordneten Element trennen"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Eigenständiges Profil" msgstr "Eigenständiges Profil"
@@ -11655,6 +11681,17 @@ msgstr "Dialogfeld für 3Dconnexion Geräteeinstellungen anzeigen/ausblenden"
msgid "Switch table page" msgid "Switch table page"
msgstr "Seitenwechsel" msgstr "Seitenwechsel"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Leertaste"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Liste der Tastaturkürzel anzeigen" msgstr "Liste der Tastaturkürzel anzeigen"
@@ -11815,15 +11852,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Zwischen Vorbereiten/ Vorschau wechseln" msgstr "Zwischen Vorbereiten/ Vorschau wechseln"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Leertaste"
# AI Translated
msgid "Open actions speed dial"
msgstr "Aktions-Schnellwahl öffnen"
msgid "Plater" msgid "Plater"
msgstr "Druckplatte" msgstr "Druckplatte"
@@ -12090,8 +12118,8 @@ msgstr "Reparatur abgebrochen"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen: %3%" msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Vor der Aktualisierung der Konfiguration müssen die nicht gespeicherten Änderungen überprüft werden." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Konfigurationspaket:" msgstr "Konfigurationspaket:"
@@ -12099,6 +12127,12 @@ msgstr "Konfigurationspaket:"
msgid " updated to " msgid " updated to "
msgstr " aktualisiert auf " msgstr " aktualisiert auf "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Vor der Aktualisierung der Konfiguration müssen die nicht gespeicherten Änderungen überprüft werden."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Öffne G-Code-Datei:" msgstr "Öffne G-Code-Datei:"
@@ -13665,6 +13699,9 @@ msgstr "Geradlinig ausgerichtet"
msgid "Concentric" msgid "Concentric"
msgstr "Konzentrisch" msgstr "Konzentrisch"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbert-Kurve" msgstr "Hilbert-Kurve"
@@ -13754,29 +13791,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Füllreihenfolge der oberen Oberfläche" msgstr "Füllreihenfolge der oberen Oberfläche"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Richtung, in der obere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n"
"Nach außen beginnt in der Mitte der Oberfläche, sodass überschüssiges Material zum Rand geschoben wird, wo es am wenigsten sichtbar ist. Nach innen beginnt am Rand und endet mit den engen Kurven in der Mitte.\n"
"Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Füllreihenfolge der unteren Oberfläche" msgstr "Füllreihenfolge der unteren Oberfläche"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Richtung, in der untere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n"
"Nach innen beginnt jede Oberfläche mit den breiteren äußeren Kurven, was die Haftung der ersten Schicht auf Druckbetten verbessert, auf denen die engen Kurven in der Mitte möglicherweise nicht haften. Nach außen beginnt in der Mitte und schiebt überschüssiges Material zum Rand.\n"
"Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Muster für das interne feste Füllmuster" msgstr "Muster für das interne feste Füllmuster"
@@ -21605,6 +21634,33 @@ msgstr ""
"Verwerfungen vermeiden\n" "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?" "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 "Select the language"
#~ msgstr "Sprache wählen"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Aktions-Schnellwahl öffnen"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Richtung, in der obere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n"
#~ "Nach außen beginnt in der Mitte der Oberfläche, sodass überschüssiges Material zum Rand geschoben wird, wo es am wenigsten sichtbar ist. Nach innen beginnt am Rand und endet mit den engen Kurven in der Mitte.\n"
#~ "Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Richtung, in der untere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n"
#~ "Nach innen beginnt jede Oberfläche mit den breiteren äußeren Kurven, was die Haftung der ersten Schicht auf Druckbetten verbessert, auf denen die engen Kurven in der Mitte möglicherweise nicht haften. Nach außen beginnt in der Mitte und schiebt überschüssiges Material zum Rand.\n"
#~ "Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Native Wayland Liveview erfordert das GStreamer GTK Video Sink. Bitte installieren Sie das gtksink-Plugin für GStreamer und starten Sie OrcaSlicer neu."
+57 -19
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-06-17 15:44-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n" "Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2289,13 +2289,6 @@ msgstr ""
msgid "%s has been removed." msgid "%s has been removed."
msgstr "" msgstr ""
msgid "Select the language"
msgstr ""
msgid "Language"
msgstr ""
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "" msgstr ""
@@ -2323,6 +2316,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "" msgstr ""
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "" msgstr ""
@@ -4318,6 +4324,12 @@ msgid ""
"Error message: %1%" "Error message: %1%"
msgstr "" msgstr ""
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "" msgstr ""
@@ -6125,6 +6137,9 @@ msgstr ""
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
msgid "Open speed dial..."
msgstr ""
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
@@ -8288,7 +8303,6 @@ msgstr ""
msgid "Language selection" msgid "Language selection"
msgstr "" msgstr ""
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "" msgstr ""
@@ -8382,6 +8396,9 @@ msgstr ""
msgid "General" msgid "General"
msgstr "" msgstr ""
msgid "Language"
msgstr ""
msgid "Metric" msgid "Metric"
msgstr "" msgstr ""
@@ -8564,6 +8581,12 @@ msgstr ""
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "" msgstr ""
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "" msgstr ""
@@ -9228,6 +9251,9 @@ msgstr ""
msgid "Detach from parent" msgid "Detach from parent"
msgstr "" msgstr ""
msgid "Save without parent"
msgstr ""
msgid "Unique preset" msgid "Unique preset"
msgstr "" msgstr ""
@@ -10979,6 +11005,16 @@ msgstr ""
msgid "Switch table page" msgid "Switch table page"
msgstr "" msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr ""
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "" msgstr ""
@@ -11134,13 +11170,6 @@ msgstr ""
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "" msgstr ""
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr ""
msgid "Open actions speed dial"
msgstr ""
msgid "Plater" msgid "Plater"
msgstr "" msgstr ""
@@ -11399,7 +11428,7 @@ msgstr ""
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "" msgstr ""
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
@@ -11408,6 +11437,12 @@ msgstr ""
msgid " updated to " msgid " updated to "
msgstr "" msgstr ""
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr ""
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "" msgstr ""
@@ -12750,6 +12785,9 @@ msgstr ""
msgid "Concentric" msgid "Concentric"
msgstr "" msgstr ""
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "" msgstr ""
@@ -12819,7 +12857,7 @@ msgid "Top surface fill order"
msgstr "" msgstr ""
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
@@ -12828,7 +12866,7 @@ msgid "Bottom surface fill order"
msgstr "" msgstr ""
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
+82 -26
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Ian A. Bassi <>\n" "Last-Translator: Ian A. Bassi <>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2356,13 +2356,6 @@ msgstr "Hay una actualización disponible. Abra el cuadro de diálogo del paquet
msgid "%s has been removed." msgid "%s has been removed."
msgstr "Se ha eliminado %s." msgstr "Se ha eliminado %s."
msgid "Select the language"
msgstr "Seleccionar el idioma"
msgid "Language"
msgstr "Idioma"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "No se pudo cambiar Orca Slicer al idioma %s." msgstr "No se pudo cambiar Orca Slicer al idioma %s."
@@ -2394,6 +2387,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "No se pudo abrir el cuadro de diálogo de plugins (error desconocido)." msgstr "No se pudo abrir el cuadro de diálogo de plugins (error desconocido)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal de plugins" msgstr "Terminal de plugins"
@@ -4424,6 +4430,12 @@ msgstr ""
"Error al copiar el G-Code temporal en el G-Code de salida. ¿Quizás la tarjeta SD está protegida contra escritura?\n" "Error al copiar el G-Code temporal en el G-Code de salida. ¿Quizás la tarjeta SD está protegida contra escritura?\n"
"Mensaje de error: %1%" "Mensaje de error: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "La copia del G-Code temporal al G-Code de salida ha fallado. Puede haber un problema con el dispositivo de destino, intenta exportar nuevamente o usa un dispositivo diferente. El G-Code de salida dañado está en %1%.tmp." msgstr "La copia del G-Code temporal al G-Code de salida ha fallado. Puede haber un problema con el dispositivo de destino, intenta exportar nuevamente o usa un dispositivo diferente. El G-Code de salida dañado está en %1%.tmp."
@@ -6307,6 +6319,9 @@ msgstr "Mostrar el contorno alrededor del objeto seleccionado en la escena 3D."
msgid "Preferences" msgid "Preferences"
msgstr "Preferencias" msgstr "Preferencias"
msgid "Open speed dial..."
msgstr ""
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
msgstr "Edición" msgstr "Edición"
@@ -8527,7 +8542,6 @@ msgstr "¿Quieres continuar?"
msgid "Language selection" msgid "Language selection"
msgstr "Selección de idiomas" msgstr "Selección de idiomas"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asia-Pacífico" msgstr "Asia-Pacífico"
@@ -8632,6 +8646,9 @@ msgstr "Ruta de Instancia Actual: "
msgid "General" msgid "General"
msgstr "General" msgstr "General"
msgid "Language"
msgstr "Idioma"
msgid "Metric" msgid "Metric"
msgstr "Métrico" msgstr "Métrico"
@@ -8828,6 +8845,12 @@ msgstr "Gestión multidispositivo"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Con esta opción activada, puede enviar una tarea a varios dispositivos al mismo tiempo y gestionar varios dispositivos." msgstr "Con esta opción activada, puede enviar una tarea a varios dispositivos al mismo tiempo y gestionar varios dispositivos."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Ventana emergente para seleccionar el modo de agrupación de filamentos" msgstr "Ventana emergente para seleccionar el modo de agrupación de filamentos"
@@ -9528,6 +9551,9 @@ msgstr "Copia en este perfil todos los valores heredados del perfil padre y elim
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Separar del elemento padre" msgstr "Separar del elemento padre"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Perfil único" msgstr "Perfil único"
@@ -11357,6 +11383,16 @@ msgstr "Mostrar/Ocultar el diálogo de ajustes de los dispositivos 3Dconnexion"
msgid "Switch table page" msgid "Switch table page"
msgstr "Cambiar de página de tabla" msgstr "Cambiar de página de tabla"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espacio"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Muestra lista de atajos de teclado" msgstr "Muestra lista de atajos de teclado"
@@ -11512,13 +11548,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Cambiar entre Preparar/Previsualizar" msgstr "Cambiar entre Preparar/Previsualizar"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espacio"
msgid "Open actions speed dial"
msgstr "Abrir el menú rápido de acciones"
msgid "Plater" msgid "Plater"
msgstr "Cama" msgstr "Cama"
@@ -11779,8 +11808,8 @@ msgstr "Reparación cancelada"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "La copia del archivo %1% a %2% falló: %3%" msgstr "La copia del archivo %1% a %2% falló: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Es necesario comprobar los cambios no guardados antes de actualizar la configuración." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Paquete de configuración: " msgstr "Paquete de configuración: "
@@ -11788,6 +11817,12 @@ msgstr "Paquete de configuración: "
msgid " updated to " msgid " updated to "
msgstr " Actualizado a " msgstr " Actualizado a "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Es necesario comprobar los cambios no guardados antes de actualizar la configuración."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Abrir archivo G-Code:" msgstr "Abrir archivo G-Code:"
@@ -13344,6 +13379,9 @@ msgstr "Rectilíneo Alineado"
msgid "Concentric" msgid "Concentric"
msgstr "Concéntrico" msgstr "Concéntrico"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Curva de Hilbert" msgstr "Curva de Hilbert"
@@ -13424,25 +13462,19 @@ msgid "Top surface fill order"
msgstr "Orden de relleno de la superficie superior" msgstr "Orden de relleno de la superficie superior"
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Dirección en la que se rellenan las superficies superiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
"Hacia afuera comienza en el centro de la superficie, de modo que cualquier exceso de material se empuja hacia el borde, donde es menos visible. Hacia adentro comienza en el borde y termina con las curvas cerradas del centro.\n"
"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Orden de relleno de la superficie inferior" msgstr "Orden de relleno de la superficie inferior"
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Dirección en la que se rellenan las superficies inferiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
"Hacia adentro comienza cada superficie con las curvas exteriores más amplias, lo que mejora la adherencia de la primera capa en las camas donde las curvas cerradas del centro pueden no adherirse. Hacia afuera comienza en el centro, empujando cualquier exceso de material hacia el borde.\n"
"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Patrón de relleno sólido interno" msgstr "Patrón de relleno sólido interno"
@@ -21148,6 +21180,30 @@ msgstr ""
"Evita la deformación\n" "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?" "¿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 "Select the language"
#~ msgstr "Seleccionar el idioma"
#~ msgid "Open actions speed dial"
#~ msgstr "Abrir el menú rápido de acciones"
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Dirección en la que se rellenan las superficies superiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
#~ "Hacia afuera comienza en el centro de la superficie, de modo que cualquier exceso de material se empuja hacia el borde, donde es menos visible. Hacia adentro comienza en el borde y termina con las curvas cerradas del centro.\n"
#~ "Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Dirección en la que se rellenan las superficies inferiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n"
#~ "Hacia adentro comienza cada superficie con las curvas exteriores más amplias, lo que mejora la adherencia de la primera capa en las camas donde las curvas cerradas del centro pueden no adherirse. Hacia afuera comienza en el centro, empujando cualquier exceso de material hacia el borde.\n"
#~ "Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+85 -29
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-07-20 13:33+0200\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n"
"Last-Translator: Manu Goiogana <mgoiogana@gmail.com>\n" "Last-Translator: Manu Goiogana <mgoiogana@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2390,13 +2390,6 @@ msgstr "Eguneratze bat dago erabilgarri. Ireki aurrezarpen-paketeen elkarrizketa
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s kendu da." msgstr "%s kendu da."
msgid "Select the language"
msgstr "Hautatu hizkuntza"
msgid "Language"
msgstr "Hizkuntza"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "Ezin izan da OrcaSlicer %s hizkuntzara aldatu." msgstr "Ezin izan da OrcaSlicer %s hizkuntzara aldatu."
@@ -2428,6 +2421,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Ezin izan da pluginen elkarrizketa-koadroa ireki (errore ezezaguna)" msgstr "Ezin izan da pluginen elkarrizketa-koadroa ireki (errore ezezaguna)"
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Plugin-terminala" msgstr "Plugin-terminala"
@@ -4470,6 +4476,12 @@ msgstr ""
"Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Agian SD txartela idazteko blokeatuta dago?\n" "Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Agian SD txartela idazteko blokeatuta dago?\n"
"Errore- mezua: %1%" "Errore- mezua: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Arazoak egon daitezke helburuko gailuarekin, saiatu berriro esportatzen edo beste gailu bat erabiltzen. Hondatutako irteerako G-code-a hemen da: %1%.tmp." msgstr "Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Arazoak egon daitezke helburuko gailuarekin, saiatu berriro esportatzen edo beste gailu bat erabiltzen. Hondatutako irteerako G-code-a hemen da: %1%.tmp."
@@ -6353,6 +6365,9 @@ msgstr "Erakutsi hautatutako objektuaren inguruko ingerada 3D eszenan."
msgid "Preferences" msgid "Preferences"
msgstr "Hobespenak" msgstr "Hobespenak"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8608,7 +8623,6 @@ msgstr "Jarraitu nahi duzu?"
msgid "Language selection" msgid "Language selection"
msgstr "Hizkuntza-hautaketa" msgstr "Hizkuntza-hautaketa"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asia-Pazifikoa" msgstr "Asia-Pazifikoa"
@@ -8713,6 +8727,9 @@ msgstr "Uneko instantziaren bide-izena: "
msgid "General" msgid "General"
msgstr "Orokorra" msgstr "Orokorra"
msgid "Language"
msgstr "Hizkuntza"
msgid "Metric" msgid "Metric"
msgstr "Metrikoa" msgstr "Metrikoa"
@@ -8909,6 +8926,12 @@ msgstr "Gailu anitzen kudeaketa"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Aukera hau gaituta, zeregin bat hainbat gailutara bidali eta hainbat gailu kudea ditzakezu aldi berean." msgstr "Aukera hau gaituta, zeregin bat hainbat gailutara bidali eta hainbat gailu kudea ditzakezu aldi berean."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Erakutsi filamentuak taldekatzeko modua hautatzeko leihoa" msgstr "Erakutsi filamentuak taldekatzeko modua hautatzeko leihoa"
@@ -9614,6 +9637,9 @@ msgstr "Aurrezarpen honetara gurasoaren balio heredatu guztiak kopiatzen ditu et
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Bereizi gurasotik" msgstr "Bereizi gurasotik"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Aurrezarpen bakarra" msgstr "Aurrezarpen bakarra"
@@ -11467,6 +11493,17 @@ msgstr "Erakutsi/Ezkutatu 3Dconnexion gailuen ezarpenen elkarrizketa-koadroa"
msgid "Switch table page" msgid "Switch table page"
msgstr "Aldatu taula-orria" msgstr "Aldatu taula-orria"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Zuriunea"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Erakutsi teklatu-lasterbideen zerrenda" msgstr "Erakutsi teklatu-lasterbideen zerrenda"
@@ -11627,14 +11664,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Aldatu Prestatu/Aurrebista artean" msgstr "Aldatu Prestatu/Aurrebista artean"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Zuriunea"
msgid "Open actions speed dial"
msgstr "Ekintzen markatze azkarra ireki"
msgid "Plater" msgid "Plater"
msgstr "Plaka-antolatzailea" msgstr "Plaka-antolatzailea"
@@ -11899,8 +11928,8 @@ msgstr "Konponketa bertan behera utzi da"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "%1% fitxategia %2% helmugara kopiatzeak huts egin du: %3%" msgstr "%1% fitxategia %2% helmugara kopiatzeak huts egin du: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Egiaztatu gorde gabeko aldaketarik dagoen konfigurazioa eguneratu aurretik." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Konfigurazio-paketea: " msgstr "Konfigurazio-paketea: "
@@ -11908,6 +11937,12 @@ msgstr "Konfigurazio-paketea: "
msgid " updated to " msgid " updated to "
msgstr " hona eguneratu da: " msgstr " hona eguneratu da: "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Egiaztatu gorde gabeko aldaketarik dagoen konfigurazioa eguneratu aurretik."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Ireki G-code fitxategia:" msgstr "Ireki G-code fitxategia:"
@@ -13477,6 +13512,9 @@ msgstr "Lerrozuzen lerrokatua"
msgid "Concentric" msgid "Concentric"
msgstr "Kontzentrikoa" msgstr "Kontzentrikoa"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbert kurba" msgstr "Hilbert kurba"
@@ -13560,28 +13598,20 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Goiko gainazala betetzeko ordena" msgstr "Goiko gainazala betetzeko ordena"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Goiko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n"
"Kanporanzkoa erdialdean hasten da, beraz, gehiegizko materiala gutxien ikusten den ertzera bultzatzen da. Barruranzkoa ertzean hasten da eta erdian kurba estuekin amaitzen da.\n"
"Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen."
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Beheko gainazala betetzeko ordena" msgstr "Beheko gainazala betetzeko ordena"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n"
"Barruranzkoa hasten da gainazal bakoitza kanpoko kurba zabalagoekin, eta horrek lehen geruzaren atxikimendua hobetzen du erdiko kurba estuak itsatsi ez daitezkeen inprimatze-plaketan. Kanporanzkoa erdialdean hasten da, gehiegizko materiala ertzera bultzatuz.\n"
"Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen."
# AI Translated # AI Translated
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
@@ -21337,6 +21367,32 @@ msgstr ""
"Saihestu okertzea\n" "Saihestu okertzea\n"
"Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?"
#~ msgid "Select the language"
#~ msgstr "Hautatu hizkuntza"
#~ msgid "Open actions speed dial"
#~ msgstr "Ekintzen markatze azkarra ireki"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Goiko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n"
#~ "Kanporanzkoa erdialdean hasten da, beraz, gehiegizko materiala gutxien ikusten den ertzera bultzatzen da. Barruranzkoa ertzean hasten da eta erdian kurba estuekin amaitzen da.\n"
#~ "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n"
#~ "Barruranzkoa hasten da gainazal bakoitza kanpoko kurba zabalagoekin, eta horrek lehen geruzaren atxikimendua hobetzen du erdiko kurba estuak itsatsi ez daitezkeen inprimatze-plaketan. Kanporanzkoa erdialdean hasten da, gehiegizko materiala ertzera bultzatuz.\n"
#~ "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Waylanden jatorrizko zuzeneko ikuspegiak GStreamer GTK bideo-hustubidea behar du. Instalatu GStreamerrerako gtksink plugina eta berrabiarazi OrcaSlicer."
+86 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Guislain Cyril, Thomas Lété\n" "Language-Team: Guislain Cyril, Thomas Lété\n"
@@ -2414,13 +2414,6 @@ msgstr "Une mise à jour est disponible. Ouvrez la boîte de dialogue du paquet
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s a été supprimé." msgstr "%s a été supprimé."
msgid "Select the language"
msgstr "Sélectionner la langue"
msgid "Language"
msgstr "Langue"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "Le passage d’Orca Slicer à la langue %s a échoué." msgstr "Le passage d’Orca Slicer à la langue %s a échoué."
@@ -2455,6 +2448,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Échec de l'ouverture de la boîte de dialogue des plugins (erreur inconnue)." msgstr "Échec de l'ouverture de la boîte de dialogue des plugins (erreur inconnue)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal des plugins" msgstr "Terminal des plugins"
@@ -4507,6 +4513,12 @@ msgstr ""
"La copie du G-code temporaire vers le G-code de sortie a échoué. La carte SD est peut-être bloquée en écriture ?\n" "La copie du G-code temporaire vers le G-code de sortie a échoué. La carte SD est peut-être bloquée en écriture ?\n"
"Message d’erreur : %1%" "Message d’erreur : %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué. Il se peut qu’il y ait un problème avec le dispositif cible, veuillez essayer d’exporter à nouveau ou d’utiliser un autre périphérique. Le G-code de sortie corrompu se trouve dans %1%.tmp." msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué. Il se peut qu’il y ait un problème avec le dispositif cible, veuillez essayer d’exporter à nouveau ou d’utiliser un autre périphérique. Le G-code de sortie corrompu se trouve dans %1%.tmp."
@@ -6401,6 +6413,9 @@ msgstr "Afficher le tracé contour de l’objet sélectionné dans la scène 3D.
msgid "Preferences" msgid "Preferences"
msgstr "Préférences" msgstr "Préférences"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8676,7 +8691,6 @@ msgstr "Voulez-vous continuer ?"
msgid "Language selection" msgid "Language selection"
msgstr "Sélection de la langue" msgstr "Sélection de la langue"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asie-Pacifique" msgstr "Asie-Pacifique"
@@ -8781,6 +8795,9 @@ msgstr "Chemin d’accès à l’instance courante : "
msgid "General" msgid "General"
msgstr "Général" msgstr "Général"
msgid "Language"
msgstr "Langue"
msgid "Metric" msgid "Metric"
msgstr "Métrique" msgstr "Métrique"
@@ -8977,6 +8994,12 @@ msgstr "Gestion multi appareils"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Si cette option est activée, vous pouvez envoyer une tâche à plusieurs appareils en même temps et gérer plusieurs appareils." msgstr "Si cette option est activée, vous pouvez envoyer une tâche à plusieurs appareils en même temps et gérer plusieurs appareils."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Fenêtre contextuelle pour sélectionner le mode de regroupement des filaments" msgstr "Fenêtre contextuelle pour sélectionner le mode de regroupement des filaments"
@@ -9685,6 +9708,9 @@ msgstr "Copie dans ce préréglage toutes les valeurs héritées du préréglage
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Détacher du parent" msgstr "Détacher du parent"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Préréglage unique" msgstr "Préréglage unique"
@@ -11563,6 +11589,17 @@ msgstr "Afficher/Masquer la boîte de dialogue des paramètres des périphériqu
msgid "Switch table page" msgid "Switch table page"
msgstr "Page du tableau de commutation" msgstr "Page du tableau de commutation"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espace"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Afficher la liste des raccourcis clavier" msgstr "Afficher la liste des raccourcis clavier"
@@ -11723,15 +11760,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Basculer entre Préparer/Aperçu" msgstr "Basculer entre Préparer/Aperçu"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espace"
# AI Translated
msgid "Open actions speed dial"
msgstr "Ouvrir le menu d'actions rapides"
msgid "Plater" msgid "Plater"
msgstr "Plateau" msgstr "Plateau"
@@ -11997,8 +12025,8 @@ msgstr "Réparation annulée"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Échec de la copie du fichier %1% vers %2% : %3%" msgstr "Échec de la copie du fichier %1% vers %2% : %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Besoin de vérifier les modifications non enregistrées avant les mises à jour de configuration." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Paquet de configuration : " msgstr "Paquet de configuration : "
@@ -12006,6 +12034,12 @@ msgstr "Paquet de configuration : "
msgid " updated to " msgid " updated to "
msgstr " mis à jour en " msgstr " mis à jour en "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Besoin de vérifier les modifications non enregistrées avant les mises à jour de configuration."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Ouvrir un fichier G-code :" msgstr "Ouvrir un fichier G-code :"
@@ -13571,6 +13605,9 @@ msgstr "Rectiligne Aligné"
msgid "Concentric" msgid "Concentric"
msgstr "Concentrique" msgstr "Concentrique"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Courbe de Hilbert" msgstr "Courbe de Hilbert"
@@ -13660,29 +13697,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Ordre de remplissage de la surface supérieure" msgstr "Ordre de remplissage de la surface supérieure"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direction dans laquelle les surfaces supérieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n"
"Vers l'extérieur commence au centre de la surface, de sorte que tout excès de matière est poussé vers le bord où il est le moins visible. Vers l'intérieur commence au bord et se termine par les courbes serrées au centre.\n"
"Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Ordre de remplissage de la surface inférieure" msgstr "Ordre de remplissage de la surface inférieure"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direction dans laquelle les surfaces inférieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n"
"Vers l'intérieur commence chaque surface par les courbes extérieures plus larges, ce qui améliore l'adhérence de la première couche sur les plateaux où les courbes serrées au centre peuvent ne pas adhérer. Vers l'extérieur commence au centre, poussant tout excès de matière vers le bord.\n"
"Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Motif de remplissage plein interne" msgstr "Motif de remplissage plein interne"
@@ -21495,6 +21524,33 @@ msgstr ""
"Éviter la déformation\n" "É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?" "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 "Select the language"
#~ msgstr "Sélectionner la langue"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Ouvrir le menu d'actions rapides"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direction dans laquelle les surfaces supérieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n"
#~ "Vers l'extérieur commence au centre de la surface, de sorte que tout excès de matière est poussé vers le bord où il est le moins visible. Vers l'intérieur commence au bord et se termine par les courbes serrées au centre.\n"
#~ "Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direction dans laquelle les surfaces inférieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n"
#~ "Vers l'intérieur commence chaque surface par les courbes extérieures plus larges, ce qui améliore l'adhérence de la première couche sur les plateaux où les courbes serrées au centre peuvent ne pas adhérer. Vers l'extérieur commence au centre, poussant tout excès de matière vers le bord.\n"
#~ "Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"Language: hu\n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -2460,13 +2460,6 @@ msgstr "Frissítés érhető el. Nyisd meg a beállításcsomag párbeszédablak
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s eltávolítva." msgstr "%s eltávolítva."
msgid "Select the language"
msgstr "Válaszd ki a nyelvet"
msgid "Language"
msgstr "Nyelv"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2504,6 +2497,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Nem sikerült megnyitni a Bővítmények párbeszédablakot (ismeretlen hiba)." msgstr "Nem sikerült megnyitni a Bővítmények párbeszédablakot (ismeretlen hiba)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Bővítményterminál" msgstr "Bővítményterminál"
@@ -4601,6 +4607,12 @@ msgstr ""
"Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Lehet, hogy az SD-kártya írásvédett?\n" "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Lehet, hogy az SD-kártya írásvédett?\n"
"Hibaüzenet: %1%" "Hibaüzenet: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Probléma lehet a céleszközzel. Kérlek, exportáld újra, vagy használj másik eszközt. A sérült kimeneti G-kód helye: %1%.tmp." msgstr "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Probléma lehet a céleszközzel. Kérlek, exportáld újra, vagy használj másik eszközt. A sérült kimeneti G-kód helye: %1%.tmp."
@@ -6503,6 +6515,9 @@ msgstr "Körvonal megjelenítése a kijelölt objektum körül a 3D nézetben."
msgid "Preferences" msgid "Preferences"
msgstr "Beállítások" msgstr "Beállítások"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8804,7 +8819,6 @@ msgstr "Szeretnéd folytatni?"
msgid "Language selection" msgid "Language selection"
msgstr "Nyelv kiválasztása" msgstr "Nyelv kiválasztása"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Ázsia-Csendes-óceáni térség" msgstr "Ázsia-Csendes-óceáni térség"
@@ -8909,6 +8923,9 @@ msgstr "Jelenlegi példány útvonala: "
msgid "General" msgid "General"
msgstr "Általános" msgstr "Általános"
msgid "Language"
msgstr "Nyelv"
msgid "Metric" msgid "Metric"
msgstr "Metrikus" msgstr "Metrikus"
@@ -9113,6 +9130,12 @@ msgstr "Többeszközös kezelés"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Ezzel az opcióval egyszerre több eszközre küldhetsz feladatot és több eszközt kezelhetsz." msgstr "Ezzel az opcióval egyszerre több eszközre küldhetsz feladatot és több eszközt kezelhetsz."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Felugró ablak a filamentcsoportosítási mód kiválasztásához" msgstr "Felugró ablak a filamentcsoportosítási mód kiválasztásához"
@@ -9845,6 +9868,9 @@ msgstr "Az összes örökölt értéket átmásolja a szülő előbeállításb
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Leválasztás a szülőről" msgstr "Leválasztás a szülőről"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Önálló előbeállítás" msgstr "Önálló előbeállítás"
@@ -11747,6 +11773,17 @@ msgstr "3Dconnexion-eszközbeállítások párbeszédablak megjelenítése/elrej
msgid "Switch table page" msgid "Switch table page"
msgstr "Váltás táblázatra" msgstr "Váltás táblázatra"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Szóköz"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Gyorsgombok listájának megjelenítése" msgstr "Gyorsgombok listájának megjelenítése"
@@ -11907,15 +11944,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Váltás előkészítés/előnézet között" msgstr "Váltás előkészítés/előnézet között"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Szóköz"
# AI Translated
msgid "Open actions speed dial"
msgstr "Műveletek gyorsmenüjének megnyitása"
msgid "Plater" msgid "Plater"
msgstr "Tálca" msgstr "Tálca"
@@ -12187,8 +12215,8 @@ msgstr "Javítás megszakítva"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "%1% fájl másolása sikertelen a következő helyre: %2% Hiba: %3%" msgstr "%1% fájl másolása sikertelen a következő helyre: %2% Hiba: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Kérlek, ellenőrizd a nem mentett módosításokat a konfiguráció frissítése előtt." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Konfigurációs csomag: " msgstr "Konfigurációs csomag: "
@@ -12196,6 +12224,12 @@ msgstr "Konfigurációs csomag: "
msgid " updated to " msgid " updated to "
msgstr " frissítve erre: " msgstr " frissítve erre: "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Kérlek, ellenőrizd a nem mentett módosításokat a konfiguráció frissítése előtt."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "G-kód fájl megnyitása:" msgstr "G-kód fájl megnyitása:"
@@ -13794,6 +13828,9 @@ msgstr "Igazított vonal"
msgid "Concentric" msgid "Concentric"
msgstr "Koncentrikus" msgstr "Koncentrikus"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbert-görbe" msgstr "Hilbert-görbe"
@@ -13883,29 +13920,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Felső felület kitöltési sorrendje" msgstr "Felső felület kitöltési sorrendje"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Az az irány, amelyben a felső felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n"
"A Kifelé a felület közepén kezd, így a felesleges anyag a szélek felé tolódik, ahol a legkevésbé látszik. A Befelé a szélén kezd, és a középen lévő szűk ívekkel fejeződik be.\n"
"Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Alsó felület kitöltési sorrendje" msgstr "Alsó felület kitöltési sorrendje"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Az az irány, amelyben az alsó felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n"
"A Befelé minden felületet a szélesebb külső ívekkel kezd, ami javítja az első réteg tapadását azokon az asztalokon, ahol a középen lévő szűk ívek nem tapadnak meg jól. A Kifelé a közepén kezd, a felesleges anyagot a szélek felé tolva.\n"
"Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat."
# AI Translated # AI Translated
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
@@ -21926,6 +21955,33 @@ msgstr ""
"Kunkorodás elkerülése\n" "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?" "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 "Select the language"
#~ msgstr "Válaszd ki a nyelvet"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Műveletek gyorsmenüjének megnyitása"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Az az irány, amelyben a felső felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n"
#~ "A Kifelé a felület közepén kezd, így a felesleges anyag a szélek felé tolódik, ahol a legkevésbé látszik. A Befelé a szélén kezd, és a középen lévő szűk ívekkel fejeződik be.\n"
#~ "Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Az az irány, amelyben az alsó felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n"
#~ "A Befelé minden felületet a szélesebb külső ívekkel kezd, ami javítja az első réteg tapadását azokon az asztalokon, ahol a középen lévő szűk ívek nem tapadnak meg jól. A Kifelé a közepén kezd, a felesleges anyagot a szélek felé tolva.\n"
#~ "Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -2466,13 +2466,6 @@ msgstr "È disponibile un aggiornamento. Apri la finestra di dialogo del bundle
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s è stato rimosso." msgstr "%s è stato rimosso."
msgid "Select the language"
msgstr "Seleziona la lingua"
msgid "Language"
msgstr "Lingua"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2510,6 +2503,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Impossibile aprire la finestra di dialogo Plugin (errore sconosciuto)." msgstr "Impossibile aprire la finestra di dialogo Plugin (errore sconosciuto)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminale plugin" msgstr "Terminale plugin"
@@ -4603,6 +4609,12 @@ msgstr ""
"Copia del G-code temporaneo sul G-code di uscita non riuscita. Forse la scheda SD è protetta da scrittura?\n" "Copia del G-code temporaneo sul G-code di uscita non riuscita. Forse la scheda SD è protetta da scrittura?\n"
"Messaggio di errore: %1%" "Messaggio di errore: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Copia del G-code temporaneo nel G-code di uscita non riuscita. Potrebbe esserci un problema nel dispositivo di destinazione. Prova ad esportare di nuovo o usa un dispositivo diverso. Il file G-code corrotto è su %1%.tmp." msgstr "Copia del G-code temporaneo nel G-code di uscita non riuscita. Potrebbe esserci un problema nel dispositivo di destinazione. Prova ad esportare di nuovo o usa un dispositivo diverso. Il file G-code corrotto è su %1%.tmp."
@@ -6505,6 +6517,9 @@ msgstr "Mostra il contorno attorno all'oggetto selezionato nella scena 3D."
msgid "Preferences" msgid "Preferences"
msgstr "Preferenze" msgstr "Preferenze"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8805,7 +8820,6 @@ msgstr "Vuoi continuare?"
msgid "Language selection" msgid "Language selection"
msgstr "Selezione lingua" msgstr "Selezione lingua"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asia-Pacifico" msgstr "Asia-Pacifico"
@@ -8911,6 +8925,9 @@ msgstr "Percorso istanza attuale: "
msgid "General" msgid "General"
msgstr "Generale" msgstr "Generale"
msgid "Language"
msgstr "Lingua"
msgid "Metric" msgid "Metric"
msgstr "Metrico" msgstr "Metrico"
@@ -9115,6 +9132,12 @@ msgstr "Gestione multi-dispositivo"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Abilitando questa opzione, puoi inviare un'attività a più dispositivi contemporaneamente e gestire più dispositivi." msgstr "Abilitando questa opzione, puoi inviare un'attività a più dispositivi contemporaneamente e gestire più dispositivi."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Popup per selezionare la modalità di raggruppamento filamenti" msgstr "Popup per selezionare la modalità di raggruppamento filamenti"
@@ -9863,6 +9886,9 @@ msgstr "Copia in questo profilo tutti i valori ereditati dal profilo padre e rim
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Scollega dal genitore" msgstr "Scollega dal genitore"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Profilo unico" msgstr "Profilo unico"
@@ -11767,6 +11793,17 @@ msgstr "Mostra/nascondi la finestra di dialogo delle impostazioni dei dispositiv
msgid "Switch table page" msgid "Switch table page"
msgstr "Cambia pagina tabella" msgstr "Cambia pagina tabella"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spazio"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Mostra elenco scorciatoie da tastiera" msgstr "Mostra elenco scorciatoie da tastiera"
@@ -11928,15 +11965,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Passa tra Prepara e Anteprima" msgstr "Passa tra Prepara e Anteprima"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spazio"
# AI Translated
msgid "Open actions speed dial"
msgstr "Apri la selezione rapida delle azioni"
msgid "Plater" msgid "Plater"
msgstr "Piatto" msgstr "Piatto"
@@ -12208,8 +12236,8 @@ msgstr "Riparazione annullata"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Copia del file %1% su %2% non riuscita: %3%" msgstr "Copia del file %1% su %2% non riuscita: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Controllare le modifiche non salvate prima di aggiornare la configurazione." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Pacchetto di configurazione: " msgstr "Pacchetto di configurazione: "
@@ -12217,6 +12245,12 @@ msgstr "Pacchetto di configurazione: "
msgid " updated to " msgid " updated to "
msgstr " aggiornato a " msgstr " aggiornato a "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Controllare le modifiche non salvate prima di aggiornare la configurazione."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Apri un file G-code:" msgstr "Apri un file G-code:"
@@ -13814,6 +13848,9 @@ msgstr "Rettilineo allineato"
msgid "Concentric" msgid "Concentric"
msgstr "Concentrico" msgstr "Concentrico"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Curva di Hilbert" msgstr "Curva di Hilbert"
@@ -13903,29 +13940,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Ordine di riempimento della superficie superiore" msgstr "Ordine di riempimento della superficie superiore"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direzione in cui vengono riempite le superfici superiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n"
"Verso l'esterno inizia dal centro della superficie, in modo che il materiale in eccesso venga spinto verso il bordo dove è meno visibile. Verso l'interno inizia dal bordo e termina con le curve strette al centro.\n"
"L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Ordine di riempimento della superficie inferiore" msgstr "Ordine di riempimento della superficie inferiore"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direzione in cui vengono riempite le superfici inferiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n"
"Verso l'interno inizia ogni superficie con le curve esterne più ampie, il che migliora l'adesione del primo strato sui piatti di stampa dove le curve strette al centro potrebbero non aderire. Verso l'esterno inizia dal centro, spingendo il materiale in eccesso verso il bordo.\n"
"L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Motivo riempimento solido interno" msgstr "Motivo riempimento solido interno"
@@ -21950,6 +21979,33 @@ msgstr ""
"Evita le deformazioni\n" "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?" "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 "Select the language"
#~ msgstr "Seleziona la lingua"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Apri la selezione rapida delle azioni"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direzione in cui vengono riempite le superfici superiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n"
#~ "Verso l'esterno inizia dal centro della superficie, in modo che il materiale in eccesso venga spinto verso il bordo dove è meno visibile. Verso l'interno inizia dal bordo e termina con le curve strette al centro.\n"
#~ "L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direzione in cui vengono riempite le superfici inferiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n"
#~ "Verso l'interno inizia ogni superficie con le curve esterne più ampie, il che migliora l'adesione del primo strato sui piatti di stampa dove le curve strette al centro potrebbero non aderire. Verso l'esterno inizia dal centro, spingendo il materiale in eccesso verso il bordo.\n"
#~ "L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -2473,13 +2473,6 @@ msgstr "アップデートが利用可能です。プリセットバンドルの
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%sを削除しました。" msgstr "%sを削除しました。"
msgid "Select the language"
msgstr "言語を選択"
msgid "Language"
msgstr "言語"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2517,6 +2510,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "プラグインダイアログを開けませんでした (不明なエラー)。" msgstr "プラグインダイアログを開けませんでした (不明なエラー)。"
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "プラグインターミナル" msgstr "プラグインターミナル"
@@ -4610,6 +4616,12 @@ msgstr ""
"一時的なGコードの出力Gコードへのコピーに失敗しました。 もしかしたらSDカードが書き込みロックされていませんか?\n" "一時的なGコードの出力Gコードへのコピーに失敗しました。 もしかしたらSDカードが書き込みロックされていませんか?\n"
"エラーメッセージ:%1%" "エラーメッセージ:%1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "一時Gコードの出力Gコードへのコピーに失敗しました。 ターゲットデバイスに問題がある可能性があります。もう一度エクスポートするか、別のデバイスを使用してみてください。 破損した出力Gコードは%1%.tmpにあります。" msgstr "一時Gコードの出力Gコードへのコピーに失敗しました。 ターゲットデバイスに問題がある可能性があります。もう一度エクスポートするか、別のデバイスを使用してみてください。 破損した出力Gコードは%1%.tmpにあります。"
@@ -6514,6 +6526,9 @@ msgstr "3Dシーンで選択したオブジェクトの周りにアウトライ
msgid "Preferences" msgid "Preferences"
msgstr "設定" msgstr "設定"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8823,7 +8838,6 @@ msgstr "続行しますか?"
msgid "Language selection" msgid "Language selection"
msgstr "言語選択" msgstr "言語選択"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "アジア太平洋地域" msgstr "アジア太平洋地域"
@@ -8928,6 +8942,9 @@ msgstr "現在のインスタンスのパス: "
msgid "General" msgid "General"
msgstr "一般" msgstr "一般"
msgid "Language"
msgstr "言語"
msgid "Metric" msgid "Metric"
msgstr "メートル" msgstr "メートル"
@@ -9135,6 +9152,12 @@ msgstr "マルチデバイス管理"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "このオプションを有効にすると、複数のデバイスに同時にタスクを送信し、複数のデバイスを管理できます。" msgstr "このオプションを有効にすると、複数のデバイスに同時にタスクを送信し、複数のデバイスを管理できます。"
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "フィラメントグルーピングモード選択のポップアップ" msgstr "フィラメントグルーピングモード選択のポップアップ"
@@ -9885,6 +9908,9 @@ msgstr "親プリセットから継承したすべての値をこのプリセッ
msgid "Detach from parent" msgid "Detach from parent"
msgstr "親から分離" msgstr "親から分離"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "独立したプリセット" msgstr "独立したプリセット"
@@ -11788,6 +11814,17 @@ msgstr "3Dconnexion設定を表示/非表示"
msgid "Switch table page" msgid "Switch table page"
msgstr "テーブルページを切り替え" msgstr "テーブルページを切り替え"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "ショートカット一覧を表示" msgstr "ショートカット一覧を表示"
@@ -11950,15 +11987,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "準備/プレビュー間の切り替え" msgstr "準備/プレビュー間の切り替え"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "アクションスピードダイヤルを開く"
msgid "Plater" msgid "Plater"
msgstr "準備" msgstr "準備"
@@ -12234,8 +12262,8 @@ msgstr "修復を取消しました"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)" msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "構成を更新する前に、未保存の変更をご確認ください" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "設定パッケージ: " msgstr "設定パッケージ: "
@@ -12243,6 +12271,12 @@ msgstr "設定パッケージ: "
msgid " updated to " msgid " updated to "
msgstr " を更新しました " msgstr " を更新しました "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "構成を更新する前に、未保存の変更をご確認ください"
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "G-codeファイルを開く" msgstr "G-codeファイルを開く"
@@ -13905,6 +13939,9 @@ msgstr "整列直線"
msgid "Concentric" msgid "Concentric"
msgstr "同心" msgstr "同心"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "ヒルベルト曲線" msgstr "ヒルベルト曲線"
@@ -13996,29 +14033,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "上面の充填順序" msgstr "上面の充填順序"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、上面を充填する方向です。\n"
"外向きは面の中心から始まるため、余分な材料が最も目立たない縁へ押し出されます。内向きは縁から始まり、中心の細かいカーブで終わります。\n"
"デフォルトは最短経路順で、どちらの方向にもなり得ます。"
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "底面の充填順序" msgstr "底面の充填順序"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、底面を充填する方向です。\n"
"内向きは各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも1層目の密着性が向上します。外向きは中心から始まり、余分な材料を縁へ押し出します。\n"
"デフォルトは最短経路順で、どちらの方向にもなり得ます。"
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "内部ソリッドインフィルパターン" msgstr "内部ソリッドインフィルパターン"
@@ -22505,6 +22534,33 @@ msgstr ""
"反りを避ける\n" "反りを避ける\n"
"ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?"
#~ msgid "Select the language"
#~ msgstr "言語を選択"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "アクションスピードダイヤルを開く"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、上面を充填する方向です。\n"
#~ "外向きは面の中心から始まるため、余分な材料が最も目立たない縁へ押し出されます。内向きは縁から始まり、中心の細かいカーブで終わります。\n"
#~ "デフォルトは最短経路順で、どちらの方向にもなり得ます。"
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、底面を充填する方向です。\n"
#~ "内向きは各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも1層目の密着性が向上します。外向きは中心から始まり、余分な材料を縁へ押し出します。\n"
#~ "デフォルトは最短経路順で、どちらの方向にもなり得ます。"
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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を再起動してください。" #~ msgstr "ネイティブWaylandのライブビューにはGStreamer GTKビデオシンクが必要です。GStreamer用のgtksinkプラグインをインストールし、OrcaSlicerを再起動してください。"
+86 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2025-06-02 17:12+0900\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n"
"Last-Translator: crwusiz <crwusiz@gmail.com>\n" "Last-Translator: crwusiz <crwusiz@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2481,13 +2481,6 @@ msgstr "사용 가능한 업데이트가 있습니다. 사전 설정 번들 대
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s이(가) 제거되었습니다." msgstr "%s이(가) 제거되었습니다."
msgid "Select the language"
msgstr "언어 선택"
msgid "Language"
msgstr "언어"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2525,6 +2518,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "플러그인 대화 상자를 열지 못했습니다(알 수 없는 오류)." msgstr "플러그인 대화 상자를 열지 못했습니다(알 수 없는 오류)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "플러그인 터미널" msgstr "플러그인 터미널"
@@ -4625,6 +4631,12 @@ msgstr ""
"임시 Gcode를 출력 Gcode로 복사하지 못했습니다. SD 카드가 쓰기 잠겨 있나요?\n" "임시 Gcode를 출력 Gcode로 복사하지 못했습니다. SD 카드가 쓰기 잠겨 있나요?\n"
"오류 메시지입니다: %1%" "오류 메시지입니다: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "임시 Gcode를 출력 Gcode로 복사하지 못했습니다. 대상 장치에 문제가 있을 수 있으니 다시 내보내거나 다른 장치를 사용해 보세요. 손상된 출력 Gcode는 %1%.tmp에 있습니다." msgstr "임시 Gcode를 출력 Gcode로 복사하지 못했습니다. 대상 장치에 문제가 있을 수 있으니 다시 내보내거나 다른 장치를 사용해 보세요. 손상된 출력 Gcode는 %1%.tmp에 있습니다."
@@ -6528,6 +6540,9 @@ msgstr "3D 장면에서 선택한 객체 주변에 윤곽선 표시"
msgid "Preferences" msgid "Preferences"
msgstr "기본 설정" msgstr "기본 설정"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8858,7 +8873,6 @@ msgstr "계속하시겠습니까?"
msgid "Language selection" msgid "Language selection"
msgstr "언어 선택" msgstr "언어 선택"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "아시아 태평양" msgstr "아시아 태평양"
@@ -8972,6 +8986,9 @@ msgstr "현재 인스턴스 경로: "
msgid "General" msgid "General"
msgstr "일반" msgstr "일반"
msgid "Language"
msgstr "언어"
msgid "Metric" msgid "Metric"
msgstr "미터법" msgstr "미터법"
@@ -9197,6 +9214,12 @@ msgstr "다중 장치 관리"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "활성화하면 여러 장치에 동시에 작업을 보내고 여러 장치를 관리할 수 있습니다." msgstr "활성화하면 여러 장치에 동시에 작업을 보내고 여러 장치를 관리할 수 있습니다."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "필라멘트 그룹화 모드를 선택하기 위한 팝업" msgstr "필라멘트 그룹화 모드를 선택하기 위한 팝업"
@@ -9976,6 +9999,9 @@ msgstr "상위 사전 설정에서 상속한 모든 값을 이 사전 설정으
msgid "Detach from parent" msgid "Detach from parent"
msgstr "상위 항목에서 분리" msgstr "상위 항목에서 분리"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "독립 사전 설정" msgstr "독립 사전 설정"
@@ -11922,6 +11948,17 @@ msgstr "3D 연결 장치 설정 표시/숨기기 대화상자"
msgid "Switch table page" msgid "Switch table page"
msgstr "테이블 페이지 전환" msgstr "테이블 페이지 전환"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "키보드 단축키 목록 보기" msgstr "키보드 단축키 목록 보기"
@@ -12086,15 +12123,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "준비 하기/미리 보기 전환" msgstr "준비 하기/미리 보기 전환"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "작업 스피드 다이얼 열기"
msgid "Plater" msgid "Plater"
msgstr "출력판" msgstr "출력판"
@@ -12368,8 +12396,8 @@ msgstr "수리 취소됨"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "파일 %1%를 %2%으로 복사 실패: %3%" msgstr "파일 %1%를 %2%으로 복사 실패: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "구성 업데이트 전에 저장되지 않은 변경 사항을 확인해야 합니다." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "구성 패키지: " msgstr "구성 패키지: "
@@ -12377,6 +12405,12 @@ msgstr "구성 패키지: "
msgid " updated to " msgid " updated to "
msgstr " 로 업데이트되었습니다 " msgstr " 로 업데이트되었습니다 "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "구성 업데이트 전에 저장되지 않은 변경 사항을 확인해야 합니다."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Gcode 파일 열기:" msgstr "Gcode 파일 열기:"
@@ -14033,6 +14067,9 @@ msgstr "정렬된 직선"
msgid "Concentric" msgid "Concentric"
msgstr "동심" msgstr "동심"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "힐베르트 곡선" msgstr "힐베르트 곡선"
@@ -14124,29 +14161,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "상단 표면 채우기 순서" msgstr "상단 표면 채우기 순서"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 상단 표면을 채우는 방향입니다.\n"
"바깥쪽은 표면 중앙에서 시작하므로 남는 재료가 가장 눈에 덜 띄는 가장자리로 밀려납니다. 안쪽은 가장자리에서 시작하여 중앙의 좁은 곡선에서 끝납니다.\n"
"기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "하단 표면 채우기 순서" msgstr "하단 표면 채우기 순서"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 하단 표면을 채우는 방향입니다.\n"
"안쪽은 각 표면을 더 넓은 바깥쪽 곡선에서 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 빌드 플레이트에서 초기 레이어 접착력이 향상됩니다. 바깥쪽은 중앙에서 시작하여 남는 재료를 가장자리로 밀어냅니다.\n"
"기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "꽉찬 내부 채우기 패턴" msgstr "꽉찬 내부 채우기 패턴"
@@ -22372,6 +22401,33 @@ msgstr ""
"뒤틀림 방지\n" "뒤틀림 방지\n"
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
#~ msgid "Select the language"
#~ msgstr "언어 선택"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "작업 스피드 다이얼 열기"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 상단 표면을 채우는 방향입니다.\n"
#~ "바깥쪽은 표면 중앙에서 시작하므로 남는 재료가 가장 눈에 덜 띄는 가장자리로 밀려납니다. 안쪽은 가장자리에서 시작하여 중앙의 좁은 곡선에서 끝납니다.\n"
#~ "기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 하단 표면을 채우는 방향입니다.\n"
#~ "안쪽은 각 표면을 더 넓은 바깥쪽 곡선에서 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 빌드 플레이트에서 초기 레이어 접착력이 향상됩니다. 바깥쪽은 중앙에서 시작하여 남는 재료를 가장자리로 밀어냅니다.\n"
#~ "기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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를 다시 시작하십시오." #~ msgstr "네이티브 Wayland 실시간 보기에는 GStreamer GTK 비디오 싱크가 필요합니다. GStreamer용 gtksink 플러그인을 설치한 후 OrcaSlicer를 다시 시작하십시오."
+86 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-07-02 14:13+0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n"
"Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n" "Last-Translator: Gintaras Kučinskas <sharanchius@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2449,13 +2449,6 @@ msgstr "Yra prieinamas atnaujinimas. Atidarykite profilių paketo dialogo langą
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s buvo pašalintas." msgstr "%s buvo pašalintas."
msgid "Select the language"
msgstr "Pasirinkite kalbą"
msgid "Language"
msgstr "Kalba"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2493,6 +2486,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Nepavyko atidaryti papildinių dialogo lango (nežinoma klaida)." msgstr "Nepavyko atidaryti papildinių dialogo lango (nežinoma klaida)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Papildinio terminalas" msgstr "Papildinio terminalas"
@@ -4587,6 +4593,12 @@ msgstr ""
"Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gal draudžiama įrašinėti į SD kortelę?\n" "Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gal draudžiama įrašinėti į SD kortelę?\n"
"Klaidos pranešimas: %1%" "Klaidos pranešimas: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gali kilti problemų dėl tikslinio įrenginio. Bandykite eksportuoti dar kartą arba naudokite kitą įrenginį. Sugadintas išvesties G-kodas yra %1%.tmp." msgstr "Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gali kilti problemų dėl tikslinio įrenginio. Bandykite eksportuoti dar kartą arba naudokite kitą įrenginį. Sugadintas išvesties G-kodas yra %1%.tmp."
@@ -6490,6 +6502,9 @@ msgstr "Rodyti kontūrą aplink pasirinktą objektą 3D scenoje."
msgid "Preferences" msgid "Preferences"
msgstr "Parinktys" msgstr "Parinktys"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8795,7 +8810,6 @@ msgstr "Ar norite tęsti?"
msgid "Language selection" msgid "Language selection"
msgstr "Kalbos pasirinkimas" msgstr "Kalbos pasirinkimas"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Azija-Ramusis vandenynas" msgstr "Azija-Ramusis vandenynas"
@@ -8900,6 +8914,9 @@ msgstr "Dabartinės versijos kelias: "
msgid "General" msgid "General"
msgstr "Bendras" msgstr "Bendras"
msgid "Language"
msgstr "Kalba"
msgid "Metric" msgid "Metric"
msgstr "Metrinė" msgstr "Metrinė"
@@ -9096,6 +9113,12 @@ msgstr "Kelių įrenginių valdymas"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Kai įjungta ši funkcija, jūs galite siųsti užduotį keliems įrenginiams vienu metu, taip apt kontroliuoti keletą įrenginių." msgstr "Kai įjungta ši funkcija, jūs galite siųsti užduotį keliems įrenginiams vienu metu, taip apt kontroliuoti keletą įrenginių."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Iššokantis langas gijų grupavimo režimui pasirinkti" msgstr "Iššokantis langas gijų grupavimo režimui pasirinkti"
@@ -9802,6 +9825,9 @@ msgstr "Nukopijuoja į šį profilį visas iš pirminio profilio paveldėtas rei
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Atskirti nuo tėvinio profilio" msgstr "Atskirti nuo tėvinio profilio"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Savarankiškas profilis" msgstr "Savarankiškas profilis"
@@ -11692,6 +11718,17 @@ msgstr "Rodyti/slėpti 3DConnexion įrenginių nustatymų dialogo langą"
msgid "Switch table page" msgid "Switch table page"
msgstr "Perjungti lentelės puslapį" msgstr "Perjungti lentelės puslapį"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Tarpas"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Rodyti sparčiųjų klavišų sąrašą" msgstr "Rodyti sparčiųjų klavišų sąrašą"
@@ -11852,15 +11889,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Perjungimas tarp Paruošti / Peržiūrėti" msgstr "Perjungimas tarp Paruošti / Peržiūrėti"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Tarpas"
# AI Translated
msgid "Open actions speed dial"
msgstr "Atidaryti veiksmų greitosios prieigos meniu"
msgid "Plater" msgid "Plater"
msgstr "Plokštė" msgstr "Plokštė"
@@ -12128,8 +12156,8 @@ msgstr "Taisymas atšauktas"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Failo %1% kopijavimas į %2% nepavyko: %3%" msgstr "Failo %1% kopijavimas į %2% nepavyko: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Prieš atnaujinant konfigūraciją reikia patikrinti neišsaugotus pakeitimus." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Konfigūracijos paketas: " msgstr "Konfigūracijos paketas: "
@@ -12137,6 +12165,12 @@ msgstr "Konfigūracijos paketas: "
msgid " updated to " msgid " updated to "
msgstr " atnaujintas į " msgstr " atnaujintas į "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Prieš atnaujinant konfigūraciją reikia patikrinti neišsaugotus pakeitimus."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Atidaryti G-kodo failą:" msgstr "Atidaryti G-kodo failą:"
@@ -13703,6 +13737,9 @@ msgstr "Sulygiuotas tiesiaeigis"
msgid "Concentric" msgid "Concentric"
msgstr "Koncentrinis" msgstr "Koncentrinis"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilberto kreivė" msgstr "Hilberto kreivė"
@@ -13792,29 +13829,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Viršutinio paviršiaus užpildymo tvarka" msgstr "Viršutinio paviršiaus užpildymo tvarka"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Kryptis, kuria užpildomi viršutiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n"
"„Į išorę“ prasideda paviršiaus centre, todėl bet koks perteklinė medžiaga stumiama link krašto, kur ji mažiausiai matoma. „Į vidų“ prasideda nuo krašto ir baigiasi ankštomis kreivėmis centre.\n"
"Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Apatinio paviršiaus užpildymo tvarka" msgstr "Apatinio paviršiaus užpildymo tvarka"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Kryptis, kuria užpildomi apatiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n"
"„Į vidų“ pradeda kiekvieną paviršių platesnėmis išorinėmis kreivėmis, o tai pagerina pirmojo sluoksnio sukibimą ant pagrindų, kur ankštos kreivės centre gali nesilaikyti. „Į išorę“ prasideda centre, stumdama bet kokią perteklinę medžiagą link krašto.\n"
"Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Vidinio tvirto užpildo raštas" msgstr "Vidinio tvirto užpildo raštas"
@@ -21652,6 +21681,33 @@ msgstr ""
"Venkite deformacijų (warping)\n" "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ę?" "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 "Select the language"
#~ msgstr "Pasirinkite kalbą"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Atidaryti veiksmų greitosios prieigos meniu"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Kryptis, kuria užpildomi viršutiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n"
#~ "„Į išorę“ prasideda paviršiaus centre, todėl bet koks perteklinė medžiaga stumiama link krašto, kur ji mažiausiai matoma. „Į vidų“ prasideda nuo krašto ir baigiasi ankštomis kreivėmis centre.\n"
#~ "Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Kryptis, kuria užpildomi apatiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n"
#~ "„Į vidų“ pradeda kiekvieną paviršių platesnėmis išorinėmis kreivėmis, o tai pagerina pirmojo sluoksnio sukibimą ant pagrindų, kur ankštos kreivės centre gali nesilaikyti. „Į išorę“ prasideda centre, stumdama bet kokią perteklinę medžiagą link krašto.\n"
#~ "Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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“." #~ msgstr "Tiesioginei „Native Wayland“ peržiūrai reikalingas „GStreamer GTK“ vaizdo sinchronizatorius (video sink). Įdiekite „GStreamer“ skirtą „gtksink“ papildinį, tada iš naujo paleiskite „OrcaSlicer“."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -2679,13 +2679,6 @@ msgstr "Er is een update beschikbaar. Open het dialoogvenster voor de voorinstel
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s is verwijderd." msgstr "%s is verwijderd."
msgid "Select the language"
msgstr "Kies de taal"
msgid "Language"
msgstr "Taal"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2723,6 +2716,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Openen van het dialoogvenster Plug-ins is mislukt (onbekende fout)." msgstr "Openen van het dialoogvenster Plug-ins is mislukt (onbekende fout)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Plug-in-terminal" msgstr "Plug-in-terminal"
@@ -5008,6 +5014,12 @@ msgstr ""
"Fout bij het exporteren naar output-G-code. Is de SD-kaart geblokkeerd tegen schrijven?\n" "Fout bij het exporteren naar output-G-code. Is de SD-kaart geblokkeerd tegen schrijven?\n"
"Foutbericht: %1%" "Foutbericht: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Fout bij het exporteren naar output-G-code. Het probleem ligt mogelijk bij het doelapparaat. Probeer het opnieuw te exporteren of gebruik een ander apparat. De beschadigde G-code is opgeslagen als %1%.tmp." msgstr "Fout bij het exporteren naar output-G-code. Het probleem ligt mogelijk bij het doelapparaat. Probeer het opnieuw te exporteren of gebruik een ander apparat. De beschadigde G-code is opgeslagen als %1%.tmp."
@@ -7086,6 +7098,9 @@ msgstr "Toon een omtrek rond het geselecteerde object in de 3D-scène."
msgid "Preferences" msgid "Preferences"
msgstr "Voorkeuren" msgstr "Voorkeuren"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -9600,7 +9615,6 @@ msgstr "Wilt u doorgaan?"
msgid "Language selection" msgid "Language selection"
msgstr "Taal selectie" msgstr "Taal selectie"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Azië-Pacific" msgstr "Azië-Pacific"
@@ -9715,6 +9729,9 @@ msgstr "Huidig instancepad: "
msgid "General" msgid "General"
msgstr "Algemeen" msgstr "Algemeen"
msgid "Language"
msgstr "Taal"
msgid "Metric" msgid "Metric"
msgstr "Metrisch" msgstr "Metrisch"
@@ -9946,6 +9963,12 @@ msgstr "Beheer van meerdere apparaten"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Met deze optie ingeschakeld kunt u een taak tegelijkertijd naar meerdere apparaten sturen en meerdere apparaten beheren." msgstr "Met deze optie ingeschakeld kunt u een taak tegelijkertijd naar meerdere apparaten sturen en meerdere apparaten beheren."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
# AI Translated # AI Translated
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Pop-up om de filamentgroeperingsmodus te kiezen" msgstr "Pop-up om de filamentgroeperingsmodus te kiezen"
@@ -10737,6 +10760,9 @@ msgstr "Kopieert alle overgeërfde waarden van de bovenliggende voorinstelling n
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Losmaken van bovenliggend element" msgstr "Losmaken van bovenliggend element"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Unieke voorinstelling" msgstr "Unieke voorinstelling"
@@ -12818,6 +12844,17 @@ msgstr "Dialoogvenster met instellingen voor 3Dconnexion-apparaten weergeven/ver
msgid "Switch table page" msgid "Switch table page"
msgstr "Schakeltabel pagina" msgstr "Schakeltabel pagina"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spatie"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Toon lijst met sneltoetsen" msgstr "Toon lijst met sneltoetsen"
@@ -12985,15 +13022,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Wisselen tussen Voorbereiden/Voorvertoning" msgstr "Wisselen tussen Voorbereiden/Voorvertoning"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spatie"
# AI Translated
msgid "Open actions speed dial"
msgstr "Snelmenu met acties openen"
msgid "Plater" msgid "Plater"
msgstr "Plaat" msgstr "Plaat"
@@ -13292,8 +13320,8 @@ msgstr "Repareren geannuleerd"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Het kopieeren van bestand %1% naar %2% is mislukt: %3%" msgstr "Het kopieeren van bestand %1% naar %2% is mislukt: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Controleer niet-opgeslagen wijzigingen voordat u de configuratie bijwerkt." msgstr ""
# AI Translated # AI Translated
msgid "Configuration package: " msgid "Configuration package: "
@@ -13303,6 +13331,12 @@ msgstr "Configuratiepakket: "
msgid " updated to " msgid " updated to "
msgstr " bijgewerkt naar " msgstr " bijgewerkt naar "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Controleer niet-opgeslagen wijzigingen voordat u de configuratie bijwerkt."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Open G-code bestand:" msgstr "Open G-code bestand:"
@@ -15049,6 +15083,9 @@ msgstr "Uitgelijnd Rechtlijnig"
msgid "Concentric" msgid "Concentric"
msgstr "Concentrisch" msgstr "Concentrisch"
msgid "Spiral Inset"
msgstr ""
# AI Translated # AI Translated
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbertkromme" msgstr "Hilbertkromme"
@@ -15144,29 +15181,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Vulvolgorde bovenoppervlak" msgstr "Vulvolgorde bovenoppervlak"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Richting waarin bovenoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n"
"Naar buiten begint in het midden van het oppervlak, zodat overtollig materiaal naar de rand wordt geduwd, waar het het minst zichtbaar is. Naar binnen begint aan de rand en eindigt met de krappe bochten in het midden.\n"
"Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Vulvolgorde onderoppervlak" msgstr "Vulvolgorde onderoppervlak"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Richting waarin onderoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n"
"Naar binnen begint elk oppervlak met de bredere buitenbochten, wat de hechting van de eerste laag verbetert op printbedden waar de krappe bochten in het midden mogelijk niet hechten. Naar buiten begint in het midden en duwt overtollig materiaal naar de rand.\n"
"Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Intern massief invulpatroon" msgstr "Intern massief invulpatroon"
@@ -24092,6 +24121,33 @@ msgstr ""
"Kromtrekken voorkomen\n" "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?" "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?"
#~ msgid "Select the language"
#~ msgstr "Kies de taal"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Snelmenu met acties openen"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Richting waarin bovenoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n"
#~ "Naar buiten begint in het midden van het oppervlak, zodat overtollig materiaal naar de rand wordt geduwd, waar het het minst zichtbaar is. Naar binnen begint aan de rand en eindigt met de krappe bochten in het midden.\n"
#~ "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Richting waarin onderoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n"
#~ "Naar binnen begint elk oppervlak met de bredere buitenbochten, wat de hechting van de eerste laag verbetert op printbedden waar de krappe bochten in het midden mogelijk niet hechten. Naar buiten begint in het midden en duwt overtollig materiaal naar de rand.\n"
#~ "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Voor de native Wayland-liveview is de GStreamer GTK-videosink nodig. Installeer de gtksink-plug-in voor GStreamer en start OrcaSlicer opnieuw."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n" "Last-Translator: Krzysztof Morga <<tlumaczeniebs@gmail.com>>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2512,13 +2512,6 @@ msgstr "Dostępna jest aktualizacja. Otwórz okno pakietu profili, aby ją zains
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s został usunięty." msgstr "%s został usunięty."
msgid "Select the language"
msgstr "Wybierz język"
msgid "Language"
msgstr "Język"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2556,6 +2549,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Nie udało się otworzyć okna wtyczek (nieznany błąd)." msgstr "Nie udało się otworzyć okna wtyczek (nieznany błąd)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal wtyczek" msgstr "Terminal wtyczek"
@@ -4702,6 +4708,12 @@ msgstr ""
"Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Być może karta SD jest zablokowana do zapisu?\n" "Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Być może karta SD jest zablokowana do zapisu?\n"
"Komunikat błędu: %1%" "Komunikat błędu: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Może być problem z urządzeniem docelowym, spróbuj ponownie wyeksportować lub użyć innego urządzenia. Uszkodzony plik wyjściowego G-code znajduje się w pliku %1%.tmp." msgstr "Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Może być problem z urządzeniem docelowym, spróbuj ponownie wyeksportować lub użyć innego urządzenia. Uszkodzony plik wyjściowego G-code znajduje się w pliku %1%.tmp."
@@ -6651,6 +6663,9 @@ msgstr "Przełącza wyświetlanie konturu wokół zaznaczonego obiektu w scenie
msgid "Preferences" msgid "Preferences"
msgstr "Preferencje" msgstr "Preferencje"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -9014,7 +9029,6 @@ msgstr "Czy kontynuować?"
msgid "Language selection" msgid "Language selection"
msgstr "Wybór języka" msgstr "Wybór języka"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Azja i Pacyfik" msgstr "Azja i Pacyfik"
@@ -9128,6 +9142,9 @@ msgstr "Aktualna ścieżka instancji: "
msgid "General" msgid "General"
msgstr "Ogólne" msgstr "Ogólne"
msgid "Language"
msgstr "Język"
msgid "Metric" msgid "Metric"
msgstr "Metryczne" msgstr "Metryczne"
@@ -9352,6 +9369,12 @@ msgstr "Obsługiwanie wielu urządzeń"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Umożliwia wysyłanie zadania do wielu urządzeń jednocześnie i zarządzanie nimi." msgstr "Umożliwia wysyłanie zadania do wielu urządzeń jednocześnie i zarządzanie nimi."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Okno dialogowe do wyboru trybu grupowania filamentów" msgstr "Okno dialogowe do wyboru trybu grupowania filamentów"
@@ -10132,6 +10155,9 @@ msgstr "Kopiuje do tego profilu wszystkie wartości odziedziczone z profilu nadr
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Odłącz od elementu nadrzędnego" msgstr "Odłącz od elementu nadrzędnego"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Profil niezależny" msgstr "Profil niezależny"
@@ -12095,6 +12121,17 @@ msgstr "Pokaż/ukryj okno dialogowe ustawień urządzeń 3Dconnexion"
msgid "Switch table page" msgid "Switch table page"
msgstr "Przełącz stronę tabeli" msgstr "Przełącz stronę tabeli"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spacja"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Pokaż listę skrótów klawiszowych" msgstr "Pokaż listę skrótów klawiszowych"
@@ -12257,15 +12294,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Przełączanie między przygotowaniem/podglądem" msgstr "Przełączanie między przygotowaniem/podglądem"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Spacja"
# AI Translated
msgid "Open actions speed dial"
msgstr "Otwórz szybkie menu akcji"
msgid "Plater" msgid "Plater"
msgstr "Płyta" msgstr "Płyta"
@@ -12540,8 +12568,8 @@ msgstr "Naprawa anulowana"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Nie udało się skopiować pliku %1% do %2%: %3%" msgstr "Nie udało się skopiować pliku %1% do %2%: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Należy sprawdzić niezapisane zmiany przed aktualizacją konfiguracji." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Pakiet konfiguracyjny:" msgstr "Pakiet konfiguracyjny:"
@@ -12549,6 +12577,12 @@ msgstr "Pakiet konfiguracyjny:"
msgid " updated to " msgid " updated to "
msgstr " aktualizacja do " msgstr " aktualizacja do "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Należy sprawdzić niezapisane zmiany przed aktualizacją konfiguracji."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Otwórz plik G-code:" msgstr "Otwórz plik G-code:"
@@ -14206,6 +14240,9 @@ msgstr "Wyrównany prostoliniowy"
msgid "Concentric" msgid "Concentric"
msgstr "Koncentryczny" msgstr "Koncentryczny"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Krzywa Hilberta" msgstr "Krzywa Hilberta"
@@ -14297,29 +14334,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Kolejność wypełniania górnej powierzchni" msgstr "Kolejność wypełniania górnej powierzchni"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Kierunek wypełniania górnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n"
"Na zewnątrz zaczyna od środka powierzchni, dzięki czemu nadmiar materiału jest wypychany ku krawędzi, gdzie jest najmniej widoczny. Do wewnątrz zaczyna od krawędzi i kończy ciasnymi łukami na środku.\n"
"Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Kolejność wypełniania dolnej powierzchni" msgstr "Kolejność wypełniania dolnej powierzchni"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Kierunek wypełniania dolnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n"
"Do wewnątrz rozpoczyna każdą powierzchnię od szerszych łuków zewnętrznych, co poprawia przyczepność pierwszej warstwy na stołach, do których ciasne łuki na środku mogą nie przylegać. Na zewnątrz zaczyna od środka, wypychając nadmiar materiału ku krawędzi.\n"
"Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Wzór wewnętrznego pełnego wypełnienia" msgstr "Wzór wewnętrznego pełnego wypełnienia"
@@ -22549,6 +22578,33 @@ msgstr ""
"Unikaj odkształceń\n" "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ń?" "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ń?"
#~ msgid "Select the language"
#~ msgstr "Wybierz język"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Otwórz szybkie menu akcji"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Kierunek wypełniania górnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n"
#~ "Na zewnątrz zaczyna od środka powierzchni, dzięki czemu nadmiar materiału jest wypychany ku krawędzi, gdzie jest najmniej widoczny. Do wewnątrz zaczyna od krawędzi i kończy ciasnymi łukami na środku.\n"
#~ "Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Kierunek wypełniania dolnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n"
#~ "Do wewnątrz rozpoczyna każdą powierzchnię od szerszych łuków zewnętrznych, co poprawia przyczepność pierwszej warstwy na stołach, do których ciasne łuki na środku mogą nie przylegać. Na zewnątrz zaczyna od środka, wypychając nadmiar materiału ku krawędzi.\n"
#~ "Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+83 -27
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-07-26 11:14-0300\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n"
"Last-Translator: Alexandre Folle de Menezes\n" "Last-Translator: Alexandre Folle de Menezes\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
@@ -2356,13 +2356,6 @@ msgstr "Há uma atualização disponível. Abra a caixa de diálogo do pacote de
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s foi removido." msgstr "%s foi removido."
msgid "Select the language"
msgstr "Selecione o idioma"
msgid "Language"
msgstr "Idioma"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "Falha ao mudar o idioma do OrcaSlicer para %s." msgstr "Falha ao mudar o idioma do OrcaSlicer para %s."
@@ -2395,6 +2388,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Falha ao abrir a caixa de diálogo de Plugins (erro desconhecido)." msgstr "Falha ao abrir a caixa de diálogo de Plugins (erro desconhecido)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal de plugin" msgstr "Terminal de plugin"
@@ -4441,6 +4447,12 @@ msgstr ""
"A cópia do G-code temporário para o G-code de saída falhou. Talvez o cartão SD esteja travado pra escrita?\n" "A cópia do G-code temporário para o G-code de saída falhou. Talvez o cartão SD esteja travado pra escrita?\n"
"Mensagem de erro: %1%" "Mensagem de erro: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "A cópia do G-code temporário para o G-code de saída falhou. Pode haver problema com o dispositivo de destino, por favor tente exportar novamente ou usar outro dispositivo. O G-code de saída corrompido está em %1%.tmp." msgstr "A cópia do G-code temporário para o G-code de saída falhou. Pode haver problema com o dispositivo de destino, por favor tente exportar novamente ou usar outro dispositivo. O G-code de saída corrompido está em %1%.tmp."
@@ -6323,6 +6335,9 @@ msgstr "Mostrar contorno ao redor do objeto selecionado na cena 3D."
msgid "Preferences" msgid "Preferences"
msgstr "Preferências" msgstr "Preferências"
msgid "Open speed dial..."
msgstr ""
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
msgstr "Editar" msgstr "Editar"
@@ -8570,7 +8585,6 @@ msgstr "Você deseja continuar?"
msgid "Language selection" msgid "Language selection"
msgstr "Seleção de idioma" msgstr "Seleção de idioma"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Ásia-Pacífico" msgstr "Ásia-Pacífico"
@@ -8675,6 +8689,9 @@ msgstr "Caminho da Instância Atual: "
msgid "General" msgid "General"
msgstr "Geral" msgstr "Geral"
msgid "Language"
msgstr "Idioma"
msgid "Metric" msgid "Metric"
msgstr "Métrico" msgstr "Métrico"
@@ -8879,6 +8896,12 @@ msgstr "Gerenciamento de multi dispositivos"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Com esta opção habilitada, você pode enviar uma tarefa para vários dispositivos ao mesmo tempo e gerenciar vários dispositivos." msgstr "Com esta opção habilitada, você pode enviar uma tarefa para vários dispositivos ao mesmo tempo e gerenciar vários dispositivos."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Abrir seleção do modo de agrupamento de filamento" msgstr "Abrir seleção do modo de agrupamento de filamento"
@@ -9587,6 +9610,9 @@ msgstr "Copia para esta predefinição todos os valores herdados da predefiniç
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Separar do pai" msgstr "Separar do pai"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Predefinição única" msgstr "Predefinição única"
@@ -11450,6 +11476,16 @@ msgstr "Mostrar/Ocultar diálogo de configurações de dispositivos 3Dconnexion"
msgid "Switch table page" msgid "Switch table page"
msgstr "Trocar página da tabela" msgstr "Trocar página da tabela"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espaço"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Mostrar lista de atalhos de teclado" msgstr "Mostrar lista de atalhos de teclado"
@@ -11605,14 +11641,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Alternar entre Preparar/Pré-visualizar" msgstr "Alternar entre Preparar/Pré-visualizar"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Espaço"
# AI Translated
msgid "Open actions speed dial"
msgstr "Abrir menu rápido de ações"
msgid "Plater" msgid "Plater"
msgstr "Mesa" msgstr "Mesa"
@@ -11877,8 +11905,8 @@ msgstr "Reparo cancelado"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Falha ao copiar o arquivo %1% para %2%: %3%" msgstr "Falha ao copiar o arquivo %1% para %2%: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Verifique as alterações não salvas antes de atualizar a configuração." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Pacote de configuração: " msgstr "Pacote de configuração: "
@@ -11886,6 +11914,12 @@ msgstr "Pacote de configuração: "
msgid " updated to " msgid " updated to "
msgstr " atualizado para " msgstr " atualizado para "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Verifique as alterações não salvas antes de atualizar a configuração."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Abrir arquivo G-code:" msgstr "Abrir arquivo G-code:"
@@ -13455,6 +13489,9 @@ msgstr "Retilíneo alinhado"
msgid "Concentric" msgid "Concentric"
msgstr "Concêntrico" msgstr "Concêntrico"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Curva de Hilbert" msgstr "Curva de Hilbert"
@@ -13535,25 +13572,19 @@ msgid "Top surface fill order"
msgstr "Ordem de preenchimento da superfície superior" msgstr "Ordem de preenchimento da superfície superior"
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n"
"Para fora começa no centro da superfície, de modo que qualquer excesso de material seja empurrado em direção à borda, onde é menos visível. Para dentro começa na borda e termina com as curvas fechadas no centro.\n"
"O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção."
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Ordem de preenchimento da superfície inferior" msgstr "Ordem de preenchimento da superfície inferior"
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n"
"Para dentro começa cada superfície com as curvas externas mais largas, o que melhora a aderência da primeira camada em mesas onde as curvas fechadas no centro podem não aderir. Para fora começa no centro, empurrando qualquer excesso de material em direção à borda.\n"
"O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Padrão de preenchimento sólido interno" msgstr "Padrão de preenchimento sólido interno"
@@ -21261,6 +21292,31 @@ msgstr ""
"Evitar empenamento\n" "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?" "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 "Select the language"
#~ msgstr "Selecione o idioma"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Abrir menu rápido de ações"
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n"
#~ "Para fora começa no centro da superfície, de modo que qualquer excesso de material seja empurrado em direção à borda, onde é menos visível. Para dentro começa na borda e termina com as curvas fechadas no centro.\n"
#~ "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção."
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n"
#~ "Para dentro começa cada superfície com as curvas externas mais largas, o que melhora a aderência da primeira camada em mesas onde as curvas fechadas no centro podem não aderir. Para fora começa no centro, empurrando qualquer excesso de material em direção à borda.\n"
#~ "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+84 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OrcaSlicer V2.5.0\n" "Project-Id-Version: OrcaSlicer V2.5.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-02-25 13:38+0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n"
"Last-Translator: Felix14_v2\n" "Last-Translator: Felix14_v2\n"
"Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg <andylg@yandex.ru>\n"
@@ -2431,13 +2431,6 @@ msgstr "Доступно обновление. Проверьте меню па
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s был удалён." msgstr "%s был удалён."
msgid "Select the language"
msgstr "Выбор языка"
msgid "Language"
msgstr "Язык"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "Не удалось переключить язык на %s." msgstr "Не удалось переключить язык на %s."
@@ -2469,6 +2462,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Не удалось открыть меню плагинов (неизвестная ошибка)." msgstr "Не удалось открыть меню плагинов (неизвестная ошибка)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Консоль плагина" msgstr "Консоль плагина"
@@ -4577,6 +4583,12 @@ msgstr ""
"Не удалось скопировать временный G-код в целевое расположение. Возможно, накопитель защищён от записи?\n" "Не удалось скопировать временный G-код в целевое расположение. Возможно, накопитель защищён от записи?\n"
"Сообщение об ошибке: %1%" "Сообщение об ошибке: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Не удалось скопировать временный G-код в целевое расположение. Возможно, проблема с устройством хранения, попробуйте выполнить экспорт снова или использовать другое устройство. Повреждённый выходной файл G-кода находится в %1%.tmp." msgstr "Не удалось скопировать временный G-код в целевое расположение. Возможно, проблема с устройством хранения, попробуйте выполнить экспорт снова или использовать другое устройство. Повреждённый выходной файл G-кода находится в %1%.tmp."
@@ -6558,6 +6570,9 @@ msgstr "Отображение контура вокруг выбранных м
msgid "Preferences" msgid "Preferences"
msgstr "Настройки" msgstr "Настройки"
msgid "Open speed dial..."
msgstr ""
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
msgstr "Правка" msgstr "Правка"
@@ -8850,7 +8865,6 @@ msgstr "Хотите продолжить?"
msgid "Language selection" msgid "Language selection"
msgstr "Выбор языка" msgstr "Выбор языка"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Азиатско-Тихоокеанский" msgstr "Азиатско-Тихоокеанский"
@@ -8956,6 +8970,9 @@ msgstr "Расположение: "
msgid "General" msgid "General"
msgstr "Общие" msgstr "Общие"
msgid "Language"
msgstr "Язык"
msgid "Metric" msgid "Metric"
msgstr "Метрическая СИ" msgstr "Метрическая СИ"
@@ -9159,6 +9176,12 @@ msgstr "Управление несколькими устройствами Bam
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Если включено, вы сможете управлять несколькими устройствами и отправлять задания на печать на несколько устройств одновременно." msgstr "Если включено, вы сможете управлять несколькими устройствами и отправлять задания на печать на несколько устройств одновременно."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
# Запрашивать выбор режима группировки? # Запрашивать выбор режима группировки?
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Всплывающее окно для выбора режима группировки материалов" msgstr "Всплывающее окно для выбора режима группировки материалов"
@@ -9879,6 +9902,9 @@ msgstr "Копирует в этот профиль все значения, у
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Сделать независимым" msgstr "Сделать независимым"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Независимый профиль" msgstr "Независимый профиль"
@@ -11780,6 +11806,16 @@ msgstr "Показать/скрыть диалоговое окно настро
msgid "Switch table page" msgid "Switch table page"
msgstr "Переключение между вкладками" msgstr "Переключение между вкладками"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Пробел"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Показать список сочетаний клавиш" msgstr "Показать список сочетаний клавиш"
@@ -11936,13 +11972,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Переключение между подготовкой и просмотром нарезки" msgstr "Переключение между подготовкой и просмотром нарезки"
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Пробел"
msgid "Open actions speed dial"
msgstr "Открыть строку быстрых действий"
# Plater – это название библиотеки. Используется в меню горячих клавиш в качестве заголовка сочетаний клавиш, которые работают внутри пространства Plater. Как минимум на Windows не отображается. # Plater – это название библиотеки. Используется в меню горячих клавиш в качестве заголовка сочетаний клавиш, которые работают внутри пространства Plater. Как минимум на Windows не отображается.
msgid "Plater" msgid "Plater"
msgstr "Рабочая область" msgstr "Рабочая область"
@@ -12207,8 +12236,8 @@ msgstr "Восстановление отменено"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Не удалось скопировать файл %1% в %2%: %3%" msgstr "Не удалось скопировать файл %1% в %2%: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Перед обновлением профилей необходимо проверить несохранённые изменения." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Пакет профилей: " msgstr "Пакет профилей: "
@@ -12216,6 +12245,12 @@ msgstr "Пакет профилей: "
msgid " updated to " msgid " updated to "
msgstr " обновлён до " msgstr " обновлён до "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Перед обновлением профилей необходимо проверить несохранённые изменения."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Выберите G-код файл:" msgstr "Выберите G-код файл:"
@@ -13850,6 +13885,9 @@ msgstr "Ровный зигзаг"
msgid "Concentric" msgid "Concentric"
msgstr "Эквидистанты" msgstr "Эквидистанты"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Кривая Гильберта" msgstr "Кривая Гильберта"
@@ -13944,27 +13982,19 @@ msgid "Top surface fill order"
msgstr "Направление печати" msgstr "Направление печати"
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Направление печати спирали/эквидистант на верхних поверхностях. Позволяет управляемо распределять избыток материала.\n"
"• По умолчанию: использовать кратчайший путь.\n"
"• Наружу: от центра шаблона к краю модели.\n"
"• Внутрь: от края модели к центру шаблона."
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Направление печати" msgstr "Направление печати"
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Направление печати спирали/эквидистант на нижних поверхностях. Позволяет управляемо распределять избыток материала.\n"
"• По умолчанию: использовать кратчайший путь.\n"
"• Наружу: от центра шаблона к краю модели.\n"
"• Внутрь: от края модели к центру шаблона."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Шаблон сплошного заполнения" msgstr "Шаблон сплошного заполнения"
@@ -22301,6 +22331,32 @@ msgstr ""
"Предотвращение коробления материала\n" "Предотвращение коробления материала\n"
"Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?"
#~ msgid "Select the language"
#~ msgstr "Выбор языка"
#~ msgid "Open actions speed dial"
#~ msgstr "Открыть строку быстрых действий"
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Направление печати спирали/эквидистант на верхних поверхностях. Позволяет управляемо распределять избыток материала.\n"
#~ "• По умолчанию: использовать кратчайший путь.\n"
#~ "• Наружу: от центра шаблона к краю модели.\n"
#~ "• Внутрь: от края модели к центру шаблона."
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Направление печати спирали/эквидистант на нижних поверхностях. Позволяет управляемо распределять избыток материала.\n"
#~ "• По умолчанию: использовать кратчайший путь.\n"
#~ "• Наружу: от центра шаблона к краю модели.\n"
#~ "• Внутрь: от края модели к центру шаблона."
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Для нативного отображения трансляции в Wayland требуется gtksink (плагин для GStreamer). Установите необходимый пакет плагинов и перезапустите OrcaSlicer."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -2767,13 +2767,6 @@ msgstr "Det finns en uppdatering tillgänglig. Öppna dialogrutan för förinst
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s har tagits bort." msgstr "%s har tagits bort."
msgid "Select the language"
msgstr "Välj språk"
msgid "Language"
msgstr "Språk"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2811,6 +2804,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Det gick inte att öppna dialogrutan Insticksmoduler (okänt fel)." msgstr "Det gick inte att öppna dialogrutan Insticksmoduler (okänt fel)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal för insticksmoduler" msgstr "Terminal för insticksmoduler"
@@ -5066,6 +5072,12 @@ msgstr ""
"Det gick inte att kopiera den tillfälliga G-code-filen till utdatafilen. Kanske är SD-kortet skrivskyddat?\n" "Det gick inte att kopiera den tillfälliga G-code-filen till utdatafilen. Kanske är SD-kortet skrivskyddat?\n"
"Felmeddelande: %1%" "Felmeddelande: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
# AI Translated # AI Translated
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
@@ -7169,6 +7181,9 @@ msgstr "Visa en kontur runt det markerade objektet i 3D-scenen."
msgid "Preferences" msgid "Preferences"
msgstr "Inställningar" msgstr "Inställningar"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -9692,7 +9707,6 @@ msgstr "Fortsätta?"
msgid "Language selection" msgid "Language selection"
msgstr "Språkval" msgstr "Språkval"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asien-Stillahavsområdet" msgstr "Asien-Stillahavsområdet"
@@ -9812,6 +9826,9 @@ msgstr "Sökväg till aktuell instans: "
msgid "General" msgid "General"
msgstr "Allmän" msgstr "Allmän"
msgid "Language"
msgstr "Språk"
msgid "Metric" msgid "Metric"
msgstr "Metrisk" msgstr "Metrisk"
@@ -10052,6 +10069,12 @@ msgstr "Hantering av flera enheter"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Med det här alternativet aktiverat kan du skicka en uppgift till flera enheter samtidigt och hantera flera enheter." msgstr "Med det här alternativet aktiverat kan du skicka en uppgift till flera enheter samtidigt och hantera flera enheter."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
# AI Translated # AI Translated
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Visa dialogruta för val av filamentgrupperingsläge" msgstr "Visa dialogruta för val av filamentgrupperingsläge"
@@ -10851,6 +10874,9 @@ msgstr "Kopierar alla ärvda värden från den överordnade förinställningen t
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Koppla loss från överordnad" msgstr "Koppla loss från överordnad"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Unik förinställning" msgstr "Unik förinställning"
@@ -12982,6 +13008,17 @@ msgstr "Visa/Dölj 3Dconnexion enheternas inställnings dialogruta"
msgid "Switch table page" msgid "Switch table page"
msgstr "Byt tabellsida" msgstr "Byt tabellsida"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Blanksteg"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Visa tangentbordets genvägs lista" msgstr "Visa tangentbordets genvägs lista"
@@ -13147,15 +13184,6 @@ msgstr "Tabb"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Växla mellan Förbered/Förhandsgranska" msgstr "Växla mellan Förbered/Förhandsgranska"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Blanksteg"
# AI Translated
msgid "Open actions speed dial"
msgstr "Öppna snabbvalsmenyn för åtgärder"
msgid "Plater" msgid "Plater"
msgstr "Plätering/Förgyllning" msgstr "Plätering/Förgyllning"
@@ -13454,8 +13482,8 @@ msgstr "Reparation avbruten"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Kopierar fil %1% till %2% misslyckade: %3%" msgstr "Kopierar fil %1% till %2% misslyckade: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Kontrollera ej sparade ändringar innan konfigureringen uppdateras." msgstr ""
# AI Translated # AI Translated
msgid "Configuration package: " msgid "Configuration package: "
@@ -13465,6 +13493,12 @@ msgstr "Konfigurationspaket: "
msgid " updated to " msgid " updated to "
msgstr " uppdaterat till " msgstr " uppdaterat till "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Kontrollera ej sparade ändringar innan konfigureringen uppdateras."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Öppna G-kod fil:" msgstr "Öppna G-kod fil:"
@@ -15218,6 +15252,9 @@ msgstr "Justerade Rätlinjig"
msgid "Concentric" msgid "Concentric"
msgstr "Koncentrisk" msgstr "Koncentrisk"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbert kurvan" msgstr "Hilbert kurvan"
@@ -15313,29 +15350,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Fyllordning för ovansidan" msgstr "Fyllordning för ovansidan"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Riktning i vilken ovansidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n"
"Utåt börjar i ytans mitt, så att överskottsmaterial trycks ut mot kanten där det syns minst. Inåt börjar vid kanten och slutar med de trånga kurvorna i mitten.\n"
"Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Fyllordning för undersidan" msgstr "Fyllordning för undersidan"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Riktning i vilken undersidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n"
"Inåt börjar varje yta med de bredare yttre kurvorna, vilket förbättrar det första lagrets vidhäftning på byggplattor där de trånga kurvorna i mitten kanske inte fastnar. Utåt börjar i mitten och trycker överskottsmaterial mot kanten.\n"
"Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Invändigt mönster för fyllning av solida ytor" msgstr "Invändigt mönster för fyllning av solida ytor"
@@ -24380,6 +24409,33 @@ msgstr ""
"Undvik vridning\n" "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?" "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?"
#~ msgid "Select the language"
#~ msgstr "Välj språk"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Öppna snabbvalsmenyn för åtgärder"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Riktning i vilken ovansidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n"
#~ "Utåt börjar i ytans mitt, så att överskottsmaterial trycks ut mot kanten där det syns minst. Inåt börjar vid kanten och slutar med de trånga kurvorna i mitten.\n"
#~ "Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Riktning i vilken undersidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n"
#~ "Inåt börjar varje yta med de bredare yttre kurvorna, vilket förbättrar det första lagrets vidhäftning på byggplattor där de trånga kurvorna i mitten kanske inte fastnar. Utåt börjar i mitten och trycker överskottsmaterial mot kanten.\n"
#~ "Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Liveview i Wayland kräver GStreamers GTK-videosink. Installera insticksmodulen gtksink för GStreamer och starta sedan om OrcaSlicer."
+86 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-06-19 13:40+0700\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n"
"Last-Translator: Icezaza\n" "Last-Translator: Icezaza\n"
"Language-Team: Thai\n" "Language-Team: Thai\n"
@@ -2456,13 +2456,6 @@ msgstr "มีอัปเดตพร้อมใช้งาน เปิด
msgid "%s has been removed." msgid "%s has been removed."
msgstr "ลบ %s แล้ว" msgstr "ลบ %s แล้ว"
msgid "Select the language"
msgstr "เลือกภาษา"
msgid "Language"
msgstr "ภาษา"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2500,6 +2493,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "ไม่สามารถเปิดกล่องโต้ตอบปลั๊กอินได้ (ข้อผิดพลาดที่ไม่รู้จัก)" msgstr "ไม่สามารถเปิดกล่องโต้ตอบปลั๊กอินได้ (ข้อผิดพลาดที่ไม่รู้จัก)"
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "เทอร์มินัลปลั๊กอิน" msgstr "เทอร์มินัลปลั๊กอิน"
@@ -4582,6 +4588,12 @@ msgstr ""
"การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว บางทีการ์ด SD อาจถูกล็อคการเขียน?\n" "การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว บางทีการ์ด SD อาจถูกล็อคการเขียน?\n"
"ข้อความแสดงข้อผิดพลาด: %1%" "ข้อความแสดงข้อผิดพลาด: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว อาจมีปัญหากับอุปกรณ์เป้าหมาย โปรดลองส่งออกอีกครั้งหรือใช้อุปกรณ์อื่น G-code เอาต์พุตที่เสียหายอยู่ที่ %1%.tmp" msgstr "การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว อาจมีปัญหากับอุปกรณ์เป้าหมาย โปรดลองส่งออกอีกครั้งหรือใช้อุปกรณ์อื่น G-code เอาต์พุตที่เสียหายอยู่ที่ %1%.tmp"
@@ -6482,6 +6494,9 @@ msgstr "แสดงเค้าร่างรอบๆ วัตถุที
msgid "Preferences" msgid "Preferences"
msgstr "การตั้งค่า" msgstr "การตั้งค่า"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8756,7 +8771,6 @@ msgstr "ต้องการดำเนินการต่อหรือไ
msgid "Language selection" msgid "Language selection"
msgstr "การเลือกภาษา" msgstr "การเลือกภาษา"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "เอเชียแปซิฟิก" msgstr "เอเชียแปซิฟิก"
@@ -8861,6 +8875,9 @@ msgstr "เส้นทางอินสแตนซ์ปัจจุบัน
msgid "General" msgid "General"
msgstr "ทั่วไป" msgstr "ทั่วไป"
msgid "Language"
msgstr "ภาษา"
msgid "Metric" msgid "Metric"
msgstr "เมตริก" msgstr "เมตริก"
@@ -9065,6 +9082,12 @@ msgstr "การจัดการอุปกรณ์หลายเครื
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "เมื่อเปิดใช้งานตัวเลือกนี้ คุณสามารถส่งงานไปยังอุปกรณ์หลายเครื่องพร้อมกันและจัดการอุปกรณ์หลายเครื่องได้" msgstr "เมื่อเปิดใช้งานตัวเลือกนี้ คุณสามารถส่งงานไปยังอุปกรณ์หลายเครื่องพร้อมกันและจัดการอุปกรณ์หลายเครื่องได้"
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "ปรากฏขึ้นเพื่อเลือกโหมดการจัดกลุ่มเส้นพลาสติก" msgstr "ปรากฏขึ้นเพื่อเลือกโหมดการจัดกลุ่มเส้นพลาสติก"
@@ -9776,6 +9799,9 @@ msgstr "คัดลอกค่าที่สืบทอดมาจากพ
msgid "Detach from parent" msgid "Detach from parent"
msgstr "แยกออกจากพรีเซ็ตแม่" msgstr "แยกออกจากพรีเซ็ตแม่"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "พรีเซ็ตอิสระ" msgstr "พรีเซ็ตอิสระ"
@@ -11664,6 +11690,17 @@ msgstr "แสดง/ซ่อนกล่องโต้ตอบการต
msgid "Switch table page" msgid "Switch table page"
msgstr "สลับหน้าตาราง" msgstr "สลับหน้าตาราง"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "แสดงรายการแป้นพิมพ์ลัด" msgstr "แสดงรายการแป้นพิมพ์ลัด"
@@ -11824,15 +11861,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "สลับระหว่างการเตรียม/ดูตัวอย่าง" msgstr "สลับระหว่างการเตรียม/ดูตัวอย่าง"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "เปิดสปีดไดอัลการดำเนินการ"
msgid "Plater" msgid "Plater"
msgstr "เพลเตอร์" msgstr "เพลเตอร์"
@@ -12100,8 +12128,8 @@ msgstr "ยกเลิกการซ่อมแล้ว"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "การคัดลอกไฟล์ %1% ถึง %2% ล้มเหลว: %3%" msgstr "การคัดลอกไฟล์ %1% ถึง %2% ล้มเหลว: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "โปรดตรวจสอบการเปลี่ยนแปลงที่ยังไม่ได้บันทึกก่อนอัปเดตการกำหนดค่า" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "แพคเกจการกำหนดค่า:" msgstr "แพคเกจการกำหนดค่า:"
@@ -12109,6 +12137,12 @@ msgstr "แพคเกจการกำหนดค่า:"
msgid " updated to " msgid " updated to "
msgstr "อัปเดตเป็น" msgstr "อัปเดตเป็น"
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "โปรดตรวจสอบการเปลี่ยนแปลงที่ยังไม่ได้บันทึกก่อนอัปเดตการกำหนดค่า"
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "เปิดไฟล์ G-code:" msgstr "เปิดไฟล์ G-code:"
@@ -13674,6 +13708,9 @@ msgstr "จัดแนวเป็นเส้นตรง"
msgid "Concentric" msgid "Concentric"
msgstr "ศูนย์กลาง" msgstr "ศูนย์กลาง"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "ฮิลเบิร์ต เคิร์ฟ" msgstr "ฮิลเบิร์ต เคิร์ฟ"
@@ -13763,29 +13800,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "ลำดับการเติมพื้นผิวด้านบน" msgstr "ลำดับการเติมพื้นผิวด้านบน"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"ทิศทางที่พื้นผิวด้านบนถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n"
"ออกด้านนอกเริ่มที่กึ่งกลางของพื้นผิว ดังนั้นวัสดุส่วนเกินจะถูกดันไปทางขอบซึ่งมองเห็นได้น้อยที่สุด เข้าด้านในเริ่มที่ขอบและจบด้วยเส้นโค้งแคบที่กึ่งกลาง\n"
"ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้"
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "ลำดับการเติมพื้นผิวด้านล่าง" msgstr "ลำดับการเติมพื้นผิวด้านล่าง"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"ทิศทางที่พื้นผิวด้านล่างถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n"
"เข้าด้านในเริ่มแต่ละพื้นผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยเพิ่มการยึดเกาะเลเยอร์แรกบนฐานพิมพ์ที่เส้นโค้งแคบตรงกลางอาจไม่ติด ออกด้านนอกเริ่มที่กึ่งกลาง โดยดันวัสดุส่วนเกินไปทางขอบ\n"
"ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้"
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "รูปแบบไส้ในของแข็งภายใน" msgstr "รูปแบบไส้ในของแข็งภายใน"
@@ -21680,6 +21709,33 @@ msgstr ""
"หลีกเลี่ยงการบิดเบี้ยว\n" "หลีกเลี่ยงการบิดเบี้ยว\n"
"คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้"
#~ msgid "Select the language"
#~ msgstr "เลือกภาษา"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "เปิดสปีดไดอัลการดำเนินการ"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "ทิศทางที่พื้นผิวด้านบนถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n"
#~ "ออกด้านนอกเริ่มที่กึ่งกลางของพื้นผิว ดังนั้นวัสดุส่วนเกินจะถูกดันไปทางขอบซึ่งมองเห็นได้น้อยที่สุด เข้าด้านในเริ่มที่ขอบและจบด้วยเส้นโค้งแคบที่กึ่งกลาง\n"
#~ "ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้"
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "ทิศทางที่พื้นผิวด้านล่างถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n"
#~ "เข้าด้านในเริ่มแต่ละพื้นผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยเพิ่มการยึดเกาะเลเยอร์แรกบนฐานพิมพ์ที่เส้นโค้งแคบตรงกลางอาจไม่ติด ออกด้านนอกเริ่มที่กึ่งกลาง โดยดันวัสดุส่วนเกินไปทางขอบ\n"
#~ "ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้"
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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" #~ msgstr "Native Wayland liveview ต้องใช้ GStreamer GTK video sink โปรดติดตั้งปลั๊กอิน gtksink สำหรับ GStreamer จากนั้นรีสตาร์ท OrcaSlicer"
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-08-21 23:18+0300\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n"
"Last-Translator: GlauTech\n" "Last-Translator: GlauTech\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2480,13 +2480,6 @@ msgstr "Kullanılabilir bir güncelleme var. Güncellemek için ön ayar paketi
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s kaldırıldı." msgstr "%s kaldırıldı."
msgid "Select the language"
msgstr "Dili seçin"
msgid "Language"
msgstr "Dil"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2524,6 +2517,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Eklentiler iletişim kutusu açılamadı (bilinmeyen hata)." msgstr "Eklentiler iletişim kutusu açılamadı (bilinmeyen hata)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Eklenti Terminali" msgstr "Eklenti Terminali"
@@ -4641,6 +4647,12 @@ msgstr ""
"Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Belki SD kart yazma kilitlidir.\n" "Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Belki SD kart yazma kilitlidir.\n"
"Hata mesajı: %1%" "Hata mesajı: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Hedef cihazda sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz kullanmayı deneyin. Bozuk çıktı G-code %1%.tmp konumunda." msgstr "Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Hedef cihazda sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz kullanmayı deneyin. Bozuk çıktı G-code %1%.tmp konumunda."
@@ -6550,6 +6562,9 @@ msgstr "3D sahnede seçilen nesnenin etrafındaki ana hatları göster."
msgid "Preferences" msgid "Preferences"
msgstr "Tercihler" msgstr "Tercihler"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8858,7 +8873,6 @@ msgstr "Devam etmek istiyor musun?"
msgid "Language selection" msgid "Language selection"
msgstr "Dil seçimi" msgstr "Dil seçimi"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Asya Pasifik" msgstr "Asya Pasifik"
@@ -8963,6 +8977,9 @@ msgstr "Mevcut Örnek Yolu: "
msgid "General" msgid "General"
msgstr "Genel" msgstr "Genel"
msgid "Language"
msgstr "Dil"
msgid "Metric" msgid "Metric"
msgstr "Metrik" msgstr "Metrik"
@@ -9170,6 +9187,12 @@ msgstr "Çoklu cihaz yönetimi"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Bu seçenek etkinleştirildiğinde, aynı anda birden fazla cihaza bir görev gönderebilir ve birden fazla cihazı yönetebilirsiniz." msgstr "Bu seçenek etkinleştirildiğinde, aynı anda birden fazla cihaza bir görev gönderebilir ve birden fazla cihazı yönetebilirsiniz."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Filament gruplama modunu seçmek için açılır pencere" msgstr "Filament gruplama modunu seçmek için açılır pencere"
@@ -9920,6 +9943,9 @@ msgstr "Üst ön ayardan devralınan tüm değerleri bu ön ayara kopyalar ve ü
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Ebeveynden ayrıl" msgstr "Ebeveynden ayrıl"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Bağımsız ön ayar" msgstr "Bağımsız ön ayar"
@@ -11850,6 +11876,17 @@ msgstr "3Dconnexion cihazları ayarları iletişim kutusunu Göster/Gizle"
msgid "Switch table page" msgid "Switch table page"
msgstr "Tablo sayfasını değiştir" msgstr "Tablo sayfasını değiştir"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Boşluk"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Klavye kısayolları listesini göster" msgstr "Klavye kısayolları listesini göster"
@@ -12012,15 +12049,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Hazırlama/Önizleme arasında geçiş yap" msgstr "Hazırlama/Önizleme arasında geçiş yap"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Boşluk"
# AI Translated
msgid "Open actions speed dial"
msgstr "Eylem hızlı erişim menüsünü aç"
msgid "Plater" msgid "Plater"
msgstr "Plakacı" msgstr "Plakacı"
@@ -12295,8 +12323,8 @@ msgstr "Onarım iptal edildi"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "%1% dosyasının %2% dosyasına kopyalanması başarısız oldu: %3%" msgstr "%1% dosyasının %2% dosyasına kopyalanması başarısız oldu: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Yapılandırma güncellemelerinden önce kaydedilmemiş değişiklikleri kontrol etmeniz gerekir." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Yapılandırma paketi: " msgstr "Yapılandırma paketi: "
@@ -12304,6 +12332,12 @@ msgstr "Yapılandırma paketi: "
msgid " updated to " msgid " updated to "
msgstr " güncellendi " msgstr " güncellendi "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Yapılandırma güncellemelerinden önce kaydedilmemiş değişiklikleri kontrol etmeniz gerekir."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "G-code dosyasını açın:" msgstr "G-code dosyasını açın:"
@@ -13922,6 +13956,9 @@ msgstr "Hizalanmış doğrusal"
msgid "Concentric" msgid "Concentric"
msgstr "Konsantrik" msgstr "Konsantrik"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Hilbert eğrisi" msgstr "Hilbert eğrisi"
@@ -14011,29 +14048,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Üst yüzey doldurma sırası" msgstr "Üst yüzey doldurma sırası"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken üst yüzeylerin doldurulma yönü.\n"
"Dışarı, yüzeyin merkezinden başlar; böylece fazla malzeme en az göründüğü kenara doğru itilir. İçeri kenardan başlar ve merkezdeki dar kavislerle biter.\n"
"Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Alt yüzey doldurma sırası" msgstr "Alt yüzey doldurma sırası"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken alt yüzeylerin doldurulma yönü.\n"
"İçeri, her yüzeye daha geniş dış kavislerle başlar; bu da merkezdeki dar kavislerin yapışmayabileceği yapı plakalarında ilk katman yapışmasını iyileştirir. Dışarı merkezden başlar ve fazla malzemeyi kenara doğru iter.\n"
"Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "İç katı dolgu deseni" msgstr "İç katı dolgu deseni"
@@ -22135,6 +22164,33 @@ msgstr ""
"Eğilmeyi önleyin\n" "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?" "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?"
#~ msgid "Select the language"
#~ msgstr "Dili seçin"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Eylem hızlı erişim menüsünü aç"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken üst yüzeylerin doldurulma yönü.\n"
#~ "Dışarı, yüzeyin merkezinden başlar; böylece fazla malzeme en az göründüğü kenara doğru itilir. İçeri kenardan başlar ve merkezdeki dar kavislerle biter.\n"
#~ "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken alt yüzeylerin doldurulma yönü.\n"
#~ "İçeri, her yüzeye daha geniş dış kavislerle başlar; bu da merkezdeki dar kavislerin yapışmayabileceği yapı plakalarında ilk katman yapışmasını iyileştirir. Dışarı merkezden başlar ve fazla malzemeyi kenara doğru iter.\n"
#~ "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+87 -31
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: orcaslicerua\n" "Project-Id-Version: orcaslicerua\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-07-17 16:25+0300\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n"
"Last-Translator: Andrij Mizyk <andm1zyk@proton.me>\n" "Last-Translator: Andrij Mizyk <andm1zyk@proton.me>\n"
"Language-Team: Ukrainian\n" "Language-Team: Ukrainian\n"
@@ -2424,13 +2424,6 @@ msgstr "Доступне оновлення. Відкрийте вікно на
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s вилучено." msgstr "%s вилучено."
msgid "Select the language"
msgstr "Вибрати мову"
msgid "Language"
msgstr "Мова"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "Не вдалося перемкнути Orca Slicer на мову %s." msgstr "Не вдалося перемкнути Orca Slicer на мову %s."
@@ -2465,6 +2458,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Не вдалося відкрити діалогове вікно плагінів (невідома помилка)." msgstr "Не вдалося відкрити діалогове вікно плагінів (невідома помилка)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Термінал плагіна" msgstr "Термінал плагіна"
@@ -4577,6 +4583,12 @@ msgstr ""
"Не вдалося скопіювати тимчасовий G-код у місцезнаходження вихідного файлу G-коду. Чи може ваша SD карта захищена від запису?\n" "Не вдалося скопіювати тимчасовий G-код у місцезнаходження вихідного файлу G-коду. Чи може ваша SD карта захищена від запису?\n"
"Повідомлення про помилку: %1%" "Повідомлення про помилку: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Не вдалося скопіювати тимчасовий G-код у вихідний G-код. Можливо, проблема з цільовим пристроєм, спробуйте експортувати ще раз або використати інший пристрій. Пошкоджений вихідний G-код - %1% .tmp." msgstr "Не вдалося скопіювати тимчасовий G-код у вихідний G-код. Можливо, проблема з цільовим пристроєм, спробуйте експортувати ще раз або використати інший пристрій. Пошкоджений вихідний G-код - %1% .tmp."
@@ -6519,6 +6531,9 @@ msgstr "Показувати контур навколо виділеного о
msgid "Preferences" msgid "Preferences"
msgstr "Налаштування" msgstr "Налаштування"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8872,7 +8887,6 @@ msgstr "Ви хочете продовжувати?"
msgid "Language selection" msgid "Language selection"
msgstr "Вибір мови" msgstr "Вибір мови"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Азіатсько-Тихоокеанський регіон" msgstr "Азіатсько-Тихоокеанський регіон"
@@ -8980,6 +8994,9 @@ msgstr "Шлях Поточної Інсталяції: "
msgid "General" msgid "General"
msgstr "Загальні" msgstr "Загальні"
msgid "Language"
msgstr "Мова"
msgid "Metric" msgid "Metric"
msgstr "Метрика" msgstr "Метрика"
@@ -9188,6 +9205,12 @@ msgstr "Керування кількома пристроями"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "З цією опцією ввімкненою, ви можете відправляти завдання на кілька пристроїв одночасно та керувати декількома пристроями." msgstr "З цією опцією ввімкненою, ви можете відправляти завдання на кілька пристроїв одночасно та керувати декількома пристроями."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
# AI Translated # AI Translated
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Показувати вікно вибору режиму групування філаментів" msgstr "Показувати вікно вибору режиму групування філаментів"
@@ -9924,6 +9947,9 @@ msgstr "Копіює в цей пресет усі значення, успад
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Відʼєднати від батьківського" msgstr "Відʼєднати від батьківського"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Незалежний пресет" msgstr "Незалежний пресет"
@@ -11912,6 +11938,17 @@ msgstr "Показати/приховати діалог налаштувань
msgid "Switch table page" msgid "Switch table page"
msgstr "Перемкнути сторінку таблиці" msgstr "Перемкнути сторінку таблиці"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Пробіл"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Показати список клавіш" msgstr "Показати список клавіш"
@@ -12074,15 +12111,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Переключення між Підготовка/Попередній перегляд" msgstr "Переключення між Підготовка/Попередній перегляд"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Пробіл"
# AI Translated
msgid "Open actions speed dial"
msgstr "Відкрити панель швидких дій"
msgid "Plater" msgid "Plater"
msgstr "Тарілка" msgstr "Тарілка"
@@ -12353,9 +12381,8 @@ msgstr "Ремонт скасовано"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Копіювання %1% у %2% не вдалося: %3%" msgstr "Копіювання %1% у %2% не вдалося: %3%"
# AI Translated msgid "Downloading new vendor profile(s): "
msgid "Please check any unsaved changes before updating the configuration." msgstr ""
msgstr "Будь ласка, перевірте незбережені зміни перед оновленням конфігурації."
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Пакет конфігурації: " msgstr "Пакет конфігурації: "
@@ -12363,6 +12390,13 @@ msgstr "Пакет конфігурації: "
msgid " updated to " msgid " updated to "
msgstr " оновлено до " msgstr " оновлено до "
msgid "Failed to download vendor profile(s): "
msgstr ""
# AI Translated
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Будь ласка, перевірте незбережені зміни перед оновленням конфігурації."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Відкрити файл G-коду:" msgstr "Відкрити файл G-коду:"
@@ -14018,6 +14052,9 @@ msgstr "Вирівняний прямолінійний"
msgid "Concentric" msgid "Concentric"
msgstr "Концентричний" msgstr "Концентричний"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Крива Гільберта" msgstr "Крива Гільберта"
@@ -14106,29 +14143,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Порядок заповнення верхньої поверхні" msgstr "Порядок заповнення верхньої поверхні"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Напрямок, у якому заповнюються верхні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n"
"Назовні починає з центру поверхні, тож надлишок матеріалу виштовхується до краю, де він найменш помітний. Усередину починає з краю та завершується щільними кривими в центрі.\n"
"Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Порядок заповнення нижньої поверхні" msgstr "Порядок заповнення нижньої поверхні"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Напрямок, у якому заповнюються нижні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n"
"Усередину починає кожну поверхню з ширших зовнішніх кривих, що покращує зчеплення першого шару на столах, де щільні криві в центрі можуть не прилипати. Назовні починає з центру, виштовхуючи надлишок матеріалу до краю.\n"
"Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Шаблон внутрішнього суцільного заповнення" msgstr "Шаблон внутрішнього суцільного заповнення"
@@ -22296,6 +22325,33 @@ msgstr ""
"Уникнення деформації\n" "Уникнення деформації\n"
"Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?"
#~ msgid "Select the language"
#~ msgstr "Вибрати мову"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Відкрити панель швидких дій"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Напрямок, у якому заповнюються верхні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n"
#~ "Назовні починає з центру поверхні, тож надлишок матеріалу виштовхується до краю, де він найменш помітний. Усередину починає з краю та завершується щільними кривими в центрі.\n"
#~ "Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Напрямок, у якому заповнюються нижні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n"
#~ "Усередину починає кожну поверхню з ширших зовнішніх кривих, що покращує зчеплення першого шару на столах, де щільні криві в центрі можуть не прилипати. Назовні починає з центру, виштовхуючи надлишок матеріалу до краю.\n"
#~ "Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ msgstr "Нативний перегляд у Wayland потребує відеоприймача GStreamer GTK. Встановіть плагін gtksink для GStreamer, а потім перезапустіть OrcaSlicer."
+86 -30
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2025-10-02 17:43+0700\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: hainguyen.ts13@gmail.com\n" "Language-Team: hainguyen.ts13@gmail.com\n"
@@ -2568,13 +2568,6 @@ msgstr "Có bản cập nhật khả dụng. Hãy mở hộp thoại gói cài
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s đã bị xóa." msgstr "%s đã bị xóa."
msgid "Select the language"
msgstr "Chọn ngôn ngữ"
msgid "Language"
msgstr "Ngôn ngữ"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2612,6 +2605,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "Không thể mở hộp thoại Plugin (lỗi không xác định)." msgstr "Không thể mở hộp thoại Plugin (lỗi không xác định)."
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "Terminal plugin" msgstr "Terminal plugin"
@@ -4834,6 +4840,12 @@ msgstr ""
"Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể thẻ SD bị khóa ghi?\n" "Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể thẻ SD bị khóa ghi?\n"
"Thông báo lỗi: %1%" "Thông báo lỗi: %1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể có vấn đề với thiết bị đích, vui lòng thử xuất lại hoặc dùng thiết bị khác. G-code đầu ra bị hỏng ở %1%.tmp." msgstr "Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể có vấn đề với thiết bị đích, vui lòng thử xuất lại hoặc dùng thiết bị khác. G-code đầu ra bị hỏng ở %1%.tmp."
@@ -6871,6 +6883,9 @@ msgstr "Hiện đường viền xung quanh vật thể đã chọn trong cảnh
msgid "Preferences" msgid "Preferences"
msgstr "Tùy chọn" msgstr "Tùy chọn"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -9307,7 +9322,6 @@ msgstr "Bạn có muốn tiếp tục?"
msgid "Language selection" msgid "Language selection"
msgstr "Chọn ngôn ngữ" msgstr "Chọn ngôn ngữ"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "Châu Á-Thái Bình Dương" msgstr "Châu Á-Thái Bình Dương"
@@ -9423,6 +9437,9 @@ msgstr "Đường dẫn phiên bản hiện tại: "
msgid "General" msgid "General"
msgstr "Chung" msgstr "Chung"
msgid "Language"
msgstr "Ngôn ngữ"
msgid "Metric" msgid "Metric"
msgstr "Hệ mét" msgstr "Hệ mét"
@@ -9651,6 +9668,12 @@ msgstr "Quản lý nhiều thiết bị"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "Với tùy chọn này được bật, bạn có thể gửi tác vụ đến nhiều thiết bị cùng lúc và quản lý nhiều thiết bị." msgstr "Với tùy chọn này được bật, bạn có thể gửi tác vụ đến nhiều thiết bị cùng lúc và quản lý nhiều thiết bị."
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
# AI Translated # AI Translated
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "Hiện cửa sổ để chọn chế độ nhóm filament" msgstr "Hiện cửa sổ để chọn chế độ nhóm filament"
@@ -10437,6 +10460,9 @@ msgstr "Sao chép tất cả các giá trị kế thừa từ preset cha vào pr
msgid "Detach from parent" msgid "Detach from parent"
msgstr "Tách khỏi vật thể cha" msgstr "Tách khỏi vật thể cha"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "Preset độc lập" msgstr "Preset độc lập"
@@ -12465,6 +12491,17 @@ msgstr "Hiển thị/Ẩn hộp thoại cài đặt thiết bị 3Dconnexion"
msgid "Switch table page" msgid "Switch table page"
msgstr "Chuyển trang bảng" msgstr "Chuyển trang bảng"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "Hiển thị danh sách phím tắt" msgstr "Hiển thị danh sách phím tắt"
@@ -12631,15 +12668,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "Chuyển đổi giữa Chuẩn bị/Xem trước" msgstr "Chuyển đổi giữa Chuẩn bị/Xem trước"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "Mở vòng quay thao tác nhanh"
msgid "Plater" msgid "Plater"
msgstr "Bàn in" msgstr "Bàn in"
@@ -12925,8 +12953,8 @@ msgstr "Sửa chữa đã hủy"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "Sao chép file %1% sang %2% thất bại: %3%" msgstr "Sao chép file %1% sang %2% thất bại: %3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "Cần kiểm tra các thay đổi chưa lưu trước khi cập nhật cấu hình." msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "Gói cấu hình: " msgstr "Gói cấu hình: "
@@ -12934,6 +12962,12 @@ msgstr "Gói cấu hình: "
msgid " updated to " msgid " updated to "
msgstr " đã cập nhật lên " msgstr " đã cập nhật lên "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "Cần kiểm tra các thay đổi chưa lưu trước khi cập nhật cấu hình."
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "Mở file G-code:" msgstr "Mở file G-code:"
@@ -14585,6 +14619,9 @@ msgstr "Thẳng hàng căn chỉnh"
msgid "Concentric" msgid "Concentric"
msgstr "Đồng tâm" msgstr "Đồng tâm"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "Đường cong Hilbert" msgstr "Đường cong Hilbert"
@@ -14674,29 +14711,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "Thứ tự lấp bề mặt trên" msgstr "Thứ tự lấp bề mặt trên"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Hướng lấp các bề mặt trên khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n"
"Ra ngoài bắt đầu từ tâm bề mặt, nhờ đó vật liệu dư bị đẩy về phía mép nơi ít nhìn thấy nhất. Vào trong bắt đầu từ mép và kết thúc bằng các đường cong hẹp ở tâm.\n"
"Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ."
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "Thứ tự lấp bề mặt dưới" msgstr "Thứ tự lấp bề mặt dưới"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"Hướng lấp các bề mặt dưới khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n"
"Vào trong bắt đầu mỗi bề mặt bằng các đường cong ngoài rộng hơn, giúp cải thiện độ bám lớp đầu tiên trên những bàn in mà các đường cong hẹp ở tâm có thể không dính. Ra ngoài bắt đầu từ tâm, đẩy vật liệu dư về phía mép.\n"
"Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ."
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "Mẫu infill đặc bên trong" msgstr "Mẫu infill đặc bên trong"
@@ -23019,6 +23048,33 @@ msgstr ""
"Tránh cong vênh\n" "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?" "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?"
#~ msgid "Select the language"
#~ msgstr "Chọn ngôn ngữ"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "Mở vòng quay thao tác nhanh"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Hướng lấp các bề mặt trên khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n"
#~ "Ra ngoài bắt đầu từ tâm bề mặt, nhờ đó vật liệu dư bị đẩy về phía mép nơi ít nhìn thấy nhất. Vào trong bắt đầu từ mép và kết thúc bằng các đường cong hẹp ở tâm.\n"
#~ "Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ."
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "Hướng lấp các bề mặt dưới khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n"
#~ "Vào trong bắt đầu mỗi bề mặt bằng các đường cong ngoài rộng hơn, giúp cải thiện độ bám lớp đầu tiên trên những bàn in mà các đường cong hẹp ở tâm có thể không dính. Ra ngoài bắt đầu từ tâm, đẩy vật liệu dư về phía mép.\n"
#~ "Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ."
# AI Translated # AI Translated
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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." #~ 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."
+86 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Slic3rPE\n" "Project-Id-Version: Slic3rPE\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2026-06-11 12:37-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n"
"Last-Translator: Handle <mail@bysb.net>\n" "Last-Translator: Handle <mail@bysb.net>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2361,13 +2361,6 @@ msgstr "有更新可用。打开预设包对话框进行更新。"
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s 已被移除。" msgstr "%s 已被移除。"
msgid "Select the language"
msgstr "选择语言"
msgid "Language"
msgstr "语言"
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
msgstr "切换 Orca Slicer 语言到 %s 失败。" msgstr "切换 Orca Slicer 语言到 %s 失败。"
@@ -2400,6 +2393,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "无法打开插件对话框(未知错误)。" msgstr "无法打开插件对话框(未知错误)。"
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "插件终端" msgstr "插件终端"
@@ -4437,6 +4443,12 @@ msgstr ""
"将临时 G-Code 复制到输出 G-Code 失败。也许 SD 卡被写锁定了?\n" "将临时 G-Code 复制到输出 G-Code 失败。也许 SD 卡被写锁定了?\n"
"错误消息:%1%" "错误消息:%1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "将临时 G-Code 复制到输出 G-Code 失败。目标设备可能有问题,请再次尝试导出或使用其他设备。损坏的输出 G-Code 在 %1%.tmp。" msgstr "将临时 G-Code 复制到输出 G-Code 失败。目标设备可能有问题,请再次尝试导出或使用其他设备。损坏的输出 G-Code 在 %1%.tmp。"
@@ -6337,6 +6349,9 @@ msgstr "在3D场景中显示选中对象的轮廓"
msgid "Preferences" msgid "Preferences"
msgstr "偏好设置" msgstr "偏好设置"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8585,7 +8600,6 @@ msgstr "是否继续?"
msgid "Language selection" msgid "Language selection"
msgstr "语言选择" msgstr "语言选择"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "亚太" msgstr "亚太"
@@ -8683,6 +8697,9 @@ msgstr "当前实例路径"
msgid "General" msgid "General"
msgstr "常规" msgstr "常规"
msgid "Language"
msgstr "语言"
msgid "Metric" msgid "Metric"
msgstr "公制(Metric)" msgstr "公制(Metric)"
@@ -8887,6 +8904,12 @@ msgstr "多设备管理"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "启用此选项后,您可以同时向多个设备发送任务并管理多个设备。" msgstr "启用此选项后,您可以同时向多个设备发送任务并管理多个设备。"
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "弹出选择耗材丝分组模式" msgstr "弹出选择耗材丝分组模式"
@@ -9598,6 +9621,9 @@ msgstr "将父预设继承的所有数值复制到当前预设,并解除继承
msgid "Detach from parent" msgid "Detach from parent"
msgstr "与父级分离" msgstr "与父级分离"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "独立预设" msgstr "独立预设"
@@ -11453,6 +11479,17 @@ msgstr "显示/隐藏 3Dconnexion设备的设置对话框"
msgid "Switch table page" msgid "Switch table page"
msgstr "切换标签页" msgstr "切换标签页"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "显示键盘快捷键列表" msgstr "显示键盘快捷键列表"
@@ -11620,15 +11657,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "准备/预览之间的切换" msgstr "准备/预览之间的切换"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "打开快捷操作盘"
msgid "Plater" msgid "Plater"
msgstr "准备" msgstr "准备"
@@ -11896,8 +11924,8 @@ msgstr "修复被取消"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "从%1%拷贝文件到%2%失败:%3%" msgstr "从%1%拷贝文件到%2%失败:%3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "需要在配置更新之前检查没有保存的参数修改。" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "配置包:" msgstr "配置包:"
@@ -11905,6 +11933,12 @@ msgstr "配置包:"
msgid " updated to " msgid " updated to "
msgstr "更新到" msgstr "更新到"
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "需要在配置更新之前检查没有保存的参数修改。"
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "打开G-code文件:" msgstr "打开G-code文件:"
@@ -13431,6 +13465,9 @@ msgstr "直线排列"
msgid "Concentric" msgid "Concentric"
msgstr "同心" msgstr "同心"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "希尔伯特曲线" msgstr "希尔伯特曲线"
@@ -13524,29 +13561,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "顶面填充顺序" msgstr "顶面填充顺序"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充顶面的方向。\n"
"向外从表面中心开始,因此多余的材料会被推向边缘等最不显眼的位置。向内从边缘开始,并以中心处的紧密曲线结束。\n"
"默认使用最短路径排序,可能沿任一方向进行。"
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "底面填充顺序" msgstr "底面填充顺序"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充底面的方向。\n"
"向内以较宽的外侧曲线开始每个表面,这可以改善在热床上的首层附着,因为中心处的紧密曲线可能无法粘牢。向外从中心开始,将多余的材料推向边缘。\n"
"默认使用最短路径排序,可能沿任一方向进行。"
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "内部实心填充图案" msgstr "内部实心填充图案"
@@ -21428,6 +21457,33 @@ msgstr ""
"避免翘曲\n" "避免翘曲\n"
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
#~ msgid "Select the language"
#~ msgstr "选择语言"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "打开快捷操作盘"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充顶面的方向。\n"
#~ "向外从表面中心开始,因此多余的材料会被推向边缘等最不显眼的位置。向内从边缘开始,并以中心处的紧密曲线结束。\n"
#~ "默认使用最短路径排序,可能沿任一方向进行。"
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充底面的方向。\n"
#~ "向内以较宽的外侧曲线开始每个表面,这可以改善在热床上的首层附着,因为中心处的紧密曲线可能无法粘牢。向外从中心开始,将多余的材料推向边缘。\n"
#~ "默认使用最短路径排序,可能沿任一方向进行。"
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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。" #~ msgstr "原生 Wayland 实时画面需要 GStreamer GTK 视频接收器。请安装 GStreamer 的 gtksink 插件,然后重启 OrcaSlicer。"
+86 -30
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-03 10:27+0800\n" "POT-Creation-Date: 2026-09-11 12:33+0800\n"
"PO-Revision-Date: 2025-11-28 13:48-0600\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n"
"Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -2425,13 +2425,6 @@ msgstr "有可用的更新。請開啟預設組合對話框進行更新。"
msgid "%s has been removed." msgid "%s has been removed."
msgstr "%s 已移除。" msgstr "%s 已移除。"
msgid "Select the language"
msgstr "選擇語言"
msgid "Language"
msgstr "語言"
# AI Translated # AI Translated
#, c-format, boost-format #, c-format, boost-format
msgid "Switching Orca Slicer to language %s failed." msgid "Switching Orca Slicer to language %s failed."
@@ -2469,6 +2462,19 @@ msgstr ""
msgid "Failed to open the Plugins dialog (unknown error)." msgid "Failed to open the Plugins dialog (unknown error)."
msgstr "無法開啟外掛對話框(未知錯誤)。" msgstr "無法開啟外掛對話框(未知錯誤)。"
msgid "Plugins refreshed."
msgstr ""
#, c-format, boost-format
msgid "Failed to refresh plugins: %s"
msgstr ""
msgid "Select plugin package"
msgstr ""
msgid "Plugin files (*.py;*.whl)|*.py;*.whl"
msgstr ""
# AI Translated # AI Translated
msgid "Plugin Terminal" msgid "Plugin Terminal"
msgstr "外掛終端機" msgstr "外掛終端機"
@@ -4550,6 +4556,12 @@ msgstr ""
"錯誤訊息:%1%將臨時的 G-code 複製到輸出的 G-code 失敗 ,也許 SD 卡寫入被鎖定?\n" "錯誤訊息:%1%將臨時的 G-code 複製到輸出的 G-code 失敗 ,也許 SD 卡寫入被鎖定?\n"
"錯誤訊息:%1%" "錯誤訊息:%1%"
#, boost-format
msgid ""
"Copying of the temporary G-code to the output G-code failed.\n"
"Error message: %1%"
msgstr ""
#, boost-format #, boost-format
msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."
msgstr "將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。" msgstr "將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。"
@@ -6467,6 +6479,9 @@ msgstr "在 3D 場景中顯示選定物件的輪廓"
msgid "Preferences" msgid "Preferences"
msgstr "偏好設定" msgstr "偏好設定"
msgid "Open speed dial..."
msgstr ""
# AI Translated # AI Translated
msgctxt "Menu" msgctxt "Menu"
msgid "Edit" msgid "Edit"
@@ -8751,7 +8766,6 @@ msgstr "是否繼續?"
msgid "Language selection" msgid "Language selection"
msgstr "語言選擇" msgstr "語言選擇"
msgid "Asia-Pacific" msgid "Asia-Pacific"
msgstr "亞太" msgstr "亞太"
@@ -8856,6 +8870,9 @@ msgstr "目前實例路徑:"
msgid "General" msgid "General"
msgstr "一般" msgstr "一般"
msgid "Language"
msgstr "語言"
msgid "Metric" msgid "Metric"
msgstr "公制" msgstr "公制"
@@ -9060,6 +9077,12 @@ msgstr "多臺裝置管理"
msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices." msgid "With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."
msgstr "啟用時可以同時傳送到並管理多個機臺。" msgstr "啟用時可以同時傳送到並管理多個機臺。"
msgid "Open the Speed Dial with the Space key"
msgstr ""
msgid "When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."
msgstr ""
msgid "Pop up to select filament grouping mode" msgid "Pop up to select filament grouping mode"
msgstr "彈出視窗選擇線材分組模式" msgstr "彈出視窗選擇線材分組模式"
@@ -9771,6 +9794,9 @@ msgstr "將父配置繼承的所有數值複製到目前的配置,並解除繼
msgid "Detach from parent" msgid "Detach from parent"
msgstr "從父預設分離" msgstr "從父預設分離"
msgid "Save without parent"
msgstr ""
# AI Translated # AI Translated
msgid "Unique preset" msgid "Unique preset"
msgstr "獨立配置" msgstr "獨立配置"
@@ -11661,6 +11687,17 @@ msgstr "顯示/隱藏 3Dconnexion 裝置的設定對話框"
msgid "Switch table page" msgid "Switch table page"
msgstr "切換表單頁面" msgstr "切換表單頁面"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
msgid "Open speed dial"
msgstr ""
msgid "Run a Speed Dial favourite (while the Speed Dial is open)"
msgstr ""
msgid "Show keyboard shortcuts list" msgid "Show keyboard shortcuts list"
msgstr "顯示鍵盤快速鍵清單" msgstr "顯示鍵盤快速鍵清單"
@@ -11825,15 +11862,6 @@ msgstr "Tab"
msgid "Switch between Prepare/Preview" msgid "Switch between Prepare/Preview"
msgstr "在準備/預覽模式之中切換" msgstr "在準備/預覽模式之中切換"
# AI Translated
msgctxt "Keyboard Shortcut"
msgid "Space"
msgstr "Space"
# AI Translated
msgid "Open actions speed dial"
msgstr "開啟操作快捷選單"
msgid "Plater" msgid "Plater"
msgstr "準備" msgstr "準備"
@@ -12100,8 +12128,8 @@ msgstr "修復被取消"
msgid "Copying of file %1% to %2% failed: %3%" msgid "Copying of file %1% to %2% failed: %3%"
msgstr "從 %1% 複製檔案到 %2% 失敗:%3%" msgstr "從 %1% 複製檔案到 %2% 失敗:%3%"
msgid "Please check any unsaved changes before updating the configuration." msgid "Downloading new vendor profile(s): "
msgstr "在設定更新之前需要檢查未儲存的設定變更。" msgstr ""
msgid "Configuration package: " msgid "Configuration package: "
msgstr "設定檔:" msgstr "設定檔:"
@@ -12109,6 +12137,12 @@ msgstr "設定檔:"
msgid " updated to " msgid " updated to "
msgstr "更新到 " msgstr "更新到 "
msgid "Failed to download vendor profile(s): "
msgstr ""
msgid "Please check any unsaved changes before updating the configuration."
msgstr "在設定更新之前需要檢查未儲存的設定變更。"
msgid "Open G-code file:" msgid "Open G-code file:"
msgstr "開啟 G-code 檔案:" msgstr "開啟 G-code 檔案:"
@@ -13646,6 +13680,9 @@ msgstr "直線排列"
msgid "Concentric" msgid "Concentric"
msgstr "同心" msgstr "同心"
msgid "Spiral Inset"
msgstr ""
msgid "Hilbert Curve" msgid "Hilbert Curve"
msgstr "希爾伯特曲線" msgstr "希爾伯特曲線"
@@ -13735,29 +13772,21 @@ msgstr ""
msgid "Top surface fill order" msgid "Top surface fill order"
msgstr "頂面填充順序" msgstr "頂面填充順序"
# AI Translated
msgid "" msgid ""
"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,頂面填充的方向。\n"
"「向外」從表面中心開始,因此多餘的材料會被推向最不明顯的邊緣。「向內」從邊緣開始,並以中心的緊密曲線結束。\n"
"預設使用最短路徑排序,方向可能為任一種。"
# AI Translated # AI Translated
msgid "Bottom surface fill order" msgid "Bottom surface fill order"
msgstr "底面填充順序" msgstr "底面填充順序"
# AI Translated
msgid "" msgid ""
"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
"Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
"Default uses shortest-path ordering, which may run in either direction." "Default uses shortest-path ordering, which may run in either direction."
msgstr "" msgstr ""
"使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,底面填充的方向。\n"
"「向內」讓每個表面從較寬的外側曲線開始,可改善中心緊密曲線可能無法附著的列印板上的第一層附著。「向外」從中心開始,將多餘的材料推向邊緣。\n"
"預設使用最短路徑排序,方向可能為任一種。"
msgid "Internal solid infill pattern" msgid "Internal solid infill pattern"
msgstr "內部實心填充圖案" msgstr "內部實心填充圖案"
@@ -21642,6 +21671,33 @@ msgstr ""
"避免翹曲\n" "避免翹曲\n"
"您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。"
#~ msgid "Select the language"
#~ msgstr "選擇語言"
# AI Translated
#~ msgid "Open actions speed dial"
#~ msgstr "開啟操作快捷選單"
# AI Translated
#~ msgid ""
#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,頂面填充的方向。\n"
#~ "「向外」從表面中心開始,因此多餘的材料會被推向最不明顯的邊緣。「向內」從邊緣開始,並以中心的緊密曲線結束。\n"
#~ "預設使用最短路徑排序,方向可能為任一種。"
# AI Translated
#~ msgid ""
#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n"
#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n"
#~ "Default uses shortest-path ordering, which may run in either direction."
#~ msgstr ""
#~ "使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,底面填充的方向。\n"
#~ "「向內」讓每個表面從較寬的外側曲線開始,可改善中心緊密曲線可能無法附著的列印板上的第一層附著。「向外」從中心開始,將多餘的材料推向邊緣。\n"
#~ "預設使用最短路徑排序,方向可能為任一種。"
#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." #~ 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。" #~ msgstr "原生 Wayland 即時檢視需要 GStreamer GTK 視訊接收器。請為 GStreamer 安裝 gtksink 外掛程式,然後重新啟動 OrcaSlicer。"
+30
View File
@@ -118,6 +118,36 @@ var LangText = {
orca10: "Not connected", orca10: "Not connected",
orca11: "Connected", orca11: "Connected",
orca12: "Note: When Stealth Mode is enabled, your user profiles will not be backed up to Orca Cloud.", orca12: "Note: When Stealth Mode is enabled, your user profiles will not be backed up to Orca Cloud.",
sd_search: "Search actions",
sd_clear: "Clear",
sd_search_n: "Search %s actions",
sd_showing: "Showing",
sd_of: "of",
sd_actions: "actions",
sd_recent: "recent",
sd_matches: "matches",
sd_tabs: "tabs",
sd_no_match: "No actions match",
sd_total: "Total",
sd_no_actions: "No actions yet",
sd_no_tabs_match: "No tabs match",
sd_no_tabs: "No tabs",
sd_go_to_pct: "Go to %s% of the layer range",
sd_enter_pct: "Enter a layer percentage (0-100)",
sd_go_layer_ph: "Go to layer % (0-100)",
sd_go_tab_ph: "Go to tab",
sd_favs_full: "Favourites are full",
sd_max: "max",
sd_pin_fav: "Pin to favourites (Ctrl+B)",
sd_unpin_fav: "Unpin from favourites (Ctrl+B)",
sd_remove_fav: "Remove from favourites",
sd_favourite: "Favourite",
sd_move_left: "Move left",
sd_move_right: "Move right",
sd_unpin: "Unpin",
sd_mode_advanced: "Advanced",
sd_mode_expert: "Expert",
sd_mode_develop: "Developer",
}, },
ca_ES: { ca_ES: {
t1: "Benvingut a Orca Slicer", t1: "Benvingut a Orca Slicer",
@@ -7,6 +7,7 @@
<link rel="stylesheet" href="./style.css" /> <link rel="stylesheet" href="./style.css" />
<link rel="stylesheet" type="text/css" href="../css/theme.css" /> <link rel="stylesheet" type="text/css" href="../css/theme.css" />
<script type="text/javascript" src="../../include/globalapi.js"></script> <script type="text/javascript" src="../../include/globalapi.js"></script>
<script type="text/javascript" src="../../data/text.js"></script>
<script src="../../js/fuzzy-search.js"></script> <script src="../../js/fuzzy-search.js"></script>
<script src="./speeddial.js"></script> <script src="./speeddial.js"></script>
</head> </head>
+143 -133
View File
@@ -2,9 +2,9 @@
// node vm can exercise the pure helpers (searchActions / filterTabs / actionLabel / nextSel / commandList). // node vm can exercise the pure helpers (searchActions / filterTabs / actionLabel / nextSel / commandList).
// ---- state (populated by the C++ bridge via window.HandleStudio) ---- // ---- state (populated by the C++ bridge via window.HandleStudio) ----
var ACTIONS = []; // [{id,title,source,group,input,shortcut}], already frecency-sorted by C++ var ACTIONS = []; // [{id,title,source,group,input,icon,mode}], already frecency-sorted by C++
var FAVS = []; // [id...] var FAVS = []; // [id...]
var RECENTS = []; // [{id,title,source,group,input,shortcut}] - last-N launched var RECENTS = []; // [{id,title,source,group,input,icon,mode}] - last-N launched
var query = ""; var query = "";
var sel = { zone: "list", i: 0 }; // zone: 'list' | 'fav' var sel = { zone: "list", i: 0 }; // zone: 'list' | 'fav'
var lastResizeHeight = 0; var lastResizeHeight = 0;
@@ -15,6 +15,26 @@ var matchIndex = {};
var USER_MODE = "simple"; var USER_MODE = "simple";
var MODE_RANK = { simple: 0, advanced: 1, expert: 2, develop: 3 }; var MODE_RANK = { simple: 0, advanced: 1, expert: 2, develop: 3 };
// Search ranking weights: every contiguous match must outrank every fuzzy one regardless of field,
// and title must outrank group, which outranks source.
var SCORE_CONTIGUOUS = 100000;
var SCORE_TITLE = 2000;
var SCORE_GROUP = 1000;
// Localized lookup for strings this page builds at runtime. text.js (loaded before this script)
// defines LangText; a missing entry falls back to the English literal. Extra args replace
// successive %s placeholders.
function T(key, fallback) {
var table = (typeof LangText !== "undefined" && LangText) || null;
var lang = "en";
try { lang = localStorage.getItem(LANG_COOKIE_NAME) || "en"; } catch (e) {}
var s = table && table[lang] && table[lang][key] !== undefined ? table[lang][key] :
table && table.en && table.en[key] !== undefined ? table.en[key] : fallback;
for (var i = 2; i < arguments.length; i++)
s = s.replace("%s", arguments[i]);
return s;
}
// ---- windowed list render ---------------------------------------------------- // ---- windowed list render ----------------------------------------------------
// The command list is rendered in windows (append-on-scroll) so a huge settings pool doesn't build // The command list is rendered in windows (append-on-scroll) so a huge settings pool doesn't build
// the whole DOM per keystroke. Rows are exactly ROW_H tall (matches .row min-height 44px; see --row-h, // the whole DOM per keystroke. Rows are exactly ROW_H tall (matches .row min-height 44px; see --row-h,
@@ -36,11 +56,11 @@ var searchNeedle = "";
var phase = "commands"; var phase = "commands";
var tabOptions = []; // [{id,title}] - notebook pages, fetched on entering the tab phase var tabOptions = []; // [{id,title}] - notebook pages, fetched on entering the tab phase
// why: the fuzzy matcher (NormText/FuzzyRangesNorm/WholeWordRangesNorm) lives in shared // why: the fuzzy matcher (NormText/FuzzyRangesNorm) lives in shared
// ../../js/fuzzy-search.js, loaded before this script. Search is always case-insensitive. // ../../js/fuzzy-search.js, loaded before this script. Search is always case-insensitive.
// element handles, assigned in OnInit (kept null so load-time touches no DOM) // element handles, assigned in OnInit (kept null so load-time touches no DOM)
var qEl = null, listEl = null, favEl = null, clearEl = null, eyeEl = null, countEl = null, headEl = null; var qEl = null, listEl = null, favEl = null, clearEl = null, eyeEl = null, countEl = null;
// ---- pure helpers (no DOM; unit-tested) ------------------------------------- // ---- pure helpers (no DOM; unit-tested) -------------------------------------
// Pre-normalized haystacks, cached on the action object. The fold is length-preserving (1:1 per // Pre-normalized haystacks, cached on the action object. The fold is length-preserving (1:1 per
@@ -89,14 +109,20 @@ function fieldMatchScore(norm, wwRe) {
return { score: 1000 - r[0][0] * 10 - gaps * 10, ranges: r, contiguous: r.length === 1 && len === searchNeedle.length }; return { score: 1000 - r[0][0] * 10 - gaps * 10, ranges: r, contiguous: r.length === 1 && len === searchNeedle.length };
} }
// Combine the per-field match scores into one comparable value. Ranking tiers, strongest first: // Combine the per-field match scores into one comparable value, or null when no field matched.
// Ranking tiers, strongest first:
// tier (contiguous/perfect vs fuzzy) > field (title > group > source) > start/gaps. // tier (contiguous/perfect vs fuzzy) > field (title > group > source) > start/gaps.
// The additive weights keep every contiguous match above every fuzzy one regardless of field. // The additive weights keep every contiguous match above every fuzzy one regardless of field.
function scoreFields(t, g, s) { function scoreFields(t, g, s) {
var best = -1; var best = null;
if (t) best = Math.max(best, (t.contiguous ? 100000 : 0) + 2000 + t.score); function consider(m, weight) {
if (g) best = Math.max(best, (g.contiguous ? 100000 : 0) + 1000 + g.score); if (!m) return;
if (s) best = Math.max(best, (s.contiguous ? 100000 : 0) + s.score); var v = (m.contiguous ? SCORE_CONTIGUOUS : 0) + weight + m.score;
best = best === null ? v : Math.max(best, v);
}
consider(t, SCORE_TITLE);
consider(g, SCORE_GROUP);
consider(s, 0);
return best; return best;
} }
@@ -125,7 +151,7 @@ function searchActions(actions, query) {
var g = fieldMatchScore(groupNorm(a), wwRe); var g = fieldMatchScore(groupNorm(a), wwRe);
var s = fieldMatchScore(sourceNorm(a), wwRe); var s = fieldMatchScore(sourceNorm(a), wwRe);
var score = scoreFields(t, g, s); var score = scoreFields(t, g, s);
if (score < 0) continue; if (score === null) continue;
// Ranges are per-field against the ACTUAL text drawn: title for the row-name, and group (or // Ranges are per-field against the ACTUAL text drawn: title for the row-name, and group (or
// source when group is empty) for the eyebrow - so highlight offsets stay aligned to the label. // source when group is empty) for the eyebrow - so highlight offsets stay aligned to the label.
matchIndex[a.id] = { matchIndex[a.id] = {
@@ -198,7 +224,8 @@ function favIndexForDigit(d) {
} }
function resultCountText(total, shown, query) { function resultCountText(total, shown, query) {
return (query || "").trim() ? "Showing " + shown + " of " + total + " actions" : total + " actions"; var n = total + " " + T("sd_actions", "actions");
return (query || "").trim() ? T("sd_showing", "Showing") + " " + shown + " " + T("sd_of", "of") + " " + n : n;
} }
// Display label for a notebook tab. Trim any stray whitespace; pages added with an empty title // Display label for a notebook tab. Trim any stray whitespace; pages added with an empty title
@@ -259,7 +286,7 @@ function commandList(actions, recents, query) {
// visible favourites, list zone the active commands list. `actions` must be the already-resolved // visible favourites, list zone the active commands list. `actions` must be the already-resolved
// list (recents for an empty query, the filtered list otherwise) - pure so runSelected() shares // list (recents for an empty query, the filtered list otherwise) - pure so runSelected() shares
// one lookup and the node-vm test can call it directly. // one lookup and the node-vm test can call it directly.
function selectedActionId(sel, actions, favIds, query) { function selectedActionId(sel, actions, favIds) {
if (sel.zone === "fav") if (sel.zone === "fav")
return favIds[sel.i]; return favIds[sel.i];
if (!actions || !actions.length) if (!actions || !actions.length)
@@ -286,9 +313,9 @@ function needsModeSwitch(item, userMode) {
// Short mode tag for an action that needs a switch, or "" when it is already available. // Short mode tag for an action that needs a switch, or "" when it is already available.
function modeBadge(item, userMode) { function modeBadge(item, userMode) {
if (!needsModeSwitch(item, userMode)) return ""; if (!needsModeSwitch(item, userMode)) return "";
if (item.mode === "develop") return "Developer"; if (item.mode === "develop") return T("sd_mode_develop", "Developer");
if (item.mode === "expert") return "Expert"; if (item.mode === "expert") return T("sd_mode_expert", "Expert");
if (item.mode === "advanced") return "Advanced"; if (item.mode === "advanced") return T("sd_mode_advanced", "Advanced");
return ""; return "";
} }
@@ -334,12 +361,7 @@ function stateFromPayload(payload) {
actions: payload.actions || [], actions: payload.actions || [],
favourites: payload.favourites || [], favourites: payload.favourites || [],
recent: payload.recent || [], recent: payload.recent || [],
userMode: payload.user_mode || "simple", userMode: payload.user_mode || "simple"
query: "",
sel: { zone: "list", i: 0 },
lastResizeHeight: 0,
phase: "commands",
tabOptions: []
}; };
} }
@@ -395,19 +417,19 @@ window.HandleStudio = function (payload) {
FAVS = next.favourites; FAVS = next.favourites;
RECENTS = next.recent; RECENTS = next.recent;
USER_MODE = next.userMode; USER_MODE = next.userMode;
query = next.query; // A fresh payload re-opens the main phase; C++ never rehydrates the transient phase/query state.
sel = next.sel; phase = "commands";
lastResizeHeight = next.lastResizeHeight; tabOptions = [];
phase = next.phase; query = "";
tabOptions = next.tabOptions; sel = { zone: "list", i: 0 };
lastResizeHeight = 0;
// why: builtKey caches phase|query so renderCommandsList can skip a rebuild on arrow-nav. // why: builtKey caches phase|query so renderCommandsList can skip a rebuild on arrow-nav.
// It survives a re-open (which never goes through exitPhase), so without a reset the cached // It survives a re-open (which never goes through exitPhase), so without a reset the cached
// empty-query key would skip the rebuild and leave stale list content. // empty-query key would skip the rebuild and leave stale list content.
builtKey = ""; builtKey = "";
if (headEl) headEl.hidden = false;
if (qEl) { if (qEl) {
qEl.value = ""; qEl.value = "";
qEl.placeholder = "Search " + ACTIONS.length + " actions"; qEl.placeholder = T("sd_search_n", "Search %s actions", ACTIONS.length);
syncClearButton(); syncClearButton();
} }
render({ resize: true, resetScroll: true }); render({ resize: true, resetScroll: true });
@@ -422,7 +444,7 @@ window.HandleStudio = function (payload) {
var fid = payload.id; var fid = payload.id;
if (fid && FAVS.indexOf(fid) !== -1) FAVS.splice(FAVS.indexOf(fid), 1); if (fid && FAVS.indexOf(fid) !== -1) FAVS.splice(FAVS.indexOf(fid), 1);
render({ resize: true, keepScroll: true }); render({ resize: true, keepScroll: true });
flashHint("Favourites are full (" + (payload.limit || K_FAV_LIMIT) + " max)"); flashHint(T("sd_favs_full", "Favourites are full") + " (" + (payload.limit || K_FAV_LIMIT) + " " + T("sd_max", "max") + ")");
} }
}; };
@@ -485,7 +507,7 @@ function pinSvg(on) {
function setPinState(pin, on) { function setPinState(pin, on) {
pin.classList.toggle("on", on); pin.classList.toggle("on", on);
pin.innerHTML = pinSvg(on); pin.innerHTML = pinSvg(on);
pin.title = on ? "Unpin from favourites (Ctrl+B)" : "Pin to favourites (Ctrl+B)"; pin.title = on ? T("sd_unpin_fav", "Unpin from favourites (Ctrl+B)") : T("sd_pin_fav", "Pin to favourites (Ctrl+B)");
} }
// ---- render ------------------------------------------------------------------ // ---- render ------------------------------------------------------------------
@@ -519,15 +541,16 @@ function renderFav() {
var badge = document.createElement("span"); var badge = document.createElement("span");
badge.className = "fav-slot"; badge.className = "fav-slot";
badge.textContent = slot; badge.textContent = slot;
badge.title = slot === "0" ? "Favourite 10 (Alt+0)" : "Favourite " + slot + " (Alt+" + slot + ")"; badge.title = slot === "0" ? T("sd_favourite", "Favourite") + " 10 (Alt+0)" :
T("sd_favourite", "Favourite") + " " + slot + " (Alt+" + slot + ")";
tile.appendChild(badge); tile.appendChild(badge);
} }
// Direct removal: a hover-revealed ✕ in the tile's corner. click() stops propagation so it // Direct removal: a hover-revealed ✕ in the tile's corner. click() stops propagation so it
// unpins without activating the action. // unpins without activating the action.
var unpin = document.createElement("button"); var unpin = document.createElement("button");
unpin.className = "fav-unpin"; unpin.className = "fav-unpin";
unpin.title = "Remove from favourites"; unpin.title = T("sd_remove_fav", "Remove from favourites");
unpin.setAttribute("aria-label", "Remove from favourites"); unpin.setAttribute("aria-label", T("sd_remove_fav", "Remove from favourites"));
unpin.innerHTML = '<svg width="9" height="9" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="4" y1="4" x2="12" y2="12"/><line x1="12" y1="4" x2="4" y2="12"/></svg>'; unpin.innerHTML = '<svg width="9" height="9" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><line x1="4" y1="4" x2="12" y2="12"/><line x1="12" y1="4" x2="4" y2="12"/></svg>';
unpin.onclick = function (ev) { ev.stopPropagation(); toggleFav(id); }; unpin.onclick = function (ev) { ev.stopPropagation(); toggleFav(id); };
tile.appendChild(unpin); tile.appendChild(unpin);
@@ -567,9 +590,9 @@ function showFavMenu(x, y, id) {
favMenuEl.innerHTML = ""; favMenuEl.innerHTML = "";
var favs = currentVisibleFavs(); var favs = currentVisibleFavs();
var vi = favs.indexOf(id); var vi = favs.indexOf(id);
addFavMenuItem("Move left", vi > 0, function () { moveFav(id, -1); }); addFavMenuItem(T("sd_move_left", "Move left"), vi > 0, function () { moveFav(id, -1); });
addFavMenuItem("Move right", vi >= 0 && vi < favs.length - 1, function () { moveFav(id, 1); }); addFavMenuItem(T("sd_move_right", "Move right"), vi >= 0 && vi < favs.length - 1, function () { moveFav(id, 1); });
addFavMenuItem("Unpin", true, function () { toggleFav(id); }); addFavMenuItem(T("sd_unpin", "Unpin"), true, function () { toggleFav(id); });
favMenuEl.hidden = false; favMenuEl.hidden = false;
favMenuEl.style.left = Math.max(0, Math.min(x, window.innerWidth - favMenuEl.offsetWidth - 4)) + "px"; favMenuEl.style.left = Math.max(0, Math.min(x, window.innerWidth - favMenuEl.offsetWidth - 4)) + "px";
favMenuEl.style.top = Math.max(0, Math.min(y, window.innerHeight - favMenuEl.offsetHeight - 4)) + "px"; favMenuEl.style.top = Math.max(0, Math.min(y, window.innerHeight - favMenuEl.offsetHeight - 4)) + "px";
@@ -598,52 +621,47 @@ function updateFavEyebrow(favs) {
eyeEl.hidden = !a; eyeEl.hidden = !a;
} }
// Row shell shared by action and tab rows: the row (selection class + aria label), the icon tile and
// the text column. Returns the pieces the caller fills in (eyebrow/name/badge/pin, handlers).
function beginRow(item, i, mono, ariaLabel) {
var row = document.createElement("div");
row.className = "row" + (sel.zone === "list" && sel.i === i ? " sel" : "");
row.setAttribute("aria-label", ariaLabel);
var tile = document.createElement("div");
tile.className = "tile";
fillTile(tile, item, mono);
var left = document.createElement("div");
left.className = "row-left";
var line = document.createElement("div");
line.className = "row-line";
left.appendChild(line);
row.appendChild(tile);
row.appendChild(left);
return { row: row, left: left, line: line };
}
// A command/action row - used for search results, recents, and (because settings are actions now) // A command/action row - used for search results, recents, and (because settings are actions now)
// the setting options too. All rows are pinnable, so every row carries a bookmark. // the setting options too. All rows are pinnable, so every row carries a bookmark.
function renderActionRow(a, i) { function renderActionRow(a, i) {
var on = FAVS.indexOf(a.id) !== -1; var on = FAVS.indexOf(a.id) !== -1;
var row = document.createElement("div"); var shell = beginRow(a, i, false, actionLabel(a, ACTIONS));
row.className = "row" + (sel.zone === "list" && sel.i === i ? " sel" : "");
row.setAttribute("aria-label", actionLabel(a, ACTIONS));
var tile = document.createElement("div");
tile.className = "tile";
fillTile(tile, a);
var left = document.createElement("div");
left.className = "row-left";
var mi = matchIndex[a.id]; var mi = matchIndex[a.id];
// The eyebrow shows group when present, else source. Highlight with the ranges of whichever of the // The eyebrow shows group when present, else source. Highlight with the ranges of whichever of the
// two the eyebrow actually renders (so a "Recent Projects"/"Object" header match lights up like a // two the eyebrow actually renders (so a "Recent Projects"/"Object" header match lights up like a
// setting path does - the offsets are computed against the same string we are marking). // setting path does - the offsets are computed against the same string we are marking).
var eyebrow = a.group || a.source; var eyebrow = a.group || a.source;
var eyebrowMatch = mi ? (mi.useEyebrowGroup ? mi.group : mi.source) : null; var eyebrowMatch = mi ? (mi.useEyebrowGroup ? mi.group : mi.source) : null;
var sourceEl = markedText("row-eyebrow", eyebrow, eyebrowMatch); shell.left.insertBefore(markedText("row-eyebrow", eyebrow, eyebrowMatch), shell.line);
var line = document.createElement("div"); shell.line.appendChild(markedText("row-name", a.title, mi ? mi.title : null));
line.className = "row-line";
var name = markedText("row-name", a.title, mi ? mi.title : null);
line.appendChild(name);
var badge = modeBadge(a, USER_MODE); var badge = modeBadge(a, USER_MODE);
if (badge) { if (badge) {
var tag = document.createElement("span"); var tag = document.createElement("span");
tag.className = "row-mode"; tag.className = "row-mode";
tag.textContent = badge; tag.textContent = badge;
line.appendChild(tag); shell.line.appendChild(tag);
} }
if (a.shortcut) {
var sc = document.createElement("div");
sc.className = "row-sc";
a.shortcut.split("+").forEach(function (k) {
var key = document.createElement("kbd");
key.textContent = k;
sc.appendChild(key);
});
line.appendChild(sc);
}
left.appendChild(sourceEl);
left.appendChild(line);
row.appendChild(tile);
row.appendChild(left);
var pin = document.createElement("button"); var pin = document.createElement("button");
pin.className = "pin"; pin.className = "pin";
@@ -651,11 +669,11 @@ function renderActionRow(a, i) {
pin.onclick = function (ev) { ev.stopPropagation(); toggleFav(a.id); }; pin.onclick = function (ev) { ev.stopPropagation(); toggleFav(a.id); };
// why: two quick fav/unfav clicks must not dblclick-run the row // why: two quick fav/unfav clicks must not dblclick-run the row
pin.ondblclick = function (ev) { ev.stopPropagation(); }; pin.ondblclick = function (ev) { ev.stopPropagation(); };
row.appendChild(pin); shell.row.appendChild(pin);
row.onclick = function () { sel = { zone: "list", i: i }; render({ resize: true }); }; shell.row.onclick = function () { sel = { zone: "list", i: i }; render({ resize: true }); };
row.ondblclick = function () { sel = { zone: "list", i: i }; activateEntry(a); }; shell.row.ondblclick = function () { sel = { zone: "list", i: i }; activateEntry(a); };
return row; return shell.row;
} }
// Append rows [from, to) into listEl, always inserting before the bottom spacer so row order is preserved. // Append rows [from, to) into listEl, always inserting before the bottom spacer so row order is preserved.
@@ -731,6 +749,18 @@ function updatePins(list) {
} }
} }
// Replace the list with a single placeholder message (no matches / empty state). Shared by all phases.
function renderEmpty(text) {
listEl.innerHTML = "";
spacerEl = null;
listEl.className = "dial-list empty";
if (countEl) countEl.hidden = true;
var empty = document.createElement("div");
empty.className = "dial-empty";
empty.textContent = text;
listEl.appendChild(empty);
}
function renderCommandsList() { function renderCommandsList() {
var list = currentList(); var list = currentList();
var total = list.length; var total = list.length;
@@ -742,14 +772,8 @@ function renderCommandsList() {
matchIndex = {}; matchIndex = {};
if (!total) { if (!total) {
listEl.innerHTML = ""; renderEmpty(showList ? (T("sd_no_match", "No actions match") + " (" + T("sd_total", "Total") + ": " + ACTIONS.length + ")")
spacerEl = null; : T("sd_no_actions", "No actions yet"));
listEl.className = "dial-list empty";
if (countEl) countEl.hidden = true;
var empty = document.createElement("div");
empty.className = "dial-empty";
empty.textContent = showList ? ("No actions match (Total: " + ACTIONS.length + ")") : "No actions yet";
listEl.appendChild(empty);
renderEnd = 0; renderEnd = 0;
builtKey = buildKey() + "|0"; builtKey = buildKey() + "|0";
return; return;
@@ -767,7 +791,7 @@ function renderCommandsList() {
listEl.className = "dial-list"; listEl.className = "dial-list";
if (countEl) { if (countEl) {
countEl.hidden = false; countEl.hidden = false;
countEl.textContent = showList ? resultCountText(ACTIONS.length, total, query) : total + " recent"; countEl.textContent = showList ? resultCountText(ACTIONS.length, total, query) : total + " " + T("sd_recent", "recent");
} }
updateSelection(); updateSelection();
updatePins(list); updatePins(list);
@@ -777,29 +801,14 @@ function renderCommandsList() {
// tabTitle so pages added with an empty text (e.g. Home) still show a label. // tabTitle so pages added with an empty text (e.g. Home) still show a label.
function renderTabRow(t, i) { function renderTabRow(t, i) {
var label = tabTitle(t); var label = tabTitle(t);
var row = document.createElement("div"); var shell = beginRow(t, i, true, label);
row.className = "row" + (sel.zone === "list" && sel.i === i ? " sel" : "");
row.setAttribute("aria-label", label);
var tile = document.createElement("div");
tile.className = "tile";
fillTile(tile, t, true);
var left = document.createElement("div");
left.className = "row-left";
var line = document.createElement("div");
line.className = "row-line";
var name = document.createElement("div"); var name = document.createElement("div");
name.className = "row-name"; name.className = "row-name";
name.textContent = label; name.textContent = label;
line.appendChild(name); shell.line.appendChild(name);
left.appendChild(line); shell.row.onclick = function () { sel = { zone: "list", i: i }; render({ resize: true }); };
shell.row.ondblclick = function () { sel = { zone: "list", i: i }; jumpToTab(t); };
row.appendChild(tile); return shell.row;
row.appendChild(left);
row.onclick = function () { sel = { zone: "list", i: i }; render({ resize: true }); };
row.ondblclick = function () { sel = { zone: "list", i: i }; jumpToTab(t); };
return row;
} }
function renderTabList() { function renderTabList() {
@@ -808,12 +817,7 @@ function renderTabList() {
listEl.innerHTML = ""; listEl.innerHTML = "";
if (!list.length) { if (!list.length) {
listEl.className = "dial-list empty"; renderEmpty(q ? T("sd_no_tabs_match", "No tabs match") : T("sd_no_tabs", "No tabs"));
if (countEl) countEl.hidden = true;
var empty = document.createElement("div");
empty.className = "dial-empty";
empty.textContent = q ? "No tabs match" : "No tabs";
listEl.appendChild(empty);
return; return;
} }
if (sel.zone === "list") if (sel.zone === "list")
@@ -821,20 +825,14 @@ function renderTabList() {
listEl.className = "dial-list"; listEl.className = "dial-list";
if (countEl) { if (countEl) {
countEl.hidden = false; countEl.hidden = false;
countEl.textContent = q ? list.length + " matches" : list.length + " tabs"; countEl.textContent = q ? list.length + " " + T("sd_matches", "matches") : list.length + " " + T("sd_tabs", "tabs");
} }
list.forEach(function (t, i) { listEl.appendChild(renderTabRow(t, i)); }); list.forEach(function (t, i) { listEl.appendChild(renderTabRow(t, i)); });
} }
function renderPercentList() { function renderPercentList() {
var q = (query || "").trim(); var q = (query || "").trim();
listEl.innerHTML = ""; renderEmpty(q ? T("sd_go_to_pct", "Go to %s% of the layer range", q) : T("sd_enter_pct", "Enter a layer percentage (0-100)"));
listEl.className = "dial-list empty";
if (countEl) countEl.hidden = true;
var ph = document.createElement("div");
ph.className = "dial-empty";
ph.textContent = q ? ("Go to " + q + "% of the layer range") : "Enter a layer percentage (0-100)";
listEl.appendChild(ph);
} }
function renderList() { function renderList() {
@@ -936,7 +934,7 @@ function runSelected() {
return; return;
} }
var list = currentList(); var list = currentList();
var id = selectedActionId(sel, list, currentVisibleFavs(), query); var id = selectedActionId(sel, list, currentVisibleFavs());
if (id) activateEntry(byId(id)); if (id) activateEntry(byId(id));
} }
@@ -950,38 +948,43 @@ function runJumpToLayer(pct) {
} }
function jumpToTab(t) { function jumpToTab(t) {
SendMessage({ command: "go_to_tab", id: t.id, title: tabTitle(t) }); var a = findActionByInput("tab");
if (!a || !t) return;
SendMessage({ command: "run_action", id: a.id, title: a.title, param: t.id });
}
// Clear the shared query/cursor state when entering or leaving a phase. Callers set the
// phase-specific placeholder, then render.
function resetPhaseInput() {
query = ""; qEl.value = ""; sel = { zone: "list", i: 0 };
syncClearButton();
} }
function enterPercentPhase() { function enterPercentPhase() {
phase = "percent"; query = ""; qEl.value = ""; phase = "percent";
sel = { zone: "list", i: 0 }; resetPhaseInput();
qEl.placeholder = "Go to layer % (0-100)"; qEl.placeholder = T("sd_go_layer_ph", "Go to layer % (0-100)");
syncClearButton();
render({ resize: true, resetScroll: true }); render({ resize: true, resetScroll: true });
qEl.focus(); qEl.focus();
} }
function enterTabsPhase() { function enterTabsPhase() {
phase = "tab"; tabOptions = []; query = ""; qEl.value = ""; phase = "tab"; tabOptions = [];
sel = { zone: "list", i: 0 }; resetPhaseInput();
qEl.placeholder = "Go to tab"; qEl.placeholder = T("sd_go_tab_ph", "Go to tab");
syncClearButton();
render({ resize: true, resetScroll: true }); render({ resize: true, resetScroll: true });
qEl.focus(); qEl.focus();
SendMessage({ command: "search_tabs" }); SendMessage({ command: "search_tabs" });
} }
function exitPhase() { function exitPhase() {
phase = "commands"; tabOptions = []; query = ""; qEl.value = ""; phase = "commands"; tabOptions = [];
if (headEl) headEl.hidden = false; resetPhaseInput();
sel = { zone: "list", i: 0 };
// why: builtKey caches phase|query so renderCommandsList can skip a rebuild on arrow-nav/click. // why: builtKey caches phase|query so renderCommandsList can skip a rebuild on arrow-nav/click.
// It survives a second-phase exit (which never goes through exitPhase from the commands view), // It survives a second-phase exit (which never goes through exitPhase from the commands view),
// so without a reset the cached empty-query key would skip the rebuild and leave stale content. // so without a reset the cached empty-query key would skip the rebuild and leave stale content.
builtKey = ""; builtKey = "";
qEl.placeholder = "Search " + ACTIONS.length + " actions"; qEl.placeholder = T("sd_search_n", "Search %s actions", ACTIONS.length);
syncClearButton();
render({ resize: true, resetScroll: true }); render({ resize: true, resetScroll: true });
qEl.focus(); qEl.focus();
} }
@@ -991,13 +994,20 @@ function focusInput() { setTimeout(function () { if (qEl) qEl.focus(); }, 0); }
// ---- init -------------------------------------------------------------------- // ---- init --------------------------------------------------------------------
function OnInit() { function OnInit() {
qEl = $("q"); listEl = $("list"); favEl = $("favBar"); clearEl = $("clear"); eyeEl = $("favEyebrow"); countEl = $("count"); qEl = $("q"); listEl = $("list"); favEl = $("favBar"); clearEl = $("clear"); eyeEl = $("favEyebrow"); countEl = $("count");
headEl = document.querySelector(".dial-head"); // text.js's TranslatePage() targets jQuery `.trans` nodes; this page has none and defines its own
// `$`, so don't call it. Runtime strings go through T() instead.
qEl.placeholder = T("sd_search", "Search actions");
qEl.setAttribute("aria-label", T("sd_search", "Search actions"));
if (clearEl) {
clearEl.title = T("sd_clear", "Clear");
clearEl.setAttribute("aria-label", T("sd_clear", "Clear"));
}
syncClearButton(); syncClearButton();
$("clear").onclick = function () { $("clear").onclick = function () {
query = ""; qEl.value = ""; sel = { zone: "list", i: 0 }; resetPhaseInput();
render({ resize: true, resetScroll: true }); qEl.focus(); render({ resize: true, resetScroll: true });
syncClearButton(); qEl.focus();
}; };
qEl.addEventListener("input", function () { qEl.addEventListener("input", function () {
query = qEl.value; sel = { zone: "list", i: 0 }; syncClearButton(); query = qEl.value; sel = { zone: "list", i: 0 }; syncClearButton();
@@ -1026,7 +1036,7 @@ function OnInit() {
if (phase === "commands" && (e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && if (phase === "commands" && (e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey &&
e.key.toLowerCase() === "b") { e.key.toLowerCase() === "b") {
e.preventDefault(); e.preventDefault();
var id = selectedActionId(sel, currentList(), currentVisibleFavs(), query); var id = selectedActionId(sel, currentList(), currentVisibleFavs());
if (id) toggleFav(id); if (id) toggleFav(id);
return; return;
} }
@@ -109,6 +109,14 @@ ctx.searchActions(orientPool, "orient");
assert.deepEqual(ctx.matchIndex.ao.title, [[5, 11]], assert.deepEqual(ctx.matchIndex.ao.title, [[5, 11]],
"a whole-word match highlights the full word, not a scattered fuzzy pick"); "a whole-word match highlights the full word, not a scattered fuzzy pick");
// A fuzzy source-only match with a very late start still counts, even though its score is negative;
// the old `score < 0` sentinel mistook it for "no field matched" and dropped the action.
const negativePool = [
{ id: "n", title: "Unrelated", source: "o" + "x".repeat(200) + "rnt", group: "", input: "" }
];
assert.equal(ctx.searchActions(negativePool, "ornt").length, 1,
"a low-score fuzzy match is not mistaken for no match");
// commandList (the main-phase list) delegates to the ranked search for a typed query and returns // commandList (the main-phase list) delegates to the ranked search for a typed query and returns
// the mixed recents (no discrimination) for an empty query. // the mixed recents (no discrimination) for an empty query.
const mixed = [ const mixed = [
@@ -122,22 +130,22 @@ assert.deepEqual(ctx.commandList(mixed, mixed.slice(0, 1), "").map(function (a)
// selectedActionId: resolves the active list (recents for an empty query, filtered list otherwise). // selectedActionId: resolves the active list (recents for an empty query, filtered list otherwise).
assert.equal( assert.equal(
ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [], ""), [], ""), ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [], ""), []),
null, null,
"Enter with an empty query and no recents must not resolve to an action the list never showed" "Enter with an empty query and no recents must not resolve to an action the list never showed"
); );
assert.equal( assert.equal(
ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [], "rep"), [], "rep"), ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [], "rep"), []),
"0123456789abcdef", "0123456789abcdef",
"a typed query resolves the list selection" "a typed query resolves the list selection"
); );
assert.equal( assert.equal(
ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [duplicateActions[0]], ""), [], ""), ctx.selectedActionId({ zone: "list", i: 0 }, ctx.commandList(duplicateActions, [duplicateActions[0]], ""), []),
"0123456789abcdef", "0123456789abcdef",
"Enter with an empty query resolves the recent entry" "Enter with an empty query resolves the recent entry"
); );
assert.equal( assert.equal(
ctx.selectedActionId({ zone: "fav", i: 0 }, duplicateActions, ["fedcba9876543210"], ""), ctx.selectedActionId({ zone: "fav", i: 0 }, duplicateActions, ["fedcba9876543210"]),
"fedcba9876543210", "fedcba9876543210",
"favourites stay runnable with an empty query - the fav bar is always visible" "favourites stay runnable with an empty query - the fav bar is always visible"
); );
+18 -20
View File
@@ -19,18 +19,31 @@ function Norm(ch, caseSensitive) {
return caseSensitive ? folded : folded.toLowerCase(); // case-sensitivity is the only toggle return caseSensitive ? folded : folded.toLowerCase(); // case-sensitivity is the only toggle
} }
// Pre-normalize a whole haystack with the SAME per-char fold FuzzyRanges uses, so a caller can match // Pre-normalize a whole haystack with a length-preserving fold, so a caller can match it repeatedly
// it repeatedly against one cached string. The fold is 1:1 in length, so indices stay aligned to the // against one cached string. One input UTF-16 code unit always maps to one output code unit, so
// ORIGINAL text - the highlight ranges that FuzzyRangesNorm returns slice the original correctly. // indices stay aligned to the ORIGINAL text - the highlight ranges that FuzzyRangesNorm returns slice
// Iterate by UTF-16 code unit (not Array.from code point) to mirror FuzzyRanges' own indexing exactly. // the original correctly. Iterate by UTF-16 code unit (not Array.from code point) to mirror
// FuzzyRanges' own indexing exactly.
function NormText(text, caseSensitive) { function NormText(text, caseSensitive) {
const src = text || ""; const src = text || "";
let out = ""; let out = "";
for (let i = 0; i < src.length; i++) for (let i = 0; i < src.length; i++)
out += Norm(src[i], caseSensitive); out += NormStable(src[i], caseSensitive);
return out; return out;
} }
// Length-preserving variant of Norm: NFD can expand a code unit (Hangul syllables become Jamo) or
// drop it (combining diacritics), and toLowerCase can expand one too (U+0130). Any of those would
// desync highlight offsets, so fall back to the original unit whenever the fold is not 1:1.
function NormStable(ch, caseSensitive) {
const folded = FoldChar(ch);
const stable = folded.length === 1 ? folded : ch;
if (caseSensitive)
return stable;
const lower = stable.toLowerCase();
return lower.length === 1 ? lower : stable;
}
// Match a PRE-normalized haystack against a PRE-normalized needle (both produced by NormText with the // Match a PRE-normalized haystack against a PRE-normalized needle (both produced by NormText with the
// same caseSensitive flag). Skipping the per-character fold makes repeated matching (per keystroke over a // same caseSensitive flag). Skipping the per-character fold makes repeated matching (per keystroke over a
// cached pool) cheap. Returns ranges in original coordinates, or null on no match. // cached pool) cheap. Returns ranges in original coordinates, or null on no match.
@@ -115,18 +128,3 @@ function WholeWordRanges(text, query, caseSensitive) {
ranges.push([match.index, match.index + match[0].length]); ranges.push([match.index, match.index + match[0].length]);
return ranges.length > 0 ? ranges : null; return ranges.length > 0 ? ranges : null;
} }
// Same whole-word (\b-bounded) match as WholeWordRanges, but against PRE-normalized haystack/needle
// (NormText output, so offsets stay length-aligned to the original text). Returns the first match as
// [[i, i+len]] in original coordinates, or null. Non-global so the caller can reuse one compiled regex
// across many fields without re-setting lastIndex. Skipping the per-char fold keeps the Speed Dial's
// per-keystroke scan over thousands of cached settings cheap.
function WholeWordRangesNorm(haystackNorm, needleNorm) {
const t = haystackNorm || "";
const needle = needleNorm || "";
if (!needle)
return null;
const re = new RegExp(`\\b${EscapeRegExp(needle)}\\b`);
const match = re.exec(t);
return match ? [[match.index, match.index + match[0].length]] : null;
}
+7 -4
View File
@@ -5,7 +5,7 @@ const vm = require("vm"), assert = require("assert"), fs = require("fs");
const ctx = {}; const ctx = {};
vm.createContext(ctx); vm.createContext(ctx);
vm.runInContext(fs.readFileSync(__dirname + "/fuzzy-search.js", "utf8"), ctx); vm.runInContext(fs.readFileSync(__dirname + "/fuzzy-search.js", "utf8"), ctx);
const { FoldChar, Norm, NormText, EscapeRegExp, FuzzyRanges, WholeWordRanges, FuzzyRangesNorm, WholeWordRangesNorm } = ctx; const { FoldChar, Norm, NormText, EscapeRegExp, FuzzyRanges, WholeWordRanges, FuzzyRangesNorm } = ctx;
// FoldChar / Norm: accents fold, case only folds when case-insensitive. // FoldChar / Norm: accents fold, case only folds when case-insensitive.
assert.equal(FoldChar("é"), "e"); assert.equal(FoldChar("é"), "e");
@@ -41,8 +41,11 @@ assert.deepEqual(FuzzyRangesNorm(NormText("Auto-Orient", false), NormText("orien
assert.deepEqual(FuzzyRangesNorm(NormText("AutoOriented", false), NormText("orient", false)), [[4, 10]]); assert.deepEqual(FuzzyRangesNorm(NormText("AutoOriented", false), NormText("orient", false)), [[4, 10]]);
assert.equal(FuzzyRangesNorm(NormText("Measure", false), NormText("xyz", false)), null); // no subsequence assert.equal(FuzzyRangesNorm(NormText("Measure", false), NormText("xyz", false)), null); // no subsequence
// WholeWordRangesNorm: \b-bounded literal against a pre-normalized haystack, offsets in original coords. // NormText stays 1:1 with the original even when NFD expands (Hangul syllables) or drops (combining
assert.deepEqual(WholeWordRangesNorm(NormText("Auto-Orient", false), NormText("orient", false)), [[5, 11]]); // diacritics, U+0130) a code unit, so highlight ranges remain aligned to the original string.
assert.equal(WholeWordRangesNorm(NormText("AutoOriented", false), NormText("orient", false)), null); // inside a word assert.equal(NormText("각x", false).length, "각x".length);
assert.equal(NormText("e\u0301x", false).length, "e\u0301x".length);
assert.equal(NormText("\u0130x", false).length, "\u0130x".length);
assert.equal(FuzzyRangesNorm(NormText("각abcdeXfgh", false), NormText("X", false))[0][0], 6);
console.log("ok"); console.log("ok");
+48 -80
View File
@@ -141,9 +141,6 @@ std::unique_ptr<AppAction> make_action(const std::string& plugin_key, const std:
// ---- built-in command actions (the speed dial "commands" section) ------ // ---- built-in command actions (the speed dial "commands" section) ------
constexpr const char* kCommandPrefix = "orca_command";
constexpr const char* kOrcaSourceKey = "orca";
constexpr const char* kOrcaSourceName = "OrcaSlicer";
constexpr const char* kSettingPrefix = "orca_setting"; constexpr const char* kSettingPrefix = "orca_setting";
constexpr const char* kPlateGotoPrefix = "orca_plate_goto"; constexpr const char* kPlateGotoPrefix = "orca_plate_goto";
constexpr const char* kRecentProjectPrefix = "orca_recent_project"; constexpr const char* kRecentProjectPrefix = "orca_recent_project";
@@ -212,29 +209,28 @@ struct SettingAction : AppAction
} }
}; };
// A built-in command action. Thin value: identity + presentation come from the NativeCommands // Seed one action's persisted state (favourite flag + frecency counters) from an already-parsed
// catalog, and run() routes back to it - the catalog is the single source of truth for its // stats blob and capped favourite list. Shared by the dynamic materialisers.
// behaviour. The id is keyed by the stable catalog key (NOT the display title), so a rename or a void seed_from(const nlohmann::json& stats, const std::vector<std::string>& favs, const std::string& id, AppAction& a)
// UI-language switch never re-keys the action; the title is display-only.
struct CommandAction : AppAction
{ {
static std::unique_ptr<CommandAction> make(const NativeCommand& c) { return std::unique_ptr<CommandAction>(new CommandAction(c)); } a.favourite = std::find(favs.begin(), favs.end(), id) != favs.end();
if (auto it = stats.find(id); it != stats.end() && it->is_object()) {
std::string command_key; a.count = it->value("count", 0);
a.last = it->value("last", 0LL);
AppActionRunResult run(const std::string& param) const override { return NativeCommands::run(command_key, param); }
private:
explicit CommandAction(const NativeCommand& c)
: AppAction(AppActionId{AppAction::compose_id(kCommandPrefix, c.key, kOrcaSourceKey)}, c.title, kOrcaSourceKey, kOrcaSourceName)
, command_key(c.key)
{
this->kind = AppActionKind::Command;
this->group = c.group;
this->input = c.input;
this->icon = c.icon;
} }
}; }
// Drop actions whose id starts with `prefix` but that were not seen in this pass (a stale materialisation).
void drop_stale(std::unordered_map<std::string, std::shared_ptr<AppAction>>& actions, const char* prefix,
const std::unordered_set<std::string>& seen)
{
for (auto it = actions.begin(); it != actions.end();) {
if (it->first.rfind(prefix, 0) == 0 && !seen.count(it->first))
it = actions.erase(it);
else
++it;
}
}
// A dynamic "Go to Plate N" action, one per live plate, rebuilt on every snapshot() (so a // A dynamic "Go to Plate N" action, one per live plate, rebuilt on every snapshot() (so a
// rename/move immediately shows up). id is keyed by plate index, NOT the display title, so // rename/move immediately shows up). id is keyed by plate index, NOT the display title, so
@@ -343,10 +339,10 @@ void ActionRegistry::init()
// Built-in palette commands (Save/Load, Preferences, Mode switch, Slice/Preview, Go to layer). // Built-in palette commands (Save/Load, Preferences, Mode switch, Slice/Preview, Go to layer).
// Register after plugins so the plugin ids win on any (unlikely) id collision - ids are distinct // Register after plugins so the plugin ids win on any (unlikely) id collision - ids are distinct
// by prefix, so this is order-independent. The catalog lives in NativeCommands - the registry // by prefix, so this is order-independent. The catalog (and its thin AppAction adapter) lives in
// only materialises thin CommandAction values from it. // NativeCommands; the registry only stores and dispatches the result.
for (const NativeCommand& c : NativeCommands::catalog()) for (const NativeCommand& c : NativeCommands::catalog())
upsert(CommandAction::make(c)); upsert(NativeCommands::make_action(c));
} }
void ActionRegistry::refresh_source(const std::string& plugin_key, ActionChange change) void ActionRegistry::refresh_source(const std::string& plugin_key, ActionChange change)
@@ -429,6 +425,14 @@ void ActionRegistry::seed_state(AppAction& a) const
} }
} }
void ActionRegistry::load_persisted(nlohmann::json& stats, std::vector<std::string>& favs) const
{
stats = read_section("stats", nlohmann::json::object());
if (!stats.is_object())
stats = nlohmann::json::object();
favs = favourite_ids();
}
// ---- read surface ----------------------------------------------------------- // ---- read surface -----------------------------------------------------------
const AppAction* ActionRegistry::by_id(const std::string& id) const const AppAction* ActionRegistry::by_id(const std::string& id) const
@@ -529,10 +533,9 @@ void ActionRegistry::materialize_setting_actions()
// Load the persisted per-action state ONCE (not per-option) so a re-materialised setting keeps // Load the persisted per-action state ONCE (not per-option) so a re-materialised setting keeps
// its recency/favourite; mirroring seed_state but amortised over the whole option set. // its recency/favourite; mirroring seed_state but amortised over the whole option set.
nlohmann::json stats = read_section("stats", nlohmann::json::object()); nlohmann::json stats;
if (!stats.is_object()) std::vector<std::string> favs;
stats = nlohmann::json::object(); load_persisted(stats, favs);
const std::vector<std::string> favs = favourite_ids();
std::unordered_set<std::string> seen; std::unordered_set<std::string> seen;
for (const Search::Option& opt : options) { for (const Search::Option& opt : options) {
@@ -568,11 +571,7 @@ void ActionRegistry::materialize_setting_actions()
} }
} }
action->favourite = std::find(favs.begin(), favs.end(), id) != favs.end(); seed_from(stats, favs, id, *action);
if (auto it = stats.find(id); it != stats.end() && it->is_object()) {
action->count = it->value("count", 0);
action->last = it->value("last", 0LL);
}
auto const action_id = action->id(); auto const action_id = action->id();
auto const app_action = std::shared_ptr<AppAction>(std::move(action)); auto const app_action = std::shared_ptr<AppAction>(std::move(action));
m_actions.insert_or_assign(action_id, app_action); m_actions.insert_or_assign(action_id, app_action);
@@ -580,12 +579,7 @@ void ActionRegistry::materialize_setting_actions()
// Drop SettingActions whose option no longer exists in the current configs (e.g. the printer // Drop SettingActions whose option no longer exists in the current configs (e.g. the printer
// technology / UI mode changed). Non-setting actions are untouched. // technology / UI mode changed). Non-setting actions are untouched.
for (auto it = m_actions.begin(); it != m_actions.end();) { drop_stale(m_actions, kSettingPrefix, seen);
if (it->first.rfind(kSettingPrefix, 0) == 0 && !seen.count(it->first))
it = m_actions.erase(it);
else
++it;
}
} }
void ActionRegistry::materialize_plate_actions() void ActionRegistry::materialize_plate_actions()
@@ -597,21 +591,15 @@ void ActionRegistry::materialize_plate_actions()
Plater* plater = wxTheApp ? wxGetApp().plater() : nullptr; Plater* plater = wxTheApp ? wxGetApp().plater() : nullptr;
if (!plater || plater->printer_technology() != ptFFF || plater->only_gcode_mode()) { if (!plater || plater->printer_technology() != ptFFF || plater->only_gcode_mode()) {
// Drop any stale plate actions (e.g. the printer technology switched to SLA). // Drop any stale plate actions (e.g. the printer technology switched to SLA).
for (auto it = m_actions.begin(); it != m_actions.end();) { drop_stale(m_actions, kPlateGotoPrefix, {});
if (it->first.rfind(kPlateGotoPrefix, 0) == 0)
it = m_actions.erase(it);
else
++it;
}
return; return;
} }
// Persisted per-action state, read ONCE (mirrors materialize_setting_actions) so a relisted // Persisted per-action state, read ONCE (mirrors materialize_setting_actions) so a relisted
// "Go to Plate N" keeps its recency/favourite when the plate is renamed - the id is index-keyed. // "Go to Plate N" keeps its recency/favourite when the plate is renamed - the id is index-keyed.
nlohmann::json stats = read_section("stats", nlohmann::json::object()); nlohmann::json stats;
if (!stats.is_object()) std::vector<std::string> favs;
stats = nlohmann::json::object(); load_persisted(stats, favs);
const std::vector<std::string> favs = favourite_ids();
const std::vector<PartPlate*>& list = plater->get_partplate_list().get_plate_list(); const std::vector<PartPlate*>& list = plater->get_partplate_list().get_plate_list();
std::unordered_set<std::string> seen; std::unordered_set<std::string> seen;
@@ -630,23 +618,14 @@ void ActionRegistry::materialize_plate_actions()
title += " (" + name + ")"; title += " (" + name + ")";
auto action = std::make_unique<PlateAction>(int(i), title, kOrcaSourceName); auto action = std::make_unique<PlateAction>(int(i), title, kOrcaSourceName);
action->favourite = std::find(favs.begin(), favs.end(), id) != favs.end(); seed_from(stats, favs, id, *action);
if (auto it = stats.find(id); it != stats.end() && it->is_object()) {
action->count = it->value("count", 0);
action->last = it->value("last", 0LL);
}
auto const action_id = action->id(); auto const action_id = action->id();
auto const app_action = std::shared_ptr<AppAction>(std::move(action)); auto const app_action = std::shared_ptr<AppAction>(std::move(action));
m_actions.insert_or_assign(action_id, app_action); m_actions.insert_or_assign(action_id, app_action);
} }
// Drop plate actions whose index no longer exists (a plate was deleted / moved to the front). // Drop plate actions whose index no longer exists (a plate was deleted / moved to the front).
for (auto it = m_actions.begin(); it != m_actions.end();) { drop_stale(m_actions, kPlateGotoPrefix, seen);
if (it->first.rfind(kPlateGotoPrefix, 0) == 0 && !seen.count(it->first))
it = m_actions.erase(it);
else
++it;
}
} }
void ActionRegistry::materialize_recent_project_actions() void ActionRegistry::materialize_recent_project_actions()
@@ -655,10 +634,9 @@ void ActionRegistry::materialize_recent_project_actions()
// Persisted per-action state, read ONCE (mirrors materialize_plate_actions) so a relisted recent // Persisted per-action state, read ONCE (mirrors materialize_plate_actions) so a relisted recent
// project keeps its recency/favourite when the recents list reorders - the id is path-keyed. // project keeps its recency/favourite when the recents list reorders - the id is path-keyed.
nlohmann::json stats = read_section("stats", nlohmann::json::object()); nlohmann::json stats;
if (!stats.is_object()) std::vector<std::string> favs;
stats = nlohmann::json::object(); load_persisted(stats, favs);
const std::vector<std::string> favs = favourite_ids();
// app_config stores recents oldest-first; the palette shows newest-first. // app_config stores recents oldest-first; the palette shows newest-first.
std::vector<std::string> recents = wxGetApp().app_config->get_recent_projects(); std::vector<std::string> recents = wxGetApp().app_config->get_recent_projects();
@@ -681,23 +659,14 @@ void ActionRegistry::materialize_recent_project_actions()
title = path; title = path;
auto action = std::make_unique<RecentProjectAction>(path, std::move(title), path); auto action = std::make_unique<RecentProjectAction>(path, std::move(title), path);
action->favourite = std::find(favs.begin(), favs.end(), id) != favs.end(); seed_from(stats, favs, id, *action);
if (auto it = stats.find(id); it != stats.end() && it->is_object()) {
action->count = it->value("count", 0);
action->last = it->value("last", 0LL);
}
auto const action_id = action->id(); auto const action_id = action->id();
auto const app_action = std::shared_ptr<AppAction>(std::move(action)); auto const app_action = std::shared_ptr<AppAction>(std::move(action));
m_actions.insert_or_assign(action_id, app_action); m_actions.insert_or_assign(action_id, app_action);
} }
// Drop recent-project actions whose file no longer exists / was removed from the recents list. // Drop recent-project actions whose file no longer exists / was removed from the recents list.
for (auto it = m_actions.begin(); it != m_actions.end();) { drop_stale(m_actions, kRecentProjectPrefix, seen);
if (it->first.rfind(kRecentProjectPrefix, 0) == 0 && !seen.count(it->first))
it = m_actions.erase(it);
else
++it;
}
} }
bool ActionRegistry::should_ask(const std::string& id) const bool ActionRegistry::should_ask(const std::string& id) const
@@ -753,7 +722,6 @@ nlohmann::json ActionRegistry::snapshot()
{"group", a->group}, {"group", a->group},
{"input", a->input}, {"input", a->input},
{"icon", a->icon}, {"icon", a->icon},
{"shortcut", ""},
{"mode", mode_key(a->required_mode)}}); {"mode", mode_key(a->required_mode)}});
}; };
@@ -816,7 +784,7 @@ nlohmann::json ActionRegistry::tab_options() const
if (id.empty()) if (id.empty())
continue; continue;
out.push_back({{"id", id.ToStdString()}, out.push_back({{"id", id.ToStdString()},
{"title", notebook->GetPageText(i).ToStdString()}, {"title", notebook->GetPageLabel(i).ToStdString()},
{"icon", notebook->GetPageIcon(i)}}); {"icon", notebook->GetPageIcon(i)}});
} }
return out; return out;
+21 -9
View File
@@ -114,6 +114,12 @@ private:
std::string m_source_name; // display name of the action's source std::string m_source_name; // display name of the action's source
}; };
// Stable identity/display name of the built-in ("OrcaSlicer") action source. Shared by the native
// command catalog and the dynamically materialised setting/plate/recent actions so every built-in
// action re-keys together.
inline constexpr const char* kOrcaSourceKey = "orca";
inline constexpr const char* kOrcaSourceName = "OrcaSlicer";
// True when a setting at `setting_mode` cannot be edited in `current_mode` and the UI must switch // True when a setting at `setting_mode` cannot be edited in `current_mode` and the UI must switch
// first. Developer settings are handled as a separate prompt by the Speed Dial. // first. Developer settings are handled as a separate prompt by the Speed Dial.
inline bool requires_mode_switch(ConfigOptionMode setting_mode, ConfigOptionMode current_mode) inline bool requires_mode_switch(ConfigOptionMode setting_mode, ConfigOptionMode current_mode)
@@ -128,15 +134,17 @@ std::vector<std::string> cap_favourites(const std::vector<std::string>& ids, siz
// Self-contained sink and single owner of runnable actions for the app session. // Self-contained sink and single owner of runnable actions for the app session.
// //
// Workflow: // Workflow:
// 1. init() (once, UI thread) subscribes to the plugin loader and enumerates the // 1. init() (once, UI thread) subscribes to the plugin loader and enumerates the current script
// current script capabilities into actions. // capabilities into actions, then materialises the static built-ins from the NativeCommands catalog.
// 2. Loader load/unload callbacks route through refresh_source()/refresh_capability(), // 2. Loader load/unload callbacks route through refresh_source()/refresh_capability(),
// which upsert()/remove() actions. The registry keeps the only action list and // which upsert()/remove() actions. The registry keeps the only action list and
// restores persisted user state as actions arrive. // restores persisted user state as actions arrive.
// 3. Consumers use by_id(), snapshot(), and run() without knowing the source. // 3. Dynamic built-in families (settings, plates, recent projects) are re-materialised at the top of
// snapshot(), because their membership follows live state (the current configs, plate list, recents).
// 4. Consumers use by_id(), snapshot(), and run() without knowing the source.
// //
// note: there is exactly one source (script plugins), so it lives inline here rather // note: the static catalog lives in NativeCommands; the registry owns the pool, persistence and
// than behind a polymorphic source interface. // dispatch, and materialises the dynamic families inline rather than behind a source interface.
class ActionRegistry class ActionRegistry
{ {
public: public:
@@ -180,16 +188,20 @@ public:
nlohmann::json snapshot(); nlohmann::json snapshot();
// "Go to tab..." Speed Dial helper: enumerate the MainFrame notebook's current pages // "Go to tab..." Speed Dial helper: enumerate the MainFrame notebook's current pages
// as [{id,title},...]. Live by construction - built-in tabs (Home/Prepare/Preview/Device/ // as [{id,title,icon},...], using the page's real label (not the compact-blanked button text).
// Project/Calibration) and plugin tabs (plugin.<key>.<name>) are all Notebook pages, so a // Live by construction - built-in tabs (Home/Prepare/Preview/Device/Project/Calibration) and
// page appears/disappears with the notebook. Plugin tabs hidden in the overflow menu (many // plugin tabs (plugin.<key>.<name>) are all Notebook pages, so a page appears/disappears with
// plugins) aren't separate pages and are not listed. Call on the UI thread; null-safe. // the notebook. Plugin tabs hidden in the overflow menu (many plugins) aren't separate pages and
// are not listed. Call on the UI thread; null-safe.
nlohmann::json tab_options() const; nlohmann::json tab_options() const;
private: private:
void seed_state(AppAction& a) const; // favourite/stats from config void seed_state(AppAction& a) const; // favourite/stats from config
AppAction* find(const std::string& id); AppAction* find(const std::string& id);
// Read the persisted stats blob + capped favourite list once for a materialisation pass.
void load_persisted(nlohmann::json& stats, std::vector<std::string>& favs) const;
// (Re)materialise the current visible config settings as SettingActions from the live // (Re)materialise the current visible config settings as SettingActions from the live
// searcher (respecting printer-tech + user-mode + visibility filtering), removing stale ones. // searcher (respecting printer-tech + user-mode + visibility filtering), removing stale ones.
// Called at the top of snapshot() so the palette always reflects the current configs. // Called at the top of snapshot() so the palette always reflects the current configs.
+36 -1
View File
@@ -2616,6 +2616,10 @@ void GUI_App::init_app_config()
} }
#endif // _WIN32 #endif // _WIN32
} }
// Speed Dial opens on a bare Space from any page by default. Seed the flag so Preferences and the
// MainFrame shortcut read the same value; an existing config (true or false) is left untouched.
if (app_config->get("enable_speed_dial").empty())
app_config->set_bool("enable_speed_dial", true);
set_logging_level(Slic3r::level_string_to_boost(app_config->get("log_severity_level"))); set_logging_level(Slic3r::level_string_to_boost(app_config->get("log_severity_level")));
} }
@@ -8163,6 +8167,22 @@ void GUI_App::save_mode(const /*ConfigOptionMode*/int mode)
update_mode(); update_mode();
} }
void GUI_App::set_mode(ConfigOptionMode mode)
{
const bool was_developer = app_config->get_bool("developer_mode");
if (was_developer)
app_config->set_bool("developer_mode", false);
save_mode(mode);
if (was_developer)
app_config->save();
}
void GUI_App::enable_developer_mode()
{
app_config->set_bool("developer_mode", true);
update_mode();
}
// Update view mode according to selected menu // Update view mode according to selected menu
void GUI_App::update_mode() void GUI_App::update_mode()
{ {
@@ -8316,17 +8336,32 @@ void GUI_App::refresh_plugins()
// The metadata refresh blocks on disc discovery and a cloud round-trip, so run it on a worker // The metadata refresh blocks on disc discovery and a cloud round-trip, so run it on a worker
// and report completion through the notification manager -- the speed dial needs no dialog. // and report completion through the notification manager -- the speed dial needs no dialog.
std::thread([]() { std::thread([]() {
wxString error;
try {
refresh_plugin_metadata_blocking(/*fetch_cloud=*/true); refresh_plugin_metadata_blocking(/*fetch_cloud=*/true);
wxTheApp->CallAfter([]() { } catch (const std::exception& ex) {
error = from_u8(ex.what());
} catch (...) {
error = "Unknown error"; // plain literal: wx translation isn't safe off the UI thread
}
if (!wxTheApp)
return;
wxTheApp->CallAfter([error]() {
if (wxGetApp().is_closing()) if (wxGetApp().is_closing())
return; return;
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater == nullptr) if (plater == nullptr)
return; return;
if (error.IsEmpty())
plater->get_notification_manager()->push_notification( plater->get_notification_manager()->push_notification(
NotificationType::CustomNotification, NotificationType::CustomNotification,
NotificationManager::NotificationLevel::RegularNotificationLevel, NotificationManager::NotificationLevel::RegularNotificationLevel,
into_u8(_L("Plugins refreshed."))); into_u8(_L("Plugins refreshed.")));
else
plater->get_notification_manager()->push_notification(
NotificationType::CustomNotification,
NotificationManager::NotificationLevel::ErrorNotificationLevel,
into_u8(wxString::Format(_L("Failed to refresh plugins: %s"), error)));
}); });
}).detach(); }).detach();
} }
+5
View File
@@ -593,6 +593,11 @@ public:
std::string get_saved_mode_str(); std::string get_saved_mode_str();
std::string get_mode_str(); std::string get_mode_str();
void save_mode(const /*ConfigOptionMode*/int mode) ; void save_mode(const /*ConfigOptionMode*/int mode) ;
// Switch to `mode` from the Speed Dial: a developer-mode override hides the saved mode
// (get_mode returns comDevelop), so clear it first and persist the choice.
void set_mode(ConfigOptionMode mode);
// Turn the developer-mode override on and refresh the UI (used before jumping to a Developer setting).
void enable_developer_mode();
void update_mode(); void update_mode();
void update_internal_development(); void update_internal_development();
void show_ip_address_enter_dialog(wxString title = wxEmptyString); void show_ip_address_enter_dialog(wxString title = wxEmptyString);
+2 -2
View File
@@ -199,8 +199,8 @@ void KBShortcutsDialog::fill_shortcuts()
// Switch table page // Switch table page
{ ctrl + L("Tab"), L("Switch table page")}, { ctrl + L("Tab"), L("Switch table page")},
// Open speed dial // Open speed dial
{ "Space", L("Open speed dial") }, { L_CONTEXT("Space", "Keyboard Shortcut"), L("Open speed dial") },
{ alt + "1..9,0", L("Run a Speed Dial favourite") }, { alt + "1..9,0", L("Run a Speed Dial favourite (while the Speed Dial is open)") },
//DEL //DEL
#ifdef __APPLE__ #ifdef __APPLE__
{"fn+⌫", L("Delete Selected")}, {"fn+⌫", L("Delete Selected")},
+13 -6
View File
@@ -45,6 +45,7 @@
#include "Preferences.hpp" #include "Preferences.hpp"
#include "Widgets/Button.hpp" #include "Widgets/Button.hpp"
#include "Widgets/ProgressDialog.hpp" #include "Widgets/ProgressDialog.hpp"
#include "Widgets/StaticBox.hpp"
#include "BindDialog.hpp" #include "BindDialog.hpp"
#include "../Utils/MacDarkMode.hpp" #include "../Utils/MacDarkMode.hpp"
#include "../Utils/NetworkAgentFactory.hpp" #include "../Utils/NetworkAgentFactory.hpp"
@@ -109,17 +110,21 @@ namespace {
// Space opens the speed dial, but it is the activation key for buttons, checkboxes and other // Space opens the speed dial, but it is the activation key for buttons, checkboxes and other
// controls. CHAR_HOOK runs before the focused child, so only take Space when the focused window has // controls. CHAR_HOOK runs before the focused child, so only take Space when the focused window has
// no keyboard-activation meaning of its own. Canvases (GLCanvas3D) and panels are not wxControls and // no keyboard-activation meaning of its own. Canvases (GLCanvas3D) and panels are not controls and
// fall through to "open"; Notebook and wxWebView are wxControls that don't use Space, so allow them. // fall through to "open"; the Notebook itself does too, so Space still opens the dial on any page.
bool focus_keeps_space(wxWindow* focus) bool focus_keeps_space(wxWindow* focus)
{ {
if (!focus) if (!focus)
return false; return false;
if (dynamic_cast<wxTextEntryBase*>(focus)) if (dynamic_cast<wxTextEntryBase*>(focus))
return true; // typing a space into a text field return true; // typing a space into a text field
if (dynamic_cast<wxWebView*>(focus))
return true; // web content scrolls and hosts its own text fields
if (dynamic_cast<::Button*>(focus)) if (dynamic_cast<::Button*>(focus))
return true; // custom button: Space clicks it (it is a wxWindow, not a wxControl) return true; // custom button: Space clicks it (it is a wxWindow, not a wxControl)
if (dynamic_cast<wxControl*>(focus) && !dynamic_cast<Notebook*>(focus) && !dynamic_cast<wxWebView*>(focus)) if (dynamic_cast<StaticBox*>(focus))
return true; // custom composites (ComboBox, SpinInput, ...) activate with Space and are wxWindow
if (dynamic_cast<wxControl*>(focus) && !dynamic_cast<Notebook*>(focus))
return true; // stock button/checkbox/choice/list/etc. keep Space return true; // stock button/checkbox/choice/list/etc. keep Space
return false; return false;
} }
@@ -724,8 +729,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_
// Orca: open the speed dial from any page with a bare Space. Only when no modifier is held (so // Orca: open the speed dial from any page with a bare Space. Only when no modifier is held (so
// editing shortcuts like Ctrl+Shift+Space in the canvas still reach it) and the focused window // editing shortcuts like Ctrl+Shift+Space in the canvas still reach it) and the focused window
// doesn't use Space to activate itself (buttons, checkboxes, list/choice controls, text fields), // doesn't use Space to activate itself (buttons, checkboxes, list/choice controls, text fields),
// so a bare Space there still clicks/toggles instead of being hijacked. // so a bare Space there still clicks/toggles instead of being hijacked. Gated by a preference
if (!evt.CmdDown() && !evt.ShiftDown() && !evt.AltDown() && evt.GetKeyCode() == WXK_SPACE) { // (default on) so users can hand Space back to the focused control entirely.
if (wxGetApp().app_config->get_bool("enable_speed_dial") && !evt.CmdDown() && !evt.ShiftDown() &&
!evt.AltDown() && evt.GetKeyCode() == WXK_SPACE) {
if (focus_keeps_space(wxWindow::FindFocus())) { if (focus_keeps_space(wxWindow::FindFocus())) {
evt.Skip(); // let the focused control keep Space evt.Skip(); // let the focused control keep Space
return; return;
@@ -4325,7 +4332,7 @@ void MainFrame::technology_changed()
// update menu titles // update menu titles
PrinterTechnology pt = plater()->printer_technology(); PrinterTechnology pt = plater()->printer_technology();
if (int id = m_menubar->FindMenu(pt == ptFFF ? _omitL("Material Settings") : _L("Filament settings")); id != wxNOT_FOUND) if (int id = m_menubar->FindMenu(pt == ptFFF ? _omitL("Material Settings") : _L("Filament settings")); id != wxNOT_FOUND)
m_menubar->SetMenuLabel(id, pt == ptFFF ? _omitL("Material Settings") : _L("Filament settings")); m_menubar->SetMenuLabel(id, pt == ptSLA ? _omitL("Material Settings") : _L("Filament settings"));
} }
// Opens the calibration wizard for `calib_kind`. Single source of truth for the wizard lifecycle: // Opens the calibration wizard for `calib_kind`. Single source of truth for the wizard lifecycle:
+112 -179
View File
@@ -25,7 +25,7 @@
#include <cmath> #include <cmath>
#include <cstdlib> #include <cstdlib>
#include <exception> #include <exception>
#include <map> #include <memory>
#include <string> #include <string>
#include <tuple> #include <tuple>
#include <utility> #include <utility>
@@ -120,120 +120,43 @@ AppActionRunResult calib_command(CalibKind kind)
return {AppActionRunResult::Level::Success}; return {AppActionRunResult::Level::Success};
} }
// Palette-only: developer mode overrides the saved mode (get_mode returns comDevelop), so choosing constexpr const char* kCommandPrefix = "orca_command";
// Simple/Advanced/Expert must clear it first. Mirrors Preferences: persist the flag, then update.
void select_mode(ConfigOptionMode mode)
{
GUI_App& app = wxGetApp();
const bool was_developer = app.app_config->get_bool("developer_mode");
if (was_developer)
app.app_config->set_bool("developer_mode", false);
app.save_mode(mode);
if (was_developer)
app.app_config->save();
}
// Tile pictogram per command: the SVG base name of the icon the matching GUI control already uses // Thin AppAction wrapper for one catalog entry: identity and presentation come from the catalog,
// (menu/toolbar/sidebar). Absent key => blank tile. Keeping this as one table makes the curation // run() routes back to it. The id is keyed by the stable catalog key (not the display title), so a
// reviewable and lets a test check every value resolves to a real file. // rename or a UI-language switch never re-keys the action.
const std::map<std::string, std::string>& command_icons() struct CommandAction : AppAction
{ {
static const std::map<std::string, std::string> icons = { std::string command_key;
// Slice & Export
{"slice_and_preview", "media_play"}, AppActionRunResult run(const std::string& param) const override { return NativeCommands::run(command_key, param); }
{"export_gcode", "menu_export_gcode"},
{"export_stl", "menu_export_stl"}, explicit CommandAction(const NativeCommand& c)
{"export_stl_multi", "menu_export_stl"}, : AppAction(AppActionId{AppAction::compose_id(kCommandPrefix, c.key, kOrcaSourceKey)}, c.title, kOrcaSourceKey, kOrcaSourceName)
{"export_sliced_file", "menu_export_sliced_file"}, , command_key(c.key)
{"export_all_sliced_file", "menu_export_sliced_file"}, {
{"export_toolpaths_obj", "menu_export_toolpaths"}, this->kind = AppActionKind::Command;
{"export_config", "menu_export_config"}, this->group = c.group;
{"export_3mf", "menu_save"}, this->input = c.input;
{"export_drc_single", "menu_export_stl"}, this->icon = c.icon;
{"export_drc_multi", "menu_export_stl"}, }
// Commands };
{"load_project", "menu_open"},
{"save_project", "menu_save"},
{"save_project_as", "menu_save"},
{"open_preferences", "cog"},
{"go_to_layer", "height_range_layer"},
// Mode: the sidebar mode toggle's own icon (ParamsPanel).
{"mode_simple", "advanced"},
{"mode_advanced", "advanced"},
{"mode_expert", "advanced"},
{"toggle_developer_mode", "advanced"},
// Calibration
{"calib_temperature", "calib_sf"},
{"calib_max_volumetric", "calib_sf"},
{"calib_pressure_advance", "calib_sf"},
{"calib_flow_ratio", "calib_sf"},
{"calib_retraction", "calib_sf"},
{"calib_cornering", "calib_sf"},
{"calib_input_shaping_freq", "calib_sf"},
{"calib_input_shaping_damp", "calib_sf"},
{"calib_vfa", "calib_sf"},
// View
{"reset_window_layout", "toolbar_reset"},
// Object
{"obj_delete", "menu_delete"},
{"obj_delete_all", "menu_remove"},
{"obj_mirror_x", "menu_mirror_x"},
{"obj_mirror_y", "menu_mirror_y"},
{"obj_mirror_z", "menu_mirror_z"},
{"obj_split_objects", "menu_split_objects"},
{"obj_split_parts", "menu_split_parts"},
{"obj_drop", "toolbar_flatten"},
{"obj_instances_up", "instance_add"},
{"obj_instances_down", "instance_remove"},
{"obj_arrange", "toolbar_arrange"},
{"obj_orient", "toolbar_orient"},
// Add Primitive
{"add_primitive_cube", "menu_obj_cube"},
{"add_primitive_cylinder", "menu_obj_cylinder"},
{"add_primitive_sphere", "menu_obj_sphere"},
{"add_primitive_cone", "menu_obj_cone"},
{"add_primitive_disc", "menu_obj_disc"},
{"add_primitive_torus", "menu_obj_torus"},
{"add_primitive_text", "menu_obj_text"},
{"add_primitive_svg", "menu_obj_svg"},
// Plate
{"plate_add", "toolbar_add_plate"},
{"plate_duplicate", "menu_copy"},
{"plate_delete", "menu_delete"},
{"plate_rename", "plate_name_edit"},
{"plate_toggle_lock", "lock_normal"},
{"plate_goto", "go_next_plate"},
// Printer / Presets
{"sync_ams", "ams_fila_sync"},
{"sync_presets", "printer_sync_ok"},
{"preset_bundle", "menu_edit_preset"},
// Import
{"import_file", "menu_import"},
{"import_zip_archive", "menu_import"},
{"import_configs", "menu_import"},
// Help
{"help_open_config_folder", "folder-closed"},
{"help_tip_of_the_day", "info"},
{"help_check_updates", "ams_refresh_normal"},
{"help_about", "OrcaSlicer_about"},
{"open_wiki", "link_wiki_img"},
};
return icons;
}
std::vector<NativeCommand> build_command_catalog() std::vector<NativeCommand> build_command_catalog()
{ {
std::vector<NativeCommand> out; std::vector<NativeCommand> out;
auto add = [&](std::string key, std::string title, std::string group, std::function<AppActionRunResult(const std::string&)> runner, auto add = [&](std::string key, std::string title, std::string group, std::function<AppActionRunResult(const std::string&)> runner,
std::string input = {}) { std::string input = {}, std::string icon = {}) {
std::string icon;
if (auto it = command_icons().find(key); it != command_icons().end())
icon = it->second;
out.push_back({std::move(key), std::move(title), std::move(group), std::move(input), std::move(icon), std::move(runner)}); out.push_back({std::move(key), std::move(title), std::move(group), std::move(input), std::move(icon), std::move(runner)});
}; };
// Presentation-first overload: keeps the tile icon next to the title/group it belongs to.
auto add_with_icon = [&](std::string key, std::string title, std::string group, std::string icon,
std::function<AppActionRunResult(const std::string&)> runner, std::string input = {}) {
add(std::move(key), std::move(title), std::move(group), std::move(runner), std::move(input), std::move(icon));
};
// ---- Slice & Export ---- // ---- Slice & Export ----
add("slice_and_preview", _u8L("Slice and Preview"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("slice_and_preview", _u8L("Slice and Preview"), _u8L("Slice & Export"), "media_play", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater) { if (plater) {
plater->reslice(); plater->reslice();
@@ -244,8 +167,8 @@ std::vector<NativeCommand> build_command_catalog()
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add( add_with_icon(
"go_to_layer", _u8L("Go to layer (percent)"), _u8L("Commands"), "go_to_layer", _u8L("Go to layer (percent)"), _u8L("Commands"), "height_range_layer",
[](const std::string& param) { [](const std::string& param) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater) { if (plater) {
@@ -258,47 +181,52 @@ std::vector<NativeCommand> build_command_catalog()
}, },
"percent"); "percent");
// "go_to_tab" is two-phase: the palette collects the tab after activating it, so dispatch here // "go_to_tab" is two-phase: the palette collects the tab after activating it, then hands the tab
// is a no-op (the jump goes through the go_to_tab web command). // id back as `param` (same contract as go_to_layer's percent).
add( add(
"go_to_tab", _u8L("Go to tab..."), _u8L("Commands"), "go_to_tab", _u8L("Go to tab..."), _u8L("Commands"),
[](const std::string&) { return AppActionRunResult{AppActionRunResult::Level::Success}; }, "tab"); [](const std::string& param) {
if (MainFrame* mf = wxGetApp().mainframe; mf && !param.empty())
mf->select_tab(from_u8(param));
return AppActionRunResult{AppActionRunResult::Level::Success};
},
"tab");
add("load_project", _u8L("Load Project"), _u8L("Commands"), [](const std::string&) { add_with_icon("load_project", _u8L("Load Project"), _u8L("Commands"), "menu_open", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->load_project(); plater->load_project();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("save_project", _u8L("Save Project"), _u8L("Commands"), [](const std::string&) { add_with_icon("save_project", _u8L("Save Project"), _u8L("Commands"), "menu_save", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->save_project(false); plater->save_project(false);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("save_project_as", _u8L("Save Project As"), _u8L("Commands"), [](const std::string&) { add_with_icon("save_project_as", _u8L("Save Project As"), _u8L("Commands"), "menu_save", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->save_project(true); plater->save_project(true);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("open_preferences", _u8L("Preferences"), _u8L("Commands"), [](const std::string&) { add_with_icon("open_preferences", _u8L("Preferences"), _u8L("Commands"), "cog", [](const std::string&) {
wxGetApp().open_preferences(); wxGetApp().open_preferences();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
// ---- Mode ---- // ---- Mode ----
add("mode_simple", _u8L("Mode: Simple"), _u8L("Mode"), [](const std::string&) { add_with_icon("mode_simple", _u8L("Mode: Simple"), _u8L("Mode"), "advanced", [](const std::string&) {
select_mode(comSimple); wxGetApp().set_mode(comSimple);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("mode_advanced", _u8L("Mode: Advanced"), _u8L("Mode"), [](const std::string&) { add_with_icon("mode_advanced", _u8L("Mode: Advanced"), _u8L("Mode"), "advanced", [](const std::string&) {
select_mode(comAdvanced); wxGetApp().set_mode(comAdvanced);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("mode_expert", _u8L("Mode: Expert"), _u8L("Mode"), [](const std::string&) { add_with_icon("mode_expert", _u8L("Mode: Expert"), _u8L("Mode"), "advanced", [](const std::string&) {
select_mode(comExpert); wxGetApp().set_mode(comExpert);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
// Mirrors Preferences > Developer > Developer mode: flip the flag, persist, refresh the UI. // Mirrors Preferences > Developer > Developer mode: flip the flag, persist, refresh the UI.
add("toggle_developer_mode", _u8L("Toggle Developer Mode"), _u8L("Mode"), [](const std::string&) { add_with_icon("toggle_developer_mode", _u8L("Toggle Developer Mode"), _u8L("Mode"), "advanced", [](const std::string&) {
GUI_App& app = wxGetApp(); GUI_App& app = wxGetApp();
const bool on = !app.app_config->get_bool("developer_mode"); const bool on = !app.app_config->get_bool("developer_mode");
app.app_config->set_bool("developer_mode", on); app.app_config->set_bool("developer_mode", on);
@@ -308,50 +236,50 @@ std::vector<NativeCommand> build_command_catalog()
}); });
// ---- Export pipeline ---- // ---- Export pipeline ----
add("export_gcode", _u8L("Export G-code"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("export_gcode", _u8L("Export G-code"), _u8L("Slice & Export"), "menu_export_gcode", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_gcode(false); plater->export_gcode(false);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_stl", _u8L("Export STL"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("export_stl", _u8L("Export STL"), _u8L("Slice & Export"), "menu_export_stl", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_stl(); plater->export_stl();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_3mf", _u8L("Export 3MF"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("export_3mf", _u8L("Export 3MF"), _u8L("Slice & Export"), "menu_save", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_core_3mf(); plater->export_core_3mf();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_sliced_file", _u8L("Export Sliced File"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("export_sliced_file", _u8L("Export Sliced File"), _u8L("Slice & Export"), "menu_export_sliced_file", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_gcode_3mf(false); plater->export_gcode_3mf(false);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_all_sliced_file", _u8L("Export All Sliced Files"), _u8L("Slice & Export"), [](const std::string&) { add_with_icon("export_all_sliced_file", _u8L("Export All Sliced Files"), _u8L("Slice & Export"), "menu_export_sliced_file", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_gcode_3mf(true); plater->export_gcode_3mf(true);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
// ---- Calibration ---- // ---- Calibration ----
add("calib_temperature", _u8L("Temperature Calibration"), _u8L("Calibration"), add_with_icon("calib_temperature", _u8L("Temperature Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::Temperature); }); [](const std::string&) { return calib_command(CalibKind::Temperature); });
add("calib_max_volumetric", _u8L("Max Volumetric Speed Calibration"), _u8L("Calibration"), add_with_icon("calib_max_volumetric", _u8L("Max Volumetric Speed Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::MaxVolumetric); }); [](const std::string&) { return calib_command(CalibKind::MaxVolumetric); });
add("calib_pressure_advance", _u8L("Pressure Advance Calibration"), _u8L("Calibration"), add_with_icon("calib_pressure_advance", _u8L("Pressure Advance Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::PressureAdvance); }); [](const std::string&) { return calib_command(CalibKind::PressureAdvance); });
add("calib_flow_ratio", _u8L("Flow Ratio Calibration"), _u8L("Calibration"), add_with_icon("calib_flow_ratio", _u8L("Flow Ratio Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::FlowRatio); }); [](const std::string&) { return calib_command(CalibKind::FlowRatio); });
add("calib_retraction", _u8L("Retraction Calibration"), _u8L("Calibration"), add_with_icon("calib_retraction", _u8L("Retraction Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::Retraction); }); [](const std::string&) { return calib_command(CalibKind::Retraction); });
add("calib_cornering", _u8L("Cornering Calibration"), _u8L("Calibration"), add_with_icon("calib_cornering", _u8L("Cornering Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::Cornering); }); [](const std::string&) { return calib_command(CalibKind::Cornering); });
add("calib_input_shaping_freq", _u8L("Input Shaping Frequency Calibration"), _u8L("Calibration"), add_with_icon("calib_input_shaping_freq", _u8L("Input Shaping Frequency Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::InputShapingFreq); }); [](const std::string&) { return calib_command(CalibKind::InputShapingFreq); });
add("calib_input_shaping_damp", _u8L("Input Shaping Damping Calibration"), _u8L("Calibration"), add_with_icon("calib_input_shaping_damp", _u8L("Input Shaping Damping Calibration"), _u8L("Calibration"), "calib_sf",
[](const std::string&) { return calib_command(CalibKind::InputShapingDamp); }); [](const std::string&) { return calib_command(CalibKind::InputShapingDamp); });
add("calib_vfa", _u8L("VFA Calibration"), _u8L("Calibration"), [](const std::string&) { return calib_command(CalibKind::VFA); }); add_with_icon("calib_vfa", _u8L("VFA Calibration"), _u8L("Calibration"), "calib_sf", [](const std::string&) { return calib_command(CalibKind::VFA); });
// ---- View ---- // ---- View ----
for (auto [key, dir, title] : for (auto [key, dir, title] :
@@ -386,39 +314,39 @@ std::vector<NativeCommand> build_command_catalog()
plater->get_camera().select_next_type(); plater->get_camera().select_next_type();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("reset_window_layout", _u8L("Reset Window Layout"), _u8L("View"), [](const std::string&) { add_with_icon("reset_window_layout", _u8L("Reset Window Layout"), _u8L("View"), "toolbar_reset", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->reset_window_layout(); plater->reset_window_layout();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
// ---- Object ---- // ---- Object ----
add("obj_delete", _u8L("Delete Selected"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_delete", _u8L("Delete Selected"), _u8L("Object"), "menu_delete", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->remove_selected(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->remove_selected(); });
}); });
add("obj_delete_all", _u8L("Delete All Objects"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_delete_all", _u8L("Delete All Objects"), _u8L("Object"), "menu_remove", [](const std::string&) {
return object_op( return object_op(
wxGetApp().plater(), [](Plater* p) { return p->can_delete_all(); }, [](Plater* p) { p->delete_all_objects_from_model(); }); wxGetApp().plater(), [](Plater* p) { return p->can_delete_all(); }, [](Plater* p) { p->delete_all_objects_from_model(); });
}); });
add("obj_mirror_x", _u8L("Mirror X"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_mirror_x", _u8L("Mirror X"), _u8L("Object"), "menu_mirror_x", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::X); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::X); });
}); });
add("obj_mirror_y", _u8L("Mirror Y"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_mirror_y", _u8L("Mirror Y"), _u8L("Object"), "menu_mirror_y", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::Y); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::Y); });
}); });
add("obj_mirror_z", _u8L("Mirror Z"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_mirror_z", _u8L("Mirror Z"), _u8L("Object"), "menu_mirror_z", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::Z); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_mirror(); }, [](Plater* p) { p->mirror(Axis::Z); });
}); });
add("obj_split_objects", _u8L("Split to Objects"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_split_objects", _u8L("Split to Objects"), _u8L("Object"), "menu_split_objects", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_split_to_objects(); }, [](Plater* p) { p->split_object(true); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_split_to_objects(); }, [](Plater* p) { p->split_object(true); });
}); });
add("obj_split_parts", _u8L("Split to Parts"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_split_parts", _u8L("Split to Parts"), _u8L("Object"), "menu_split_parts", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_split_to_volumes(); }, [](Plater* p) { p->split_volume(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_split_to_volumes(); }, [](Plater* p) { p->split_volume(); });
}); });
add("obj_center", _u8L("Center Selected on Plate"), _u8L("Object"), [](const std::string&) { add("obj_center", _u8L("Center Selected on Plate"), _u8L("Object"), [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->center_selection(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->center_selection(); });
}); });
add("obj_drop", _u8L("Drop to Bed"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_drop", _u8L("Drop to Bed"), _u8L("Object"), "toolbar_flatten", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->drop_selection(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return !p->is_selection_empty(); }, [](Plater* p) { p->drop_selection(); });
}); });
add("obj_fit_volume", _u8L("Scale to Fit Print Volume"), _u8L("Object"), [](const std::string&) { add("obj_fit_volume", _u8L("Scale to Fit Print Volume"), _u8L("Object"), [](const std::string&) {
@@ -426,24 +354,24 @@ std::vector<NativeCommand> build_command_catalog()
wxGetApp().plater(), [](Plater* p) { return p->can_scale_to_print_volume(); }, wxGetApp().plater(), [](Plater* p) { return p->can_scale_to_print_volume(); },
[](Plater* p) { p->scale_selection_to_fit_print_volume(); }); [](Plater* p) { p->scale_selection_to_fit_print_volume(); });
}); });
add("obj_instances_up", _u8L("Increase Instances"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_instances_up", _u8L("Increase Instances"), _u8L("Object"), "instance_add", [](const std::string&) {
return object_op( return object_op(
wxGetApp().plater(), [](Plater* p) { return p->can_increase_instances(); }, [](Plater* p) { p->increase_instances(); }); wxGetApp().plater(), [](Plater* p) { return p->can_increase_instances(); }, [](Plater* p) { p->increase_instances(); });
}); });
add("obj_instances_down", _u8L("Decrease Instances"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_instances_down", _u8L("Decrease Instances"), _u8L("Object"), "instance_remove", [](const std::string&) {
return object_op( return object_op(
wxGetApp().plater(), [](Plater* p) { return p->can_decrease_instances(); }, [](Plater* p) { p->decrease_instances(); }); wxGetApp().plater(), [](Plater* p) { return p->can_decrease_instances(); }, [](Plater* p) { p->decrease_instances(); });
}); });
add("obj_arrange", _u8L("Auto-Arrange"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_arrange", _u8L("Auto-Arrange"), _u8L("Object"), "toolbar_arrange", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_arrange(); }, [](Plater* p) { p->arrange(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_arrange(); }, [](Plater* p) { p->arrange(); });
}); });
add("obj_orient", _u8L("Auto-Orient"), _u8L("Object"), [](const std::string&) { add_with_icon("obj_orient", _u8L("Auto-Orient"), _u8L("Object"), "toolbar_orient", [](const std::string&) {
return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_arrange(); }, [](Plater* p) { p->orient(); }); return object_op(wxGetApp().plater(), [](Plater* p) { return p->can_arrange(); }, [](Plater* p) { p->orient(); });
}); });
// ---- Add Primitive ---- (the Add > Add Primitive submenu; creates a new object) // ---- Add Primitive ---- (the Add > Add Primitive submenu; creates a new object)
auto add_primitive = [&](std::string key, std::string title, const char* type_name) { auto add_primitive = [&](std::string key, std::string title, std::string icon, const char* type_name) {
add(std::move(key), std::move(title), _u8L("Add Primitive"), [type_name](const std::string&) { add_with_icon(std::move(key), std::move(title), _u8L("Add Primitive"), std::move(icon), [type_name](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater) { if (plater) {
ensure_3d_view(plater); ensure_3d_view(plater);
@@ -453,13 +381,13 @@ std::vector<NativeCommand> build_command_catalog()
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
}; };
add_primitive("add_primitive_cube", _u8L("Cube"), "Cube"); add_primitive("add_primitive_cube", _u8L("Cube"), "menu_obj_cube", "Cube");
add_primitive("add_primitive_cylinder", _u8L("Cylinder"), "Cylinder"); add_primitive("add_primitive_cylinder", _u8L("Cylinder"), "menu_obj_cylinder", "Cylinder");
add_primitive("add_primitive_sphere", _u8L("Sphere"), "Sphere"); add_primitive("add_primitive_sphere", _u8L("Sphere"), "menu_obj_sphere", "Sphere");
add_primitive("add_primitive_cone", _u8L("Cone"), "Cone"); add_primitive("add_primitive_cone", _u8L("Cone"), "menu_obj_cone", "Cone");
add_primitive("add_primitive_disc", _u8L("Disc"), "Disc"); add_primitive("add_primitive_disc", _u8L("Disc"), "menu_obj_disc", "Disc");
add_primitive("add_primitive_torus", _u8L("Torus"), "Torus"); add_primitive("add_primitive_torus", _u8L("Torus"), "menu_obj_torus", "Torus");
add("add_primitive_text", _u8L("Text"), _u8L("Add Primitive"), [](const std::string&) { add_with_icon("add_primitive_text", _u8L("Text"), _u8L("Add Primitive"), "menu_obj_text", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater) { if (plater) {
ensure_3d_view(plater); ensure_3d_view(plater);
@@ -469,7 +397,7 @@ std::vector<NativeCommand> build_command_catalog()
} }
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("add_primitive_svg", _u8L("SVG"), _u8L("Add Primitive"), [](const std::string&) { add_with_icon("add_primitive_svg", _u8L("SVG"), _u8L("Add Primitive"), "menu_obj_svg", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (plater) { if (plater) {
ensure_3d_view(plater); ensure_3d_view(plater);
@@ -493,7 +421,7 @@ std::vector<NativeCommand> build_command_catalog()
} }
// ---- Plate ---- // ---- Plate ----
add("plate_add", _u8L("Add Plate"), _u8L("Plate"), [](const std::string&) { add_with_icon("plate_add", _u8L("Add Plate"), _u8L("Plate"), "toolbar_add_plate", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -502,7 +430,7 @@ std::vector<NativeCommand> build_command_catalog()
plater->add_plate(); plater->add_plate();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("plate_duplicate", _u8L("Duplicate Plate"), _u8L("Plate"), [](const std::string&) { add_with_icon("plate_duplicate", _u8L("Duplicate Plate"), _u8L("Plate"), "menu_copy", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -511,7 +439,7 @@ std::vector<NativeCommand> build_command_catalog()
plater->duplicate_plate(); plater->duplicate_plate();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("plate_delete", _u8L("Delete Plate"), _u8L("Plate"), [](const std::string&) { add_with_icon("plate_delete", _u8L("Delete Plate"), _u8L("Plate"), "menu_delete", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -520,7 +448,7 @@ std::vector<NativeCommand> build_command_catalog()
plater->delete_plate(); plater->delete_plate();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("plate_rename", _u8L("Rename Plate"), _u8L("Plate"), [](const std::string&) { add_with_icon("plate_rename", _u8L("Rename Plate"), _u8L("Plate"), "plate_name_edit", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -531,7 +459,7 @@ std::vector<NativeCommand> build_command_catalog()
curr->set_plate_name(dlg.get_plate_name().ToUTF8().data()); curr->set_plate_name(dlg.get_plate_name().ToUTF8().data());
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("plate_toggle_lock", _u8L("Toggle Plate Lock"), _u8L("Plate"), [](const std::string&) { add_with_icon("plate_toggle_lock", _u8L("Toggle Plate Lock"), _u8L("Plate"), "lock_normal", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -541,7 +469,7 @@ std::vector<NativeCommand> build_command_catalog()
plates.lock_plate(index, !plates.is_locked(index)); plates.lock_plate(index, !plates.is_locked(index));
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("plate_goto", _u8L("Go to Plate"), _u8L("Plate"), [](const std::string& param) { add_with_icon("plate_goto", _u8L("Go to Plate"), _u8L("Plate"), "go_next_plate", [](const std::string& param) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
if (!is_fff_plater(plater)) if (!is_fff_plater(plater))
return plate_unavailable(); return plate_unavailable();
@@ -559,7 +487,7 @@ std::vector<NativeCommand> build_command_catalog()
}); });
// ---- Printer / device connection ---- // ---- Printer / device connection ----
add("sync_ams", _u8L("Synchronize Filament List from AMS"), _u8L("Printer"), [](const std::string&) { add_with_icon("sync_ams", _u8L("Synchronize Filament List from AMS"), _u8L("Printer"), "ams_fila_sync", [](const std::string&) {
Plater* plater = wxGetApp().plater(); Plater* plater = wxGetApp().plater();
DeviceManager* dev = wxGetApp().getDeviceManager(); DeviceManager* dev = wxGetApp().getDeviceManager();
if (dev && dev->get_selected_machine() && plater) { if (dev && dev->get_selected_machine() && plater) {
@@ -570,11 +498,11 @@ std::vector<NativeCommand> build_command_catalog()
}); });
// ---- Presets / cloud ---- // ---- Presets / cloud ----
add("preset_bundle", _u8L("Open Preset Bundle"), _u8L("Presets"), [](const std::string&) { add_with_icon("preset_bundle", _u8L("Open Preset Bundle"), _u8L("Presets"), "menu_edit_preset", [](const std::string&) {
wxGetApp().open_presetbundledialog(); wxGetApp().open_presetbundledialog();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("sync_presets", _u8L("Sync Presets"), _u8L("Presets"), [](const std::string&) { add_with_icon("sync_presets", _u8L("Sync Presets"), _u8L("Presets"), "printer_sync_ok", [](const std::string&) {
if (!wxGetApp().is_user_login()) if (!wxGetApp().is_user_login())
return AppActionRunResult{AppActionRunResult::Level::Info, _L("Sign in to sync presets.")}; return AppActionRunResult{AppActionRunResult::Level::Info, _L("Sign in to sync presets.")};
wxGetApp().restart_sync_user_preset(); wxGetApp().restart_sync_user_preset();
@@ -582,7 +510,7 @@ std::vector<NativeCommand> build_command_catalog()
}); });
// ---- Import ---- // ---- Import ----
add("import_file", _u8L("Import 3MF/STL/STEP/SVG/OBJ/AMF"), _u8L("Import"), [](const std::string&) { add_with_icon("import_file", _u8L("Import 3MF/STL/STEP/SVG/OBJ/AMF"), _u8L("Import"), "menu_import", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) { if (Plater* plater = wxGetApp().plater()) {
#ifdef __APPLE__ #ifdef __APPLE__
plater->add_model(); plater->add_model();
@@ -592,39 +520,39 @@ std::vector<NativeCommand> build_command_catalog()
} }
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("import_zip_archive", _u8L("Import ZIP Archive"), _u8L("Import"), [](const std::string&) { add_with_icon("import_zip_archive", _u8L("Import ZIP Archive"), _u8L("Import"), "menu_import", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->import_zip_archive(); plater->import_zip_archive();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("import_configs", _u8L("Import Configs"), _u8L("Import"), [](const std::string&) { add_with_icon("import_configs", _u8L("Import Configs"), _u8L("Import"), "menu_import", [](const std::string&) {
if (MainFrame* mf = wxGetApp().mainframe) if (MainFrame* mf = wxGetApp().mainframe)
mf->load_config_file(); mf->load_config_file();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
// ---- Export extras ---- // ---- Export extras ----
add("export_stl_multi", _u8L("Export All Objects as STLs"), _u8L("Export"), [](const std::string&) { add_with_icon("export_stl_multi", _u8L("Export All Objects as STLs"), _u8L("Export"), "menu_export_stl", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_stl(false, false, true); plater->export_stl(false, false, true);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_drc_single", _u8L("Export All Objects as DRC (one file)"), _u8L("Export"), [](const std::string&) { add_with_icon("export_drc_single", _u8L("Export All Objects as DRC (one file)"), _u8L("Export"), "menu_export_stl", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_stl(false, false, false, FT_DRC); plater->export_stl(false, false, false, FT_DRC);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_drc_multi", _u8L("Export All Objects as DRCs"), _u8L("Export"), [](const std::string&) { add_with_icon("export_drc_multi", _u8L("Export All Objects as DRCs"), _u8L("Export"), "menu_export_stl", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_stl(false, false, true, FT_DRC); plater->export_stl(false, false, true, FT_DRC);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_toolpaths_obj", _u8L("Export Toolpaths as OBJ"), _u8L("Export"), [](const std::string&) { add_with_icon("export_toolpaths_obj", _u8L("Export Toolpaths as OBJ"), _u8L("Export"), "menu_export_toolpaths", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) if (Plater* plater = wxGetApp().plater())
plater->export_toolpaths_to_obj(); plater->export_toolpaths_to_obj();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("export_config", _u8L("Export Preset Bundle"), _u8L("Export"), [](const std::string&) { add_with_icon("export_config", _u8L("Export Preset Bundle"), _u8L("Export"), "menu_export_config", [](const std::string&) {
if (MainFrame* mf = wxGetApp().mainframe) if (MainFrame* mf = wxGetApp().mainframe)
mf->export_config(); mf->export_config();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
@@ -639,7 +567,7 @@ std::vector<NativeCommand> build_command_catalog()
wxGetApp().ShowUserGuide(); wxGetApp().ShowUserGuide();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("help_open_config_folder", _u8L("Show Configuration Folder"), _u8L("Help"), [](const std::string&) { add_with_icon("help_open_config_folder", _u8L("Show Configuration Folder"), _u8L("Help"), "folder-closed", [](const std::string&) {
Slic3r::GUI::desktop_open_datadir_folder(); Slic3r::GUI::desktop_open_datadir_folder();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
@@ -652,7 +580,7 @@ std::vector<NativeCommand> build_command_catalog()
dlg.ShowModal(); dlg.ShowModal();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("help_tip_of_the_day", _u8L("Show Tip of the Day"), _u8L("Help"), [](const std::string&) { add_with_icon("help_tip_of_the_day", _u8L("Show Tip of the Day"), _u8L("Help"), "info", [](const std::string&) {
if (Plater* plater = wxGetApp().plater()) { if (Plater* plater = wxGetApp().plater()) {
plater->get_dailytips()->open(); plater->get_dailytips()->open();
if (GLCanvas3D* canvas = plater->get_current_canvas3D()) if (GLCanvas3D* canvas = plater->get_current_canvas3D())
@@ -660,15 +588,15 @@ std::vector<NativeCommand> build_command_catalog()
} }
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("help_check_updates", _u8L("Check for Updates"), _u8L("Help"), [](const std::string&) { add_with_icon("help_check_updates", _u8L("Check for Updates"), _u8L("Help"), "ams_refresh_normal", [](const std::string&) {
wxGetApp().check_new_version_sf(true, 1); wxGetApp().check_new_version_sf(true, 1);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("help_about", _u8L("About OrcaSlicer"), _u8L("Help"), [](const std::string&) { add_with_icon("help_about", _u8L("About OrcaSlicer"), _u8L("Help"), "OrcaSlicer_about", [](const std::string&) {
Slic3r::GUI::about(); Slic3r::GUI::about();
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
add("open_wiki", _u8L("Open Wiki"), _u8L("Help"), [](const std::string&) { add_with_icon("open_wiki", _u8L("Open Wiki"), _u8L("Help"), "link_wiki_img", [](const std::string&) {
wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/", wxBROWSER_NEW_WINDOW); wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/", wxBROWSER_NEW_WINDOW);
return AppActionRunResult{AppActionRunResult::Level::Success}; return AppActionRunResult{AppActionRunResult::Level::Success};
}); });
@@ -706,6 +634,11 @@ const std::vector<NativeCommand>& NativeCommands::catalog()
return commands; return commands;
} }
std::unique_ptr<AppAction> NativeCommands::make_action(const NativeCommand& command)
{
return std::make_unique<CommandAction>(command);
}
AppActionRunResult NativeCommands::run(const std::string& key, const std::string& param) AppActionRunResult NativeCommands::run(const std::string& key, const std::string& param)
{ {
GUI_App& app = wxGetApp(); GUI_App& app = wxGetApp();
+11 -5
View File
@@ -1,17 +1,18 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
#include "ActionRegistry.hpp" // for AppActionRunResult #include "ActionRegistry.hpp" // for AppAction / AppActionRunResult
namespace Slic3r { namespace GUI { namespace Slic3r { namespace GUI {
// A built-in speed-dial command: identity + how to run it. The registry keeps commands as thin // A built-in speed-dial command: identity + how to run it. make_action() wraps a value as a thin
// values (CommandAction) and routes run() here, so this catalog is the single source of truth for // AppAction for the registry, so this catalog is the single source of truth for the behaviour
// the behaviour (runner => an owner method), the presentation (title/group/input), and the tile // (runner => an owner method), the presentation (title/group/input), and the tile pictogram
// pictogram (icon = an SVG base name under resources/images, "" for no icon). // (icon = an SVG base name under resources/images, "" for no icon).
struct NativeCommand struct NativeCommand
{ {
std::string key; std::string key;
@@ -28,6 +29,11 @@ const std::vector<NativeCommand>& catalog();
// Dispatches `key` to its runner (unknown keys return a quiet Info). UI thread only. // Dispatches `key` to its runner (unknown keys return a quiet Info). UI thread only.
AppActionRunResult run(const std::string& key, const std::string& param = {}); AppActionRunResult run(const std::string& key, const std::string& param = {});
// Materialises one catalog entry as a runnable AppAction. Keeps the catalog's identity,
// presentation and behaviour as the single source of truth; ActionRegistry only stores and
// dispatches the result. UI thread only.
std::unique_ptr<AppAction> make_action(const NativeCommand& command);
} // namespace NativeCommands } // namespace NativeCommands
}} // namespace Slic3r::GUI }} // namespace Slic3r::GUI
+6
View File
@@ -267,6 +267,12 @@ wxString ButtonsListCtrl::GetPageText(size_t n) const
return btn->GetLabel(); return btn->GetLabel();
} }
// ORCA
wxString ButtonsListCtrl::GetPageLabel(size_t n) const
{
return n < m_pageLabels.size() ? m_pageLabels[n] : wxString();
}
// ORCA // ORCA
void ButtonsListCtrl::SetOverflowButton(wxWindow* button) void ButtonsListCtrl::SetOverflowButton(wxWindow* button)
{ {
+14 -1
View File
@@ -33,8 +33,14 @@ public:
void SetPageText(size_t n, const wxString& strText); void SetPageText(size_t n, const wxString& strText);
void SetCompact(size_t n, bool compact); // ORCA void SetCompact(size_t n, bool compact); // ORCA
wxString GetPageText(size_t n) const; wxString GetPageText(size_t n) const;
// ORCA: the full page label, unaffected by SetCompact() blanking the button text.
wxString GetPageLabel(size_t n) const;
// Resource name the page was inserted with (empty for plugin pages, which pass a wxBitmap). // Resource name the page was inserted with (empty for plugin pages, which pass a wxBitmap).
const std::string& GetPageIcon(size_t n) const { return m_pageIcons[n]; } const std::string& GetPageIcon(size_t n) const
{
static const std::string empty;
return n < m_pageIcons.size() ? m_pageIcons[n] : empty;
}
wxFlexGridSizer* GetBtnsSizer(){return m_buttons_sizer;}; // ORCA wxFlexGridSizer* GetBtnsSizer(){return m_buttons_sizer;}; // ORCA
// ORCA: a companion widget shown right after the tab buttons (before any side_tools), e.g. // ORCA: a companion widget shown right after the tab buttons (before any side_tools), e.g.
// an overflow indicator. Pass nullptr to remove it; ownership stays with the caller. // an overflow indicator. Pass nullptr to remove it; ownership stays with the caller.
@@ -244,6 +250,13 @@ public:
return GetBtnsListCtrl()->GetPageText(n); return GetBtnsListCtrl()->GetPageText(n);
} }
// ORCA: the real page label. GetPageText() returns the button label, which SetCompact() blanks.
wxString GetPageLabel(size_t n) const
{
wxCHECK_MSG(n < GetPageCount(), wxString(), wxS("Invalid page"));
return GetBtnsListCtrl()->GetPageLabel(n);
}
// Resource icon name the page was inserted with; empty for pages added with a wxBitmap. // Resource icon name the page was inserted with; empty for pages added with a wxBitmap.
std::string GetPageIcon(size_t n) const std::string GetPageIcon(size_t n) const
{ {
+15 -8
View File
@@ -543,15 +543,16 @@ bool install_local_plugin_package(const boost::filesystem::path& package_file, w
}); });
timer->Start(100); timer->Start(100);
// finished/loop live on the heap: the worker's completion callback is posted to the UI loop
// and can still fire after this stack frame is gone, so it must not reference locals.
struct WaitState
{
bool finished = false; bool finished = false;
wxEventLoop loop; wxEventLoop loop;
auto on_finish = [&finished, &loop]() {
finished = true;
if (loop.IsRunning())
loop.Exit();
}; };
auto wait = std::make_shared<WaitState>();
std::thread([state, package_file, on_finish]() mutable { std::thread([state, package_file, wait]() mutable {
std::string error; std::string error;
bool ok = false; bool ok = false;
try { try {
@@ -570,11 +571,17 @@ bool install_local_plugin_package(const boost::filesystem::path& package_file, w
state->ok = ok; state->ok = ok;
state->error = std::move(error); state->error = std::move(error);
} }
wxTheApp->CallAfter(on_finish); if (!wxTheApp)
return;
wxTheApp->CallAfter([wait]() {
wait->finished = true;
if (wait->loop.IsRunning())
wait->loop.Exit();
});
}).detach(); }).detach();
if (!finished) if (!wait->finished)
loop.Run(); wait->loop.Run();
timer->Stop(); timer->Stop();
delete timer; delete timer;
+5
View File
@@ -1723,6 +1723,11 @@ void PreferencesDialog::create_items()
auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)")); auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)"));
g_sizer->Add(item_multi_machine); g_sizer->Add(item_multi_machine);
auto item_speed_dial = create_item_checkbox(_L("Open the Speed Dial with the Space key"),
_L("When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."),
"enable_speed_dial");
g_sizer->Add(item_speed_dial);
#if 0 #if 0
g_sizer->Add(create_item_title(_L("Filament Grouping")), 1, wxEXPAND); g_sizer->Add(create_item_title(_L("Filament Grouping")), 1, wxEXPAND);
//temporarily disable it //temporarily disable it
+3 -1
View File
@@ -322,7 +322,9 @@ void OptionsSearcher::init(std::vector<InputInfo> input_values)
void OptionsSearcher::apply(DynamicPrintConfig *config, Preset::Type type, ConfigOptionMode mode) void OptionsSearcher::apply(DynamicPrintConfig *config, Preset::Type type, ConfigOptionMode mode)
{ {
if (options.empty()) return; // options_all_modes is a separate consumer (the Speed Dial), so "nothing initialised yet" means
// both views are empty - the mode-filtered options can be empty while the all-modes view is not.
if (options.empty() && options_all_modes.empty()) return;
options.erase(std::remove_if(options.begin(), options.end(), [type](Option opt) { return opt.type == type; }), options.end()); options.erase(std::remove_if(options.begin(), options.end(), [type](Option opt) { return opt.type == type; }), options.end());
options_all_modes.erase(std::remove_if(options_all_modes.begin(), options_all_modes.end(), [type](Option opt) { return opt.type == type; }), options_all_modes.erase(std::remove_if(options_all_modes.begin(), options_all_modes.end(), [type](Option opt) { return opt.type == type; }),
-4
View File
@@ -156,10 +156,6 @@ public:
void dlg_sys_color_changed(); void dlg_sys_color_changed();
void dlg_msw_rescale(); void dlg_msw_rescale();
// The full gated option set built by init() (after visibility/mode/printer-tech filtering).
// Used by the Speed Dial to materialise config settings as first-class actions.
const std::vector<Option>& all_options() const { return options; }
// Every option across all UI modes (Developer included), regardless of the current mode. // Every option across all UI modes (Developer included), regardless of the current mode.
// Used by the Speed Dial so it can list settings the user would have to switch mode to edit. // Used by the Speed Dial so it can list settings the user would have to switch mode to edit.
const std::vector<Option>& all_modes_options() const { return options_all_modes; } const std::vector<Option>& all_modes_options() const { return options_all_modes; }
+2 -13
View File
@@ -9,8 +9,6 @@
#include "Plater.hpp" #include "Plater.hpp"
#include "Widgets/WebViewHostDialog.hpp" #include "Widgets/WebViewHostDialog.hpp"
#include <libslic3r/AppConfig.hpp>
#include <algorithm> #include <algorithm>
#include <wx/display.h> #include <wx/display.h>
@@ -156,15 +154,7 @@ void SpeedDialWebDialog::handle_web_command(const nlohmann::json& payload)
run_action(payload.value("id", ""), payload.value("title", ""), payload.value("param", "")); run_action(payload.value("id", ""), payload.value("title", ""), payload.value("param", ""));
else if (command == "search_tabs") else if (command == "search_tabs")
search_tabs(); search_tabs();
else if (command == "go_to_tab") { else if (command == "resize")
// "Go to tab..." second phase: the page hands back the tab id it matched.
const std::string tab_id = payload.value("id", "");
if (!tab_id.empty()) {
Hide();
if (wxGetApp().mainframe)
wxGetApp().mainframe->select_tab(from_u8(tab_id));
}
} else if (command == "resize")
resize_to_content(json_int_or(payload, "height", 0)); resize_to_content(json_int_or(payload, "height", 0));
} }
@@ -218,8 +208,7 @@ void SpeedDialWebDialog::run_action(const std::string& id, const std::string& ti
_L("Developer setting"), wxOK | wxCANCEL); _L("Developer setting"), wxOK | wxCANCEL);
if (dlg.ShowModal() != wxID_OK) if (dlg.ShowModal() != wxID_OK)
return; return;
wxGetApp().app_config->set_bool("developer_mode", true); wxGetApp().enable_developer_mode();
wxGetApp().update_mode();
} else { } else {
RichMessageDialog dlg(wxGetApp().mainframe, RichMessageDialog dlg(wxGetApp().mainframe,
wxString::Format(_L("\"%s\" is a %s setting. Switch from %s mode to %s mode to edit it?"), wxString::Format(_L("\"%s\" is a %s setting. Switch from %s mode to %s mode to edit it?"),
+43 -12
View File
@@ -29,14 +29,14 @@ public:
} // namespace } // namespace
TEST_CASE("AppAction composes a stable id from prefix:title:source_key", "[speeddial][actions]") TEST_CASE("AppAction composes a stable id from prefix:title:source_key", "[ActionSource][SpeedDial]")
{ {
CHECK(AppAction::compose_id("test", "Action title", "src-key") == "test:Action title:src-key"); CHECK(AppAction::compose_id("test", "Action title", "src-key") == "test:Action title:src-key");
// source_key (not the display name) carries identity, so it is the third field. // source_key (not the display name) carries identity, so it is the third field.
CHECK(AppAction::compose_id("script", "Do Thing", "pack.py") == "script:Do Thing:pack.py"); CHECK(AppAction::compose_id("script", "Do Thing", "pack.py") == "script:Do Thing:pack.py");
} }
TEST_CASE("AppAction definitions are immutable after construction", "[speeddial][actions]") TEST_CASE("AppAction definitions are immutable after construction", "[ActionSource][SpeedDial]")
{ {
using StringAccessor = const std::string& (AppAction::*) () const; using StringAccessor = const std::string& (AppAction::*) () const;
@@ -52,7 +52,7 @@ TEST_CASE("AppAction definitions are immutable after construction", "[speeddial]
CHECK(action.source_name() == "Action source"); CHECK(action.source_name() == "Action source");
} }
TEST_CASE("ActionRegistry takes exclusive ownership of published actions", "[speeddial][actions]") TEST_CASE("ActionRegistry takes exclusive ownership of published actions", "[ActionSource][SpeedDial]")
{ {
using ExpectedUpsert = void (ActionRegistry::*)(std::unique_ptr<AppAction>); using ExpectedUpsert = void (ActionRegistry::*)(std::unique_ptr<AppAction>);
@@ -61,7 +61,7 @@ TEST_CASE("ActionRegistry takes exclusive ownership of published actions", "[spe
// A dynamic "Go to Plate N" action is keyed by plate index (not the display title), so renaming // A dynamic "Go to Plate N" action is keyed by plate index (not the display title), so renaming
// a plate never re-keys it - the same contract as a setting action. // a plate never re-keys it - the same contract as a setting action.
TEST_CASE("Go-to-plate actions are keyed by index, not title", "[speeddial][actions]") TEST_CASE("Go-to-plate actions are keyed by index, not title", "[ActionSource][SpeedDial]")
{ {
CHECK(AppAction::compose_id("orca_plate_goto", "0", "orca") == "orca_plate_goto:0:orca"); CHECK(AppAction::compose_id("orca_plate_goto", "0", "orca") == "orca_plate_goto:0:orca");
CHECK(AppAction::compose_id("orca_plate_goto", "2", "orca") == "orca_plate_goto:2:orca"); CHECK(AppAction::compose_id("orca_plate_goto", "2", "orca") == "orca_plate_goto:2:orca");
@@ -69,7 +69,7 @@ TEST_CASE("Go-to-plate actions are keyed by index, not title", "[speeddial][acti
// A dynamic "Open recent project" action is keyed by file path (not the display name), so renaming // A dynamic "Open recent project" action is keyed by file path (not the display name), so renaming
// a project or reordering the recents list never re-keys it - the same contract as a setting action. // a project or reordering the recents list never re-keys it - the same contract as a setting action.
TEST_CASE("Recent-project actions are keyed by path, not title", "[speeddial][actions]") TEST_CASE("Recent-project actions are keyed by path, not title", "[ActionSource][SpeedDial]")
{ {
CHECK(AppAction::compose_id("orca_recent_project", "/a/b/project.3mf", "orca") == CHECK(AppAction::compose_id("orca_recent_project", "/a/b/project.3mf", "orca") ==
"orca_recent_project:/a/b/project.3mf:orca"); "orca_recent_project:/a/b/project.3mf:orca");
@@ -79,7 +79,7 @@ TEST_CASE("Recent-project actions are keyed by path, not title", "[speeddial][ac
// A built-in command is keyed by its stable catalog key (not the localized display title), so a // A built-in command is keyed by its stable catalog key (not the localized display title), so a
// rename or a UI-language switch never re-keys the action and its persisted favourite/stats survive. // rename or a UI-language switch never re-keys the action and its persisted favourite/stats survive.
TEST_CASE("Command actions are keyed by catalog key, not display title", "[speeddial][actions]") TEST_CASE("Command actions are keyed by catalog key, not display title", "[ActionSource][SpeedDial]")
{ {
CHECK(AppAction::compose_id("orca_command", "save_project", "orca") == "orca_command:save_project:orca"); CHECK(AppAction::compose_id("orca_command", "save_project", "orca") == "orca_command:save_project:orca");
// The second field is the stable key, so distinct commands never collide. // The second field is the stable key, so distinct commands never collide.
@@ -87,11 +87,42 @@ TEST_CASE("Command actions are keyed by catalog key, not display title", "[speed
AppAction::compose_id("orca_command", "load_project", "orca")); AppAction::compose_id("orca_command", "load_project", "orca"));
} }
// The real catalog -> action mapping keys by the stable catalog key and copies presentation from the
// catalog, so a rename or a UI-language switch never re-keys the action.
TEST_CASE("Command action construction keys by catalog key", "[ActionSource][SpeedDial]")
{
const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog();
REQUIRE_FALSE(commands.empty());
const Slic3r::GUI::NativeCommand& c = commands.front();
std::unique_ptr<AppAction> action = Slic3r::GUI::NativeCommands::make_action(c);
REQUIRE(action != nullptr);
CHECK(action->id() == AppAction::compose_id("orca_command", c.key, "orca"));
CHECK(action->id() != AppAction::compose_id("orca_command", c.title, "orca"));
CHECK(action->title() == c.title);
CHECK(action->group == c.group);
CHECK(action->input == c.input);
CHECK(action->icon == c.icon);
}
// Two-phase commands declare the input the palette must collect before they can run.
TEST_CASE("Two-phase commands declare their input phase", "[ActionSource][SpeedDial]")
{
auto input_of = [](const std::string& key) -> std::string {
for (const auto& c : Slic3r::GUI::NativeCommands::catalog())
if (c.key == key)
return c.input;
return {};
};
CHECK(input_of("go_to_layer") == "percent");
CHECK(input_of("go_to_tab") == "tab");
}
// The quick-launch cap must stay 10 to match the numbered Alt/Option+1..9,0 keys. The web palette // The quick-launch cap must stay 10 to match the numbered Alt/Option+1..9,0 keys. The web palette
// mirrors it as K_FAV_LIMIT (asserted in speeddial.test.js); the C++ side pins it here. // mirrors it as K_FAV_LIMIT (asserted in speeddial.test.js); the C++ side pins it here.
static_assert(Slic3r::GUI::ActionRegistry::kFavLimit == 10, "kFavLimit must stay 10"); static_assert(Slic3r::GUI::ActionRegistry::kFavLimit == 10, "kFavLimit must stay 10");
TEST_CASE("Favourite lists are capped and deduped preserving order", "[speeddial][actions]") TEST_CASE("Favourite lists are capped and deduped preserving order", "[ActionSource][SpeedDial]")
{ {
using Slic3r::GUI::cap_favourites; using Slic3r::GUI::cap_favourites;
@@ -101,7 +132,7 @@ TEST_CASE("Favourite lists are capped and deduped preserving order", "[speeddial
CHECK(cap_favourites({"a", "b"}, 0) == std::vector<std::string>{}); CHECK(cap_favourites({"a", "b"}, 0) == std::vector<std::string>{});
} }
TEST_CASE("Native command catalog has unique keys and present titles", "[speeddial][actions]") TEST_CASE("Native command catalog has unique keys and present titles", "[ActionSource][SpeedDial]")
{ {
const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog(); const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog();
CHECK_FALSE(commands.empty()); CHECK_FALSE(commands.empty());
@@ -118,7 +149,7 @@ TEST_CASE("Native command catalog has unique keys and present titles", "[speeddi
// Every command's tile pictogram is the SVG the matching GUI control already uses; an absent icon // Every command's tile pictogram is the SVG the matching GUI control already uses; an absent icon
// means a blank tile (like the tab picker). Guard representative names and that every non-empty // means a blank tile (like the tab picker). Guard representative names and that every non-empty
// value resolves to a shipped file, so a rename/typo cannot leave broken images in the palette. // value resolves to a shipped file, so a rename/typo cannot leave broken images in the palette.
TEST_CASE("Native command icons resolve to shipped SVGs", "[speeddial][actions]") TEST_CASE("Native command icons resolve to shipped SVGs", "[ActionSource][SpeedDial]")
{ {
const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog(); const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog();
auto icon_of = [&commands](const std::string& key) -> const std::string* { auto icon_of = [&commands](const std::string& key) -> const std::string* {
@@ -159,7 +190,7 @@ TEST_CASE("Native command icons resolve to shipped SVGs", "[speeddial][actions]"
// The Help-menu commands, wiki/YouTube links and the developer-mode toggle are part of the palette. // The Help-menu commands, wiki/YouTube links and the developer-mode toggle are part of the palette.
// Guard their presence and that they stay grouped with their peers, so a catalog edit cannot drop // Guard their presence and that they stay grouped with their peers, so a catalog edit cannot drop
// or scatter them. Groups are compared to the peer's own group to stay independent of translation. // or scatter them. Groups are compared to the peer's own group to stay independent of translation.
TEST_CASE("Native command catalog includes the Help and developer-mode commands", "[speeddial][actions]") TEST_CASE("Native command catalog includes the Help and developer-mode commands", "[ActionSource][SpeedDial]")
{ {
const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog(); const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog();
auto find = [&commands](const std::string& key) -> const Slic3r::GUI::NativeCommand* { auto find = [&commands](const std::string& key) -> const Slic3r::GUI::NativeCommand* {
@@ -187,7 +218,7 @@ TEST_CASE("Native command catalog includes the Help and developer-mode commands"
// Every "Add Primitive" item and shipped handy model has a palette command, grouped as in the Add // Every "Add Primitive" item and shipped handy model has a palette command, grouped as in the Add
// menu. Groups are compared to a peer's own group to stay independent of translation. // menu. Groups are compared to a peer's own group to stay independent of translation.
TEST_CASE("Native command catalog covers the Add menus", "[speeddial][actions]") TEST_CASE("Native command catalog covers the Add menus", "[ActionSource][SpeedDial]")
{ {
const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog(); const std::vector<Slic3r::GUI::NativeCommand>& commands = Slic3r::GUI::NativeCommands::catalog();
auto group_of = [&commands](const std::string& key) -> const std::string* { auto group_of = [&commands](const std::string& key) -> const std::string* {
@@ -221,7 +252,7 @@ TEST_CASE("Native command catalog covers the Add menus", "[speeddial][actions]")
// A setting whose mode is above the user's current mode must be prompted before it can be edited. // A setting whose mode is above the user's current mode must be prompted before it can be edited.
// Developer settings (comDevelop) are above every non-developer mode, so they always prompt then. // Developer settings (comDevelop) are above every non-developer mode, so they always prompt then.
TEST_CASE("Settings above the current mode require a switch", "[speeddial][actions]") TEST_CASE("Settings above the current mode require a switch", "[ActionSource][SpeedDial]")
{ {
using Slic3r::GUI::requires_mode_switch; using Slic3r::GUI::requires_mode_switch;
using Slic3r::comAdvanced; using Slic3r::comAdvanced;