From 7c1de0c0d2500391649797e10799bb6fbba83332 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 25 Sep 2017 11:28:08 +0200 Subject: [PATCH 01/26] Make Solid View a required plugin. There is no plugin with the id "MeshView" --- cura/CuraApplication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index c4f3217a1a..1113478937 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -211,7 +211,7 @@ class CuraApplication(QtApplication): self.setRequiredPlugins([ "CuraEngineBackend", - "MeshView", + "SolidView", "LayerView", "STLReader", "SelectionTool", From a44c6e3a4f1a8765500f14562e0eadb36bad8518 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 26 Sep 2017 09:05:37 +0200 Subject: [PATCH 02/26] Fix spelling mistake Found by Anraf1000. Thanks. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ece8fd48a4..93fcb481fa 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4134,7 +4134,7 @@ "raft_smoothing": { "label": "Raft Smoothing", - "description": "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", + "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", "unit": "mm", "type": "float", "default_value": 5, From 823807144f6cd1902e6599eb7def87ce3ebda051 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 26 Sep 2017 09:05:37 +0200 Subject: [PATCH 03/26] Fix spelling mistake Found by Anraf1000. Thanks. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index fba6678bff..06bc04b1fe 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4094,7 +4094,7 @@ "raft_smoothing": { "label": "Raft Smoothing", - "description": "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", + "description": "This setting controls how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle.", "unit": "mm", "type": "float", "default_value": 5, From 85efd9249c3add300bb6a3cb4a2035b9282c08d6 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Tue, 26 Sep 2017 16:25:10 +0200 Subject: [PATCH 04/26] Add in all of the changes for Cura Connect CURA-4376 --- .../UM3NetworkPrinting/ClusterControlItem.qml | 243 +++++++ .../UM3NetworkPrinting/ClusterMonitorItem.qml | 108 +++ .../UM3NetworkPrinting/DiscoverUM3Action.qml | 22 + .../NetworkClusterPrinterOutputDevice.py | 638 ++++++++++++++++++ .../NetworkPrinterOutputDevice.py | 13 +- .../NetworkPrinterOutputDevicePlugin.py | 140 ++-- .../UM3NetworkPrinting/OpenPanelButton.qml | 18 + .../PrintCoreConfiguration.qml | 33 + plugins/UM3NetworkPrinting/PrintWindow.qml | 103 +++ .../UM3NetworkPrinting/PrinterInfoBlock.qml | 345 ++++++++++ plugins/UM3NetworkPrinting/PrinterTile.qml | 54 ++ .../UM3NetworkPrinting/PrinterVideoStream.qml | 91 +++ plugins/UM3NetworkPrinting/camera-icon.svg | 3 + 13 files changed, 1769 insertions(+), 42 deletions(-) create mode 100644 plugins/UM3NetworkPrinting/ClusterControlItem.qml create mode 100644 plugins/UM3NetworkPrinting/ClusterMonitorItem.qml create mode 100644 plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py create mode 100644 plugins/UM3NetworkPrinting/OpenPanelButton.qml create mode 100644 plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml create mode 100644 plugins/UM3NetworkPrinting/PrintWindow.qml create mode 100644 plugins/UM3NetworkPrinting/PrinterInfoBlock.qml create mode 100644 plugins/UM3NetworkPrinting/PrinterTile.qml create mode 100644 plugins/UM3NetworkPrinting/PrinterVideoStream.qml create mode 100644 plugins/UM3NetworkPrinting/camera-icon.svg diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml new file mode 100644 index 0000000000..6558720943 --- /dev/null +++ b/plugins/UM3NetworkPrinting/ClusterControlItem.qml @@ -0,0 +1,243 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Component +{ + Item + { + id: base + property var manager: Cura.MachineManager.printerOutputDevices[0] + anchors.fill: parent + property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. + property var cornerRadius: 4 // TODO: Should be linked to theme. + + visible: manager != null + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Label + { + id: activePrintersLabel + font: UM.Theme.getFont("large") + anchors.horizontalCenter: parent.horizontalCenter + text: Cura.MachineManager.printerOutputDevices[0].name + } + Label + { + id: printerGroupLabel + anchors.top: activePrintersLabel.bottom + text: catalog.i18nc("@label", "PRINTER GROUP") + anchors.horizontalCenter: parent.horizontalCenter + font: UM.Theme.getFont("very_small") + opacity: 0.65 + } + + Rectangle + { + id: printJobArea + border.width: UM.Theme.getSize("default_lining").width + border.color: lineColor + anchors.top: printerGroupLabel.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin:UM.Theme.getSize("default_margin").width + radius: cornerRadius + height: childrenRect.height + + Item + { + id: printJobTitleBar + width: parent.width + height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height + + Label + { + id: printJobTitleLabel + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height + text: catalog.i18nc("@title", "Print jobs") + font: UM.Theme.getFont("default") + opacity: 0.75 + } + Rectangle + { + anchors.bottom: parent.bottom + height: UM.Theme.getSize("default_lining").width + color: lineColor + width: parent.width + } + } + + Column + { + id: printJobColumn + anchors.top: printJobTitleBar.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + //TODO; It's probably nicer to do this with a dynamic data model instead of hardcoding this. + //But you know the drill; time constraints don't result in elegant code. + Item + { + width: parent.width + height: childrenRect.height + opacity: 0.65 + Label + { + text: catalog.i18nc("@label", "Printing") + font: UM.Theme.getFont("very_small") + + } + Label + { + text: manager.numJobsPrinting + font: UM.Theme.getFont("small") + anchors.right: parent.right + } + } + Item + { + width: parent.width + height: childrenRect.height + opacity: 0.65 + Label + { + text: catalog.i18nc("@label", "Queued") + font: UM.Theme.getFont("very_small") + } + Label + { + text: manager.numJobsQueued + font: UM.Theme.getFont("small") + anchors.right: parent.right + } + } + } + OpenPanelButton + { + anchors.top: printJobColumn.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").height + id: configButton + onClicked: base.manager.openPrintJobControlPanel() + text: catalog.i18nc("@action:button", "View print jobs") + } + + Item + { + // spacer + anchors.top: configButton.bottom + width: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("default_margin").height + } + } + + + Rectangle + { + id: printersArea + border.width: UM.Theme.getSize("default_lining").width + border.color: lineColor + anchors.top: printJobArea.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin:UM.Theme.getSize("default_margin").width + radius: cornerRadius + height: childrenRect.height + + Item + { + id: printersTitleBar + width: parent.width + height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height + + Label + { + id: printersTitleLabel + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height + text: catalog.i18nc("@label:title", "Printers") + font: UM.Theme.getFont("default") + opacity: 0.75 + } + Rectangle + { + anchors.bottom: parent.bottom + height: UM.Theme.getSize("default_lining").width + color: lineColor + width: parent.width + } + } + Column + { + id: printersColumn + anchors.top: printersTitleBar.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + + Repeater + { + model: manager.connectedPrintersTypeCount + Item + { + width: parent.width + height: childrenRect.height + opacity: 0.65 + Label + { + text: modelData.machine_type + font: UM.Theme.getFont("very_small") + } + + Label + { + text: modelData.count + font: UM.Theme.getFont("small") + anchors.right: parent.right + } + } + } + } + OpenPanelButton + { + anchors.top: printersColumn.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").height + id: printerConfigButton + onClicked: base.manager.openPrinterControlPanel() + + text: catalog.i18nc("@action:button", "View printers") + } + + Item + { + // spacer + anchors.top: printerConfigButton.bottom + width: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("default_margin").height + } + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml new file mode 100644 index 0000000000..d39cdab81e --- /dev/null +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -0,0 +1,108 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Component +{ + Rectangle + { + width: maximumWidth + height: maximumHeight + color: "#FFFFFF" // TODO; Should not be hardcoded. + + property var emphasisColor: "#44c0ff" //TODO: should be linked to theme. + property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. + property var cornerRadius: 4 // TODO: Should be linked to theme. + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Label + { + id: activePrintersLabel + font: UM.Theme.getFont("large") + + text: + { + if (OutputDevice.connectedPrinters.length == 0){ + return catalog.i18nc("@label: arg 1 is group name", "%1 is not set up to host a group of connected Ultimaker 3 printers").arg(Cura.MachineManager.printerOutputDevices[0].name) + } else { + return "" + } + } + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: UM.Theme.getSize("default_margin").height + + visible: OutputDevice.connectedPrinters.length == 0 + } + + Item + { + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + + width: Math.min(800, maximumWidth) + height: children.height + visible: OutputDevice.connectedPrinters.length != 0 + + Label + { + id: addRemovePrintersLabel + anchors.right: parent.right + text: "Add / remove printers" + } + + MouseArea + { + anchors.fill: addRemovePrintersLabel + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel() + } + } + + + ScrollView + { + id: printerScrollView + anchors.margins: UM.Theme.getSize("default_margin").width + anchors.top: activePrintersLabel.bottom + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. + anchors.rightMargin: UM.Theme.getSize("default_lining").width + anchors.right: parent.right + + ListView + { + anchors.fill: parent + spacing: -UM.Theme.getSize("default_lining").height + + model: OutputDevice.connectedPrinters + + delegate: PrinterInfoBlock + { + printer: modelData + width: Math.min(800, maximumWidth) + height: 125 + + // Add a 1 pix margin, as the border is sometimes cut off otherwise. + anchors.horizontalCenter: parent.horizontalCenter + } + } + } + + PrinterVideoStream + { + visible: OutputDevice.selectedPrinterName != "" + anchors.fill:parent + } + } +} diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml index 58f155533f..3f51ff9dda 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml @@ -272,6 +272,28 @@ Cura.MachineAction text: base.selectedPrinter ? base.selectedPrinter.ipAddress : "" } } + + Label + { + width: parent.width + wrapMode: Text.WordWrap + text:{ + // The property cluster size does not exist for older UM3 devices. + if(base.selectedPrinter.clusterSize == null || base.selectedPrinter.clusterSize == 1) + { + return ""; + } + else if (base.selectedPrinter.clusterSize === 0) + { + return catalog.i18nc("@label", "Cura Connect: This printer is not set up to host a group of connected Ultimaker 3 printers."); + } + else + { + return catalog.i18nc("@label", "Cura Connect: This printer is set up to host a group of %1 connected Ultimaker 3 printers".arg(base.selectedPrinter.clusterSize)); + } + } + + } Label { width: parent.width diff --git a/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py new file mode 100644 index 0000000000..55f9d1247b --- /dev/null +++ b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py @@ -0,0 +1,638 @@ +import datetime +import getpass +import gzip +import json +import os +import os.path +import time + +from enum import Enum +from PyQt5.QtNetwork import QNetworkRequest, QHttpPart, QHttpMultiPart +from PyQt5.QtCore import QUrl, QByteArray, pyqtSlot, pyqtProperty, QCoreApplication, QTimer, pyqtSignal, QObject +from PyQt5.QtGui import QDesktopServices +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply +from PyQt5.QtQml import QQmlComponent, QQmlContext +from UM.Application import Application +from UM.Logger import Logger +from UM.Message import Message +from UM.OutputDevice import OutputDeviceError +from UM.i18n import i18nCatalog + +from . import NetworkPrinterOutputDevice + + +i18n_catalog = i18nCatalog("cura") + + +class OutputStage(Enum): + ready = 0 + uploading = 2 + + +class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinterOutputDevice): + printJobsChanged = pyqtSignal() + printersChanged = pyqtSignal() + selectedPrinterChanged = pyqtSignal() + + def __init__(self, key, address, properties, api_prefix, plugin_path): + super().__init__(key, address, properties, api_prefix) + # Store the address of the master. + self._master_address = address + name_property = properties.get(b"name", b"") + if name_property: + name = name_property.decode("utf-8") + else: + name = key + + self._plugin_path = plugin_path + + self.setName(name) + description = i18n_catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print over network") + self.setShortDescription(description) + self.setDescription(description) + + self._stage = OutputStage.ready + host_override = os.environ.get("CLUSTER_OVERRIDE_HOST", "") + if host_override: + Logger.log( + "w", + "Environment variable CLUSTER_OVERRIDE_HOST is set to [%s], cluster hosts are now set to this host", + host_override) + self._host = "http://" + host_override + else: + self._host = "http://" + address + + # is the same as in NetworkPrinterOutputDevicePlugin + self._cluster_api_version = "1" + self._cluster_api_prefix = "/cluster-api/v" + self._cluster_api_version + "/" + self._api_base_uri = self._host + self._cluster_api_prefix + + self._file_name = None + self._progress_message = None + self._request = None + self._reply = None + + # The main reason to keep the 'multipart' form data on the object + # is to prevent the Python GC from claiming it too early. + self._multipart = None + + self._print_view = None + self._request_job = [] + + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterMonitorItem.qml") + self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterControlItem.qml") + + self._print_jobs = [] + self._print_job_by_printer_uuid = {} + self._print_job_by_uuid = {} # Print jobs by their own uuid + self._printers = [] + self._printers_dict = {} # by unique_name + + self._connected_printers_type_count = [] + self._automatic_printer = {"unique_name": "", "friendly_name": "Automatic"} # empty unique_name IS automatic selection + self._selected_printer = self._automatic_printer + + self._cluster_status_update_timer = QTimer() + self._cluster_status_update_timer.setInterval(5000) + self._cluster_status_update_timer.setSingleShot(False) + self._cluster_status_update_timer.timeout.connect(self._requestClusterStatus) + + self._can_pause = False + self._can_abort = False + self._can_pre_heat_bed = False + self._cluster_size = int(properties.get(b"cluster_size", 0)) + + self._cleanupRequest() + + #These are texts that are to be translated for future features. + temporary_translation = i18n_catalog.i18n("This printer is not set up to host a group of connected Ultimaker 3 printers.") + temporary_translation2 = i18n_catalog.i18nc("Count is number of printers.", "This printer is the host for a group of {count} connected Ultimaker 3 printers.").format(count = 3) + temporary_translation3 = i18n_catalog.i18n("{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate.") #When finished. + temporary_translation4 = i18n_catalog.i18n("{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing.") #When configuration changed. + + @pyqtProperty(QObject, notify=selectedPrinterChanged) + def controlItem(self): + # TODO: Probably not the nicest way to do this. This needs to be done better at some point in time. + if not self._control_component: + self._createControlViewFromQML() + name = self._selected_printer.get("friendly_name") + if name == self._automatic_printer.get("friendly_name") or name == "": + return self._control_item + # Let cura use the default. + return None + + @pyqtSlot(int, result = str) + def getTimeCompleted(self, time_remaining): + current_time = time.time() + datetime_completed = datetime.datetime.fromtimestamp(current_time + time_remaining) + return "{hour:02d}:{minute:02d}".format(hour = datetime_completed.hour, minute = datetime_completed.minute) + + @pyqtSlot(int, result = str) + def getDateCompleted(self, time_remaining): + current_time = time.time() + datetime_completed = datetime.datetime.fromtimestamp(current_time + time_remaining) + return (datetime_completed.strftime("%a %b ") + "{day}".format(day=datetime_completed.day)).upper() + + @pyqtProperty(int, constant = True) + def clusterSize(self): + return self._cluster_size + + @pyqtProperty(str, notify=selectedPrinterChanged) + def name(self): + # Show the name of the selected printer. + # This is not the nicest way to do this, but changes to the Cura UI are required otherwise. + name = self._selected_printer.get("friendly_name") + if name != self._automatic_printer.get("friendly_name"): + return name + # Return name of cluster master. + return self._properties.get(b"name", b"").decode("utf-8") + + def connect(self): + super().connect() + self._cluster_status_update_timer.start() + + def close(self): + super().close() + self._cluster_status_update_timer.stop() + + def _requestClusterStatus(self): + # TODO: Handle timeout. We probably want to know if the cluster is still reachable or not. + url = QUrl(self._api_base_uri + "print_jobs/") + print_jobs_request = QNetworkRequest(url) + self._addUserAgentHeader(print_jobs_request) + self._manager.get(print_jobs_request) + # See _finishedPrintJobsRequest() + + url = QUrl(self._api_base_uri + "printers/") + printers_request = QNetworkRequest(url) + self._addUserAgentHeader(printers_request) + self._manager.get(printers_request) + # See _finishedPrintersRequest() + + def _finishedPrintJobsRequest(self, reply): + try: + json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) + except json.decoder.JSONDecodeError: + Logger.log("w", "Received an invalid print job state message: Not valid JSON.") + return + self.setPrintJobs(json_data) + + def _finishedPrintersRequest(self, reply): + try: + json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) + except json.decoder.JSONDecodeError: + Logger.log("w", "Received an invalid print job state message: Not valid JSON.") + return + self.setPrinters(json_data) + + def materialHotendChangedMessage(self, callback): + pass # Do nothing. + + def _startCameraStream(self): + ## Request new image + url = QUrl("http://" + self._printers_dict[self._selected_printer["unique_name"]]["ip_address"] + ":8080/?action=stream") + self._image_request = QNetworkRequest(url) + self._addUserAgentHeader(self._image_request) + self._image_reply = self._manager.get(self._image_request) + self._image_reply.downloadProgress.connect(self._onStreamDownloadProgress) + + def spawnPrintView(self): + if self._print_view is None: + path = QUrl.fromLocalFile(os.path.join(self._plugin_path, "PrintWindow.qml")) + component = QQmlComponent(Application.getInstance()._engine, path) + + self._print_context = QQmlContext(Application.getInstance()._engine.rootContext()) + self._print_context.setContextProperty("OutputDevice", self) + self._print_view = component.create(self._print_context) + + if component.isError(): + Logger.log("e", " Errors creating component: \n%s", "\n".join( + [e.toString() for e in component.errors()])) + + if self._print_view is not None: + self._print_view.show() + + ## Store job info, show Print view for settings + def requestWrite(self, nodes, file_name=None, filter_by_machine=False, file_handler=None, **kwargs): + self._selected_printer = self._automatic_printer # reset to default option + self._request_job = [nodes, file_name, filter_by_machine, file_handler, kwargs] + + if self._stage != OutputStage.ready: + if self._error_message: + self._error_message.hide() + self._error_message = Message( + i18n_catalog.i18nc("@info:status", + "Sending new jobs (temporarily) blocked, still sending the previous print job.")) + self._error_message.show() + return + + if len(self._printers) > 1: + self.spawnPrintView() # Ask user how to print it. + elif len(self._printers) == 1: + # If there is only one printer, don't bother asking. + self.selectAutomaticPrinter() + self.sendPrintJob() + else: + # Cluster has no printers, warn the user of this. + if self._error_message: + self._error_message.hide() + self._error_message = Message( + i18n_catalog.i18nc("@info:status", + "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers.")) + self._error_message.show() + + ## Actually send the print job, called from the dialog + # :param: require_printer_name: name of printer, or "" + @pyqtSlot() + def sendPrintJob(self): + nodes, file_name, filter_by_machine, file_handler, kwargs = self._request_job + require_printer_name = self._selected_printer["unique_name"] + + self._send_gcode_start = time.time() + Logger.log("d", "Sending print job [%s] to host..." % file_name) + + if self._stage != OutputStage.ready: + Logger.log("d", "Unable to send print job as the state is %s", self._stage) + raise OutputDeviceError.DeviceBusyError() + self._stage = OutputStage.uploading + + self._file_name = "%s.gcode.gz" % file_name + self._showProgressMessage() + + self._request = self._buildSendPrintJobHttpRequest(require_printer_name) + self._reply = self._manager.post(self._request, self._multipart) + self._reply.uploadProgress.connect(self._onUploadProgress) + # See _finishedPostPrintJobRequest() + + def _buildSendPrintJobHttpRequest(self, require_printer_name): + api_url = QUrl(self._api_base_uri + "print_jobs/") + request = QNetworkRequest(api_url) + # Create multipart request and add the g-code. + self._multipart = QHttpMultiPart(QHttpMultiPart.FormDataType) + + # Add gcode + part = QHttpPart() + part.setHeader(QNetworkRequest.ContentDispositionHeader, + 'form-data; name="file"; filename="%s"' % self._file_name) + + gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list") + compressed_gcode = self._compressGcode(gcode) + if compressed_gcode is None: + return # User aborted print, so stop trying. + + part.setBody(compressed_gcode) + self._multipart.append(part) + + # require_printer_name "" means automatic + if require_printer_name: + self._multipart.append(self.__createKeyValueHttpPart("require_printer_name", require_printer_name)) + user_name = self.__get_username() + if user_name is None: + user_name = "unknown" + self._multipart.append(self.__createKeyValueHttpPart("owner", user_name)) + + self._addUserAgentHeader(request) + return request + + def _compressGcode(self, gcode): + self._compressing_print = True + batched_line = "" + max_chars_per_line = int(1024 * 1024 / 4) # 1 / 4 MB + + byte_array_file_data = b"" + + def _compressDataAndNotifyQt(data_to_append): + compressed_data = gzip.compress(data_to_append.encode("utf-8")) + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. + # Pretend that this is a response, as zipping might take a bit of time. + self._last_response_time = time.time() + return compressed_data + + if gcode is None: + Logger.log("e", "Unable to find sliced gcode, returning empty.") + return byte_array_file_data + + for line in gcode: + if not self._compressing_print: + self._progress_message.hide() + return # Stop trying to zip, abort was called. + batched_line += line + # if the gcode was read from a gcode file, self._gcode will be a list of all lines in that file. + # Compressing line by line in this case is extremely slow, so we need to batch them. + if len(batched_line) < max_chars_per_line: + continue + byte_array_file_data += _compressDataAndNotifyQt(batched_line) + batched_line = "" + + # Also compress the leftovers. + if batched_line: + byte_array_file_data += _compressDataAndNotifyQt(batched_line) + + return byte_array_file_data + + def __createKeyValueHttpPart(self, key, value): + metadata_part = QHttpPart() + metadata_part.setHeader(QNetworkRequest.ContentTypeHeader, 'text/plain') + metadata_part.setHeader(QNetworkRequest.ContentDispositionHeader, 'form-data; name="%s"' % (key)) + metadata_part.setBody(bytearray(value, "utf8")) + return metadata_part + + def __get_username(self): + try: + return getpass.getuser() + except: + Logger.log("d", "Could not get the system user name, returning 'unknown' instead.") + return None + + def _finishedPrintJobPostRequest(self, reply): + self._stage = OutputStage.ready + if self._progress_message: + self._progress_message.hide() + self._progress_message = None + self.writeFinished.emit(self) + + if reply.error(): + self._showRequestFailedMessage(reply) + self.writeError.emit(self) + else: + self._showRequestSucceededMessage() + self.writeSuccess.emit(self) + + self._cleanupRequest() + + def _showRequestFailedMessage(self, reply): + if reply is not None: + Logger.log("w", "Unable to send print job to group {cluster_name}: {error_string} ({error})".format( + cluster_name = self.getName(), + error_string = str(reply.errorString()), + error = str(reply.error()))) + error_message_template = i18n_catalog.i18nc("@info:status", "Unable to send print job to group {cluster_name}.") + message = Message(text=error_message_template.format( + cluster_name = self.getName())) + message.show() + + def _showRequestSucceededMessage(self): + confirmation_message_template = i18n_catalog.i18nc( + "@info:status", + "Sent {file_name} to group {cluster_name}." + ) + file_name = os.path.basename(self._file_name).split(".")[0] + message_text = confirmation_message_template.format(cluster_name = self.getName(), file_name = file_name) + message = Message(text=message_text) + button_text = i18n_catalog.i18nc("@action:button", "Show print jobs") + button_tooltip = i18n_catalog.i18nc("@info:tooltip", "Opens the print jobs interface in your browser.") + message.addAction("open_browser", button_text, "globe", button_tooltip) + message.actionTriggered.connect(self._onMessageActionTriggered) + message.show() + + def setPrintJobs(self, print_jobs): + #TODO: hack, last seen messes up the check, so drop it. + for job in print_jobs: + del job["last_seen"] + # Strip any extensions + job["name"] = self._removeGcodeExtension(job["name"]) + + if self._print_jobs != print_jobs: + old_print_jobs = self._print_jobs + self._print_jobs = print_jobs + + self._notifyFinishedPrintJobs(old_print_jobs, print_jobs) + + # Yes, this is a hacky way of doing it, but it's quick and the API doesn't give the print job per printer + # for some reason. ugh. + self._print_job_by_printer_uuid = {} + self._print_job_by_uuid = {} + for print_job in print_jobs: + if "printer_uuid" in print_job and print_job["printer_uuid"] is not None: + self._print_job_by_printer_uuid[print_job["printer_uuid"]] = print_job + self._print_job_by_uuid[print_job["uuid"]] = print_job + self.printJobsChanged.emit() + + def _removeGcodeExtension(self, name): + parts = name.split(".") + if parts[-1].upper() == "GZ": + parts = parts[:-1] + if parts[-1].upper() == "GCODE": + parts = parts[:-1] + return ".".join(parts) + + def _notifyFinishedPrintJobs(self, old_print_jobs, new_print_jobs): + """Notify the user when any of their print jobs have just completed. + + Arguments: + + old_print_jobs -- the previous list of print job status information as returned by the cluster REST API. + new_print_jobs -- the current list of print job status information as returned by the cluster REST API. + """ + if old_print_jobs is None: + return + + username = self.__get_username() + if username is None: + return + + our_old_print_jobs = self.__filterOurPrintJobs(old_print_jobs) + our_old_not_finished_print_jobs = [pj for pj in our_old_print_jobs if pj["status"] != "wait_cleanup"] + + our_new_print_jobs = self.__filterOurPrintJobs(new_print_jobs) + our_new_finished_print_jobs = [pj for pj in our_new_print_jobs if pj["status"] == "wait_cleanup"] + + old_not_finished_print_job_uuids = set([pj["uuid"] for pj in our_old_not_finished_print_jobs]) + + for print_job in our_new_finished_print_jobs: + if print_job["uuid"] in old_not_finished_print_job_uuids: + + printer_name = self.__getPrinterNameFromUuid(print_job["printer_uuid"]) + if printer_name is None: + printer_name = i18n_catalog.i18nc("@info:status", "Unknown printer") + + message_text = (i18n_catalog.i18nc("@info:status", + "Printer '{printer_name}' has finished printing '{job_name}'.") + .format(printer_name=printer_name, job_name=print_job["name"])) + message = Message(text=message_text, title=i18n_catalog.i18nc("@info:status", "Print finished")) + Application.getInstance().showMessage(message) + Application.getInstance().showToastMessage( + i18n_catalog.i18nc("@info:status", "Print finished"), + message_text) + + def __filterOurPrintJobs(self, print_jobs): + username = self.__get_username() + return [print_job for print_job in print_jobs if print_job["owner"] == username] + + def __getPrinterNameFromUuid(self, printer_uuid): + for printer in self._printers: + if printer["uuid"] == printer_uuid: + return printer["friendly_name"] + return None + + def setPrinters(self, printers): + if self._printers != printers: + self._connected_printers_type_count = [] + printers_count = {} + self._printers = printers + self._printers_dict = dict((p["unique_name"], p) for p in printers) # for easy lookup by unique_name + + for printer in printers: + variant = printer["machine_variant"] + if variant in printers_count: + printers_count[variant] += 1 + else: + printers_count[variant] = 1 + for type in printers_count: + self._connected_printers_type_count.append({"machine_type": type, "count": printers_count[type]}) + self.printersChanged.emit() + + @pyqtProperty("QVariantList", notify=printersChanged) + def connectedPrintersTypeCount(self): + return self._connected_printers_type_count + + @pyqtProperty("QVariantList", notify=printersChanged) + def connectedPrinters(self): + return self._printers + + @pyqtProperty(int, notify=printJobsChanged) + def numJobsPrinting(self): + num_jobs_printing = 0 + for job in self._print_jobs: + if job["status"] == "printing": + num_jobs_printing += 1 + return num_jobs_printing + + @pyqtProperty(int, notify=printJobsChanged) + def numJobsQueued(self): + num_jobs_queued = 0 + for job in self._print_jobs: + if job["status"] == "queued": + num_jobs_queued += 1 + return num_jobs_queued + + @pyqtProperty("QVariantMap", notify=printJobsChanged) + def printJobsByUUID(self): + return self._print_job_by_uuid + + @pyqtProperty("QVariantMap", notify=printJobsChanged) + def printJobsByPrinterUUID(self): + return self._print_job_by_printer_uuid + + @pyqtProperty("QVariantList", notify=printJobsChanged) + def printJobs(self): + return self._print_jobs + + @pyqtProperty("QVariantList", notify=printersChanged) + def printers(self): + return [self._automatic_printer, ] + self._printers + + @pyqtSlot(str, str) + def selectPrinter(self, unique_name, friendly_name): + self.stopCamera() + self._selected_printer = {"unique_name": unique_name, "friendly_name": friendly_name} + Logger.log("d", "Selected printer: %s %s", friendly_name, unique_name) + # TODO: Probably not the nicest way to do this. This needs to be done better at some point in time. + if unique_name == "": + self._address = self._master_address + else: + self._address = self._printers_dict[self._selected_printer["unique_name"]]["ip_address"] + + self.selectedPrinterChanged.emit() + + def _updateJobState(self, job_state): + name = self._selected_printer.get("friendly_name") + if name == "" or name == "Automatic": + # TODO: This is now a bit hacked; If no printer is selected, don't show job state. + if self._job_state != "": + self._job_state = "" + self.jobStateChanged.emit() + else: + if self._job_state != job_state: + self._job_state = job_state + self.jobStateChanged.emit() + + @pyqtSlot() + def selectAutomaticPrinter(self): + self.stopCamera() + self._selected_printer = self._automatic_printer + self.selectedPrinterChanged.emit() + + @pyqtProperty("QVariant", notify=selectedPrinterChanged) + def selectedPrinterName(self): + return self._selected_printer.get("unique_name", "") + + def getPrintJobsUrl(self): + return self._host + "/print_jobs" + + def getPrintersUrl(self): + return self._host + "/printers" + + def _showProgressMessage(self): + progress_message_template = i18n_catalog.i18nc("@info:progress", + "Sending {file_name} to group {cluster_name}") + file_name = os.path.basename(self._file_name).split(".")[0] + self._progress_message = Message(progress_message_template.format(file_name = file_name, cluster_name = self.getName()), 0, False, -1) + self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), None, "") + self._progress_message.actionTriggered.connect(self._onMessageActionTriggered) + self._progress_message.show() + + def _addUserAgentHeader(self, request): + request.setRawHeader(b"User-agent", b"CuraPrintClusterOutputDevice Plugin") + + def _cleanupRequest(self): + self._reply = None + self._request = None + self._multipart = None + self._stage = OutputStage.ready + self._file_name = None + + def _onFinished(self, reply): + super()._onFinished(reply) + reply_url = reply.url().toString() + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + if status_code == 500: + Logger.log("w", "Request to {url} returned a 500.".format(url = reply_url)) + return + if reply.error() == QNetworkReply.ContentOperationNotPermittedError: + # It was probably "/api/v1/materials" for legacy UM3 + return + if reply.error() == QNetworkReply.ContentNotFoundError: + # It was probably "/api/v1/print_job" for legacy UM3 + return + + if reply.operation() == QNetworkAccessManager.PostOperation: + if self._cluster_api_prefix + "print_jobs" in reply_url: + self._finishedPrintJobPostRequest(reply) + return + + # We need to do this check *after* we process the post operation! + # If the sending of g-code is cancelled by the user it will result in an error, but we do need to handle this. + if reply.error() != QNetworkReply.NoError: + Logger.log("e", "After requesting [%s] we got a network error [%s]. Not processing anything...", reply_url, reply.error()) + return + + elif reply.operation() == QNetworkAccessManager.GetOperation: + if self._cluster_api_prefix + "print_jobs" in reply_url: + self._finishedPrintJobsRequest(reply) + elif self._cluster_api_prefix + "printers" in reply_url: + self._finishedPrintersRequest(reply) + + @pyqtSlot() + def openPrintJobControlPanel(self): + Logger.log("d", "Opening print job control panel...") + QDesktopServices.openUrl(QUrl(self.getPrintJobsUrl())) + + @pyqtSlot() + def openPrinterControlPanel(self): + Logger.log("d", "Opening printer control panel...") + QDesktopServices.openUrl(QUrl(self.getPrintersUrl())) + + def _onMessageActionTriggered(self, message, action): + if action == "open_browser": + QDesktopServices.openUrl(QUrl(self.getPrintJobsUrl())) + + if action == "Abort": + Logger.log("d", "User aborted sending print to remote.") + self._progress_message.hide() + self._compressing_print = False + self._stage = OutputStage.ready + if self._reply: + self._reply.abort() + self._reply = None + Application.getInstance().showPrintMonitor.emit(False) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 8c7a07ef4b..6c81ff6d82 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -17,7 +17,7 @@ import cura.Settings.ExtruderManager from PyQt5.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager, QNetworkReply from PyQt5.QtCore import QUrl, QTimer, pyqtSignal, pyqtProperty, pyqtSlot, QCoreApplication -from PyQt5.QtGui import QImage +from PyQt5.QtGui import QImage, QColor from PyQt5.QtWidgets import QMessageBox import json @@ -102,7 +102,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._target_bed_temperature = 0 self._processing_preheat_requests = True - self.setPriority(2) # Make sure the output device gets selected above local file output + self.setPriority(3) # Make sure the output device gets selected above local file output self.setName(key) self.setShortDescription(i18n_catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print over network")) self.setDescription(i18n_catalog.i18nc("@properties:tooltip", "Print over network")) @@ -340,6 +340,10 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): pass # It can happen that the wrapped c++ object is already deleted. self._image_reply = None self._image_request = None + if self._use_stream: + # Reset image (To prevent old images from being displayed) + self._camera_image.fill(QColor(0, 0, 0)) + self.newImage.emit() def _startCamera(self): if self._use_stream: @@ -1007,7 +1011,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): reply_url = reply.url().toString() if reply.operation() == QNetworkAccessManager.GetOperation: - if "printer" in reply_url: # Status update from printer. + # "printer" is also in "printers", therefore _api_prefix is added. + if self._api_prefix + "printer" in reply_url: # Status update from printer. if status_code == 200: if self._connection_state == ConnectionState.connecting: self.setConnectionState(ConnectionState.connected) @@ -1025,7 +1030,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): else: Logger.log("w", "We got an unexpected status (%s) while requesting printer state", status_code) pass # TODO: Handle errors - elif "print_job" in reply_url: # Status update from print_job: + elif self._api_prefix + "print_job" in reply_url: # Status update from print_job: if status_code == 200: try: json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py index 5f2ed1badc..39e5faf938 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py @@ -1,26 +1,31 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the AGPLv3 or higher. -from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin -from . import NetworkPrinterOutputDevice - -from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo # type: ignore -from UM.Logger import Logger -from UM.Signal import Signal, signalemitter -from UM.Application import Application -from UM.Preferences import Preferences - -from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkReply -from PyQt5.QtCore import QUrl - +import os import time import json +from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QDesktopServices +from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkReply +from PyQt5.QtQml import QQmlComponent, QQmlContext +from UM.Application import Application +from UM.Logger import Logger +from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin +from UM.PluginRegistry import PluginRegistry +from UM.Preferences import Preferences +from UM.Signal import Signal, signalemitter +from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo # type: ignore + +from . import NetworkPrinterOutputDevice, NetworkClusterPrinterOutputDevice + + ## This plugin handles the connection detection & creation of output device objects for the UM3 printer. # Zero-Conf is used to detect printers, which are saved in a dict. # If we discover a printer that has the same key as the active machine instance a connection is made. @signalemitter -class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): +class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): def __init__(self): super().__init__() self._zero_conf = None @@ -29,6 +34,8 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): self._api_version = "1" self._api_prefix = "/api/v" + self._api_version + "/" + self._cluster_api_version = "1" + self._cluster_api_prefix = "/cluster-api/v" + self._cluster_api_version + "/" self._network_manager = QNetworkAccessManager() self._network_manager.finished.connect(self._onNetworkRequestFinished) @@ -47,6 +54,8 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): self._preferences.addPreference("um3networkprinting/manual_instances", "") # A comma-separated list of ip adresses or hostnames self._manual_instances = self._preferences.getValue("um3networkprinting/manual_instances").split(",") + self._network_requests_buffer = {} # store api responses until data is complete + addPrinterSignal = Signal() removePrinterSignal = Signal() printerListChanged = Signal() @@ -91,6 +100,7 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): self.addPrinter(instance_name, address, properties) self.checkManualPrinter(address) + self.checkClusterPrinter(address) def removeManualPrinter(self, key, address = None): if key in self._printers: @@ -105,18 +115,26 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): def checkManualPrinter(self, address): # Check if a printer exists at this address # If a printer responds, it will replace the preliminary printer created above - url = QUrl("http://" + address + self._api_prefix + "system") + # origin=manual is for tracking back the origin of the call + url = QUrl("http://" + address + self._api_prefix + "system?origin=manual_name") name_request = QNetworkRequest(url) self._network_manager.get(name_request) + def checkClusterPrinter(self, address): + cluster_url = QUrl("http://" + address + self._cluster_api_prefix + "printers/?origin=check_cluster") + cluster_request = QNetworkRequest(cluster_url) + self._network_manager.get(cluster_request) + ## Handler for all requests that have finished. def _onNetworkRequestFinished(self, reply): reply_url = reply.url().toString() status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) if reply.operation() == QNetworkAccessManager.GetOperation: - if "system" in reply_url: # Name returned from printer. + address = reply.url().host() + if "origin=manual_name" in reply_url: # Name returned from printer. if status_code == 200: + try: system_info = json.loads(bytes(reply.readAll()).decode("utf-8")) except json.JSONDecodeError: @@ -125,28 +143,51 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): except UnicodeDecodeError: Logger.log("e", "Printer returned incorrect UTF-8.") return - address = reply.url().host() - instance_name = "manual:%s" % address - machine = "unknown" - if "variant" in system_info: - variant = system_info["variant"] - if variant == "Ultimaker 3": - machine = "9066" - elif variant == "Ultimaker 3 Extended": - machine = "9511" - properties = { - b"name": system_info["name"].encode("utf-8"), - b"address": address.encode("utf-8"), - b"firmware_version": system_info["firmware"].encode("utf-8"), - b"manual": b"true", - b"machine": machine.encode("utf-8") - } - if instance_name in self._printers: - # Only replace the printer if it is still in the list of (manual) printers - self.removePrinter(instance_name) - self.addPrinter(instance_name, address, properties) + if address not in self._network_requests_buffer: + self._network_requests_buffer[address] = {} + self._network_requests_buffer[address]["system"] = system_info + elif "origin=check_cluster" in reply_url: + if address not in self._network_requests_buffer: + self._network_requests_buffer[address] = {} + if status_code == 200: + # We know it's a cluster printer + Logger.log("d", "Cluster printer detected: [%s]", reply.url()) + self._network_requests_buffer[address]["cluster"] = True + else: + Logger.log("d", "This url is not from a cluster printer: [%s]", reply.url()) + self._network_requests_buffer[address]["cluster"] = False + + # Both the system call and cluster call are finished + if (address in self._network_requests_buffer and + "system" in self._network_requests_buffer[address] and + "cluster" in self._network_requests_buffer[address]): + + instance_name = "manual:%s" % address + system_info = self._network_requests_buffer[address]["system"] + is_cluster = self._network_requests_buffer[address]["cluster"] + machine = "unknown" + if "variant" in system_info: + variant = system_info["variant"] + if variant == "Ultimaker 3": + machine = "9066" + elif variant == "Ultimaker 3 Extended": + machine = "9511" + + properties = { + b"name": system_info["name"].encode("utf-8"), + b"address": address.encode("utf-8"), + b"firmware_version": system_info["firmware"].encode("utf-8"), + b"manual": b"true", + b"machine": machine.encode("utf-8") + } + if instance_name in self._printers: + # Only replace the printer if it is still in the list of (manual) printers + self.removePrinter(instance_name) + self.addPrinter(instance_name, address, properties, force_cluster=is_cluster) + + del self._network_requests_buffer[address] ## Stop looking for devices on network. def stop(self): @@ -175,8 +216,13 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): self._printers[key].connectionStateChanged.disconnect(self._onPrinterConnectionStateChanged) ## Because the model needs to be created in the same thread as the QMLEngine, we use a signal. - def addPrinter(self, name, address, properties): - printer = NetworkPrinterOutputDevice.NetworkPrinterOutputDevice(name, address, properties, self._api_prefix) + def addPrinter(self, name, address, properties, force_cluster=False): + cluster_size = int(properties.get(b"cluster_size", -1)) + if force_cluster or cluster_size >= 0: + printer = NetworkClusterPrinterOutputDevice.NetworkClusterPrinterOutputDevice( + name, address, properties, self._api_prefix, self._plugin_path) + else: + printer = NetworkPrinterOutputDevice.NetworkPrinterOutputDevice(name, address, properties, self._api_prefix) self._printers[printer.getKey()] = printer global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack and printer.getKey() == global_container_stack.getMetaDataEntry("um_network_key"): @@ -237,4 +283,22 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): elif state_change == ServiceStateChange.Removed: Logger.log("d", "Bonjour service removed: %s" % name) - self.removePrinterSignal.emit(str(name)) \ No newline at end of file + self.removePrinterSignal.emit(str(name)) + + ## For cluster below + def _get_plugin_directory_name(self): + current_file_absolute_path = os.path.realpath(__file__) + directory_path = os.path.dirname(current_file_absolute_path) + _, directory_name = os.path.split(directory_path) + return directory_name + + @property + def _plugin_path(self): + return PluginRegistry.getInstance().getPluginPath(self._get_plugin_directory_name()) + + @pyqtSlot() + def openControlPanel(self): + Logger.log("d", "Opening print jobs web UI...") + selected_device = self.getOutputDeviceManager().getActiveDevice() + if isinstance(selected_device, NetworkClusterPrinterOutputDevice.NetworkClusterPrinterOutputDevice): + QDesktopServices.openUrl(QUrl(selected_device.getPrintJobsUrl())) diff --git a/plugins/UM3NetworkPrinting/OpenPanelButton.qml b/plugins/UM3NetworkPrinting/OpenPanelButton.qml new file mode 100644 index 0000000000..3915c1f9eb --- /dev/null +++ b/plugins/UM3NetworkPrinting/OpenPanelButton.qml @@ -0,0 +1,18 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.1 as UM + +Button { + objectName: "openPanelSaveAreaButton" + id: openPanelSaveAreaButton + + UM.I18nCatalog { id: catalog; name: "cura"; } + + height: UM.Theme.getSize("save_button_save_to_button").height + tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.") + text: catalog.i18nc("@action:button", "View print jobs") + + style: UM.Theme.styles.sidebar_action_button +} diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml new file mode 100644 index 0000000000..624c02f735 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml @@ -0,0 +1,33 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM + + +Item +{ + id: extruderInfo + property var printCoreConfiguration + + width: parent.width / 2 + height: childrenRect.height + Label + { + id: materialLabel + text: printCoreConfiguration.material.material + " (" + printCoreConfiguration.material.color + ")" + elide: Text.ElideRight + width: parent.width + font: UM.Theme.getFont("very_small") + } + Label + { + id: printCoreLabel + text: printCoreConfiguration.print_core_id + anchors.top: materialLabel.bottom + elide: Text.ElideRight + width: parent.width + font: UM.Theme.getFont("very_small") + opacity: 0.5 + } +} diff --git a/plugins/UM3NetworkPrinting/PrintWindow.qml b/plugins/UM3NetworkPrinting/PrintWindow.qml new file mode 100644 index 0000000000..28e8a72160 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrintWindow.qml @@ -0,0 +1,103 @@ +// Copyright (c) 2015 Ultimaker B.V. +// Cura is released under the terms of the AGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Window 2.2 +import QtQuick.Controls 1.2 + +import UM 1.1 as UM + +UM.Dialog +{ + id: base; + + minimumWidth: 500 + minimumHeight: 140 + maximumWidth: minimumWidth + maximumHeight: minimumHeight + width: minimumWidth + height: minimumHeight + + visible: true + modality: Qt.ApplicationModal + + title: catalog.i18nc("@title:window","Print over network") + + Column + { + id: printerSelection + anchors.fill: parent + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width + height: 50 + + Label + { + id: manualPrinterSelectionLabel + anchors + { + left: parent.left + topMargin: UM.Theme.getSize("default_margin").height + right: parent.right + } + text: "Printer selection" + wrapMode: Text.Wrap + height: 20 + } + + ComboBox + { + id: printerSelectionCombobox + model: OutputDevice.printers + textRole: "friendly_name" + + width: parent.width + height: 40 + Behavior on height { NumberAnimation { duration: 100 } } + + onActivated: + { + var printerData = OutputDevice.printers[index]; + OutputDevice.selectPrinter(printerData.unique_name, printerData.friendly_name); + } + } + + SystemPalette + { + id: palette + } + + UM.I18nCatalog { id: catalog; name: "cura"; } + } + + leftButtons: [ + Button + { + text: catalog.i18nc("@action:button","Cancel") + enabled: true + onClicked: { + base.visible = false; + // reset to defaults + OutputDevice.selectAutomaticPrinter() + printerSelectionCombobox.currentIndex = 0 + } + } + ] + + rightButtons: [ + Button + { + text: catalog.i18nc("@action:button","Print") + enabled: true + onClicked: { + base.visible = false; + OutputDevice.sendPrintJob(); + // reset to defaults + OutputDevice.selectAutomaticPrinter() + printerSelectionCombobox.currentIndex = 0 + } + } + ] +} diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml new file mode 100644 index 0000000000..bab7db41d4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml @@ -0,0 +1,345 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.3 as UM + + +Rectangle +{ + function strPadLeft(string, pad, length) + { + return (new Array(length + 1).join(pad) + string).slice(-length); + } + + function getPrettyTime(time) + { + var hours = Math.floor(time / 3600) + time -= hours * 3600 + var minutes = Math.floor(time / 60); + time -= minutes * 60 + var seconds = Math.floor(time); + + var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); + return finalTime; + } + + function formatPrintJobPercent(printJob) + { + if (printJob == null) + { + return ""; + } + if (printJob.time_total === 0) + { + return ""; + } + return Math.min(100, Math.round(printJob.time_elapsed / printJob.time_total * 100)) + "%"; + } + + + id: printerDelegate + property var printer + + border.width: UM.Theme.getSize("default_lining").width + border.color: mouse.containsMouse ? UM.Theme.getColor("setting_control_border_highlight") : lineColor + z: mouse.containsMouse ? 1 : 0 // Push this item up a bit on mouse over to ensure that the highlighted bottom border is visible. + + property var printJob: + { + if (printer.reserved_by != null) + { + // Look in another list. + return OutputDevice.printJobsByUUID[printer.reserved_by] + } + return OutputDevice.printJobsByPrinterUUID[printer.uuid] + } + + MouseArea + { + id: mouse + anchors.fill:parent + onClicked: OutputDevice.selectPrinter(printer.unique_name, printer.friendly_name) + hoverEnabled: true; + + // Only clickable if no printer is selected + enabled: OutputDevice.selectedPrinterName == "" + } + + Row + { + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.margins: UM.Theme.getSize("default_margin").width + + Rectangle + { + width: parent.width / 3 + height: parent.height + + Label // Print job name + { + id: jobNameLabel + anchors.top: parent.top + anchors.left: parent.left + text: printJob != null ? printJob.name : "" + font: UM.Theme.getFont("default_bold") + } + + Label + { + id: jobOwnerLabel + anchors.top: jobNameLabel.bottom + text: printJob != null ? printJob.owner : "" + opacity: 0.50 + } + + Label + { + id: totalTimeLabel + anchors.bottom: parent.bottom + text: printJob != null ? getPrettyTime(printJob.time_total) : "" + opacity: 0.65 + font: UM.Theme.getFont("default") + } + } + + Rectangle + { + width: parent.width / 3 * 2 + height: parent.height + + Label // Friendly machine name + { + id: printerNameLabel + anchors.top: parent.top + anchors.left: parent.left + width: parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width + text: printer.friendly_name + font: UM.Theme.getFont("default_bold") + elide: Text.ElideRight + } + + Label // Machine variant + { + id: printerTypeLabel + anchors.top: printerNameLabel.bottom + width: parent.width / 2 - UM.Theme.getSize("default_margin").width + text: printer.machine_variant + anchors.left: parent.left + elide: Text.ElideRight + font: UM.Theme.getFont("very_small") + opacity: 0.50 + } + + Rectangle // Camera icon + { + id: showCameraIcon + width: 40 + height: width + radius: width + anchors.right: printProgressArea.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + color: emphasisColor + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + source: "camera-icon.svg" + width: sourceSize.width + height: sourceSize.height * width / sourceSize.width + color: "white" + } + } + + Row // PrintCode config + { + id: extruderInfo + anchors.bottom: parent.bottom + + width: parent.width / 2 - UM.Theme.getSize("default_margin").width + height: childrenRect.height + spacing: 10 + + PrintCoreConfiguration + { + id: leftExtruderInfo + width: (parent.width-1) / 2 + printCoreConfiguration: printer.configuration[0] + } + + Rectangle + { + id: extruderSeperator + width: 1 + height: parent.height + color: lineColor + } + + PrintCoreConfiguration + { + id: rightExtruderInfo + width: (parent.width-1) / 2 + printCoreConfiguration: printer.configuration[1] + } + } + + Rectangle // Print progress + { + id: printProgressArea + anchors.right: parent.right + anchors.top: parent.top + height: showExtended ? parent.height: printProgressTitleBar.height + width: parent.width / 2 - UM.Theme.getSize("default_margin").width + border.width: UM.Theme.getSize("default_lining").width + border.color: lineColor + radius: cornerRadius + property var showExtended: { + if(printJob!= null) + { + var extendStates = ["sent_to_printer", "wait_for_configuration", "printing", "pre_print", "post_print", "wait_cleanup"]; + return extendStates.indexOf(printJob.status) !== -1; + } + return false + } + visible: + { + return true + } + + Item // Status and Percent + { + id: printProgressTitleBar + width: parent.width + //border.width: UM.Theme.getSize("default_lining").width + //border.color: lineColor + height: 40 + anchors.left: parent.left + + Label + { + id: statusText + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + anchors.right: progressText.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + text: { + if(printJob != null) + { + if(printJob.status == "printing" || printJob.status == "post_print") + { + return catalog.i18nc("@label:status", "Printing") + } + else if(printJob.status == "wait_for_configuration") + { + return catalog.i18nc("@label:status", "Reserved") + } + else if(printJob.status == "wait_cleanup") + { + return catalog.i18nc("@label:status", "Finished") + } + else if (printJob.status == "pre_print" || printJob.status == "sent_to_printer") + { + return catalog.i18nc("@label:status", "Preparing") + } + else + { + return "" + } + } + return catalog.i18nc("@label:status", "Available") + } + + elide: Text.ElideRight + + font: UM.Theme.getFont("small") + } + Label + { + id: progressText + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + + anchors.top: statusText.top + + text: formatPrintJobPercent(printJob) + visible: printJob != null && (["printing", "post_print", "pre_print", "sent_to_printer"].indexOf(printJob.status) !== -1) + opacity: 0.65 + font: UM.Theme.getFont("very_small") + } + Rectangle + { + //TODO: This will become a progress bar in the future + width: parent.width + height: UM.Theme.getSize("default_lining").height + anchors.bottom: parent.bottom + anchors.left: parent.left + visible: printProgressArea.showExtended + color: lineColor + } + } + + Column + { + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + anchors.top: printProgressTitleBar.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + + width: parent.width - 2 * UM.Theme.getSize("default_margin").width + + visible: printJob != null && (["wait_cleanup", "printing", "pre_print", "wait_for_configuration"].indexOf(printJob.status) !== -1) + + Label // Status detail + { + text: + { + if(printJob != null) + { + if(printJob.status == "printing" ) + { + return catalog.i18nc("@label", "Finishes at: ") + OutputDevice.getTimeCompleted(printJob.time_total - printJob.time_elapsed) + } + if(printJob.status == "wait_cleanup") + { + return catalog.i18nc("@label", "Clear build plate") + } + if(printJob.status == "sent_to_printer" || printJob.status == "pre_print") + { + return catalog.i18nc("@label", "Preparing to print") + } + if(printJob.status == "wait_for_configuration") + { + return catalog.i18nc("@label", "Not accepting print jobs") + } + } + return "" + } + elide: Text.ElideRight + font: UM.Theme.getFont("default") + } + + Label // Status 2nd row + { + text: { + if(printJob != null) { + if(printJob.status == "printing" ) + { + return OutputDevice.getDateCompleted(printJob.time_total - printJob.time_elapsed) + } + } + return ""; + } + + elide: Text.ElideRight + font: UM.Theme.getFont("default") + } + } + } + } + } +} diff --git a/plugins/UM3NetworkPrinting/PrinterTile.qml b/plugins/UM3NetworkPrinting/PrinterTile.qml new file mode 100644 index 0000000000..f240f3034f --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrinterTile.qml @@ -0,0 +1,54 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: base + width: 250 + height: 250 + signal clicked() + MouseArea + { + anchors.fill:parent + onClicked: base.clicked() + } + Rectangle + { + // TODO: Actually add UM icon / picture + width: 100 + height: 100 + border.width: UM.Theme.getSize("default_lining").width + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height + } + Label + { + id: nameLabel + anchors.bottom: ipLabel.top + anchors.bottomMargin: UM.Theme.getSize("default_margin").height + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("default_margin").width + text: modelData.friendly_name.toString() + font: UM.Theme.getFont("large") + elide: Text.ElideMiddle; + height: UM.Theme.getSize("section").height; + } + Label + { + id: ipLabel + text: modelData.ip_address.toString() + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("default_margin").height + font: UM.Theme.getFont("default") + height:10 + anchors.horizontalCenter: parent.horizontalCenter + } +} + diff --git a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml new file mode 100644 index 0000000000..4f138ee8d1 --- /dev/null +++ b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml @@ -0,0 +1,91 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.3 as UM + + +Item +{ + Rectangle + { + anchors.fill:parent + color: UM.Theme.getColor("viewport_overlay") + opacity: 0.5 + } + + MouseArea + { + anchors.fill: parent + onClicked: OutputDevice.selectAutomaticPrinter() + z: 0 + } + + Button + { + id: backButton + anchors.bottom: cameraImage.top + anchors.bottomMargin: UM.Theme.getSize("default_margin").width + anchors.right: cameraImage.right + + // TODO: Harcoded sizes + width: 20 + height: 20 + + onClicked: OutputDevice.selectAutomaticPrinter() + + style: ButtonStyle + { + label: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: control.width + height: control.height + sourceSize.width: width + sourceSize.height: width + source: UM.Theme.getIcon("cross1") + } + } + background: Item {} + } + } + + Image + { + id: cameraImage + width: Math.min(sourceSize.width === 0 ? 800 : sourceSize.width, maximumWidth) + height: (sourceSize.height === 0 ? 600 : sourceSize.height) * width / sourceSize.width + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + z: 1 + onVisibleChanged: + { + if(visible) + { + OutputDevice.startCamera() + } else + { + OutputDevice.stopCamera() + } + } + source: + { + if(OutputDevice.cameraImage) + { + return OutputDevice.cameraImage; + } + return ""; + } + } + + MouseArea + { + anchors.fill: cameraImage + onClicked: { /* no-op */ } + z: 1 + } + +} diff --git a/plugins/UM3NetworkPrinting/camera-icon.svg b/plugins/UM3NetworkPrinting/camera-icon.svg new file mode 100644 index 0000000000..2aafc4b6f4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/camera-icon.svg @@ -0,0 +1,3 @@ + + + From a2e0f4d64fcab35e0eeada795a20b725480013eb Mon Sep 17 00:00:00 2001 From: alekseisasin Date: Wed, 27 Sep 2017 11:27:29 +0200 Subject: [PATCH 05/26] For discard changed window retrieve data from setting "value" property instead of "resolve" CURA-4358 --- cura/Settings/GlobalStack.py | 5 +++-- cura/Settings/UserChangesModel.py | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index bee82e2272..cfab45bfed 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -89,10 +89,11 @@ class GlobalStack(CuraContainerStack): # # \param key The setting key to get the property of. # \param property_name The property to get the value of. + # \param skip_container The container ID to skip. # # \return The value of the property for the specified setting, or None if not found. @override(ContainerStack) - def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> Any: + def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None, skip_container: str = None) -> Any: if not self.definition.findDefinitions(key = key): return None @@ -121,7 +122,7 @@ class GlobalStack(CuraContainerStack): else: Logger.log("e", "Setting {setting} has limit_to_extruder but is not settable per extruder!", setting = key) - result = super().getProperty(key, property_name, context) + result = super().getProperty(key, property_name, context, skip_container) context.popContainer() return result diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py index 8b61186650..fbbd721f9f 100644 --- a/cura/Settings/UserChangesModel.py +++ b/cura/Settings/UserChangesModel.py @@ -90,9 +90,11 @@ class UserChangesModel(ListModel): for container in containers: if stack == global_stack: - resolve = global_stack.getProperty(setting_key, "resolve") - if resolve is not None: - original_value = resolve + + #Find default value without checking user changed settings. + default_value = global_stack.getProperty(setting_key, "value", skip_container = user_changes.getId()) + if default_value is not None: + original_value = default_value break original_value = container.getProperty(setting_key, "value") From aed5e631dce49fdad71afc80775dc8533a28d6d4 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 13:13:55 +0200 Subject: [PATCH 06/26] CURA-4352 fix passing int values as float when changing slider value --- resources/qml/SidebarSimple.qml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index d93dd67550..b94c1ced4e 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -354,8 +354,6 @@ Item } } - - Item { id: infillCellRight @@ -405,7 +403,7 @@ Item value: parseInt(infillDensity.properties.value) onValueChanged: { - infillDensity.setPropertyValue("value", infillSlider.value) + infillDensity.setPropertyValue("value", String(parseInt(infillSlider.value))) } style: SliderStyle @@ -829,7 +827,6 @@ Item UM.SettingPropertyProvider { id: infillExtruderNumber - containerStackId: Cura.MachineManager.activeStackId key: "infill_extruder_nr" watchedProperties: [ "value" ] From f8e8dcacdf931b12bdddd1093edb2e1d1245f60c Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 13:55:57 +0200 Subject: [PATCH 07/26] CURA-4381 use modulus to set infill slider step size and tick show --- resources/qml/SidebarSimple.qml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index b94c1ced4e..6d67b927bd 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -393,7 +393,7 @@ Item minimumValue: 0 maximumValue: 100 - stepSize: 10 + stepSize: (parseInt(infillDensity.properties.value) % 10 == 0) ? 10 : 1 tickmarksEnabled: true // disable slider when gradual support is enabled @@ -403,12 +403,12 @@ Item value: parseInt(infillDensity.properties.value) onValueChanged: { + // Explicitly cast to string to make sure the value passed to Python is an integer. infillDensity.setPropertyValue("value", String(parseInt(infillSlider.value))) } style: SliderStyle { - groove: Rectangle { id: groove implicitWidth: 200 @@ -431,6 +431,18 @@ Item tickmarks: Repeater { id: repeater model: control.maximumValue / control.stepSize + 1 + + // check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size) + function shouldShowTick (index) { + if ((parseInt(infillDensity.properties.value) % 10 == 0)) { + return true + } else if (index % 10 == 0) { + return true + } else { + return false + } + } + Rectangle { anchors.verticalCenter: parent.verticalCenter color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") @@ -438,6 +450,7 @@ Item height: 6 y: 0 x: styleData.handleWidth / 2 + index * ((repeater.width - styleData.handleWidth) / (repeater.count-1)) + visible: shouldShowTick(index) } } } From f5310ad2ff7d3cf1bf05c4ad49c864ed3b2d5b35 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 14:16:56 +0200 Subject: [PATCH 08/26] Revert "For discard changed window retrieve data from setting "value" property instead of "resolve"" This reverts commit a2e0f4d64fcab35e0eeada795a20b725480013eb. --- cura/Settings/GlobalStack.py | 5 ++--- cura/Settings/UserChangesModel.py | 8 +++----- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index cfab45bfed..bee82e2272 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -89,11 +89,10 @@ class GlobalStack(CuraContainerStack): # # \param key The setting key to get the property of. # \param property_name The property to get the value of. - # \param skip_container The container ID to skip. # # \return The value of the property for the specified setting, or None if not found. @override(ContainerStack) - def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None, skip_container: str = None) -> Any: + def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> Any: if not self.definition.findDefinitions(key = key): return None @@ -122,7 +121,7 @@ class GlobalStack(CuraContainerStack): else: Logger.log("e", "Setting {setting} has limit_to_extruder but is not settable per extruder!", setting = key) - result = super().getProperty(key, property_name, context, skip_container) + result = super().getProperty(key, property_name, context) context.popContainer() return result diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py index fbbd721f9f..8b61186650 100644 --- a/cura/Settings/UserChangesModel.py +++ b/cura/Settings/UserChangesModel.py @@ -90,11 +90,9 @@ class UserChangesModel(ListModel): for container in containers: if stack == global_stack: - - #Find default value without checking user changed settings. - default_value = global_stack.getProperty(setting_key, "value", skip_container = user_changes.getId()) - if default_value is not None: - original_value = default_value + resolve = global_stack.getProperty(setting_key, "resolve") + if resolve is not None: + original_value = resolve break original_value = container.getProperty(setting_key, "value") From d8c1546be379bc6f5810065c1e3ce27a58fcf85f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 27 Sep 2017 14:20:20 +0200 Subject: [PATCH 09/26] Revert making the camera image black while it doesn't react This was giving segfaults sometimes on my computer. I suspect it's because the camera image could have been written to by both this Python code and by the camera itself, giving it a sort of data race or maybe that the image was discarded by the camera while it's being written to by Python. In any case, this should make it more stable. Contributes to issue CURA-4376. --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 6c81ff6d82..44ac965eae 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -340,10 +340,6 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): pass # It can happen that the wrapped c++ object is already deleted. self._image_reply = None self._image_request = None - if self._use_stream: - # Reset image (To prevent old images from being displayed) - self._camera_image.fill(QColor(0, 0, 0)) - self.newImage.emit() def _startCamera(self): if self._use_stream: From aa93c67a94bf74ff82256f57c8c09b15f236514e Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 27 Sep 2017 14:27:04 +0200 Subject: [PATCH 10/26] Re-add the margin between infill and support checkbox CURA-4380 --- resources/qml/SidebarSimple.qml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index c2664c37a3..3a104e81a1 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -598,7 +598,7 @@ Item visible: enableSupportCheckBox.visible anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 1.5 anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter @@ -613,8 +613,7 @@ Item id: enableSupportCheckBox property alias _hovered: enableSupportMouseArea.containsMouse - anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.top: enableSupportLabel.top anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox; From 500989e36ddcf8912a462014804af53b24bb4033 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 27 Sep 2017 14:27:04 +0200 Subject: [PATCH 11/26] Re-add the margin between infill and support checkbox CURA-4380 --- resources/qml/SidebarSimple.qml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index c2664c37a3..3a104e81a1 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -598,7 +598,7 @@ Item visible: enableSupportCheckBox.visible anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 1.5 anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: enableSupportCheckBox.verticalCenter @@ -613,8 +613,7 @@ Item id: enableSupportCheckBox property alias _hovered: enableSupportMouseArea.containsMouse - anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.top: enableSupportLabel.top anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox; From a337fd4e9c90164456cbd0e366af4f8d055a0a8e Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 14:32:05 +0200 Subject: [PATCH 12/26] CURA-4380 quality slider text disabled color when slider cannot be used --- resources/qml/SidebarSimple.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index c2664c37a3..c690494d46 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -309,7 +309,7 @@ Item text: catalog.i18nc("@label", "Slower") font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") + color: (qualityModel.availableTotalTicks > 0) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") horizontalAlignment: Text.AlignLeft } @@ -320,7 +320,7 @@ Item text: catalog.i18nc("@label", "Faster") font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") + color: (qualityModel.availableTotalTicks > 0) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") horizontalAlignment: Text.AlignRight } } From a8ce7185cc027b7ab9b5048c74554273717d1f96 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 14:35:13 +0200 Subject: [PATCH 13/26] CURA-4380 gradual infill checkbox closer to slider to indicate category --- resources/qml/SidebarSimple.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index c690494d46..221efa5904 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -505,7 +505,7 @@ Item property alias _hovered: enableGradualInfillMouseArea.containsMouse anchors.top: infillSlider.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height / 2 // closer to slider since it belongs to the same category anchors.left: infillCellRight.left style: UM.Theme.styles.checkbox From c1cfb76f8a0ff65ad1bb8cac1444aeb40f6151d4 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 14:51:20 +0200 Subject: [PATCH 14/26] CURA-4380 code improvements for build plate adhesion label --- resources/qml/SidebarSimple.qml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 221efa5904..7a4cfbf68f 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -726,15 +726,19 @@ Item { id: adhesionHelperLabel visible: adhesionCheckBox.visible - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: infillCellLeft.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.verticalCenter: adhesionCheckBox.verticalCenter - text: catalog.i18nc("@label", "Build Plate Adhesion"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); + + text: catalog.i18nc("@label", "Build Plate Adhesion") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") elide: Text.ElideRight + + anchors { + left: parent.left + leftMargin: UM.Theme.getSize("sidebar_margin").width + right: infillCellLeft.right + rightMargin: UM.Theme.getSize("sidebar_margin").width + verticalCenter: adhesionCheckBox.verticalCenter + } } CheckBox From 3be8f45636b973370e44191badf4be52adb07268 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 27 Sep 2017 15:18:53 +0200 Subject: [PATCH 15/26] Move the quality indicator to the center when there is only one quality available Fixes #2485 CURA-4383 --- resources/qml/SidebarSimple.qml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 3a104e81a1..e222de8aa5 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -186,7 +186,10 @@ Item x: { // Make sure the text aligns correctly with each tick - if (index == 0) { + if (qualityModel.totalTicks == 0) { + // If there is only one tick, align it centrally + return ((base.width * 0.55) - width) / 2 + } else if (index == 0) { return (base.width * 0.55 / qualityModel.totalTicks) * index } else if (index == qualityModel.totalTicks) { return (base.width * 0.55 / qualityModel.totalTicks) * index - width @@ -223,7 +226,7 @@ Item Repeater { id: qualityRepeater - model: qualityModel + model: qualityModel.availableTotalTicks > 0 ? qualityModel : 0 Rectangle { @@ -236,13 +239,22 @@ Item } } + Rectangle { + id: disabledHandleButton + visible: !qualitySlider.visible + anchors.centerIn: parent + color: UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: 10 * screenScaleFactor + implicitHeight: implicitWidth + radius: width / 2 + } Slider { id: qualitySlider height: UM.Theme.getSize("sidebar_margin").height anchors.bottom: speedSlider.bottom - enabled: qualityModel.availableTotalTicks > 0 + visible: qualityModel.availableTotalTicks > 0 updateValueWhileDragging : false minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 @@ -262,16 +274,16 @@ Item groove: Rectangle { implicitHeight: 2 * screenScaleFactor color: UM.Theme.getColor("quality_slider_available") - radius: 1 * screenScaleFactor + radius: height / 2 } handle: Item { Rectangle { id: qualityhandleButton anchors.centerIn: parent - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + color: UM.Theme.getColor("quality_slider_available") implicitWidth: 10 * screenScaleFactor - implicitHeight: 10 * screenScaleFactor - radius: 10 * screenScaleFactor + implicitHeight: implicitWidth + radius: implicitWidth / 2 } } } From 4b3e83f876c29ec286f974e6b0fdf1c5dccf4ca9 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 27 Sep 2017 15:55:34 +0200 Subject: [PATCH 16/26] Not allowing to modify the number of extruders in multiextruder printers, except Custom FDM printers - CURA-4359 --- plugins/MachineSettingsAction/MachineSettingsAction.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 832e247d19..3672066678 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -112,7 +112,13 @@ class MachineSettingsAction(MachineAction): if not self._global_container_stack: return 0 - return len(self._global_container_stack.getMetaDataEntry("machine_extruder_trains")) + # If there is a printer that originally is multi-extruder, it's not allowed to change the number of extruders + # It's just allowed in case of Custom FDM printers + definition_container = self._global_container_stack.getBottom() + if definition_container.getId() == "custom": + return len(self._global_container_stack.getMetaDataEntry("machine_extruder_trains")) + return 0 + @pyqtSlot(int) def setMachineExtruderCount(self, extruder_count): From 3ddb45160d47d5c458619c6f5113f0e40b13fa05 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Wed, 27 Sep 2017 16:59:03 +0200 Subject: [PATCH 17/26] Update infill slider icon border color to not look like a checkbox, fixes #2487 --- resources/qml/SidebarSimple.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 8baba3f282..0509697530 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -485,7 +485,7 @@ Item visible: infillIconList.activeIndex == index border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("quality_slider_available") + border.color: UM.Theme.getColor("quality_slider_unavailable") UM.RecolorImage { anchors.fill: parent From 87c7373cb0edd54042223299e6390d7dec233d4b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 27 Sep 2017 17:14:41 +0200 Subject: [PATCH 18/26] Fix visibility when there are ticks but no available ticks --- resources/qml/SidebarSimple.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index e222de8aa5..93cd7005db 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -254,7 +254,8 @@ Item id: qualitySlider height: UM.Theme.getSize("sidebar_margin").height anchors.bottom: speedSlider.bottom - visible: qualityModel.availableTotalTicks > 0 + enabled: qualityModel.availableTotalTicks > 0 + visible: qualityModel.totalTicks > 0 updateValueWhileDragging : false minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 From 47ad68bda73c7002b51c14a0f1e5b3c741319c7a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 27 Sep 2017 17:20:55 +0200 Subject: [PATCH 19/26] Show ticks when they are not available --- resources/qml/SidebarSimple.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 93cd7005db..72041a7daf 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -226,7 +226,7 @@ Item Repeater { id: qualityRepeater - model: qualityModel.availableTotalTicks > 0 ? qualityModel : 0 + model: qualityModel.totalTicks > 0 ? qualityModel : 0 Rectangle { From f8722a2d4b9dfe3330091ac381a1e131fd2c0c16 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 27 Sep 2017 17:21:43 +0200 Subject: [PATCH 20/26] Fixed code style in the function - CURA-4352 --- resources/qml/SidebarSimple.qml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index ef2f7c484c..ef1512e6af 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -434,13 +434,10 @@ Item // check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size) function shouldShowTick (index) { - if ((parseInt(infillDensity.properties.value) % 10 == 0)) { + if ((parseInt(infillDensity.properties.value) % 10 == 0) || (index % 10 == 0)) { return true - } else if (index % 10 == 0) { - return true - } else { - return false } + return false } Rectangle { From 609187a4ce8a354d3c1f96e9745c53aeba9168e0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 27 Sep 2017 17:26:29 +0200 Subject: [PATCH 21/26] Update translations from Bothof These are the new translations we got from Bothof for German, Spanish, Finnish, French, Italian, Dutch, Turkish and Simplified Chinese. Contributes to issue CURA-4341. --- resources/i18n/de_DE/cura.po | 270 +++++++++---------- resources/i18n/de_DE/fdmprinter.def.json.po | 116 ++++----- resources/i18n/es_ES/cura.po | 272 +++++++++----------- resources/i18n/es_ES/fdmprinter.def.json.po | 118 ++++----- resources/i18n/fi_FI/cura.po | 270 +++++++++---------- resources/i18n/fi_FI/fdmprinter.def.json.po | 116 ++++----- resources/i18n/fr_FR/cura.po | 272 +++++++++----------- resources/i18n/fr_FR/fdmprinter.def.json.po | 118 ++++----- resources/i18n/it_IT/cura.po | 270 +++++++++---------- resources/i18n/it_IT/fdmprinter.def.json.po | 116 ++++----- resources/i18n/nl_NL/cura.po | 270 +++++++++---------- resources/i18n/nl_NL/fdmprinter.def.json.po | 110 ++++---- resources/i18n/tr_TR/cura.po | 270 +++++++++---------- resources/i18n/tr_TR/fdmprinter.def.json.po | 116 ++++----- resources/i18n/zh_CN/cura.po | 267 +++++++++---------- resources/i18n/zh_CN/fdmprinter.def.json.po | 116 ++++----- 16 files changed, 1418 insertions(+), 1669 deletions(-) diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index e9ca7712aa..72e04b2b61 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" @@ -24,7 +24,7 @@ msgstr "Geräteeinstellungen" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Röntgen-Ansicht" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "G-Code-Datei" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Mit Doodle3D WLAN-Box drucken" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Mit Doodle3D WLAN-Box drucken" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Zu Doodle3D Connect verbinden" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Abbrechen" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Daten werden zu Doodle3D Connect gesendet" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Daten können nicht zu Doodle3D Connect gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Daten werden auf Doodle3D Connect gespeichert" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Datei wurde zu Doodle3D Connect gesendet" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Connect wird geöffnet ..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Doodle3D Connect Web-Schnittstelle öffnen" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Es kann kein neuer Auftrag gestartet werden, da der Drucker beschäftigt #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Druckdetails" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "Der Drucker unterstützt keinen USB-Druck, da er die UltiGCode-Variante #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "USB-Drucken" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Es kann kein neuer Auftrag gestartet werden, da der Drucker keinen Druck #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Warnhinweis" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "Die für den Drucker unter %s erforderliche Firmware wurde nicht gefunde #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Drucker-Firmware" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Auf Wechseldatenträger speichern {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Wird auf Wechseldatenträger gespeichert {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Wird gespeichert" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "Konnte nicht als {0} gespeichert werden: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "Bei dem Versuch, auf {device} zu schreiben, wurde ein Dateiname nicht gefunden." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Konnte nicht auf dem Wechseldatenträger gespeichert werden {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Fehler" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Auf Wechseldatenträger {0} gespeichert als {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Datei wurde gespeichert" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Ausgeworfen {0}. Sie können den Datenträger jetzt sicher entfernen." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Hardware sicher entfernen" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Zugriff auf Drucker erforderlich. Bestätigen Sie den Zugriff auf den Dr #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Verbindungsstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Verbindungsstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Es kann kein neuer Druckauftrag gestartet werden, da der Drucker beschä #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Druckerstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Daten werden zum Drucker gesendet" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Daten werden gesendet" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Anschluss über Netzwerk" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Dieser Drucker ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "Dieser Drucker ist der Host für eine Gruppe von {count} verbundenen Ultimaker 3-Druckern." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} hat den Druck von '{job_name}‘ beendet. Bitte holen Sie den Druck ab und bestätigen Sie das Räumen des Druckbetts." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} ist für das Drucken von '{job_name}‘ reserviert. Bitte ändern Sie die Druckerkonfiguration passend für den Auftrag, um mit dem Drucken zu beginnen." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Das Senden neuer Aufträge ist (vorübergehend) blockiert; der vorherige Druckauftrag wird noch gesendet." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Es kann kein neuer Druckauftrag gesendet werden: Dieser 3D-Drucker ist (noch) nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "{file_name} wird an Gruppe {cluster_name} gesendet" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "{file_name} wurde an Gruppe {cluster_name} gesendet." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Druckaufträge anzeigen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Öffnet die Schaltfläche für Druckaufträge in Ihrem Browser." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Es können keine Druckaufträge an die Gruppe {cluster_name} gesendet werden." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Um sicherzustellen, dass Ihr {machine_name} mit den neuesten Funktionen ausgestattet ist, wird empfohlen, die Firmware regelmäßig zu aktualisieren Dies kann auf dem {machine_name} (bei Anschluss an ein Netzwerk) oder über USB erfolgen." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Neue Firmware für %s verfügbar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Download" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Zugriff auf Update-Informationen nicht möglich." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura erfasst anonymisierte Slice-Informationen. Sie können dies in den #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Daten werden erfasst" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "G-Code-Datei" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Schichtenansicht" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Cura zeigt die Schichten nicht akkurat an, wenn Wire Printing aktiviert #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Schichtenansicht" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "GIF-Bilddatei" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Slicing mit dem aktuellen Material nicht möglich, da es mit der gewählten Maschine oder Konfiguration nicht kompatibel ist." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Slicing nicht möglich" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Schichten werden verarbeitet" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Informationen" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Düse" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Plugins durchsuchen" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Plugin-ID von {0} wurde nicht erhalten" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Warnhinweis" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Plugin-Browser" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Solide Ansicht" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "G-Code parsen" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "G-Code-Details" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Stützstruktur" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Neue Position für Objekte finden" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Position finden" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Innerhalb der Druckabmessung für alle Objekte konnte keine Position gef #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Kann Position nicht finden" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Datei bereits vorhanden" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Die Datei {0} ist bereits vorhanden. Soll die Datei wirklich überschrieben werden?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Das gewählte Material ist mit der gewählten Maschine oder Konfiguratio #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Material nicht kompatibel" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Änderung des Materialdurchmessers rückgängig machen" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Export des Profils nach {0} fehlgeschlagen: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Export des Profils nach {0} fehlgeschlagen: Fehlermeldung von Writer-Plugin" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Profil wurde nach {0} exportiert" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Exportdetails" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Import des Profils aus Datei {0} fehlgeschlagen: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "Die Höhe der Druckabmessung wurde aufgrund des Wertes der Einstellung #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Produktabmessungen" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Objekte vervielfältigen und platzieren" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Objekt-Platzierung" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Ein schwerer Ausnahmezustand ist aufgetreten, den wir nicht beseitigen konnten!

\n" -"

Bitte senden Sie einen Fehlerbericht an folgende URL http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Ein schwerer Ausnahmezustand ist aufgetreten, den wir nicht beseitigen konnten!

\n

Bitte senden Sie einen Fehlerbericht an folgende URL http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n" -"\n" -"Wählen Sie Ihren Drucker aus der folgenden Liste:" +msgstr "Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n\nWählen Sie Ihren Drucker aus der folgenden Liste:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Konfiguration aktivieren" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Dieser Drucker ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "Dieser Drucker ist der Host für eine Gruppe von %1 verbundenen Ultimaker 3-Druckern" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Drucken über Netzwerk" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Drucken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Drucken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Reserviert" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Beendet" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Vorbereitung" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Verfügbar" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Fertiggestellt am: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Druckplatte räumen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Vorbereitung für den Druck" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Akzeptiert keine Druckaufträge" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Öffnet die Seite für Druckaufträge mit Ihrem Standard-Webbrowser." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Druckaufträge anzeigen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "DRUCKERGRUPPE" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Druckaufträge" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Drucken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "In Warteschlange" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "Warten auf eine Konfigurationsänderung" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Drucker" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Drucker anzeigen" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Installiert" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Plugin für Lizenzvereinbarung" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " Das Plugin enthält eine Lizenz.\nSie müssen diese Lizenz akzeptieren, um das Plugin zu installieren.\nStimmen Sie den nachfolgenden Bedingungen zu?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Akzeptieren" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Ablehnen" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Sie haben einige Profileinstellungen angepasst.\n" -"Möchten Sie diese Einstellungen übernehmen oder verwerfen?" +msgstr "Sie haben einige Profileinstellungen angepasst.\nMöchten Sie diese Einstellungen übernehmen oder verwerfen?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Material importieren" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Material konnte nicht importiert werden %1: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Material wurde erfolgreich importiert %1" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Material exportieren" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Exportieren des Materials nach %1: %2 schlug fehl" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Material erfolgreich nach %1 exportiert" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\n" -"Cura verwendet mit Stolz die folgenden Open Source-Projekte:" +msgstr "Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\nCura verwendet mit Stolz die folgenden Open Source-Projekte:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Einige Einstellungs-/Überschreibungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n" -"\n" -"Klicken Sie, um den Profilmanager zu öffnen." +msgstr "Einige Einstellungs-/Überschreibungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n\nKlicken Sie, um den Profilmanager zu öffnen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Einige ausgeblendete Einstellungen verwenden Werte, die von ihren normalen, berechneten Werten abweichen.\n" -"\n" -"Klicken Sie, um diese Einstellungen sichtbar zu machen." +msgstr "Einige ausgeblendete Einstellungen verwenden Werte, die von ihren normalen, berechneten Werten abweichen.\n\nKlicken Sie, um diese Einstellungen sichtbar zu machen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Diese Einstellung hat einen vom Profil abweichenden Wert.\n" -"\n" -"Klicken Sie, um den Wert des Profils wiederherzustellen." +msgstr "Diese Einstellung hat einen vom Profil abweichenden Wert.\n\nKlicken Sie, um den Wert des Profils wiederherzustellen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Diese Einstellung wird normalerweise berechnet; aktuell ist jedoch ein Absolutwert eingestellt.\n" -"\n" -"Klicken Sie, um den berechneten Wert wiederherzustellen." +msgstr "Diese Einstellung wird normalerweise berechnet; aktuell ist jedoch ein Absolutwert eingestellt.\n\nKlicken Sie, um den berechneten Wert wiederherzustellen." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Druckeinrichtung deaktiviert\n" -"G-Code-Dateien können nicht geändert werden" +msgstr "Druckeinrichtung deaktiviert\nG-Code-Dateien können nicht geändert werden" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00 Stunden 00 Minuten" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Zeitangaben" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Druckzeit" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Es ist kein Drucker verbunden" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Extruder" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Die Zieltemperatur des Hotend. Das Hotend wird auf diese Temperatur aufgeheizt oder abgekühlt. Wenn der Wert 0 beträgt, wird die Hotend-Heizung ausgeschaltet." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Vorbereiten" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Überwachen" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Schichtdicke" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Druckgeschwindigkeit" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Langsamer" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Schneller" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Die graduelle Füllung steigert die Menge der Füllung nach oben hin sch #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Graduell aktivieren" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "\n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -24,7 +24,7 @@ msgstr "Ajustes de la máquina" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Vista de rayos X" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "Archivo GCode" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Imprimir con un enrutador Doodle3D" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Imprimir con un enrutador Doodle3D" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Conectar con Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Cancelar" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Enviando datos a Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "No se pueden enviar datos a Doodle3D Connect. ¿Hay otro trabajo que todavía esté activo?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Guardando datos en Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Archivo enviado a Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Abrir Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Abrir la interfaz web de Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "No se puede iniciar un trabajo nuevo porque la impresora está ocupada o #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Datos de impresión" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "Esta impresora no es compatible con la impresión USB porque utiliza el #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "Impresión USB" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "No se puede iniciar un trabajo nuevo porque la impresora no es compatibl #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Advertencia" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "No se pudo encontrar el firmware necesario para la impresora en %s." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Firmware de la impresora" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Guardar en unidad extraíble {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Guardando en unidad extraíble {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Guardando" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "No se pudo guardar en {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "No se pudo encontrar un nombre de archivo al tratar de escribir en {device}." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "No se pudo guardar en unidad extraíble {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Error" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Guardado en unidad extraíble {0} como {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Archivo guardado" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Expulsado {0}. Ahora puede retirar de forma segura la unidad." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Retirar de forma segura el hardware" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Estado de la conexión" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Estado de la conexión" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "No se puede iniciar un trabajo nuevo de impresión, la impresora está o #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Estado de la impresora" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Enviando datos a la impresora" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Enviando datos" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Conectar a través de la red" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "La impresora no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "La impresora aloja un grupo de {count} impresoras conectadas de Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} ha terminado de imprimir «{job_name}». Recoja el impreso y confirme que ha borrado la placa de impresión." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} está reservada para imprimir «{job_name}». Modifique la configuración de la impresora de modo que se adapte al trabajo para comenzar la impresión." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Envío de nuevos trabajos (temporalmente) bloqueado; se sigue enviando el trabajo de impresión previo." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "No se pudo enviar el nuevo trabajo de impresión: esta impresora 3D (todavía) no está configurada para alojar un grupo de impresoras de Ultimaker 3 conectadas." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "Enviando {file_name} al grupo {cluster_name}" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "Enviar {file_name} al grupo {cluster_name}." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Mostrar trabajos de impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Abre la interfaz de trabajos de impresión en el navegador." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "No se puede enviar el trabajo de impresión al grupo {cluster_name}." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Para garantizar que su {machine_name} disponga de las prestaciones más recientes, se recomienda actualizar el firmware con regularidad. Esto se puede hacer en la {machine_name} (cuando esté conectada a la red) o vía USB." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Nuevo firmware de %s disponible" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Descargar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "No se pudo acceder a la información actualizada." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura recopila de forma anónima información de la segmentación. Puede #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Recopilando datos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "Archivo GCode" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Vista de capas" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Cura no muestra correctamente las capas si la impresión de alambre est #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Vista de capas" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "Imagen GIF" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "No se puede segmentar con el material actual, ya que es incompatible con el dispositivo o la configuración seleccionados." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "No se puede segmentar" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Procesando capas" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Información" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Tobera" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Examinar complementos" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "No se pudo obtener la ID del complemento de {0}" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Advertencia" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Explorador de complementos" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Vista de sólidos" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "Analizar GCode" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "Datos de GCode" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Soporte" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Falda" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Buscando nueva ubicación para los objetos" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Buscando ubicación" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "No se puede encontrar una ubicación dentro del volumen de impresión pa #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "No se puede encontrar la ubicación" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "El archivo ya existe" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "El archivo {0} ya existe. ¿Está seguro de que desea sobrescribirlo?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "El material seleccionado no es compatible con la máquina o la configura #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Material incompatible" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Deshacer cambio del diámetro del material." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Error al exportar el perfil a {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Error al exportar el perfil a {0}: Error en el complemento de escritura." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Perfil exportado a {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Datos de exportación" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Error al importar el perfil de {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "La altura del volumen de impresión se ha reducido debido al valor del a #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Volumen de impresión" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Multiplicar y colocar objetos" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Colocando objeto" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Se ha producido una excepción fatal de la que no podemos recuperarnos.

\n" -"

Use la siguiente información para enviar un informe de error a http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Se ha producido una excepción fatal de la que no podemos recuperarnos.

\n

Use la siguiente información para enviar un informe de error a http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Para imprimir directamente en la impresora a través de la red, asegúrese de que esta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n" -"\n" -"Seleccione la impresora de la siguiente lista:" +msgstr "Para imprimir directamente en la impresora a través de la red, asegúrese de que esta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n\nSeleccione la impresora de la siguiente lista:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Activar configuración" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "La impresora no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "La impresora aloja un grupo de %1 impresoras conectadas de Ultimaker 3" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Imprimir a través de la red" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Imprimir" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Imprimiendo" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Reservado" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Terminado" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Preparando" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Disponible" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Completado el: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Borrar placa de impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Preparando para impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "No se aceptan trabajos de impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Abre la página de trabajos de impresión en su navegador web por defecto." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Ver trabajos de impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "GRUPO DE IMPRESORAS" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Trabajos de impresión" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Imprimiendo" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "En cola" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "Esperando a que se cambie la configuración" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Impresoras" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Ver impresoras" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Instalado" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Acuerdo de licencia de complemento" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " El complemento incluye una licencia.\nDebe aceptar dicha licencia para instalar el complemento.\n¿Acepta las siguientes condiciones?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Aceptar" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Rechazar" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Ha personalizado parte de los ajustes del perfil.\n" -"¿Desea descartar los cambios o guardarlos?" +msgstr "Ha personalizado parte de los ajustes del perfil.\n¿Desea descartar los cambios o guardarlos?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Importar material" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "No se pudo importar el material en %1: %2." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "El material se ha importado correctamente en %1." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Exportar material" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Se ha producido un error al exportar el material a %1: %2." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "El material se ha exportado correctamente a %1." #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\n" -"Cura se enorgullece de utilizar los siguientes proyectos de código abierto:" +msgstr "Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\nCura se enorgullece de utilizar los siguientes proyectos de código abierto:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Algunos valores de los ajustes o sobrescrituras son distintos a los valores almacenados en el perfil.\n" -"\n" -"Haga clic para abrir el administrador de perfiles." +msgstr "Algunos valores de los ajustes o sobrescrituras son distintos a los valores almacenados en el perfil.\n\nHaga clic para abrir el administrador de perfiles." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Algunos ajustes ocultos utilizan valores diferentes de los valores normales calculados.\n" -"\n" -"Haga clic para mostrar estos ajustes." +msgstr "Algunos ajustes ocultos utilizan valores diferentes de los valores normales calculados.\n\nHaga clic para mostrar estos ajustes." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Este ajuste tiene un valor distinto del perfil.\n" -"\n" -"Haga clic para restaurar el valor del perfil." +msgstr "Este ajuste tiene un valor distinto del perfil.\n\nHaga clic para restaurar el valor del perfil." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Este ajuste se calcula normalmente pero actualmente tiene un valor absoluto establecido.\n" -"\n" -"Haga clic para restaurar el valor calculado." +msgstr "Este ajuste se calcula normalmente pero actualmente tiene un valor absoluto establecido.\n\nHaga clic para restaurar el valor calculado." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Ajustes de impresión deshabilitados\n" -"No se pueden modificar los archivos GCode" +msgstr "Ajustes de impresión deshabilitados\nNo se pueden modificar los archivos GCode" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Información sobre el tiempo" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Tiempo de impresión" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m/~ %2g/~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m/~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "No hay ninguna impresora conectada" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Extrusor" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Temperatura objetivo del extremo caliente. El extremo caliente se calentará o enfriará en función de esta temperatura. Si el valor es 0, el calentamiento del extremo caliente se desactivará." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Preparar" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Supervisar" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Altura de capa" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Velocidad de impresión" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Más lento" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Más rápido" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Un relleno gradual aumentará gradualmente la cantidad de relleno hacia #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Habilitar gradual" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Comprobar la compatibilidad de los materiales" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "God Mode" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "Acepta códigos GCode y los envía a un enrutador Doodle3D por medio de wifi." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Enrutador Doodle3D" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "Conexión de red UM3" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "Conexión de red UM3 (grupo)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Busca actualizaciones de firmware." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Buscador de actualizaciones de firmware" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "Actualización de la versión 2.5 a la 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Actualiza la configuración de Cura 2.7 a Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Actualización de la versión 2.7 a la 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4973,4 +4949,4 @@ msgstr "Lector de perfiles de Cura" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Volver a imprimir" +#~ msgstr "Volver a imprimir" \ No newline at end of file diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index eed272eb61..dcf8c318c7 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.0\n" +"Project-Id-Version: Cura 2.7\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -56,9 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"Los comandos de Gcode que se ejecutarán justo al inicio, separados por \n" -"." +msgstr "Los comandos de Gcode que se ejecutarán justo al inicio, separados por \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,9 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"Los comandos de Gcode que se ejecutarán justo al final, separados por \n" -"." +msgstr "Los comandos de Gcode que se ejecutarán justo al final, separados por \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -1122,7 +1118,7 @@ msgstr "Aleatoria" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "Esquina más pronunciada" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1147,32 +1143,32 @@ msgstr "Coordenada Y de la posición cerca de donde se comienza a imprimir cada #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Preferencia de esquina de costura" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Controlar si las esquinas del contorno del modelo influyen en la posición de la costura. «Ninguno» significa que las esquinas no influyen en la posición de la costura. «Ocultar costura» significa que es probable que la costura se realice en una esquina interior. «Mostrar costura» significa que es probable que la costura sea en una esquina exterior. «Ocultar o mostrar costura» significa que es probable que la costura se realice en una esquina interior o exterior." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Ninguno" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Ocultar costura" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Mostrar costura" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Ocultar o mostrar costura" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1252,7 +1248,7 @@ msgstr "Patrón de relleno" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Patrón del material de relleno de la impresión. El relleno de línea y zigzag cambia de dirección en capas alternas, con lo que se reduce el coste del material. Los patrones de rejilla, triángulo, cúbico, de octeto, cúbico bitruncado y concéntrico se imprimen en todas las capas por completo. El relleno cúbico, cúbico bitruncado y de octeto cambian en cada capa para proporcionar una distribución de fuerza equitativa en cada dirección." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1282,12 +1278,12 @@ msgstr "Subdivisión cúbica" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Octeto" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Cúbico bitruncado" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1307,22 +1303,22 @@ msgstr "Zigzag" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Cruz" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Cruz 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Conectar líneas de relleno" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Conectar los extremos donde los patrones de relleno se juntan con la pared interior usando una línea que siga la forma de esta. Habilitar este ajuste puede lograr que el relleno se adhiera mejor a las paredes y reduce el efecto del relleno sobre la calidad de las superficies verticales. Deshabilitar este ajuste reduce la cantidad de material utilizado." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1447,32 +1443,32 @@ msgstr "No genere áreas con un relleno inferior a este (utilice forro)." #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Anchura de retirada del forro" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Anchura máxima de las áreas de forro que se deben retirar. Todas las áreas de forro inferiores a este valor desaparecerán. Esto puede contribuir a limitar el tiempo y el material empleados en imprimir el forro superior/inferior en las superficies inclinadas del modelo." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Anchura de retirada del forro superior" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "Anchura máxima de las áreas superiores de forro que se deben retirar. Todas las áreas de forro inferiores a este valor desaparecerán. Esto puede contribuir a limitar el tiempo y el material empleados en imprimir el forro superior en las superficies inclinadas del modelo." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Anchura de retirada del forro inferior" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Anchura máxima de las áreas inferiores de forro que se deben retirar. Todas las áreas de forro inferiores a este valor desaparecerán. Esto puede contribuir a limitar el tiempo y el material empleados en imprimir el forro inferior en las superficies inclinadas del modelo." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1482,27 +1478,27 @@ msgstr "Distancia de expansión del forro" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "La distancia a la que los forros se expanden en el relleno. Los valores superiores hacen que el forro se adhiera mejor al patrón de relleno y que las paredes de las capas vecinas se adhieran mejor al forro. Los valores inferiores ahorran material." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Distancia de expansión del forro superior" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "La distancia a la que los forros superiores se expanden en el relleno. Los valores superiores hacen que el forro se adhiera mejor al patrón de relleno y que las paredes de la capa superior se adhieran mejor al forro. Los valores inferiores ahorran material." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Distancia de expansión del forro inferior" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "La distancia a la que los forros inferiores se expanden en el relleno. Los valores superiores hacen que el forro se adhiera mejor al patrón de relleno y que el forro se adhiera mejor a las paredes de la capa inferior. Los valores inferiores ahorran material." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2822,7 +2818,7 @@ msgstr "Zigzag" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Cruz" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2837,32 +2833,32 @@ msgstr "Conectar los zigzags. Esto aumentará la resistencia de la estructura de #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Descomponer el soporte en pedazos" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Omitir algunas conexiones de línea de soporte para que la estructura de soporte sea más fácil de descomponer. Este ajuste es aplicable al patrón de relleno del soporte en zigzag." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Tamaño de los pedazos de soporte" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Omitir una conexión entre líneas de soporte una vez cada N milímetros a fin de lograr que la estructura de soporte resulte más fácil de descomponer." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Recuento de líneas de pedazos del soporte" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Omitir una de cada N líneas de conexión para que la estructura de soporte se descomponga fácilmente." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3404,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"La distancia horizontal entre la falda y la primera capa de la impresión.\n" -"Esta es la distancia mínima; múltiples líneas de falda se extenderán hacia el exterior a partir de esta distancia." +msgstr "La distancia horizontal entre la falda y la primera capa de la impresión.\nEsta es la distancia mínima; múltiples líneas de falda se extenderán hacia el exterior a partir de esta distancia." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3451,22 +3445,22 @@ msgstr "Imprimir solo el borde en el exterior del modelo. Esto reduce el número #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "Desplazamiento Z de la capa inicial" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "El extrusor se desplaza de la altura normal de la primera capa con este valor, el cual puede ser positivo (elevado) o negativo (bajo). Algunas clases de filamentos se adhieren mejor a la placa de impresión si se levanta ligeramente el extrusor." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Desplazamiento Z de capas en disminución" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Si no es cero, el desplazamiento Z se reduce a cero en las capas. Un valor de cero implica que el desplazamiento Z se mantiene constante en todas las capas de impresión." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3481,12 +3475,12 @@ msgstr "Si la balsa está habilitada, esta es el área adicional de la balsa alr #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Suavizado de la balsa" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Este ajuste controla la medida en que se redondean las esquinas interiores en el contorno de la balsa. Las esquinas hacia el interior se redondean en semicírculo con un radio equivalente al valor aquí indicado. Este ajuste también elimina los orificios del contorno de la balsa que sean más pequeños que dicho círculo." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4166,12 +4160,12 @@ msgstr "Suavice los contornos espiralizados para reducir la visibilidad de la co #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Extrusión relativa" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Utilizar la extrusión relativa en lugar de la extrusión absoluta. El uso de pasos de extrusión relativos permite un procesamiento posterior más sencillo del GCode. Sin embargo, no es compatible con todas las impresoras y puede causar ligeras desviaciones en la cantidad de material depositado si se compara con los pasos de extrusión absolutos. Con independencia de este ajuste, el modo de extrusión se ajustará siempre en absoluto antes de la salida de cualquier secuencia GCode." #: fdmprinter.def.json msgctxt "experimental label" @@ -4186,12 +4180,12 @@ msgstr "Experimental" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Optimizar el orden de impresión de paredes" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Optimizar el orden en el que se imprimen las paredes a fin de reducir el número de retracciones y la distancia recorrida. La mayoría de los componentes se beneficiarán si este ajuste está habilitado pero, en algunos casos, se puede tardar más, por lo que deben compararse las previsiones de tiempo de impresión con y sin optimización." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4316,22 +4310,22 @@ msgstr "Alterna la dirección en la que se imprimen las capas superiores/inferio #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Tamaño de las bolsas 3D en cruces" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "Tamaño de las bolsas en cruces del patrón de cruz 3D en las alturas en las que el patrón coincide consigo mismo." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Bolsas 3D en cruz alternantes" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Solo se aplica a mitad de los cruces en patrones de cruz 3D y alterna la ubicación de las bolsas entre las alturas a las que el patrón coincide consigo mismo." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4633,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"Distancia de un movimiento ascendente que se extrude a media velocidad.\n" -"Esto puede causar una mejor adherencia a las capas anteriores, aunque no calienta demasiado el material en esas capas. Solo se aplica a la impresión de alambre." +msgstr "Distancia de un movimiento ascendente que se extrude a media velocidad.\nEsto puede causar una mejor adherencia a las capas anteriores, aunque no calienta demasiado el material en esas capas. Solo se aplica a la impresión de alambre." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4755,12 +4747,12 @@ msgstr "Pasar por la superficie superior una vez más, pero sin extruir material #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "Planchar solo la capa superior" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "Planchar únicamente la última capa de la malla. De este modo se ahorra tiempo si las capas inferiores no requieren un acabado superficial suave." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5124,4 +5116,4 @@ msgstr "Matriz de transformación que se aplicará al modelo cuando se cargue de #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "Superposición de extrusión doble" +#~ msgstr "Superposición de extrusión doble" \ No newline at end of file diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index 06979a8d4f..74788a4c3f 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -24,7 +24,7 @@ msgstr "Laitteen asetukset" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Kerrosnäkymä" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "GCode-tiedosto" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Tulostus Doodle3D WiFi-Boxin avulla" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Tulostus Doodle3D WiFi-Boxin avulla" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Yhteyden muodostaminen Doodle3D Connectiin" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Peruuta" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Lähetetään tietoja Doodle3D Connectiin" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Tietojen lähetys Doodle3D Connectiin ei onnistu. Onko toinen työ yhä aktiivinen?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Tietoja tallennetaan Doodle3D Connectiin" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Tiedosto lähetetty Doodle3D Connectiin" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Avaa Connect..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Avaa Doodle3D Connect -verkkoliittymä" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Uuden työn aloittaminen ei onnistu, koska tulostin on varattu tai sitä #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Tulostustiedot" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "Tämä tulostin ei tue USB-tulostusta, koska se käyttää UltiGCode-tyy #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "USB-tulostus" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Uuden työn aloittaminen ei onnistu, koska tulostin ei tue USB-tulostust #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Varoitus" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "Tulostimelle ei löydetty laiteohjelmistoa (%s)." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Tulostimen laiteohjelmisto" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Tallenna siirrettävälle asemalle {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Tallennetaan siirrettävälle asemalle {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Tallennetaan" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "Ei voitu tallentaa tiedostoon {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "Ei löydetty tiedostonimeä yritettäessä kirjoittaa laitteeseen {device}." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Ei voitu tallentaa siirrettävälle asemalle {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Virhe" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Tallennettu siirrettävälle asemalle {0} nimellä {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Tiedosto tallennettu" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Poistettu {0}. Voit nyt poistaa aseman turvallisesti." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Poista laite turvallisesti" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Tulostimen käyttöoikeutta pyydetty. Hyväksy tulostimen pyyntö" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Yhteyden tila" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Yhteyden tila" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Uuden tulostustyön aloittaminen ei onnistu, koska tulostin on varattu. #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Tulostimen tila" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Lähetetään tietoja tulostimeen" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Lähetetään tietoja" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Yhdistä verkon kautta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Tätä tulostinta ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "Tämä tulostin on {count} tulostimen yhdistetyn Ultimaker 3 -ryhmän isäntä." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} on tulostanut työn {job_name}. Nouda työ ja vahvista alustan tyhjennys." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} on varattu työn {job_name} tulostamiseen. Muuta tulostimen määritys vastaamaan työtä, jotta tulostus alkaa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Uusien töiden lähettäminen (tilapäisesti) estetty, edellistä tulostustyötä lähetetään vielä." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Uuden tulostustyön lähetys ei onnistu: tätä 3D-tulostinta ei ole (vielä) määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "Lähetetään tiedostoa {file_name} ryhmään {cluster_name}" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "Lähetettiin {file_name} ryhmään {cluster_name}." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Näytä tulostustyöt" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Avaa tulostustöiden käyttöliittymän selaimessa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Tulostustyön lähetys ryhmään {cluster_name} ei onnistu." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "On suositeltavaa päivittää laiteohjelmisto säännöllisesti, jotta voidaan varmistaa, että laitteessa {machine_name} on viimeisimmät ominaisuudet. Tämä voidaan tehdä laitteessa {machine_name} (verkkoon yhdistettynä) tai USB:n kautta." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Uusi tulostimen %s laiteohjelmisto saatavilla" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Lataa" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Päivitystietoja ei löytynyt." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura kerää anonyymejä viipalointiin liittyviä tilastotietoja. Tämä #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Kerätään tietoja" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "GCode-tiedosto" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Kerrosnäkymä" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Cura ei näytä kerroksia täsmällisesti, kun rautalankatulostus on kä #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Kerrosnäkymä" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "GIF-kuva" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Viipalointi ei onnistu nykyisellä materiaalilla, sillä se ei sovellu käytettäväksi valitun laitteen tai kokoonpanon kanssa." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Viipalointi ei onnistu" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Käsitellään kerroksia" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Tiedot" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Suutin" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Selaa lisäosia" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Lisäosan tunnuksen hankkiminen epäonnistui tiedostosta {0}" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Varoitus" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Lisäosien selain" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Kiinteä näkymä" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "G-coden jäsennys" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "G-coden tiedot" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Tuki" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Helma" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Uusien paikkojen etsiminen kappaleille" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Etsitään paikkaa" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Kaikille kappaleille ei löydy paikkaa tulostustilavuudessa." #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Paikkaa ei löydy" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Tiedosto on jo olemassa" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Tiedosto {0} on jo olemassa. Haluatko varmasti kirjoittaa sen päälle?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Valittu materiaali ei sovellu käytettäväksi valitun laitteen tai koko #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Yhteensopimaton materiaali" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Kumoa materiaalin halkaisijan muutokset." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Profiilin vienti epäonnistui tiedostoon {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Profiilin vienti epäonnistui tiedostoon {0}: Kirjoitin-lisäosa ilmoitti virheestä." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Profiili viety tiedostoon {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Viennin tiedot" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Profiilin tuonti epäonnistui tiedostosta {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "Tulostustilavuuden korkeutta on vähennetty tulostusjärjestysasetuksen #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Tulostustilavuus" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Kappaleiden kertominen ja sijoittelu" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Sijoitetaan kappaletta" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Tapahtui vakava poikkeus, josta palautuminen ei onnistunut!

\n" -"

Tee virheraportti alla olevien tietojen perusteella osoitteessa http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Tapahtui vakava poikkeus, josta palautuminen ei onnistunut!

\n

Tee virheraportti alla olevien tietojen perusteella osoitteessa http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Tulosta suoraan tulostimeen verkon kautta yhdistämällä tulostin verkkoon verkkokaapelilla tai yhdistämällä tulostin Wi-Fi-verkkoon. Jos Curaa ei yhdistetä tulostimeen, GCode-tiedostot voidaan silti siirtää tulostimeen USB-aseman avulla.\n" -"\n" -"Valitse tulostin alla olevasta luettelosta:" +msgstr "Tulosta suoraan tulostimeen verkon kautta yhdistämällä tulostin verkkoon verkkokaapelilla tai yhdistämällä tulostin Wi-Fi-verkkoon. Jos Curaa ei yhdistetä tulostimeen, GCode-tiedostot voidaan silti siirtää tulostimeen USB-aseman avulla.\n\nValitse tulostin alla olevasta luettelosta:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Aktivoi määritys" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Tätä tulostinta ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "Tämä tulostin on %1 tulostimen yhdistetyn Ultimaker 3 -ryhmän isäntä" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Tulosta verkon kautta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Tulosta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Tulostetaan" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Varattu" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Valmis" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Valmistellaan" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Saatavilla" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Valmistunut: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Tyhjennä alusta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Valmistellaan tulostusta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Ei hyväksy tulostustöitä" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Avaa tulostöiden sivun oletusselaimessa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Näytä tulostustyöt" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "TULOSTINRYHMÄ" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Tulostustyöt" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Tulostetaan" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "Jonossa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "Odotetaan määrityksen muutosta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Tulostimet" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Näytä tulostimet" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Asennettu" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Lisäosan lisenssisopimus" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " lisäosa sisältää lisenssin.\nLisenssi on hyväksyttävä lisäosan asentamista varten.\nHyväksytkö alla olevat ehdot?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Hyväksy" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Hylkää" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Olet mukauttanut profiilin asetuksia.\n" -"Haluatko säilyttää vai hylätä nämä asetukset?" +msgstr "Olet mukauttanut profiilin asetuksia.\nHaluatko säilyttää vai hylätä nämä asetukset?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Tuo materiaali" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Materiaalin tuominen epäonnistui: %1: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Materiaalin tuominen onnistui: %1" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Vie materiaali" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Materiaalin vieminen epäonnistui kohteeseen %1: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Materiaalin vieminen onnistui kohteeseen %1" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön kanssa.\n" -"Cura hyödyntää seuraavia avoimeen lähdekoodiin perustuvia projekteja:" +msgstr "Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön kanssa.\nCura hyödyntää seuraavia avoimeen lähdekoodiin perustuvia projekteja:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Jotkut asetusten ja ohitusten arvot eroavat profiiliin tallennetuista arvoista.\n" -"\n" -"Avaa profiilin hallinta napsauttamalla." +msgstr "Jotkut asetusten ja ohitusten arvot eroavat profiiliin tallennetuista arvoista.\n\nAvaa profiilin hallinta napsauttamalla." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Jotkin piilotetut asetukset käyttävät arvoja, jotka eroavat normaaleista lasketuista arvoista.\n" -"\n" -"Tee asetuksista näkyviä napsauttamalla." +msgstr "Jotkin piilotetut asetukset käyttävät arvoja, jotka eroavat normaaleista lasketuista arvoista.\n\nTee asetuksista näkyviä napsauttamalla." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Tämän asetuksen arvo eroaa profiilin arvosta.\n" -"\n" -"Palauta profiilin arvo napsauttamalla." +msgstr "Tämän asetuksen arvo eroaa profiilin arvosta.\n\nPalauta profiilin arvo napsauttamalla." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Tämä asetus on normaalisti laskettu, mutta sillä on tällä hetkellä absoluuttinen arvo.\n" -"\n" -"Palauta laskettu arvo napsauttamalla." +msgstr "Tämä asetus on normaalisti laskettu, mutta sillä on tällä hetkellä absoluuttinen arvo.\n\nPalauta laskettu arvo napsauttamalla." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Tulostuksen asennus ei käytössä\n" -"G-code-tiedostoja ei voida muokata" +msgstr "Tulostuksen asennus ei käytössä\nG-code-tiedostoja ei voida muokata" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00 h 00 min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Aikatiedot" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Tulostusaika" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1 m / ~ %2 g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1 m / ~ %2 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Ei tulostinta yhdistettynä" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Suulake" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Kuuman pään kohdelämpötila. Kuuma pää lämpenee tai viilenee kohti tätä lämpötilaa. Jos asetus on 0, kuuman pään lämmitys sammutetaan." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Valmistele" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Valvo" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Kerroksen korkeus" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Tulostusnopeus" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Hitaammin" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Nopeammin" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Asteittainen täyttö lisää täytön tiheyttä vähitellen yläosaa ko #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Ota asteittainen käyttöön" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Materiaali" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Tarkista materiaalin yhteensopivuus" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "Jumala-tila" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne Wi-Fi-yhteyden kautta Doodle3D WiFi-Boxiin." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "UM3-verkkoyhteys" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "UM3-verkkoyhteys (klusteri)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Tarkistaa laiteohjelmistopäivitykset." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Laiteohjelmiston päivitysten tarkistus" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "Päivitys versiosta 2.5 versioon 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Päivittää kokoonpanon versiosta Cura 2.7 versioon Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Päivitys versiosta 2.7 versioon 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4973,4 +4949,4 @@ msgstr "Cura-profiilin lukija" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Tulosta uudelleen" +#~ msgstr "Tulosta uudelleen" \ No newline at end of file diff --git a/resources/i18n/fi_FI/fdmprinter.def.json.po b/resources/i18n/fi_FI/fdmprinter.def.json.po index c2277a7d66..fb73e2e39d 100644 --- a/resources/i18n/fi_FI/fdmprinter.def.json.po +++ b/resources/i18n/fi_FI/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -56,9 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"GCode-komennot, jotka suoritetaan aivan alussa – eroteltuina merkillä \n" -"." +msgstr "GCode-komennot, jotka suoritetaan aivan alussa – eroteltuina merkillä \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,9 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"GCode-komennot, jotka suoritetaan aivan lopussa – eroteltuina merkillä \n" -"." +msgstr "GCode-komennot, jotka suoritetaan aivan lopussa – eroteltuina merkillä \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -1122,7 +1118,7 @@ msgstr "Satunnainen" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "Terävin kulma" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1147,32 +1143,32 @@ msgstr "Y-koordinaatti kohdalle, jonka läheltä aloitetaan kunkin kerroksen osu #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Saumakulmien asetus" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Määritä, vaikuttavatko mallin ulkolinjan kulmat sauman sijaintiin. Ei mitään tarkoittaa, että kulmilla ei ole vaikutusta sauman sijaintiin. Piilota sauma -valinnalla sauman sijainti sisäkulmassa on todennäköisempää. Paljasta sauma -valinnalla sauman sijainti ulkokulmassa on todennäköisempää. Piilota tai paljasta sauma -valinnalla sauman sijainti sisä- tai ulkokulmassa on todennäköisempää." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Ei mitään" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Piilota sauma" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Paljasta sauma" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Piilota tai paljasta sauma" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1252,7 +1248,7 @@ msgstr "Täyttökuvio" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Tulostettava täyttömateriaalin kuvio. Linja- ja siksak-täytöt vaihtavat suuntaa kerrosten välillä, mikä vähentää materiaalikustannuksia. Ristikko-, kolmio-, kuutio-, oktetti-, neljänneskuutio- ja samankeskinen-kuviot tulostetaan kokonaisuudessaan kuhunkin kerrokseen. Kuutio-, neljänneskuutio- ja oktettitäytöt muuttuvat kerroksittain, jotta vahvuus jakautuu tasaisemmin kussakin suunnassa." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1282,12 +1278,12 @@ msgstr "Kuution alajako" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Oktetti" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Neljänneskuutio" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1307,22 +1303,22 @@ msgstr "Siksak" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Risti" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Risti 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Yhdistä täyttölinjat" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Yhdistä päät, joissa täyttökuvio kohtaa sisäseinämän käyttämällä linjoja, jotka seuraavat sisäseinämän muotoa. Tämän asetuksen ottaminen käyttöön voi saada täytön tarttumaan seinämiin paremmin ja vähentää täytön vaikutusta pystypintojen laatuun. Tämän asetuksen poistaminen käytöstä vähentää käytettävän materiaalin määrää." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1447,32 +1443,32 @@ msgstr "Älä muodosta tätä pienempiä täyttöalueita (käytä sen sijaan pin #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Pintakalvon poistoleveys" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Suurin poistettavien pintakalvoalueiden leveys. Kaikki tätä arvoa pienemmät pintakalvoalueet poistuvat. Tästä voi olla apua mallin kaltevien pintojen ylä-/alapintakalvon tulostukseen käytettävän ajan ja materiaalin rajoittamisessa." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Yläpintakalvon poistoleveys" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "Suurin poistettavien yläpintakalvoalueiden leveys. Kaikki tätä arvoa pienemmät pintakalvoalueet poistuvat. Tästä voi olla apua mallin kaltevien pintojen yläpintakalvon tulostukseen käytettävän ajan ja materiaalin rajoittamisessa." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Alapintakalvon poistoleveys" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Suurin poistettavien alapintakalvoalueiden leveys. Kaikki tätä arvoa pienemmät pintakalvoalueet poistuvat. Tästä voi olla apua mallin kaltevien pintojen alapintakalvon tulostukseen käytettävän ajan ja materiaalin rajoittamisessa." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1482,27 +1478,27 @@ msgstr "Pintakalvon laajennuksen etäisyys" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Etäisyys, jonka verran pintakalvot laajentuvat täyttöön. Suuremmat arvot saavat pintakalvon kiinnittymään paremmin täyttökuvioon ja viereisten kerrosten seinämät tarttumaan paremmin pintakalvoon. Pienemmät arvot vähentävät käytettävän materiaalin määrää." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Yläpintakalvon laajennuksen etäisyys" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Etäisyys, jonka verran yläpintakalvot laajentuvat täyttöön. Suuremmat arvot saavat pintakalvon kiinnittymään paremmin täyttökuvioon ja yllä olevan kerroksen seinämät tarttumaan paremmin pintakalvoon. Pienemmät arvot vähentävät käytettävän materiaalin määrää." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Alapintakalvon laajennuksen etäisyys" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "Etäisyys, jonka verran alapintakalvot laajentuvat täyttöön. Suuremmat arvot saavat pintakalvon kiinnittymään paremmin täyttökuvioon ja tarttumaan paremmin alla olevan kerroksen seinämiin. Pienemmät arvot vähentävät käytettävän materiaalin määrää." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2822,7 +2818,7 @@ msgstr "Siksak" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Risti" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2837,32 +2833,32 @@ msgstr "Yhdistä siksakit. Tämä lisää siksak-tukirakenteen lujuutta." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Riko tuki lohkoihin" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Ohita jotkin tukilinjojen yhdistämiset, jotta tukirakenne on helpompi rikkoa. Tämä asetus soveltuu siksak-tukitäyttökuvioon." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Tukilohkon koko" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Jätä tukilinjojen välinen yhdistäminen pois joka N. millimetri, jotta tukirakenne on helpompi rikkoa." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Tukilohkolinjaluku" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Ohita joka N. yhdistämislinja, jotta tukirakenne on helpompi rikkoa." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3404,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"Vaakasuora etäisyys helman ja tulosteen ensimmäisen kerroksen välillä.\n" -"Tämä on minimietäisyys; useampia helmalinjoja käytettäessä ne ulottuvat tämän etäisyyden ulkopuolelle." +msgstr "Vaakasuora etäisyys helman ja tulosteen ensimmäisen kerroksen välillä.\nTämä on minimietäisyys; useampia helmalinjoja käytettäessä ne ulottuvat tämän etäisyyden ulkopuolelle." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3451,22 +3445,22 @@ msgstr "Tulostaa reunuksen vain mallin ulkopuolelle. Tämä vähentää myöhemm #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "Alkukerroksen Z-siirtymä" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "Suulaketta siirretään ensimmäisen kerroksen normaalista korkeudesta tällä määrällä. Se voi olla positiivinen (nostettu) tai negatiivinen (laskettu). Jotkin tulostuslankatyypit tarttuvat alustaan paremmin, jos suulaketta nostetaan hieman." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Z-siirtymän kapenevat kerrokset" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Kun tämä ei ole nolla, Z-siirtymä pienenee nollaan niin monen kerroksen matkalla. Kun arvo on 0, Z-siirtymä pysyy vakiona kaikille tulostuksen kerroksille." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3481,12 +3475,12 @@ msgstr "Jos pohjaristikko on otettu käyttöön, tämä on ylimääräinen risti #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Pohjaristikon tasoitus" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Tällä asetuksella säädetään, kuinka paljon pohjaristikon ulkolinjan sisäkulmia pyöristetään. Sisäpuoliset kulmat pyöristetään puoliympyräksi, jonka säde on yhtä suuri kuin tässä annettu arvo. Asetuksella myös poistetaan pohjaristikon ulkolinjan reiät, jotka ovat pienempiä kuin tällainen ympyrä." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4166,12 +4160,12 @@ msgstr "Vähennä Z-sauman näkyvyyttä tasoittamalla kierukoidut ääriviivat ( #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Suhteellinen pursotus" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Käytä suhteellista pursotusta absoluuttisen pursotuksen sijaan. Suhteellisten E-askelten käyttö helpottaa Gcoden jälkikäsittelyä. Kaikki tulostimet eivät kuitenkaan tue sitä, ja se saattaa aiheuttaa hyvin vähäisiä poikkeamia materiaalin määrässä absoluuttisiin E-askeliin verrattuna. Tästä asetuksesta riippumatta pursotustila on aina absoluuttinen, ennen kuin mitään Gcode-komentosarjaa tuotetaan." #: fdmprinter.def.json msgctxt "experimental label" @@ -4186,12 +4180,12 @@ msgstr "kokeellinen!" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Optimoi seinämien tulostusjärjestys" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Optimoi seinämien tulostusjärjestys takaisinvetojen ja kuljetun etäisyyden vähentämiseksi. Useimmat osat hyötyvät tämän asetuksen käytöstä, mutta joissakin saattaa kestää kauemmin, joten vertaa tulostusajan arvioita optimointia käytettäessä ja ilman sitä." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4316,22 +4310,22 @@ msgstr "Muuttaa ylä-/alakerrosten tulostussuuntaa. Normaalisti ne tulostetaan v #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Risti 3D:n taskujen koko" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "Taskujen koko nelisuuntaisissa risteyksissä risti 3D -kuviossa korkeuksissa, joissa kuvio koskettaa itseään." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Vuoroittaiset risti 3D -taskut" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Käytä taskuja vain puolessa nelisuuntaisista risteyksistä risti 3D -kuviossa ja vuorottele taskujen sijainnit sellaisten korkeuksien välillä, joissa kuvio koskettaa itseään." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4633,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"Puolella nopeudella pursotetun nousuliikkeen etäisyys.\n" -"Se voi parantaa tarttuvuutta edellisiin kerroksiin kuumentamatta materiaalia liikaa kyseisissä kerroksissa. Koskee vain rautalankamallin tulostusta." +msgstr "Puolella nopeudella pursotetun nousuliikkeen etäisyys.\nSe voi parantaa tarttuvuutta edellisiin kerroksiin kuumentamatta materiaalia liikaa kyseisissä kerroksissa. Koskee vain rautalankamallin tulostusta." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4755,12 +4747,12 @@ msgstr "Yläpinnan läpikäynti yhden ylimääräisen kerran ilman materiaalin p #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "Silitä vain korkein kerros" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "Suorita silitys vain verkon viimeisessä kerroksessa. Tämä säästää aikaa, jos alemmat kerrokset eivät edellytä sileää pintaviimeistelyä." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5124,4 +5116,4 @@ msgstr "Mallissa käytettävä muunnosmatriisi, kun malli ladataan tiedostosta." #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "Kaksoispursotuksen limitys" +#~ msgstr "Kaksoispursotuksen limitys" \ No newline at end of file diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 21dd2e9882..ffdff5e74f 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.0\n" +"Project-Id-Version: Cura 2.7\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -24,7 +24,7 @@ msgstr "Paramètres de la machine" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Visualisation par rayons X" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "Fichier GCode" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Imprimer avec Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Imprimer avec Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Connexion avec Doodle3D Connecter..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Annuler" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Envoi de données vers Doodle3D Connecter..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Impossible d'envoyer les données à Doodle3D Connect. Une autre tâche est-elle toujours active ?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Enregistrement de données dans Doodle3D Connecter..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Fichier envoyé vers Doodle3D Connecter" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Ouvrir Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Ouvrir l'interface web Doodle3D Connecter" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Impossible de démarrer une nouvelle tâche car l'imprimante est occupé #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Imprimer les détails" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "L'imprimante ne prend pas en charge l'impression par USB car elle utilis #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "Impression par USB" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Impossible de démarrer une nouvelle tâche car l'imprimante ne prend pa #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Avertissement" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "Impossible de trouver le firmware requis pour l'imprimante sur %s." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Firmware de l'imprimante" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Enregistrer sur un lecteur amovible {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Enregistrement sur le lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Enregistrement..." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "Impossible d'enregistrer {0} : {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "Impossible de trouver un nom de fichier lors d'une tentative d'écriture sur {device}." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Impossible d'enregistrer sur le lecteur {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Erreur" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Enregistré sur le lecteur amovible {0} sous {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Fichier enregistré" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Lecteur {0} éjecté. Vous pouvez maintenant le retirer en tout sécurit #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Retirez le lecteur en toute sécurité" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Accès à l'imprimante demandé. Veuillez approuver la demande sur l'imp #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Statut de la connexion" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Statut de la connexion" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Impossible de démarrer une nouvelle tâche d'impression car l'imprimant #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Statut de l'imprimante" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Envoi des données à l'imprimante" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Envoi des données..." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Connecter via le réseau" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "L'imprimante n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "L'imprimante n'est pas configurée pour héberger un groupe de {count} imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} a terminé d'imprimer '{job_name}'. Veuillez enlever l'impression et confirmer avoir débarrassé le plateau." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} est réservé pour imprimer '{job_name}'. Veuillez modifier la configuration de l'imprimante pour qu'elle corresponde à la tâche et commence l'impression." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Envoi de nouvelles tâches (temporairement) bloqué, envoi de la tâche d'impression précédente en cours." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Impossible d'envoyer une nouvelle tâche d'impression : cette imprimante 3D n'est pas (encore) configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "Envoi de {file_name} vers le groupe {cluster_name}..." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "{file_name} envoyé vers le groupe {cluster_name}." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Afficher les tâches d'impression" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Ouvre l'interface d'impression des tâches dans votre navigateur." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Impossible d'envoyer la tâche d'impression vers le groupe {cluster_name}." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Pour s'assurer que votre {machine_name} est pourvue des dernières fonctionnalités, il est recommandé de mettre régulièrement à jour le firmware. Cela peut se faire sur la {machine_name} (lorsque connectée au réseau) ou via USB." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Nouveau firmware %s disponible" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Télécharger" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Impossible d'accéder aux informations de mise à jour." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura collecte des statistiques anonymes sur le découpage. Vous pouvez d #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Collecte des données..." #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "Fichier GCode" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Vue en couches" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Cura n'affiche pas les couches avec précision lorsque l'impression fila #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Vue en couches" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "Image GIF" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Impossible de découper le matériau actuel, car celui-ci est incompatible avec la machine ou la configuration sélectionnée." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Impossible de découper" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Traitement des couches" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Informations" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Buse" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Parcourir les plug-ins" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Échec de l'obtention de l'identifiant du plug-in au départ de {0}" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Avertissement" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Navigateur de plug-ins" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Vue solide" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "Analyse du G-Code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "Détails G-Code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Support" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Jupe" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Recherche d'un nouvel emplacement pour les objets" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Recherche d'emplacement..." #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Impossible de trouver un emplacement dans le volume d'impression pour to #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Impossible de trouver un emplacement" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Le fichier existe déjà" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Le fichier {0} existe déjà. Êtes-vous sûr de vouloir le remplacer ?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Le matériau sélectionné est incompatible avec la machine ou la config #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Matériau incompatible" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Annuler la modification du diamètre du matériau." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Échec de l'exportation du profil vers {0} : {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Échec de l'exportation du profil vers {0} : le plug-in du générateur a rapporté une erreur." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Profil exporté vers {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Exporter les détails" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Échec de l'importation du profil depuis le fichier {0} : {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "La hauteur du volume d'impression a été réduite en raison de la valeu #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Volume d'impression" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Multiplication et placement d'objets" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Placement de l'objet..." #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Une erreur fatale que nous ne pouvons résoudre s'est produite !

\n" -"

Veuillez utiliser les informations ci-dessous pour envoyer un rapport d'erreur à http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Une erreur fatale que nous ne pouvons résoudre s'est produite !

\n

Veuillez utiliser les informations ci-dessous pour envoyer un rapport d'erreur à http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n" -"\n" -"Sélectionnez votre imprimante dans la liste ci-dessous :" +msgstr "Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n\nSélectionnez votre imprimante dans la liste ci-dessous :" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Activer la configuration" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Cette imprimante n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "L'imprimante n'est pas configurée pour héberger un groupe de %1 imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Imprimer sur le réseau" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Imprimer" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Impression..." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Réservée" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Terminé" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Préparation..." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Disponible" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Finalisé sur : " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Enlever les objets du plateau" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Préparation de l'impression..." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Non acceptation des tâches d'impression" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Ouvre la page des tâches d'impression avec votre navigateur web." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Afficher les tâches d'impression" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "GROUPE D'IMPRIMANTES" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Imprimer les tâches" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Impression..." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "Mis en file d'attente" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "En attente de modification de configuration" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Imprimantes" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Afficher les imprimantes" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Installé" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Plug-in d'accord de licence" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " le plug-in contient une licence.\nVous devez approuver cette licence pour installer ce plug-in.\nAcceptez-vous les clauses ci-dessous ?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Accepter" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Refuser" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Vous avez personnalisé certains paramètres du profil.\n" -"Souhaitez-vous conserver ces changements, ou les annuler ?" +msgstr "Vous avez personnalisé certains paramètres du profil.\nSouhaitez-vous conserver ces changements, ou les annuler ?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Importer un matériau" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Impossible d'importer le matériau %1 : %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Matériau %1 importé avec succès" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Exporter un matériau" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Échec de l'exportation de matériau vers %1 : %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Matériau exporté avec succès vers %1" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\n" -"Cura est fier d'utiliser les projets open source suivants :" +msgstr "Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\nCura est fier d'utiliser les projets open source suivants :" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Certaines valeurs de paramètre / forçage sont différentes des valeurs enregistrées dans le profil. \n" -"\n" -"Cliquez pour ouvrir le gestionnaire de profils." +msgstr "Certaines valeurs de paramètre / forçage sont différentes des valeurs enregistrées dans le profil. \n\nCliquez pour ouvrir le gestionnaire de profils." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Certains paramètres masqués utilisent des valeurs différentes de leur valeur normalement calculée.\n" -"\n" -"Cliquez pour rendre ces paramètres visibles." +msgstr "Certains paramètres masqués utilisent des valeurs différentes de leur valeur normalement calculée.\n\nCliquez pour rendre ces paramètres visibles." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Ce paramètre possède une valeur qui est différente du profil.\n" -"\n" -"Cliquez pour restaurer la valeur du profil." +msgstr "Ce paramètre possède une valeur qui est différente du profil.\n\nCliquez pour restaurer la valeur du profil." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Ce paramètre est normalement calculé mais il possède actuellement une valeur absolue définie.\n" -"\n" -"Cliquez pour restaurer la valeur calculée." +msgstr "Ce paramètre est normalement calculé mais il possède actuellement une valeur absolue définie.\n\nCliquez pour restaurer la valeur calculée." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Configuration de l'impression désactivée\n" -"Les fichiers G-Code ne peuvent pas être modifiés" +msgstr "Configuration de l'impression désactivée\nLes fichiers G-Code ne peuvent pas être modifiés" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00 h 00 min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Information horaire" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Imprimer l'heure" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Aucune imprimante n'est connectée" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Extrudeuse" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Température cible de l'extrémité chauffante. L'extrémité chauffante sera chauffée ou refroidie pour tendre vers cette température. Si la valeur est 0, le chauffage de l'extrémité chauffante sera coupé." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Préparer" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Surveiller" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Hauteur de la couche" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Vitesse d’impression" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Ralentir" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Accélérer" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Un remplissage graduel augmentera la quantité de remplissage vers le ha #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Permettre le remplissage graduel" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Matériau" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Vérifier la compatibilité du matériau" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "Mode God" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "Accepte les G-Code et les envoie par Wi-Fi à une box WiFi Doodle3D." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Box WiFi Doodle3D" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "Connexion au réseau UM3" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "Connexion au réseau UM3 (cluster)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Vérifie les mises à jour du firmware." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Vérificateur des mises à jour du firmware" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "Mise à niveau de 2.5 vers 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Met à niveau les configurations, de Cura 2.7 vers Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Mise à niveau de version, de 2.7 vers 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4972,4 +4948,4 @@ msgstr "Lecteur de profil Cura" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Imprimer à nouveau" +#~ msgstr "Imprimer à nouveau" \ No newline at end of file diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index 13df6ba204..ebad6779de 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.0\n" +"Project-Id-Version: Cura 2.7\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -56,9 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"Commandes Gcode à exécuter au tout début, séparées par \n" -"." +msgstr "Commandes Gcode à exécuter au tout début, séparées par \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,9 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"Commandes Gcode à exécuter à la toute fin, séparées par \n" -"." +msgstr "Commandes Gcode à exécuter à la toute fin, séparées par \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -1122,7 +1118,7 @@ msgstr "Aléatoire" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "Angle le plus aigu" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1147,32 +1143,32 @@ msgstr "Coordonnée Y de la position près de laquelle démarrer l'impression de #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Préférence de jointure d'angle" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Vérifie si les angles du contour du modèle influencent l'emplacement de la jointure. « Aucune » signifie que les angles n'ont aucune influence sur l'emplacement de la jointure. « Masquer jointure » génère généralement le positionnement de la jointure sur un angle intérieur. « Exposer jointure » génère généralement le positionnement de la jointure sur un angle extérieur. « Masquer ou exposer jointure » génère généralement le positionnement de la jointure sur un angle intérieur ou extérieur." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Aucun" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Masquer jointure" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Exposer jointure" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Masquer ou exposer jointure" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1252,7 +1248,7 @@ msgstr "Motif de remplissage" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Le motif du matériau de remplissage de l'impression. La ligne et le remplissage en zigzag changent de sens à chaque alternance de couche, réduisant ainsi les coûts matériels. Les motifs en grille, en triangle, octaédriques, quart cubiques et concentriques sont entièrement imprimés sur chaque couche. Le remplissage cubique, quart cubique et octaédrique change à chaque couche afin d'offrir une répartition plus égale de la solidité dans chaque direction." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1282,12 +1278,12 @@ msgstr "Subdivision cubique" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Octaédrique" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Quart cubique" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1307,22 +1303,22 @@ msgstr "Zig Zag" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Entrecroisé" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Entrecroisé 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Relier les lignes de remplissage" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Relie les extrémités où le motif de remplissage touche la paroi interne, à l'aide de lignes épousant la forme de la paroi interne. Activer ce paramètre peut faire mieux coller le remplissage aux parois, et réduit les effets du remplissage sur la qualité des surfaces verticales. Désactiver ce paramètre diminue la quantité de matière utilisée." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1447,32 +1443,32 @@ msgstr "Ne pas générer de zones de remplissage plus petites que cela (utiliser #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Largeur de retrait de la couche extérieure" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "La plus grande largeur des zones de la couche extérieure à faire disparaître. Toute zone de la couche extérieure plus étroite que cette valeur disparaîtra. Ceci peut aider à limiter le temps et la quantité de matière utilisés pour imprimer la couche extérieure supérieure/inférieure sur les surfaces obliques du modèle." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Largeur de retrait de la couche extérieure supérieure" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "La plus grande largeur des zones de la couche extérieure supérieure à faire disparaître. Toute zone de la couche extérieure plus étroite que cette valeur disparaîtra. Ceci peut aider à limiter le temps et la quantité de matière utilisés pour imprimer la couche extérieure supérieure sur les surfaces obliques du modèle." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Largeur de retrait de la couche extérieure inférieure" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "La plus grande largeur des zones de la couche extérieure inférieure à faire disparaître. Toute zone de la couche extérieure plus étroite que cette valeur disparaîtra. Ceci peut aider à limiter le temps et la quantité de matière utilisés pour imprimer la couche extérieure inférieure sur les surfaces obliques du modèle." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1482,27 +1478,27 @@ msgstr "Distance d'expansion de la couche extérieure" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "La distance à laquelle les couches extérieures s'étendent à l'intérieur du remplissage. Des valeurs élevées lient mieux la couche extérieure au motif de remplissage et font mieux adhérer à cette couche les parois des couches voisines. Des valeurs faibles économisent la quantité de matériau utilisé." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Distance d'expansion de la couche extérieure supérieure" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "La distance à laquelle les couches extérieures supérieures s'étendent à l'intérieur du remplissage. Des valeurs élevées lient mieux la couche extérieure au motif de remplissage et font mieux adhérer à cette couche les parois de la couche supérieure. Des valeurs faibles économisent la quantité de matériau utilisé." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Distance d'expansion de la couche extérieure inférieure" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "La distance à laquelle les couches extérieures inférieures s'étendent à l'intérieur du remplissage. Des valeurs élevées lient mieux la couche extérieure au motif de remplissage et font mieux adhérer à cette couche les parois de la couche inférieure. Des valeurs faibles économisent la quantité de matériau utilisé." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2822,7 +2818,7 @@ msgstr "Zig Zag" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Entrecroisé" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2837,32 +2833,32 @@ msgstr "Relie les zigzags. Cela augmente la solidité des supports en zigzag." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Démantèlement du support en morceaux" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Ignorer certaines connexions de ligne du support pour rendre la structure de support plus facile à casser. Ce paramètre s'applique au motif de remplissage du support en zigzag." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Taille de morceaux du support" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Ignorer une connexion entre lignes du support tous les N millimètres, pour rendre la structure de support plus facile à casser." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Comptage des lignes de morceaux du support" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Ignorer une ligne de connexion sur N pour rendre la structure de support plus facile à casser." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3404,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"La distance horizontale entre la jupe et la première couche de l’impression.\n" -"Il s’agit de la distance minimale séparant la jupe de l’objet. Si la jupe a d’autres lignes, celles-ci s’étendront vers l’extérieur." +msgstr "La distance horizontale entre la jupe et la première couche de l’impression.\nIl s’agit de la distance minimale séparant la jupe de l’objet. Si la jupe a d’autres lignes, celles-ci s’étendront vers l’extérieur." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3451,22 +3445,22 @@ msgstr "Imprimer uniquement la bordure sur l'extérieur du modèle. Cela réduit #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "Décalage en Z de la couche initiale" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "L'extrudeuse est décalée de cette valeur à partir de la hauteur normale de la première couche. Elle peut être positive (relevée) ou négative (abaissée). Certains types de filament adhèrent mieux au plateau si l'extrudeuse est légèrement relevée." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Couches biseautées de décalage en Z" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Si non nul, le décalage en Z est ramené à 0 sur un grand nombre de couches. Une valeur égale à 0 signifie que le décalage en Z reste constant pour toutes les couches de l'impression." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3481,12 +3475,12 @@ msgstr "Si vous avez appliqué un radeau, alors il s’agit de l’espace de rad #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Lissage de radeau" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Ce paramètre définit combien d'angles intérieurs sont arrondis dans le contour de radeau. Les angles internes sont arrondis en un demi-cercle avec un rayon égal à la valeur indiquée ici. Ce paramètre élimine également les cavités dans le contour de radeau qui sont d'une taille inférieure à ce cercle." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4166,12 +4160,12 @@ msgstr "Lisser les contours spiralisés pour réduire la visibilité de la joint #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Extrusion relative" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Utiliser l'extrusion relative au lieu de l'extrusion absolue. L'utilisation de pas E relatifs facilite le post-traitement du G-code. Toutefois, elle n'est pas supportée par toutes les imprimantes et peut occasionner de très légers écarts dans la quantité de matériau déposé, en comparaison avec des pas E absolus. Indépendamment de ce paramètre, le mode d'extrusion sera défini par défaut comme absolu avant qu'un quelconque script de G-code soit produit." #: fdmprinter.def.json msgctxt "experimental label" @@ -4186,12 +4180,12 @@ msgstr "expérimental !" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Optimiser l'ordre d'impression des parois" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Optimiser l'ordre dans lequel des parois sont imprimées de manière à réduire le nombre de retraits et les distances parcourues. La plupart des pièces bénéficieront de cette possibilité, mais certaines peuvent en fait prendre plus de temps à l'impression ; veuillez dès lors comparer les estimations de durée d'impression avec et sans optimisation." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4316,22 +4310,22 @@ msgstr "Alterne le sens d'impression des couches du dessus/dessous. Elles sont g #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Taille de poches entrecroisées 3D" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "La taille de poches aux croisements à quatre branches dans le motif entrecroisé 3D, à des hauteurs où le motif se touche lui-même." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Poches entrecroisées 3D alternatives" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Ne réalise des poches que sur la moitié des croisements à quatre branches dans le motif entrecroisé 3D et alterne l'emplacement des poches entre les hauteurs où le motif se touche lui-même." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4633,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"Distance d’un déplacement ascendant qui est extrudé à mi-vitesse.\n" -"Cela peut permettre une meilleure adhérence aux couches précédentes sans surchauffer le matériau dans ces couches. Uniquement applicable à l'impression filaire." +msgstr "Distance d’un déplacement ascendant qui est extrudé à mi-vitesse.\nCela peut permettre une meilleure adhérence aux couches précédentes sans surchauffer le matériau dans ces couches. Uniquement applicable à l'impression filaire." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4755,12 +4747,12 @@ msgstr "Aller au-dessus de la surface supérieure une fois supplémentaire, mais #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "N'étirer que la couche supérieure" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "N'exécute un étirage que sur l'ultime couche du maillage. Ceci économise du temps si les couches inférieures ne nécessitent pas de fini lisse de surface." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5124,4 +5116,4 @@ msgstr "Matrice de transformation à appliquer au modèle lors de son chargement #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "Chevauchement de double extrusion" +#~ msgstr "Chevauchement de double extrusion" \ No newline at end of file diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 98c7db5fcc..aca74f4611 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -24,7 +24,7 @@ msgstr "Impostazioni macchina" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Vista ai raggi X" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "File GCode" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Stampa con Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Stampa con Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Collegamento a Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Annulla" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Invio dati a Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Impossibile inviare dati a Doodle3D Connect. C'è un altro processo in corso?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Memorizzazione dati su Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "File inviato a Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Apri Connect.." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Apri interfaccia web Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante è #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Dettagli stampa" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "Questa stampante non supporta la stampa tramite USB in quanto utilizza l #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "Stampa USB" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante non #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Avvertenza" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "Impossibile trovare il firmware richiesto per la stampante a %s." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Firmware stampante" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Salva su unità rimovibile {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Salvataggio su unità rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Salvataggio in corso" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "Impossibile salvare {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "Impossibile trovare un nome file durante il tentativo di scrittura su {device}." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Impossibile salvare su unità rimovibile {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Errore" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Salvato su unità rimovibile {0} come {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "File salvato" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Espulso {0}. È ora possibile rimuovere in modo sicuro l'unità." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Rimozione sicura dell'hardware" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Richiesto accesso alla stampante. Approvare la richiesta sulla stampante #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Stato di connessione" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Stato di connessione" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante è #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Stato stampante" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Invio dati alla stampante in corso" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Invio dati" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Collega tramite rete" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Questa stampante non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "Questa stampante fa da host per un gruppo di {count} stampanti Ultimaker 3 connesse." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} ha terminato la stampa '{job_name}'. Raccogliere la stampa e confermare la liberazione del piano di stampa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} è riservata per la stampa di '{job_name}'. Modificare la configurazione della stampante in modo che corrisponda al lavoro da eseguire per avviare il processo di stampa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Invio nuovi processi (temporaneamente) bloccato, invio in corso precedente processo di stampa." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Impossibile inviare nuovo processo di stampa: questa stampante 3D non è (ancora) configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "Invio {file_name} a gruppo {cluster_name}" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "Inviato {file_name} a gruppo {cluster_name}." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Mostra processi di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Apre l'interfaccia processi di stampa sul browser." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Impossibile inviare processo di stampa a gruppo {cluster_name}." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Per verificare che la vostra {machine_name} sia dotata delle funzionalità più recenti, si consiglia di aggiornare periodicamente il firmware. Questo può essere fatto sulla {machine_name} (quando connessa alla rete) o via USB." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Nuovo firmware %s disponibile" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Download" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Non è possibile accedere alle informazioni di aggiornamento." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura acquisisce dati statistici elaborati in forma anonima. L'acquisizio #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Acquisizione dati" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "File G-Code" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Visualizzazione strato" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Cura non visualizza in modo accurato gli strati se la funzione Wire Prin #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Visualizzazione strato" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "Immagine GIF" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Impossibile eseguire il sezionamento con il materiale corrente in quanto incompatibile con la macchina o la configurazione selezionata." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Sezionamento impossibile" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Elaborazione dei livelli" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Informazioni" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Ugello" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Sfoglia plugin" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Impossibile ottenere ID plugin da {0}" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Avvertenza" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Browser plugin" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Visualizzazione compatta" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "Parsing codice G" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "Dettagli codice G" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Supporto" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Ricerca nuova posizione per gli oggetti" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Ricerca posizione" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Impossibile individuare una posizione nel volume di stampa per tutti gli #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Impossibile individuare posizione" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Il file esiste già" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Il file {0} esiste già. Sei sicuro di volerlo sovrascrivere?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Il materiale selezionato è incompatibile con la macchina o la configura #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Materiale incompatibile" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Annulla modifica del diametro del materiale." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Impossibile esportare il profilo su {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Impossibile esportare il profilo su {0}: Rilevata anomalia durante scrittura plugin." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Profilo esportato su {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Dettagli esportazione" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Impossibile importare il profilo da {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "L’altezza del volume di stampa è stata ridotta a causa del valore del #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Volume di stampa" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Moltiplicazione e collocazione degli oggetti" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Sistemazione oggetto" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Si è verificata un'eccezione fatale che non stato possibile superare!

\n" -"

Utilizzare le informazioni sotto riportate per inviare un rapporto sull'errore a http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Si è verificata un'eccezione fatale che non stato possibile superare!

\n

Utilizzare le informazioni sotto riportate per inviare un rapporto sull'errore a http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n" -"\n" -"Selezionare la stampante dall’elenco seguente:" +msgstr "Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n\nSelezionare la stampante dall’elenco seguente:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Attiva la configurazione" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Questa stampante non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "Questa stampante fa da host per un gruppo di %1 stampanti Ultimaker 3 connesse" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Stampa sulla rete" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Stampa in corso" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Riservato" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Terminato" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Preparazione in corso" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Disponibile" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Completato su: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Cancellare piano di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Preparazione della stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Mancata accettazione processi di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Apre la pagina processi di stampa con il browser web predefinito." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Visualizza processi di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "GRUPPO STAMPANTI" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Processi di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Stampa in corso" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "Coda di stampa" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "In attesa di modifica configurazione" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Stampanti" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Visualizza stampanti" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Installa" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Accordo di licenza plugin" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " I plugin contengono una licenza.\nÈ necessario accettare questa licenza per poter installare il plugin.\nAccetti i termini sotto riportati?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Accetto" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Non accetto" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Sono state personalizzate alcune impostazioni del profilo.\n" -"Mantenere o eliminare tali impostazioni?" +msgstr "Sono state personalizzate alcune impostazioni del profilo.\nMantenere o eliminare tali impostazioni?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Importa materiale" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Impossibile importare materiale {1}: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Materiale importato correttamente %1" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Esporta materiale" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Impossibile esportare il materiale su %1: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Materiale esportato correttamente su %1" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\n" -"Cura è orgogliosa di utilizzare i seguenti progetti open source:" +msgstr "Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\nCura è orgogliosa di utilizzare i seguenti progetti open source:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Alcuni valori di impostazione/esclusione sono diversi dai valori memorizzati nel profilo.\n" -"\n" -"Fare clic per aprire la gestione profili." +msgstr "Alcuni valori di impostazione/esclusione sono diversi dai valori memorizzati nel profilo.\n\nFare clic per aprire la gestione profili." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Alcune impostazioni nascoste utilizzano valori diversi dal proprio valore normale calcolato.\n" -"\n" -"Fare clic per rendere visibili queste impostazioni." +msgstr "Alcune impostazioni nascoste utilizzano valori diversi dal proprio valore normale calcolato.\n\nFare clic per rendere visibili queste impostazioni." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Questa impostazione ha un valore diverso dal profilo.\n" -"\n" -"Fare clic per ripristinare il valore del profilo." +msgstr "Questa impostazione ha un valore diverso dal profilo.\n\nFare clic per ripristinare il valore del profilo." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Questa impostazione normalmente viene calcolata, ma attualmente ha impostato un valore assoluto.\n" -"\n" -"Fare clic per ripristinare il valore calcolato." +msgstr "Questa impostazione normalmente viene calcolata, ma attualmente ha impostato un valore assoluto.\n\nFare clic per ripristinare il valore calcolato." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Impostazione di stampa disabilitata\n" -"I file codice G non possono essere modificati" +msgstr "Impostazione di stampa disabilitata\nI file codice G non possono essere modificati" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Informazioni su tempo" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Tempo di stampa" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Nessuna stampante collegata" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Estrusore" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Temperatura target dell'estremità riscaldata. L'estremità riscaldata si riscalderà o raffredderà sino a questo valore di temperatura. Se questo è 0, l'estremità riscaldata verrà spenta." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Prepara" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Controlla" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Altezza dello strato" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Velocità di stampa" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Più lenta" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Più veloce" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Un riempimento graduale aumenterà gradualmente la quantità di riempime #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Consenti variazione graduale" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Materiale" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Controllo compatibilità materiale" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "Modalità God" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "Accetta i G-Code e li invia tramite WiFi a un Doodle3D WiFi-Box." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "Connessione di rete UM3" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "Connessione di rete UM3 (Cluster)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Controlla disponibilità di aggiornamenti firmware." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Controllo aggiornamento firmware" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "Aggiornamento della versione da 2.5 a 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Aggiorna le configurazioni da Cura 2.7 a Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Aggiornamento della versione da 2.7 a 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4972,4 +4948,4 @@ msgstr "Lettore profilo Cura" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Ripeti stampa" +#~ msgstr "Ripeti stampa" \ No newline at end of file diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po index 49577d5ead..d618ecfeac 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -56,9 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"I comandi codice G da eseguire all’avvio, separati da \n" -"." +msgstr "I comandi codice G da eseguire all’avvio, separati da \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,9 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"I comandi codice G da eseguire alla fine, separati da \n" -"." +msgstr "I comandi codice G da eseguire alla fine, separati da \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -1122,7 +1118,7 @@ msgstr "Casuale" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "Angolo più acuto" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1147,32 +1143,32 @@ msgstr "La coordinata Y della posizione in prossimità della quale si innesca al #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Preferenze angolo giunzione" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Controlla se gli angoli sul profilo del modello influenzano la posizione della giunzione. Nessuno significa che gli angoli non hanno alcuna influenza sulla posizione della giunzione. Nascondi giunzione favorisce la presenza della giunzione su un angolo interno. Esponi giunzione favorisce la presenza della giunzione su un angolo esterno. Nascondi o esponi giunzione favorisce la presenza della giunzione su un angolo interno o esterno." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Nessuno" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Nascondi giunzione" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Esponi giunzione" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Nascondi o esponi giunzione" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1252,7 +1248,7 @@ msgstr "Configurazione di riempimento" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Configurazione del materiale di riempimento della stampa. Il riempimento a linea e zig zag su strati alternati riduce il costo del materiale. Le configurazioni a griglia, triangolo, a cubo, ottagonale, a quarto di cubo e concentrica comportano la stampa completa in ogni strato. Il riempimento a cubi, a quarto di cubo e a ottagonale cambia a ogni strato per consentire una distribuzione più uniforme della resistenza in ogni direzione." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1282,12 +1278,12 @@ msgstr "Suddivisione in cubi" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Ottagonale" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Quarto di cubo" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1307,22 +1303,22 @@ msgstr "Zig Zag" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Incrociata" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Incrociata 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Collegamento delle linee di riempimento" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Collega le estremità in cui la configurazione del riempimento incontra la parete interna utilizzando linee che seguono il profilo della parete interna stessa. Consentendo tale configurazione è possibile fare in modo che il riempimento aderisca meglio alle pareti riducendo gli effetti dello stesso sulla qualità delle superfici verticali. Disabilitando questa configurazione si riduce la quantità di materiale utilizzato." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1447,32 +1443,32 @@ msgstr "Non generare aree di riempimento inferiori a questa (piuttosto usare il #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Larghezza rimozione rivestimento" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Larghezza massima delle aree di rivestimento che è possibile rimuovere. Ogni area di rivestimento più piccola di questo valore verrà eliminata. Questo può aiutare a limitare il tempo e il materiale necessari per la stampa del rivestimento superiore/inferiore sulle superfici inclinate del modello." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Larghezza rimozione rivestimento superiore" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "Larghezza massima delle aree di rivestimento superiore che è possibile rimuovere. Ogni area di rivestimento più piccola di questo valore verrà eliminata. Questo può aiutare a limitare il tempo e il materiale necessari per la stampa del rivestimento superiore sulle superfici inclinate del modello." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Larghezza rimozione rivestimento inferiore" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Larghezza massima delle aree di rivestimento inferiore che è possibile rimuovere. Ogni area di rivestimento più piccola di questo valore verrà eliminata. Questo può aiutare a limitare il tempo e il materiale necessari per la stampa del rivestimento inferiore sulle superfici inclinate del modello." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1482,27 +1478,27 @@ msgstr "Distanza prolunga rivestimento esterno" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Distanza per cui i rivestimenti si estendono nel riempimento. Valori maggiori migliorano l'aderenza del rivestimento al riempimento e consentono una migliore aderenza al rivestimento delle pareti degli strati adiacenti. Valori minori consentono di risparmiare sul materiale utilizzato." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Distanza prolunga rivestimento superiore" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Distanza per cui i rivestimenti superiori si estendono nel riempimento. Valori maggiori migliorano l'aderenza del rivestimento al riempimento e consentono una migliore aderenza al rivestimento delle pareti dello strato superiore. Valori minori consentono di risparmiare sul materiale utilizzato." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Distanza prolunga rivestimento inferiore" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "Distanza per cui i rivestimenti inferiori si estendono nel riempimento. Valori maggiori migliorano l'aderenza del rivestimento al riempimento e consentono una migliore aderenza al rivestimento delle pareti dello strato inferiore. Valori minori consentono di risparmiare sul materiale utilizzato." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2822,7 +2818,7 @@ msgstr "Zig Zag" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Incrociata" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2837,32 +2833,32 @@ msgstr "Collega i ZigZag. Questo aumenta la forza della struttura di supporto a #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Rottura del supporto in pezzi di grandi dimensioni" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Salto di alcuni collegamenti per rendere la struttura del supporto più facile da rompere. Questa impostazione è applicabile alla configurazione a zig-zag del riempimento del supporto." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Dimensioni frammento supporto" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Lasciare un collegamento tra le linee del supporto ogni N millimetri per facilitare la rottura del supporto stesso." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Conteggio linee di rottura supporto" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Salto di una ogni N linee di collegamento per rendere la struttura del supporto più facile da rompere." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3404,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"Indica la distanza orizzontale tra lo skirt ed il primo strato della stampa.\n" -"Questa è la distanza minima, più linee di skirt aumenteranno tale distanza." +msgstr "Indica la distanza orizzontale tra lo skirt ed il primo strato della stampa.\nQuesta è la distanza minima, più linee di skirt aumenteranno tale distanza." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3451,22 +3445,22 @@ msgstr "Stampa il brim solo sull’esterno del modello. Questo riduce la quantit #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "Scostamento Z strato iniziale" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "L'estrusore viene posizionato ad una distanza dall'altezza normale del primo strato pari al valore indicato. Questo scostamento può essere positivo (più in alto) o negativo (più in basso). Alcuni tipi di filamento aderiscono meglio al piano di stampa se l'estrusore viene leggermente sollevato." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Scostamento Z strati di rastremazione" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Se diverso da zero, lo scostamento Z viene ridotto a 0 entro il numero di strati indicato. Un valore di 0 indica che lo scostamento Z rimane costante per tutti gli strati di stampa." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3481,12 +3475,12 @@ msgstr "Se è abilitata la funzione raft, questo valore indica di quanto il raft #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Smoothing raft" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Questa impostazione controlla l'entità dell'arrotondamento degli angoli interni sul profilo raft. Gli angoli interni vengono arrotondati a semicerchio con un raggio pari al valore indicato. Questa impostazione elimina inoltre i fori sul profilo raft più piccoli di tale cerchio." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4166,12 +4160,12 @@ msgstr "Leviga i profili con movimento spiraliforme per ridurre la visibilità d #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Estrusione relativa" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Utilizza l'estrusione relativa invece di quella assoluta. L'utilizzo di fasi E relative facilita la post-elaborazione del codice G. Tuttavia, questa impostazione non è supportata da tutte le stampanti e può causare deviazioni molto piccole nella quantità di materiale depositato rispetto alle fasi E assolute. Indipendentemente da questa impostazione, la modalità estrusione sarà sempre impostata su assoluta prima che venga generato uno script in codice G." #: fdmprinter.def.json msgctxt "experimental label" @@ -4186,12 +4180,12 @@ msgstr "sperimentale!" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Ottimizzazione sequenza di stampa pareti" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Ottimizza l'ordine in cui vengono stampate le pareti in modo da ridurre le retrazioni e la distanza percorsa. L'abilitazione di questa funzione porta vantaggi per la maggior parte dei pezzi, ma alcuni potrebbero richiedere un maggior tempo di esecuzione, per cui si consiglia di confrontare i tempi di stampa stimati con e senza ottimizzazione." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4316,22 +4310,22 @@ msgstr "Alterna la direzione di stampa degli strati superiori/inferiori. Normalm #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Dimensioni cavità 3D incrociata" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "Dimensioni delle cavità negli incroci a quattro vie nella configurazione 3D incrociata alle altezze a cui la configurazione tocca se stessa." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Cavità 3D incrociate alternate" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Si applica solo a cavità a metà degli incroci a quattro vie nella configurazione 3D incrociata e alterna la posizione delle cavità tra le altezze in cui la configurazione tocca se stessa." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4633,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"Indica la distanza di uno spostamento verso l'alto con estrusione a velocità dimezzata.\n" -"Ciò può garantire una migliore adesione agli strati precedenti, senza eccessivo riscaldamento del materiale su questi strati. Applicabile solo alla funzione Wire Printing." +msgstr "Indica la distanza di uno spostamento verso l'alto con estrusione a velocità dimezzata.\nCiò può garantire una migliore adesione agli strati precedenti, senza eccessivo riscaldamento del materiale su questi strati. Applicabile solo alla funzione Wire Printing." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4755,12 +4747,12 @@ msgstr "Ulteriore passaggio sopra la superficie superiore, senza estrusione di m #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "Stiramento del solo strato più elevato" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "Effettua lo stiramento solo dell'ultimissimo strato della maglia. È possibile quindi risparmiare tempo se gli strati inferiori non richiedono una finitura con superficie liscia." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5124,4 +5116,4 @@ msgstr "Matrice di rotazione da applicare al modello quando caricato dal file." #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "Sovrapposizione doppia estrusione" +#~ msgstr "Sovrapposizione doppia estrusione" \ No newline at end of file diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 0581d8209e..48da7e783e 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -24,7 +24,7 @@ msgstr "Machine-instellingen" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Röntgenweergave" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "G-code-bestand" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Printen via Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Printen via Doodle3D WiFi-Box" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Verbinding maken met Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "Annuleren" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "De gegevens worden naar Doodle3D Connect verzonden" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Kan geen gegevens naar Doodle3D Connect verzenden. Is er nog een andere taak actief?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Gegevens op Doodle3D Connect opslaan" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Het bestand is naar Doodle3D Connect verzonden" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Connect openen" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "De Doodle3D Connect-webinterface openen" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Er kan geen nieuwe taak worden gestart omdat de printer bezig is of niet #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Printgegevens" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "De printer biedt geen ondersteuning voor USB-printen omdat deze de codev #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "USB-printen" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Er kan geen nieuwe taak worden gestart omdat de printer geen ondersteuni #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Waarschuwing" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "De voor de printer benodigde software is niet op %s te vinden." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Firmware van uw printer" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Opslaan op Verwisselbaar Station {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Opslaan op Verwisselbaar Station {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Opslaan" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "Kan niet opslaan als {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "Kan geen bestandsnaam vinden tijdens het schrijven naar {device}." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Kan niet opslaan op verwisselbaar station {0}: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Fout" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Opgeslagen op Verwisselbaar Station {0} als {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Bestand opgeslagen" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "{0} is uitgeworpen. U kunt het station nu veilig verwijderen." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Hardware veilig verwijderen" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "Er is een toegangsaanvraag voor de printer verstuurd. Keur de aanvraag g #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Verbindingsstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Verbindingsstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Er kan geen nieuwe taak worden gestart omdat de printer bezig is. De hui #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Printerstatus" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "De gegevens worden naar de printer verzonden" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "De gegevens worden verzonden" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Verbinding Maken via Netwerk" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Deze printer is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "Deze printer is de host voor een groep van {count} aangesloten Ultimaker 3-printers." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} heeft '{job_name}' voltooid. Haal de print op en bevestig dat het platform is leeggemaakt." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} is gereserveerd voor het printen van '{job_name}'. Wijzig de instellingen van de printer zodanig dat ze aansluiten bij de taak, zodat u kunt beginnen met printen." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Het verzenden van nieuwe taken is (tijdelijk) geblokkeerd. Nog bezig met het verzenden van de vorige printtaak." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Kan geen nieuwe printtaak verzenden: deze 3D-printer is (nog) niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "Bezig met verzenden van {file_name} naar groep {cluster_name}" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "{file_name} is verzonden naar groep {cluster_name}." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Printtaken weergeven" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Opent de printtaken-interface in uw browser." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Kan de printtaak niet naar groep {cluster_name} verzenden." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Om ervoor te zorgen dat uw {machine_name} van de nieuwste functies is voorzien, wordt aanbevolen om de firmware regelmatig bij te werken. U kunt dit doen op de {machine_name} (wanneer deze is verbonden met het netwerk) of via USB." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Nieuwe firmware voor %s beschikbaar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "Downloaden" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Geen toegang tot update-informatie." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura verzamelt geanonimiseerde slicing-statistieken. Dit kan bij de voor #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Gegevens verzamelen" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "G-code-bestand" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Laagweergave" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Als draadprinten is ingeschakeld, geeft Cura lagen niet nauwkeurig weer" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Laagweergave" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "GIF-afbeelding" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Met het huidige materiaal is slicen niet mogelijk, omdat het materiaal niet compatibel is met de geselecteerde machine of configuratie." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Kan niet slicen" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Lagen verwerken" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Informatie" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Nozzle" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Door invoegtoepassingen bladeren" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Kan de invoegtoepassing-ID van {0} niet vinden" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Waarschuwing" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Invoegtoepassingbrowser" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Solide weergave" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "G-code parseren" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "Details van de G-code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Supportstructuur" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Nieuwe locatie vinden voor objecten" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Locatie vinden" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Kan binnen het werkvolume niet voor alle objecten een locatie vinden" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Kan locatie niet vinden" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Het Bestand Bestaat Al" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Het bestand {0} bestaat al. Weet u zeker dat u dit bestand wilt overschrijven?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Het geselecteerde materiaal is niet compatibel met de geselecteerde mach #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Niet-compatibel materiaal" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Maak wijzigen van de materiaaldiameter ongedaan." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Kan het profiel niet exporteren als {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Kan het profiel niet exporteren als {0}: Invoegtoepassing voor de schrijver heeft een fout gerapporteerd." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Het profiel is geëxporteerd als {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Exportgegevens" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "Kan het profiel niet importeren uit {0}: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "De hoogte van het bouwvolume is verminderd wegens de waarde van de inste #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Werkvolume" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Objecten verveelvoudigen en plaatsen" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Object plaatsen" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Er is een fatale fout opgetreden die niet kan worden hersteld!

\n" -"

Gebruik de onderstaande informatie om een bugrapport te plaatsen op http://github.com/Ultimaker/Cura/issues

\n" -" " +msgstr "

Er is een fatale fout opgetreden die niet kan worden hersteld!

\n

Gebruik de onderstaande informatie om een bugrapport te plaatsen op http://github.com/Ultimaker/Cura/issues

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om g-code-bestanden naar de printer over te zetten.\n" -"\n" -"Selecteer uw printer in de onderstaande lijst:" +msgstr "Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om g-code-bestanden naar de printer over te zetten.\n\nSelecteer uw printer in de onderstaande lijst:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Configuratie Activeren" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Deze printer is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "Deze printer is de host voor een groep van %1 aangesloten Ultimaker 3-printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Printen via netwerk" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Printen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Printen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Gereserveerd" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Gereed" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Voorbereiden" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Beschikbaar" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Voltooid op: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Platform leegmaken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Voorbereiden om te printen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Accepteert geen printtaken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Opent de pagina met printtaken in uw standaard webbrowser." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Printtaken weergeven" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "PRINTERGROEP" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Printtaken" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Printen" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "In wachtrij" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "Wacht op wijziging van configuratie" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Printers weergeven" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Geïnstalleerd" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Licentieovereenkomst invoegtoepassing" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " invoegtoepassing bevat een licentie.\nU moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\nGaat u akkoord met onderstaande voorwaarden?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Ja, ik ga akkoord" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Nee, ik ga niet akkoord" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"U hebt enkele profielinstellingen aangepast.\n" -"Wilt u deze instellingen behouden of verwijderen?" +msgstr "U hebt enkele profielinstellingen aangepast.\nWilt u deze instellingen behouden of verwijderen?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Materiaal Importeren" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Kon materiaal %1 niet importeren: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Materiaal %1 is geïmporteerd" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Materiaal Exporteren" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Exporteren van materiaal naar %1 is mislukt: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Materiaal is geëxporteerd naar %1" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\n" -"Cura is er trots op gebruik te maken van de volgende opensourceprojecten:" +msgstr "Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\nCura is er trots op gebruik te maken van de volgende opensourceprojecten:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Sommige waarden voor instellingen/overschrijvingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n" -"\n" -"Klik om het profielbeheer te openen." +msgstr "Sommige waarden voor instellingen/overschrijvingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n\nKlik om het profielbeheer te openen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n" -"\n" -"Klik om deze instellingen zichtbaar te maken." +msgstr "Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n\nKlik om deze instellingen zichtbaar te maken." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Deze instelling heeft een andere waarde dan in het profiel.\n" -"\n" -"Klik om de waarde van het profiel te herstellen." +msgstr "Deze instelling heeft een andere waarde dan in het profiel.\n\nKlik om de waarde van het profiel te herstellen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n" -"\n" -"Klik om de berekende waarde te herstellen." +msgstr "Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n\nKlik om de berekende waarde te herstellen." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Instelling voor printen uitgeschakeld\n" -"G-code-bestanden kunnen niet worden aangepast" +msgstr "Instelling voor printen uitgeschakeld\nG-code-bestanden kunnen niet worden aangepast" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00u 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Tijdsinformatie" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Printtijd" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Er is geen printer aangesloten" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Extruder" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "De doeltemperatuur van de hot-end. De hot-end wordt verwarmd of afgekoeld totdat deze temperatuur bereikt is. Als deze waarde ingesteld is op 0, wordt de verwarming van de hot-end uitgeschakeld." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Voorbereiden" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "Controleren" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Laaghoogte" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Printsnelheid" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Langzamer" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Sneller" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Met geleidelijke vulling neemt de hoeveelheid vulling naar boven toe." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Geleidelijke vulling inschakelen" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Materiaal" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Materiaalcompatibiliteit controleren" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "Godmodus" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "Accepteert G-code en verzendt deze code via wifi naar een Doodle3D WiFi-Box." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "UM3-netwerkverbinding" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "UM3-netwerkverbinding (Cluster)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Controleert op firmware-updates." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Firmware-updatecontrole" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "Versie-upgrade van 2.5 naar 2.6." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Hiermee worden configuraties bijgewerkt van Cura 2.7 naar Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Versie-upgrade van 2.7 naar 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4992,4 +4968,4 @@ msgstr "Cura-profiellezer" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Opnieuw Printen" +#~ msgstr "Opnieuw Printen" \ No newline at end of file diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 8814e03e1c..03c3cc8d38 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.0\n" +"Project-Id-Version: Cura 2.7\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -1118,7 +1118,7 @@ msgstr "Willekeurig" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "Scherpste hoek" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1143,32 +1143,32 @@ msgstr "De Y-coördinaat van de positie nabij waar met het printen van elk deel #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Voorkeur van naad en hoek" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Instellen of hoeken in het model invloed hebben op de positie van de naad. Geen wil zeggen dat hoeken geen invloed hebben op de positie van de naad. Met Naad verbergen is de kans groter dat de naad op een binnenhoek komt. Met Naad zichtbaar maken is de kans groter dat de naad op een buitenhoek komt. Met Naad verbergen of Naad zichtbaar maken is de kans groter dat de naad op een binnen- of buitenhoek komt." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Geen" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Naad verbergen" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Naad zichtbaar maken" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Naad verbergen of zichtbaar maken" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1248,7 +1248,7 @@ msgstr "Vulpatroon" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Het patroon van het vulmateriaal van de print. De lijn- en zigzagvulling veranderen per vullaag van richting, waardoor wordt bespaard op materiaalkosten. De raster-, driehoeks-, kubische, achtvlaks-, afgeknotte kubus- en concentrische patronen worden elke laag volledig geprint. Kubische, afgeknotte kubus- en achtvlaksvullingen veranderen elke laag voor een meer gelijke krachtsverdeling in elke richting." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1278,12 +1278,12 @@ msgstr "Kubische onderverdeling" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Achtvlak" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Afgeknotte kubus" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1303,22 +1303,22 @@ msgstr "Zigzag" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Kruis" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Kruis 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Vullijnen verbinden" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Verbindt de uiteinden waar het vulpatroon bij de binnenwand komt met een lijn die de vorm van de binnenwand volgt. Als u deze instelling inschakelt, kan de vulling beter hechten aan de wanden en wordt de invloed van de vulling op de kwaliteit van de verticale oppervlakken kleiner. Als u deze instelling uitschakelt, wordt er minder materiaal gebruikt." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1443,32 +1443,32 @@ msgstr "Genereer geen gebieden met vulling die kleiner zijn dan deze waarde (geb #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Verwijderingsbreedte skin" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "De grootste breedte van skingebieden die verwijderd moeten worden. Elk skingebied dat smaller is dan deze waarde zal verdwijnen. Hiermee kan op tijd en materiaal worden bespaard bij het printen van de bovenste/onderste skinlaag op schuine vlakken in het model." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Verwijderingsbreedte bovenste skinlaag" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "De grootste breedte van delen van bovenste skingebieden die verwijderd moeten worden. Elk skingebied dat smaller is dan deze waarde, zal verdwijnen. Hiermee kan op tijd en materiaal worden bespaard bij het printen van de bovenste/onderste skinlaag op schuine vlakken in het model." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Verwijderingsbreedte onderste skinlaag" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "De grootste breedte van delen van de onderste skingebieden die verwijderd moeten worden. Elk skingebied dat smaller is dan deze waarde, zal verdwijnen. Hiermee kan op tijd en materiaal worden bespaard bij het printen van de onderste skinlaag op schuine vlakken in het model." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1478,27 +1478,27 @@ msgstr "Uitbreidingsafstand van skin" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "De afstand waarmee de skin wordt uitgebreid in de vulling. Bij hogere waarden hecht de skin beter aan het vulpatroon en hechten de wanden van aangrenzende lagen beter aan de skin. Bij lagere waarden wordt er minder materiaal gebruikt." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Uitbreidingsafstand van bovenste skinlaag" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "De afstand waarmee de bovenste skinlagen worden uitgebreid in de vulling. Bij hogere waarden hecht de skin beter aan het vulpatroon en hechten de wanden op de bovenliggende laag beter aan de skin. Bij lagere waarden wordt er minder materiaal gebruikt." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Uitbreidingsafstand van onderste skinlaag" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "De afstand waarmee de onderste skinlagen worden uitgebreid in de vulling. Bij hogere waarden hecht de skin beter aan het vulpatroon en de wanden van de onderliggende laag. Bij lagere waarden wordt er minder materiaal gebruikt." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2818,7 +2818,7 @@ msgstr "Zigzag" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Kruis" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2833,32 +2833,32 @@ msgstr "Verbind de zigzaglijnen. Hiermee versterkt u de zigzag-supportstructuur. #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Supportstructuur in stukken breken" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Sla enkele verbindingen tussen lijnen van de supportstructuur over zodat deze gemakkelijker kan worden weggebroken. Deze instelling is van toepassing op het zigzag-vulpatroon van de supportstructuur." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Grootte supportstuk" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Sla elke N millimeter een verbinding tussen de lijnen van de supportstructuur over, zodat deze gemakkelijker kan worden weggebroken." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Aantal lijnen supportstuk" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Sla elke N verbindingslijnen één lijn over zodat de supportstructuur gemakkelijker kan worden weggebroken." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3400,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"De horizontale afstand tussen de skirt en de eerste laag van de print.\n" -"Dit is de minimumafstand; als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." +msgstr "De horizontale afstand tussen de skirt en de eerste laag van de print.\nDit is de minimumafstand; als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3447,22 +3445,22 @@ msgstr "Print de brim alleen aan de buitenkant van het model. Hiermee verkleint #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "Z-offset Eerste Laag" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "De extruder wordt in deze mate gecorrigeerd ten opzichte van de normale hoogte van de eerste laag. Dit kan plus (verhoogd) of min (verlaagd) zijn. Sommige soorten filament hechten beter op het platform als de extruder iets hoger staat." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Z-offset Taps Toelopende Lagen" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Wanneer de waarde niet is ingesteld op 0, dan wordt de Z-offset over zoveel lagen verkleind tot 0. Wanneer de waarde op 0 is ingesteld, blijft de Z-offset voor alle lagen in de print gelijk." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3477,12 +3475,12 @@ msgstr "Als de raft is ingeschakeld, is dit het extra raftgebied rond het model #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Raft effenen" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Deze instelling bepaalt hoeveel binnenhoeken in de raftcontour worden afgerond. Naar binnen gebogen hoeken worden tot een halve cirkel afgerond met een straal die gelijk is aan de hier opgegeven waarde. Met deze instellingen worden ook gaten in de raftcontour verwijderd die kleiner zijn dan een dergelijke cirkel." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4162,12 +4160,12 @@ msgstr "Maak de gespiraliseerde contouren vlak om de zichtbaarheid van de Z-naad #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Relatieve extrusie" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Gebruik relatieve extrusie in plaats van absolute extrusie. Bij het gebruik van relatieve E-steps wordt het nabewerken van G-code gemakkelijker. Deze optie wordt echter niet door alle printers ondersteund en kan lichte afwijkingen vertonen in de hoeveelheid afgezet materiaal ten opzichte van absolute E-steps. Ongeacht deze instelling wordt de extrusiemodus altijd ingesteld op absoluut voordat er een G-code-script wordt uitgevoerd.." #: fdmprinter.def.json msgctxt "experimental label" @@ -4182,12 +4180,12 @@ msgstr "experimenteel!" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Printvolgorde van wanden optimaliseren" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Optimaliseer de volgorde waarin wanden worden geprint om het aantal intrekbewegingen en de afgelegde afstand te verkleinen. Deze instelling is gunstig voor de meeste onderdelen. Bij sommige onderdelen duurt het printen echter langer. Controleer daarom de verwachte printtijd met en zonder optimalisatie." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4312,22 +4310,22 @@ msgstr "Wissel de richting af waarin de boven-/onderlagen worden geprint. Normaa #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Luchtbelgrootte bij Kruis 3D" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "De grootte van luchtbellen op kruispunten in het kruis 3D-patroon op punten waar het patroon zichzelf raakt." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Afwisselend luchtbellen in kruis 3D" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Laat alleen luchtbellen achter in de helft van de kruispunten in het kruis 3D-patroon en wisselt de plaats van de luchtbellen op punten waar het patroon zichzelf raakt." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4629,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\n" -"Hierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." +msgstr "De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\nHierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4751,12 +4747,12 @@ msgstr "Ga nog een extra keer over de bovenlaag, echter zonder materiaal door te #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "Alleen hoogste laag strijken" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "Strijk alleen de allerlaatste laag van het raster. Dit bespaart tijd als de daaronder gelegen lagen geen glad oppervlak vereisen." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5120,4 +5116,4 @@ msgstr "Omzettingsmatrix die moet worden toegepast op het model wanneer dit word #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "Overlap Dubbele Doorvoer" +#~ msgstr "Overlap Dubbele Doorvoer" \ No newline at end of file diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 6de9035df8..6d3b884525 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -24,7 +24,7 @@ msgstr "Makine Ayarları" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "Röntgen Görüntüsü" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -39,17 +39,17 @@ msgstr "GCode Dosyası" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box ile yazdır" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box ile yazdır" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "Doodle3D Connect’e bağlanıyor" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -73,32 +73,32 @@ msgstr "İptal et" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "Doodle3D Connect’e veri gönderiliyor" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "Doodle3D Connect’e veri gönderilemiyor. Hala etkin olan başka bir iş var mı?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "Doodle3D Connect üzerinde veri depolanıyor" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "Doodle3D Connect’e dosya gönderildi" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "Connect’i aç.." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "Doodle3D Connect web arayüzünü aç" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -143,7 +143,7 @@ msgstr "Yazıcı meşgul veya bağlı olmadığı için yeni bir işlem başlat #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "Yazdırma Ayrıntıları" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -153,7 +153,7 @@ msgstr "Yazıcı, UltiGCode türü kullandığı için USB yazdırmayı destekle #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "USB Yazdırma" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -168,7 +168,7 @@ msgstr "Yazıcı USB ile yazdırmayı desteklemediği için yeni bir işlem baş #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "Uyarı" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -184,7 +184,7 @@ msgstr "%s’te yazıcı için gerekli aygıt yazılım bulunamadı." #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "Yazıcı Bellenimi" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -201,25 +201,25 @@ msgstr "Çıkarılabilir Sürücüye Kaydediliyor {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "Çıkarılabilir Sürücü {0} Üzerine Kaydediliyor " #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "Kaydediliyor" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "{0} dosyasına kaydedilemedi: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "{device} üzerine yazmaya çalışırken dosya adı bulunamadı." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -236,7 +236,7 @@ msgstr "Çıkarılabilir aygıta {0} kaydedilemedi: {1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "Hata" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -247,7 +247,7 @@ msgstr "Çıkarılabilir Sürücüye {0}, {1} olarak kaydedildi" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "Dosya Kaydedildi" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -269,7 +269,7 @@ msgstr "Çıkarıldı {0}. Şimdi sürücüyü güvenle kaldırabilirsiniz." #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "Donanımı Güvenli Bir Şekilde Kaldırın" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -304,7 +304,7 @@ msgstr "İstenen yazıcıya erişim. Lütfen yazıcı isteğini onaylayın" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "Bağlantı durumu" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -319,7 +319,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "Bağlantı Durumu" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -417,7 +417,7 @@ msgstr "Yazıcı meşgul, yeni bir yazdırma başlatılamıyor. Geçerli yazıc #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "Yazıcı Durumu" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -488,7 +488,7 @@ msgstr "Veriler yazıcıya gönderiliyor" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "Veri gönderiliyor" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -547,73 +547,73 @@ msgstr "Ağ ile Bağlan" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Bu yazıcı, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "Bu yazıcı, bağlı {count} Ultimaker 3 yazıcı grubunun ana makinesidir." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name}, '{job_name}' yazdırmayı tamamladı. Lütfen çıktıyı alın ve yapı levhasının temizlenmesini onaylayın." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name}, '{job_name}' yazdırmak için ayrılmıştır. Yazıcının yazdırmayı başlatması için lütfen yazıcı yapılandırmasını işe uygun olacak şekilde değiştirin." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "Yeni işlerin gönderilmesi (geçici olarak) engellenmiştir, hala bir önceki yazdırma işi gönderiliyor." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "Yeni yazdırma işi gönderilemiyor: bu 3D yazıcı, bağlı Ultimaker 3 yazıcı grubunu barındırmak için (henüz) ayarlı değildir." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "{file_name}, {cluster_name} grubuna gönderiliyor" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "{file_name}, {cluster_name} grubuna gönderildi." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "Yazdırma işlerini göster" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "Yazdırma işleri arayüzünü tarayıcınızda açar." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "Yazdırma işi, {cluster_name} grubuna gönderilemiyor." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "Makinenizin {machine_name} en son özellikler ile donanımlı olmasını sağlamak için bellenimi düzenli olarak güncellenmeniz önerilir. Bu, (ağa bağlı olduğunuzda) {machine_name} üzerinde veya USB ile gerçekleştirilebilir." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "Yeni %s bellenimi mevcut" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -624,7 +624,7 @@ msgstr "İndir" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "Güncelleme bilgilerine erişilemedi." #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -663,7 +663,7 @@ msgstr "Cura anonim dilimleme istatistiklerini toplar. Bu özelliği tercihlerde #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "Veri Toplanıyor" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -684,7 +684,7 @@ msgstr "G-code dosyası" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "Katman görünümü" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -694,7 +694,7 @@ msgstr "Tel Yazma etkinleştirildiğinde, Cura katmanları doğru olarak görün #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "Katman Görünümü" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -724,7 +724,7 @@ msgstr "GIF Resmi" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "Mevcut malzeme, seçilen makine veya yapılandırma ile uyumlu olmadığından mevcut malzeme ile dilimlenemedi." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -732,7 +732,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "Dilimlenemedi" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -759,7 +759,7 @@ msgstr "Katmanlar İşleniyor" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "Bilgi" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -798,18 +798,18 @@ msgstr "Nozül" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "Eklentilere göz at" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "Eklenti kimliği, {0} dosyasından alınamadı" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "Uyarı" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -819,7 +819,7 @@ msgstr "Eklenti tarayıcısı" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "Gerçek görünüm" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -835,7 +835,7 @@ msgstr "G-code ayrıştırma" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "G-code Ayrıntıları" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -917,7 +917,7 @@ msgstr "Destek" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Etek" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -958,7 +958,7 @@ msgstr "Nesneler için yeni konum bulunuyor" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "Konumu Buluyor" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -969,7 +969,7 @@ msgstr "Yapılan hacim içinde tüm nesneler için konum bulunamadı" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "Konum Bulunamıyor" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -982,7 +982,7 @@ msgstr "Dosya Zaten Mevcut" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "Dosya {0} zaten mevcut. Üstüne yazmak istediğinizden emin misiniz?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1003,7 +1003,7 @@ msgstr "Seçilen malzeme, seçilen makine veya yapılandırma ile uyumlu değil. #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "Uyumsuz Malzeme" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1024,24 +1024,24 @@ msgstr "Malzeme çapını değiştirme işlemini geri al." #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "Profilin {0} dosyasına aktarımı başarısız oldu: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "Profilin {0} dosyasına aktarımı başarısız oldu: Yazıcı eklentisinde rapor edilen hata." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "Profil {0} dosyasına aktarıldı" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "Dışa Aktarım Ayrıntıları" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1050,7 +1050,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "{0} dosyasından profil içe aktarımı başarısız oldu: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1089,7 +1089,7 @@ msgstr "Portalın yazdırılan modeller ile çarpışmasını önlemek için yap #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "Yapı Disk Bölümü" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1100,7 +1100,7 @@ msgstr "Nesneler çoğaltılıyor ve yerleştiriliyor" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "Nesne Yerleştiriliyor" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1113,10 +1113,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

Kurtulunamayan ciddi bir olağanüstü durum oluştu!

\n" -"

Yazılım hatası raporunu http://github.com/Ultimaker/Cura/issues adresine gönderirken aşağıdaki bilgileri kullanınız

\n" -" " +msgstr "

Kurtulunamayan ciddi bir olağanüstü durum oluştu!

\n

Yazılım hatası raporunu http://github.com/Ultimaker/Cura/issues adresine gönderirken aşağıdaki bilgileri kullanınız

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1418,10 +1415,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n" -"\n" -"Aşağıdaki listeden yazıcınızı seçin:" +msgstr "Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n\nAşağıdaki listeden yazıcınızı seçin:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1547,17 +1541,17 @@ msgstr "Yapılandırmayı Etkinleştir" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "Bu yazıcı, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "Bu yazıcı, %1 bağlı Ultimaker 3 yazıcı grubunun ana makinesidir" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "Ağ üzerinden yazdır" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1567,98 +1561,98 @@ msgstr "Yazdır" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "Yazdırma" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "Rezerve edildi" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "Tamamlandı" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "Hazırlanıyor" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "Mevcut" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "Tamamlandığı tarih: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "Yapı levhasını temizle" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "Yazdırmaya hazırlanıyor" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "Yazdırma işleri kabul edilmiyor" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Yazdırma işlerini varsayılan web tarayıcınızda açar." #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "Yazdırma işlerini görüntüle" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "YAZICI GRUBU" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "Yazdırma görevleri" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "Yazdırma" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "Kuyrukta" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "Yapılandırma değişikliğini bekliyor" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "Yazıcılar" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "Yazıcıları görüntüle" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2049,7 +2043,7 @@ msgstr "Yüklü" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "Eklenti Lisans Anlaşması" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2057,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " eklenti lisans içerir.\nBu eklentiyi kurmak için bu lisans kabul etmeniz gerekir.\nAşağıdaki koşulları kabul ediyor musunuz?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "Kabul et" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "Reddet" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2322,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Bazı profil ayarlarını özelleştirdiniz.\n" -"Bu ayarları kaydetmek veya iptal etmek ister misiniz?" +msgstr "Bazı profil ayarlarını özelleştirdiniz.\nBu ayarları kaydetmek veya iptal etmek ister misiniz?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2908,12 +2900,12 @@ msgstr "Malzemeyi İçe Aktar" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "Malzeme %1 dosyasına içe aktarılamadı: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "Malzeme %1 dosyasına başarıyla içe aktarıldı" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2924,12 +2916,12 @@ msgstr "Malzemeyi Dışa Aktar" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "Malzemenin %1 dosyasına dışa aktarımı başarısız oldu: %2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "Malzeme %1 dosyasına başarıyla dışa aktarıldı" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2962,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\n" -"Cura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" +msgstr "Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\nCura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3067,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n" -"\n" -"Profil yöneticisini açmak için tıklayın." +msgstr "Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n\nProfil yöneticisini açmak için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3108,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n" -"\n" -"Bu ayarları görmek için tıklayın." +msgstr "Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n\nBu ayarları görmek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3139,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Bu ayarın değeri profilden farklıdır.\n" -"\n" -"Profil değerini yenilemek için tıklayın." +msgstr "Bu ayarın değeri profilden farklıdır.\n\nProfil değerini yenilemek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3150,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n" -"\n" -"Hesaplanan değeri yenilemek için tıklayın." +msgstr "Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n\nHesaplanan değeri yenilemek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3165,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Yazdırma Ayarı devre dışı\n" -"G-code dosyaları üzerinde değişiklik yapılamaz" +msgstr "Yazdırma Ayarı devre dışı\nG-code dosyaları üzerinde değişiklik yapılamaz" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3177,22 +3153,22 @@ msgstr "00sa 00dk" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "Süre bilgisi" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "Yazdırma süresi" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3252,12 +3228,12 @@ msgstr "Yazıcı bağlı değil" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "Ekstrüder" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "Sıcak ucun hedef sıcaklığı. Sıcak uç, bu sıcaklığa doğru ısıtılır veya soğutulur. Bu ayar 0 olarak belirlenirse sıcak uç ısıtma kapatılır." #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3726,27 +3702,27 @@ msgstr "Hazırla" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "İzle" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "Katman Yüksekliği" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "Yazdırma Hızı" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "Daha yavaş" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "Daha Hızlı" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3761,7 +3737,7 @@ msgstr "Kademeli dolgu, yukarıya doğru dolgu miktarını kademeli olarak yüks #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "Kademeli özelliği etkinleştir" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3838,7 +3814,7 @@ msgstr "Malzeme" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "Malzeme uyumunu denetle" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3898,12 +3874,12 @@ msgstr "Tanrı Modu" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "G-Code’u kabul eder ve WiFi üzerinden Doodle3D WiFi-Box'a gönderir." #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3958,17 +3934,17 @@ msgstr "UM3 Ağ Bağlantısı" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "UM3 Ağ Bağlantısı (Küme)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "Bellenim güncellemelerini denetler." #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "Bellenim Güncelleme Denetleyicisi" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4063,12 +4039,12 @@ msgstr "2.5’ten 2.6’ya Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "Yapılandırmaları Cura 2.7’den Cura 3.0’a yükseltir." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "2.7’den 3.0’a Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4973,4 +4949,4 @@ msgstr "Cura Profil Okuyucu" #~ msgctxt "@label:" #~ msgid "Print Again" -#~ msgstr "Yeniden Yazdır" +#~ msgstr "Yeniden Yazdır" \ No newline at end of file diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index c5ae253cfd..b67557a126 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -56,9 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"​\n" -" ile ayrılan, başlangıçta yürütülecek G-code komutları." +msgstr "​\n ile ayrılan, başlangıçta yürütülecek G-code komutları." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,9 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"​\n" -" ile ayrılan, bitişte yürütülecek Gcode komutları." +msgstr "​\n ile ayrılan, bitişte yürütülecek Gcode komutları." #: fdmprinter.def.json msgctxt "material_guid label" @@ -1122,7 +1118,7 @@ msgstr "Gelişigüzel" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "En Keskin Köşe" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1147,32 +1143,32 @@ msgstr "Bir katmandaki her kısmın yazdırılmaya başlanacağı yere yakın ko #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "Dikiş Köşesi Tercihi" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "Modelin ana hatlarında yer alan köşelerin dikişin konumunu etkileyip etkilemediğini kontrol edin. Hiçbiri, köşelerin dikişin konumunu etkilemediği anlamına gelir. Dikişi Gizle, dikişin daha büyük olasılıkla bir iç köşe üzerinde oluşmasını sağlar. Dikişi Açığa Çıkar, dikişin daha büyük olasılıkla bir dış köşe üzerinde oluşmasını sağlar. Dikişi Gizle veya Açığa Çıkar, dikişin daha büyük olasılıkla bir iç veya dış köşe üzerinde oluşmasını sağlar." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "Hiçbiri" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "Dikişi Gizle" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "Dikişi Açığa Çıkar" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "Dikişi Gizle veya Açığa Çıkar" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1252,7 +1248,7 @@ msgstr "Dolgu Şekli" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "Yazdırma dolgu malzemesinin şeklidir. Hat ve zikzak dolgu, farklı katmanlar üzerinde yön değiştirerek malzeme maliyetini azaltır. Izgara, üçgen, kübik, sekizlik, çeyrek kübik ve eş merkezli şekiller, her katmanda tam olarak yazdırılır. Kübik, çeyrek kübik ve sekizlik dolgu, her yönde daha eşit bir kuvvet dağılımı sağlamak için her katmanda değişir." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1282,12 +1278,12 @@ msgstr "Kübik Alt Bölüm" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "Sekizlik" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "Çeyrek Kübik" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1307,22 +1303,22 @@ msgstr "Zik Zak" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Çapraz" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "Çapraz 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "Dolgu Hatlarını Bağlayın" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "İç duvarın şeklini takip eden bir hattı kullanarak, dolgu şeklinin iç duvarla buluştuğu noktada uçları bağlayın. Bu ayarın etkinleştirilmesi, dolgunun duvarlara daha iyi yapışmasını sağlayabilir ve dolgunun dikey yüzeylerin kalitesi üzerindeki etkilerini azaltır. Bu ayarın devre dışı bırakılması, kullanılan malzemenin miktarını azaltır." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1447,32 +1443,32 @@ msgstr "Bundan küçük dolgu alanları oluşturma (onun yerine yüzey kullan)." #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "Yüzey Kaldırma Genişliği" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Kaldırılacak olan yüzey alanlarının en büyük genişliğidir. Bu değerden daha küçük olan her yüzey alanı kaybolacaktır. Bu, modeldeki eğimli yüzeylerde alt/üst yüzeyin yazdırılması için harcanan süreyi ve malzemeyi sınırlamaya yardımcı olabilir." #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "Üst Yüzey Kaldırma Genişliği" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "Kaldırılacak olan üst yüzey alanlarının en büyük genişliğidir. Bu değerden daha küçük olan her yüzey alanı kaybolacaktır. Bu, modeldeki eğimli yüzeylerde üst yüzeyin yazdırılması için harcanan süreyi ve malzemeyi sınırlamaya yardımcı olabilir." #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "Alt Yüzey Kaldırma Genişliği" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "Kaldırılacak olan alt yüzey alanlarının en büyük genişliğidir. Bu değerden daha küçük olan her yüzey alanı kaybolacaktır. Bu, modeldeki eğimli yüzeylerde alt yüzeyin yazdırılması için harcanan süreyi ve malzemeyi sınırlamaya yardımcı olabilir." #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1482,27 +1478,27 @@ msgstr "Yüzey Genişleme Mesafesi" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Yüzeylerin dolgunun içine doğru genişleyeceği mesafedir. Daha yüksek değerler, yüzeyin dolgu şekline daha iyi tutunmasını sağladığı gibi komşu katmanlardaki duvarların yüzeye daha iyi yapışmasını sağlar. Daha düşük değerler, kullanılan malzemenin miktarından tasarruf yapılmasını sağlar." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "Üst Yüzey Genişleme Mesafesi" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "Üst yüzeylerin dolgunun içine doğru genişleyeceği mesafedir. Daha yüksek değerler, yüzeyin dolgu şekline daha iyi tutunmasını sağladığı gibi yukarıdaki katmandaki duvarların yüzeye daha iyi yapışmasını sağlar. Daha düşük değerler, kullanılan malzemenin miktarından tasarruf yapılmasını sağlar." #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "Alt Yüzey Genişleme Mesafesi" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "Alt yüzeylerin dolgunun içine doğru genişleyeceği mesafedir. Daha yüksek değerler, yüzeyin dolgu şekline daha iyi tutunmasını sağladığı gibi yüzeyin aşağıdaki katmandaki duvara daha iyi yapışmasını sağlar. Daha düşük değerler, kullanılan malzemenin miktarından tasarruf yapılmasını sağlar." #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2822,7 +2818,7 @@ msgstr "Zik Zak" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "Çapraz" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2837,32 +2833,32 @@ msgstr "Zikzakları Bağla Zik zak destek yapısının sağlamlığını artır #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "Parçalarda Döküm Desteği" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "Destek yapısının daha kolay kırılması için bazı destek hattı bağlantılarını atlayın. Bu ayar, Zikzak destek dolgusu şekli için geçerlidir." #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "Destek Parçasının Boyutu" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "Destek yapısının daha kolay kırılması için her N milimetresinde bir destek hatları arasında bağlantı atlayın." #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "Destek Parçası Hattı Sayısı" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "Destek yapısının daha kolay kırılması için her N bağlantı hattında bir zikzak atlayın." #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3404,9 +3400,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"Etek ve baskının ilk katmanı arasındaki yatay mesafe.\n" -"Bu minimum mesafedir ve çoklu etek hatları bu mesafeden dışa doğru genişleyecektir." +msgstr "Etek ve baskının ilk katmanı arasındaki yatay mesafe.\nBu minimum mesafedir ve çoklu etek hatları bu mesafeden dışa doğru genişleyecektir." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3451,22 +3445,22 @@ msgstr "Sadece modelin dış kısmındaki kenarı yazdırır. Yatak yapışması #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "İlk Katman Z Ofseti" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "Ekstrüder, birinci katmanın normal yüksekliğinden bu miktarda mesafe bırakılır. Negatif (yükseltilmiş) veya pozitif (alçaltılmış) olabilir. Ekstrüderin hafifçe yükseltilmesi durumunda, bazı filaman türleri yapı levhasına daha iyi yapışır." #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Z Ofseti Konik Katmanları" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "Sıfır olmadığında, Z ofseti birçok katman üzerinde 0’a düşürülür. 0 değeri, Z ofsetinin yazdırmada yer alan tüm katmanlarda sabit kalması anlamına gelir." #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3481,12 +3475,12 @@ msgstr "Radye etkinleştirildiğinde, ayrıca radye verilen model etrafındaki e #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Radye Düzeltme" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "Bu ayar, radye ana hattında yer alan iç köşelerin ne kadar yuvarlandığını kontrol eder. İç köşeler, burada belirtilen değere eşit yarıçapa sahip yarım daire şeklinde yuvarlanır. Ayrıca bu ayar, söz konusu daireden daha küçük olan radye ana hattındaki delikleri ortadan kaldırır." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4166,12 +4160,12 @@ msgstr "Z dikişinin görünürlüğünü azaltmak için helezon şeklinde kontu #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "Bağıl Ekstrüzyon" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "Mutlak ekstrüzyon yerine bağıl ekstrüzyon uygulayın. Bağıl E-adımlarının uygulanması, Gcode’un sonradan işlenmesini kolaylaştırır. Ancak bu, tüm yazıcılar tarafından desteklenmemektedir ve mutlak E-adımları ile karşılaştırıldığında birikmiş malzemenin miktarında hafif farklılıklar yaratabilir. Bu ayara bakılmaksızın, herhangi bir Gcode komut dosyası çıkartılmadan önce ekstrüzyon modu her zaman mutlak değere ayarlı olacaktır." #: fdmprinter.def.json msgctxt "experimental label" @@ -4186,12 +4180,12 @@ msgstr "deneysel!" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "Duvar Yazdırma Sırasını Optimize Et" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "Geri çekmelerin sayısını ve kat edilen mesafeyi azaltmak için duvarların yazdırıldığı sırayı optimize edin. Çoğu parça, bunun etkinleştirilmesinden yararlanır, ancak bazılarının yararlanması için gerçekte daha uzun bir süre gerekebilir. Bu yüzden, yazdırma süresi tahminlerini optimizasyonlu ve optimizasyonsuz olarak karşılaştırın." #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4316,22 +4310,22 @@ msgstr "Üst/alt katmanların yazdırıldığı yönü değiştirin. Normal koş #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "Çapraz 3D Cebin Boyutu" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "Şeklin kendisine temas ettiği yüksekliklerde, çapraz 3D şekilde dört yönlü kesişme yerlerinde bulunan ceplerin boyutudur." #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "Çapraz 3D Cepleri Değiştir" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "Cepleri sadece çapraz 3D şekildeki dört yönlü kesişme yerlerinin yarısında uygulayın ve şeklin kendisine temas ettiği yüksekliklerin arasında ceplerin yerini değiştirin." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4633,9 +4627,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\n" -"Bu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." +msgstr "Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\nBu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4755,12 +4747,12 @@ msgstr "Malzeme ekstrude edilmeden önce üst yüzey üzerinden bir kere daha ge #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "Sadece En Yüksek Katmanı Ütüle" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "Ütüleme işlemini bileşimin sadece en son katmanı üzerinde gerçekleştirin. Bu, alt katmanlarda pürüzsüz bir yüzey tesviyesine gerek olmadığı durumlarda zaman kazandırır." #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5124,4 +5116,4 @@ msgstr "Modeli dosyadan indirirken modele uygulanacak olan dönüşüm matrisi" #~ msgctxt "multiple_mesh_overlap label" #~ msgid "Dual Extrusion Overlap" -#~ msgstr "İkili Ekstrüzyon Çakışması" +#~ msgstr "İkili Ekstrüzyon Çakışması" \ No newline at end of file diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 60e0139877..3fd9f30fd2 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-28 11:00+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" @@ -26,7 +26,7 @@ msgstr "打印机设置" #: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 msgctxt "@item:inlistbox" msgid "X-Ray view" -msgstr "" +msgstr "透视视图" #: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 msgctxt "@item:inlistbox" @@ -41,17 +41,17 @@ msgstr "GCode 文件" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 msgctxt "@action:button" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "使用 Doodle3D WiFi-Box 打印" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 msgctxt "@properties:tooltip" msgid "Print with Doodle3D WiFi-Box" -msgstr "" +msgstr "使用 Doodle3D WiFi-Box 打印" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 msgctxt "@info:status" msgid "Connecting to Doodle3D Connect" -msgstr "" +msgstr "连接至 Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 @@ -75,32 +75,32 @@ msgstr "取消" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 msgctxt "@info:status" msgid "Sending data to Doodle3D Connect" -msgstr "" +msgstr "发送数据至 Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 msgctxt "@info:status" msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" +msgstr "无法发送数据至 Doodle3D Connect。 是否有另一项作业仍在进行?" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 msgctxt "@info:status" msgid "Storing data on Doodle3D Connect" -msgstr "" +msgstr "在 Doodle3D Connect 中存储数据" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 msgctxt "@info:status" msgid "File sent to Doodle3D Connect" -msgstr "" +msgstr "已发送至 Doodle3D Connect 的文件" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect.." -msgstr "" +msgstr "打开 Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" msgid "Open the Doodle3D Connect web interface" -msgstr "" +msgstr "打开 Doodle3D Connect Web 界面" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:35 msgctxt "@item:inmenu" @@ -145,7 +145,7 @@ msgstr "无法启动新作业,因为打印机处于忙碌状态或未连接。 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:153 msgctxt "@info:title" msgid "Print Details" -msgstr "" +msgstr "打印品详细信息" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:status" @@ -155,7 +155,7 @@ msgstr "此打印机不支持通过 USB 打印,因为其使用 UltiGCode 类 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:456 msgctxt "@info:title" msgid "USB Printing" -msgstr "" +msgstr "USB 打印" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:460 msgctxt "@info:status" @@ -170,7 +170,7 @@ msgstr "无法启动新作业,因为该打印机不支持通过 USB 打印。" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1296 msgctxt "@info:title" msgid "Warning" -msgstr "" +msgstr "警告" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 msgctxt "@info" @@ -186,7 +186,7 @@ msgstr "在 %s 无法找到打印机所需的固件。" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 msgctxt "@info:title" msgid "Printer Firmware" -msgstr "" +msgstr "打印机固件" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 msgctxt "@action:button Preceded by 'Ready to'." @@ -203,25 +203,25 @@ msgstr "保存到可移动磁盘 {0}" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "" +msgstr "保存到可移动磁盘 {0} " #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 msgctxt "@info:title" msgid "Saving" -msgstr "" +msgstr "正在保存" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:99 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:102 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not save to {0}: {1}" -msgstr "" +msgstr "无法保存到 {0}{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:118 #, python-brace-format msgctxt "@info:status Don't translate the tag {device}!" msgid "Could not find a file name when trying to write to {device}." -msgstr "" +msgstr "尝试写入到 {device} 时找不到文件名。" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 @@ -238,7 +238,7 @@ msgstr "无法保存到可移动磁盘 {0}:{1}" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1305 msgctxt "@info:title" msgid "Error" -msgstr "" +msgstr "错误" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 #, python-brace-format @@ -249,7 +249,7 @@ msgstr "保存到可移动磁盘 {0} :{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 msgctxt "@info:title" msgid "File Saved" -msgstr "" +msgstr "文件已保存" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 msgctxt "@action:button" @@ -271,7 +271,7 @@ msgstr "已弹出 {0}。现在,您可以安全地拔出磁盘。" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "" +msgstr "安全移除硬件" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 #, python-brace-format @@ -306,7 +306,7 @@ msgstr "已发送打印机访问请求,请在打印机上批准该请求。" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:157 msgctxt "@info:title" msgid "Connection status" -msgstr "" +msgstr "连接状态" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:158 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:158 @@ -321,7 +321,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:500 msgctxt "@info:title" msgid "Connection Status" -msgstr "" +msgstr "连接状态" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:159 @@ -419,7 +419,7 @@ msgstr "打印机无法启动新的打印作业,当前的打印机状态为 %s #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:650 msgctxt "@info:title" msgid "Printer Status" -msgstr "" +msgstr "打印机状态" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:674 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:660 @@ -490,7 +490,7 @@ msgstr "向打印机发送数据" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "" +msgstr "正在发送数据" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -549,73 +549,73 @@ msgstr "通过网络连接" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:103 msgid "This printer is not set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:104 #, python-brace-format msgctxt "Count is number of printers." msgid "This printer is the host for a group of {count} connected Ultimaker 3 printers." -msgstr "" +msgstr "这台打印机是一组共 {count} 台已连接 Ultimaker 3 打印机的主机。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:105 #, python-brace-format msgid "{printer_name} has finished printing '{job_name}'. Please collect the print and confirm clearing the build plate." -msgstr "" +msgstr "{printer_name} 已完成打印 '{job_name}'。 请收起打印品并确认清空打印平台。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:106 #, python-brace-format msgid "{printer_name} is reserved to print '{job_name}'. Please change the printer's configuration to match the job, for it to start printing." -msgstr "" +msgstr "{printer_name} 已保留用于打印 '{job_name}'。 请更改打印机配置以匹配此项作业,以便开始打印。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:196 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" +msgstr "发送新作业(暂时)受阻,仍在发送前一份打印作业。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:212 msgctxt "@info:status" msgid "Unable to send new print job: this 3D printer is not (yet) set up to host a group of connected Ultimaker 3 printers." -msgstr "" +msgstr "无法发送新打印作业:此 3D 打印机(尚)未设置为运行一组连接的 Ultimaker 3 打印机。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:425 #, python-brace-format msgctxt "@info:progress" msgid "Sending {file_name} to group {cluster_name}" -msgstr "" +msgstr "发送 {file_name} 至组 {cluster_name}" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:498 #, python-brace-format msgctxt "@info:status" msgid "Sent {file_name} to group {cluster_name}." -msgstr "" +msgstr "已发送 {file_name} 至组 {cluster_name}。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:503 msgctxt "@action:button" msgid "Show print jobs" -msgstr "" +msgstr "显示打印作业" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:504 msgctxt "@info:tooltip" msgid "Opens the print jobs interface in your browser." -msgstr "" +msgstr "在您的浏览器中打开打印作业界面。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkClusterPrinterOutputDevice.py:520 #, python-brace-format msgctxt "@info:status" msgid "Unable to send print job to group {cluster_name}." -msgstr "" +msgstr "无法发送打印作业至组 {cluster_name}。" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:71 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "To ensure that your {machine_name} is equipped with the latest features it is recommended to update the firmware regularly. This can be done on the {machine_name} (when connected to the network) or via USB." -msgstr "" +msgstr "为确保您的 {machine_name} 具备最新功能,建议定期更新固件。 更新可在 {machine_name} 上(连接至网络时)或通过 USB 进行。" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:72 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "" +msgstr "新 %s 固件可用" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 @@ -626,7 +626,7 @@ msgstr "下载" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:83 msgctxt "@info" msgid "Could not access update information." -msgstr "" +msgstr "无法获取更新信息。" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 msgctxt "@info:status" @@ -665,7 +665,7 @@ msgstr "Cura 收集匿名切片统计资料。 您可以在偏好设置中禁用 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 msgctxt "@info:title" msgid "Collecting Data" -msgstr "" +msgstr "正在收集数据" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 msgctxt "@action:button" @@ -686,7 +686,7 @@ msgstr "GCode 文件" #: /home/ruben/Projects/Cura/plugins/LayerView/__init__.py:13 msgctxt "@item:inlistbox" msgid "Layer view" -msgstr "" +msgstr "分层视图" #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:93 msgctxt "@info:status" @@ -696,7 +696,7 @@ msgstr "当单线打印(Wire Printing)功能开启时,Cura 将无法准确 #: /home/ruben/Projects/Cura/plugins/LayerView/LayerView.py:94 msgctxt "@info:title" msgid "Layer View" -msgstr "" +msgstr "分层视图" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -726,7 +726,7 @@ msgstr "GIF 图像" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." -msgstr "" +msgstr "无法使用当前材料进行切片,因为该材料与所选机器或配置不兼容。" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 @@ -734,7 +734,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:316 msgctxt "@info:title" msgid "Unable to slice" -msgstr "" +msgstr "无法切片" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 #, python-brace-format @@ -761,7 +761,7 @@ msgstr "正在处理层" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:238 msgctxt "@info:title" msgid "Information" -msgstr "" +msgstr "信息" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" @@ -800,18 +800,18 @@ msgstr "喷嘴" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:28 msgctxt "@menuitem" msgid "Browse plugins" -msgstr "" +msgstr "浏览插件" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:163 #, python-brace-format msgctxt "@info:status" msgid "Failed to get plugin ID from {0}" -msgstr "" +msgstr "无法从 {0} 获取插件 ID" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 msgctxt "@info:tile" msgid "Warning" -msgstr "" +msgstr "警告" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:202 msgctxt "@window:title" @@ -821,7 +821,7 @@ msgstr "插件浏览器" #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" -msgstr "" +msgstr "实体视图" #: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 msgctxt "@item:inlistbox" @@ -837,7 +837,7 @@ msgstr "解析 G-code" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:370 msgctxt "@info:title" msgid "G-code Details" -msgstr "" +msgstr "G-code 详细信息" #: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:368 msgctxt "@info:generic" @@ -919,7 +919,7 @@ msgstr "支撑" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 msgctxt "@tooltip" msgid "Skirt" -msgstr "" +msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 msgctxt "@tooltip" @@ -960,7 +960,7 @@ msgstr "正在为模型寻找新位置" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 msgctxt "@info:title" msgid "Finding Location" -msgstr "" +msgstr "正在寻找位置" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 @@ -971,7 +971,7 @@ msgstr "无法在成形空间体积内放下全部模型" #: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "" +msgstr "找不到位置" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:112 @@ -984,7 +984,7 @@ msgstr "文件已存在" #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "The file {0} already exists. Are you sure you want to overwrite it?" -msgstr "" +msgstr "文件 {0} 已存在。 您确定要替换它吗?" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 msgctxt "@label" @@ -1026,24 +1026,24 @@ msgstr "撤销更改材料直径。" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" -msgstr "" +msgstr "无法将配置文件导出至 {0} {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:150 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "" +msgstr "无法将配置文件导出至 {0} : 写入器插件报告故障。" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:155 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "" +msgstr "配置文件已导出至: {0} " #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 msgctxt "@info:title" msgid "Export Details" -msgstr "" +msgstr "导出详细信息" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:182 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:204 @@ -1052,7 +1052,7 @@ msgstr "" #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "" +msgstr "无法从 {0} 导入配置文件: {1}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:215 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:251 @@ -1091,7 +1091,7 @@ msgstr "由于“打印序列”设置的值,成形空间体积高度已被减 #: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 msgctxt "@info:title" msgid "Build Volume" -msgstr "" +msgstr "成形空间体积" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 msgctxt "@info:status" @@ -1102,7 +1102,7 @@ msgstr "复制并放置模型" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 msgctxt "@info:title" msgid "Placing Object" -msgstr "" +msgstr "放置模型" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:54 msgctxt "@title:window" @@ -1115,9 +1115,7 @@ msgid "" "

A fatal exception has occurred that we could not recover from!

\n" "

Please use the information below to post a bug report at http://github.com/Ultimaker/Cura/issues

\n" " " -msgstr "" -"

发生了致命错误,我们无法恢复!

\n" -"

请在以下网址中使用下方的信息提交错误报告:http://github.com/Ultimaker/Cura/issues

" +msgstr "

发生了致命错误,我们无法恢复!

\n

请在以下网址中使用下方的信息提交错误报告:http://github.com/Ultimaker/Cura/issues

" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 msgctxt "@action:button" @@ -1419,10 +1417,7 @@ msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"要通过网络向打印机发送打印请求,请确保您的打印机已通过网线或 WIFI 连接到网络。若您不能连接 Cura 与打印机,您仍然可以使用 USB 设备将 G-code 文件传输到打印机。\n" -"\n" -"从以下列表中选择您的打印机:" +msgstr "要通过网络向打印机发送打印请求,请确保您的打印机已通过网线或 WIFI 连接到网络。若您不能连接 Cura 与打印机,您仍然可以使用 USB 设备将 G-code 文件传输到打印机。\n\n从以下列表中选择您的打印机:" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:75 @@ -1548,17 +1543,17 @@ msgstr "应用配置" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "" +msgstr "这台打印机是一组 %1 台已连接 Ultimaker 3 打印机的主机" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" msgid "Print over network" -msgstr "" +msgstr "通过网络打印" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:92 msgctxt "@action:button" @@ -1568,98 +1563,98 @@ msgstr "打印" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:50 msgctxt "@label: arg 1 is group name" msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "" +msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:311 msgctxt "@label:status" msgid "Printing" -msgstr "" +msgstr "打印" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:315 msgctxt "@label:status" msgid "Reserved" -msgstr "" +msgstr "保留" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:317 msgctxt "@label:status" msgid "Finished" -msgstr "" +msgstr "已完成" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:320 msgctxt "@label:status" msgid "Preparing" -msgstr "" +msgstr "准备" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:327 msgctxt "@label:status" msgid "Available" -msgstr "" +msgstr "可用" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:367 msgctxt "@label" msgid "Completed on: " -msgstr "" +msgstr "完成时间: " #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:371 msgctxt "@label" msgid "Clear build plate" -msgstr "" +msgstr "清空打印平台" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:375 msgctxt "@label" msgid "Preparing to print" -msgstr "" +msgstr "准备打印" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterMonitorItem.qml:379 msgctxt "@label" msgid "Not accepting print jobs" -msgstr "" +msgstr "不接受打印作业" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "使用默认 Web 浏览器打开打印作业页面。" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:154 msgctxt "@action:button" msgid "View print jobs" -msgstr "" +msgstr "查看打印作业" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:36 msgctxt "@label" msgid "PRINTER GROUP" -msgstr "" +msgstr "打印机组" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:69 msgctxt "@title" msgid "Print jobs" -msgstr "" +msgstr "打印作业" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:100 msgctxt "@label" msgid "Printing" -msgstr "" +msgstr "打印" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:118 msgctxt "@label" msgid "Queued" -msgstr "" +msgstr "已排队" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:135 msgctxt "@label" msgid "Waiting for configuration change" -msgstr "" +msgstr "正在等待配置更改" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:194 msgctxt "@label:title" msgid "Printers" -msgstr "" +msgstr "打印机" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/ClusterControlItem.qml:247 msgctxt "@action:button" msgid "View printers" -msgstr "" +msgstr "查看打印机" #: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 msgctxt "@title:window" @@ -2048,7 +2043,7 @@ msgstr "已安装" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 msgctxt "@title:window" msgid "Plugin License Agreement" -msgstr "" +msgstr "插件许可协议" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 msgctxt "@label" @@ -2056,17 +2051,17 @@ msgid "" " plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" +msgstr " 插件包含一个许可。\n您需要接受此许可才能安装此插件。\n是否同意下列条款?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" msgid "Accept" -msgstr "" +msgstr "接受" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 msgctxt "@action:button" msgid "Decline" -msgstr "" +msgstr "拒绝" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2321,9 +2316,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"您已自定义某些配置文件设置。\n" -"您想保留或舍弃这些设置吗?" +msgstr "您已自定义某些配置文件设置。\n您想保留或舍弃这些设置吗?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2907,12 +2900,12 @@ msgstr "导入配置" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "" +msgstr "无法导入材料 %1%2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "" +msgstr "成功导入材料 %1" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2923,12 +2916,12 @@ msgstr "导出材料" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "" +msgstr "无法导出材料至 %1%2" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "" +msgstr "成功导出材料至: %1" #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -2961,9 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"Cura 由 Ultimaker B.V. 与社区合作开发。\n" -"Cura 使用以下开源项目:" +msgstr "Cura 由 Ultimaker B.V. 与社区合作开发。\nCura 使用以下开源项目:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3066,10 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"某些设置/重写值与存储在配置文件中的值不同。\n" -"\n" -"点击打开配置文件管理器。" +msgstr "某些设置/重写值与存储在配置文件中的值不同。\n\n点击打开配置文件管理器。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3107,10 +3095,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"一些隐藏设置正在使用有别于一般设置的计算值。\n" -"\n" -"单击以使这些设置可见。" +msgstr "一些隐藏设置正在使用有别于一般设置的计算值。\n\n单击以使这些设置可见。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3138,10 +3123,7 @@ msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"此设置的值与配置文件不同。\n" -"\n" -"单击以恢复配置文件的值。" +msgstr "此设置的值与配置文件不同。\n\n单击以恢复配置文件的值。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3149,10 +3131,7 @@ msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"此设置通常可被自动计算,但其当前已被绝对定义。\n" -"\n" -"单击以恢复自动计算的值。" +msgstr "此设置通常可被自动计算,但其当前已被绝对定义。\n\n单击以恢复自动计算的值。" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:118 msgctxt "@label:listbox" @@ -3164,9 +3143,7 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"打印设置已禁用\n" -"G-code 文件无法被修改" +msgstr "打印设置已禁用\nG-code 文件无法被修改" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:326 msgctxt "@label" @@ -3176,22 +3153,22 @@ msgstr "00 小时 00 分" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:344 msgctxt "@tooltip" msgid "Time information" -msgstr "" +msgstr "时间信息" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:370 msgctxt "@description" msgid "Print time" -msgstr "" +msgstr "打印时间" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" @@ -3249,12 +3226,12 @@ msgstr "没有连接打印机" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:157 msgctxt "@label" msgid "Extruder" -msgstr "" +msgstr "挤出机" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:120 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." -msgstr "" +msgstr "热端的目标温度。 热端将加热或冷却至此温度。 如果目标温度为 0,则热端加热将关闭。" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 msgctxt "@tooltip" @@ -3720,27 +3697,27 @@ msgstr "准备" #: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:79 msgctxt "@title:tab" msgid "Monitor" -msgstr "" +msgstr "监控" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:50 msgctxt "@label" msgid "Layer Height" -msgstr "" +msgstr "层高" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:62 msgctxt "@label" msgid "Print Speed" -msgstr "" +msgstr "打印速度" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:73 msgctxt "@label" msgid "Slower" -msgstr "" +msgstr "更慢" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:85 msgctxt "@label" msgid "Faster" -msgstr "" +msgstr "更快" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:416 msgctxt "@label" @@ -3755,7 +3732,7 @@ msgstr "渐层填充(Gradual infill)将随着打印高度的提升而逐渐 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "" +msgstr "启用渐层" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" @@ -3831,7 +3808,7 @@ msgstr "材料" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:374 msgctxt "@label" msgid "Check material compatibility" -msgstr "" +msgstr "检查材料兼容性" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:394 msgctxt "@tooltip" @@ -3891,12 +3868,12 @@ msgstr "God 模式" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" +msgstr "接受 G-Code 并通过 WiFi 将其发送到 Doodle3D WiFi-Box。" #: Doodle3D-cura-plugin/Doodle3D/plugin.json msgctxt "name" msgid "Doodle3D WiFi-Box" -msgstr "" +msgstr "Doodle3D WiFi-Box" #: ChangeLogPlugin/plugin.json msgctxt "description" @@ -3951,17 +3928,17 @@ msgstr "UM3 网络连接" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "" +msgstr "UM3 网络连接(群集)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "" +msgstr "检查以进行固件更新。" #: FirmwareUpdateChecker/plugin.json msgctxt "name" msgid "Firmware Update Checker" -msgstr "" +msgstr "固件更新检查程序" #: CuraSolidWorksPlugin/plugin.json msgctxt "description" @@ -4056,12 +4033,12 @@ msgstr "版本自 2.5 升级到 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "" +msgstr "将配置从 Cura 2.7 版本升级至 3.0 版本。" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "版本自 2.7 升级到 3.0" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4689,4 +4666,4 @@ msgstr "Cura 配置文件读取器" #~ msgctxt "@label" #~ msgid "Print Selected Model with %1" #~ msgid_plural "Print Selected Models With %1" -#~ msgstr[0] "用 %1 打印所选模型" +#~ msgstr[0] "用 %1 打印所选模型" \ No newline at end of file diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index afeff326f8..78650174db 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" -"PO-Revision-Date: 2017-08-28 11:00+0200\n" +"PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" @@ -58,9 +58,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"在开始后执行的 G-code 命令 - 以 \n" -" 分行" +msgstr "在开始后执行的 G-code 命令 - 以 \n 分行" #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -72,9 +70,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"在结束前执行的 G-code 命令 - 以 \n" -" 分行" +msgstr "在结束前执行的 G-code 命令 - 以 \n 分行" #: fdmprinter.def.json msgctxt "material_guid label" @@ -1124,7 +1120,7 @@ msgstr "随机" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "最尖角" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1149,32 +1145,32 @@ msgstr "位置的 Y 轴坐标,在该位置附近开始打印层中各个部分 #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "缝隙角偏好设置" #: fdmprinter.def.json msgctxt "z_seam_corner description" msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "" +msgstr "控制模型轮廓上的各个角是否影响缝隙的位置。 “无”意味着各个角不影响缝隙位置。 “隐藏缝隙”会使缝隙更可能出现在内侧角上。 “外露缝隙”会使缝隙更可能出现在外侧角上。 “隐藏或外露缝隙”会使缝隙更可能出现在内侧或外侧角上。" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "无" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "隐藏缝隙" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "外露缝隙" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "隐藏或外露缝隙" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1254,7 +1250,7 @@ msgstr "填充图案" #: fdmprinter.def.json msgctxt "infill_pattern description" msgid "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, cubic, octet, quarter cubic and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "" +msgstr "打印填充材料的图案。 线条和锯齿形填充在交替层上交换方向,从而降低材料成本。 网格、三角形、立方体、八角形、四面体和同心图案在每层完整打印。 立方体、四面体和八角形填充随每层变化,以在各个方向提供更均衡的强度分布。" #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1284,12 +1280,12 @@ msgstr "立方体分区" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "八角形" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "四面体" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" @@ -1309,22 +1305,22 @@ msgstr "锯齿状" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "交叉" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "交叉 3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" -msgstr "" +msgstr "连接填充走线" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a lines which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduces the effects on infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "使用沿内壁形状的走线连接填充图案与内壁相接的各端。 启用此设置会使填充更好地粘着在壁上,减少填充物效果对垂直表面质量的影响。 禁用此设置可减少使用的材料量。" #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1449,32 +1445,32 @@ msgstr "不要生成小于此面积的填充区域(使用皮肤取代)。" #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "肤移除宽度" #: fdmprinter.def.json msgctxt "skin_preshrink description" msgid "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "将被移除的皮肤区域的最大宽度。 小于此值的所有皮肤区域都将消失。 这有助于限制在模型的倾斜表面打印顶部/底部皮肤时所耗用的时间和材料。" #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "顶部皮肤移除宽度" #: fdmprinter.def.json msgctxt "top_skin_preshrink description" msgid "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model." -msgstr "" +msgstr "将被移除的顶部皮肤区域的最大宽度。 小于此值的所有皮肤区域都将消失。 这有助于限制在模型的倾斜表面打印顶部皮肤时所耗用的时间和材料。" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "底部皮肤移除宽度" #: fdmprinter.def.json msgctxt "bottom_skin_preshrink description" msgid "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model." -msgstr "" +msgstr "将被移除的底部皮肤区域的最大宽度。 小于此值的所有皮肤区域都将消失。 这有助于限制在模型的倾斜表面打印底部皮肤时所耗用的时间和材料。" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" @@ -1484,27 +1480,27 @@ msgstr "皮肤扩展距离" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" msgid "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "皮肤扩展到填充物中的距离。 值越大会让皮肤与填充图案更好地附着,并让相邻层的层壁与皮肤更好地粘着。 较低的值将节省所用的材料量。" #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "顶部皮肤扩展距离" #: fdmprinter.def.json msgctxt "top_skin_expand_distance description" msgid "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used." -msgstr "" +msgstr "顶部皮肤扩展到填充物中的距离。 值越大会让皮肤与填充图案更好地附着,并让上方层的层壁与皮肤更好地粘着。 较低的值将节省所用的材料量。" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "底部皮肤扩展距离" #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance description" msgid "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used." -msgstr "" +msgstr "底部皮肤扩展到填充物中的距离。 值越大会让皮肤与填充图案更好地附着,并让皮肤与下面层的壁更好地粘着。 较低的值将节省所用的材料量。" #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" @@ -2824,7 +2820,7 @@ msgstr "锯齿形" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "交叉" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" @@ -2839,32 +2835,32 @@ msgstr "连接锯齿形。 这将增加锯齿形支撑结构的强度。" #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "将支撑结构分拆成块状" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" msgid "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern." -msgstr "" +msgstr "跳过部分支撑线连接,让支撑结构更容易脱离。 此设置适用于锯齿形支撑结构填充图案。" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "支撑块大小" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" msgid "Leave out a connection between support lines once every N millimeter to make the support structure easier to break away." -msgstr "" +msgstr "每隔 N 毫米在支撑线之间略去一个连接,让支撑结构更容易脱离。" #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "支撑块走线数" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" msgid "Skip one in every N connection lines to make the support structure easier to break away." -msgstr "" +msgstr "每隔 N 个连接线跳过一个连接,让支撑结构更容易脱离。" #: fdmprinter.def.json msgctxt "support_infill_rate label" @@ -3406,9 +3402,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance, multiple skirt lines will extend outwards from this distance." -msgstr "" -"skirt 和打印第一层之间的水平距离。\n" -"这是最小距离,多个 skirt 走线将从此距离向外延伸。" +msgstr "skirt 和打印第一层之间的水平距离。\n这是最小距离,多个 skirt 走线将从此距离向外延伸。" #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3453,22 +3447,22 @@ msgstr "仅在模型外部打印 brim。 这会减少您之后需要移除的 br #: fdmprinter.def.json msgctxt "z_offset_layer_0 label" msgid "Initial Layer Z Offset" -msgstr "" +msgstr "起始层 Z 偏移量" #: fdmprinter.def.json msgctxt "z_offset_layer_0 description" msgid "The extruder is offset from the normal height of the first layer by this amount. It can be positive (raised) or negative (lowered). Some filament types adhere to the build plate better if the extruder is raised slightly." -msgstr "" +msgstr "此值为挤出机与第一层正常高度之间的偏移量。 该值可以为正(升起),也可以为负(降下)。 如果挤出机略微升起,部分耗材类型会与打印平台实现更好的粘着。" #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "" +msgstr "Z 偏移锥形层" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" msgid "When non-zero, the Z offset is reduced to 0 over that many layers. A value of 0 means that the Z offset remains constant for all the layers in the print." -msgstr "" +msgstr "当非零时,Z 偏移在多个层中逐步降至零。 值为 0 则表示,在打印品的各个层中 Z 偏移量保持不变。" #: fdmprinter.def.json msgctxt "raft_margin label" @@ -3483,12 +3477,12 @@ msgstr "如果启用了 raft,则这是指也被提供了 raft 的模型周围 #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "Raft 平滑度" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "This setting control how much inner corners in the raft outline are rounded. Inward corners are rounded to a semi circle with a radius equal to the value given here. This setting also removes holes in the raft outline which are smaller than such a circle." -msgstr "" +msgstr "该设置控制 Raft 轮廓中的内角呈圆形的程度。 内向角被设置为半圆形,半径等于此处的值。 此设置还会移除 raft 轮廓中小于此半圆形的孔。" #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4168,12 +4162,12 @@ msgstr "平滑螺旋轮廓以减少 Z 缝的可见性(Z 缝应在打印品上 #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "相对挤出" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the Gcode. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any Gcode script is output." -msgstr "" +msgstr "使用相对挤出而不是绝对挤出。 使用相对 E 步阶,对 Gcode 进行更轻松的后期处理。 但是,不是所有打印机均支持此功能,而且与绝对 E 步阶相比,它在沉积材料量上会产生非常轻微的偏差。 不论是否有此设置,挤出模式将始终设置为绝对挤出后才会输出任何 Gcode 脚本。" #: fdmprinter.def.json msgctxt "experimental label" @@ -4188,12 +4182,12 @@ msgstr "实验性!" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "优化壁打印顺序" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." -msgstr "" +msgstr "优化打印各个壁的顺序,以减少回抽次数和空驶距离。 启用此设置将对大部分零件有益,但有的则会耗费更长时间,因此请将优化和不优化的打印时间估计值进行对比。" #: fdmprinter.def.json msgctxt "draft_shield_enabled label" @@ -4318,22 +4312,22 @@ msgstr "交替打印顶部/底部层的方向。 通常它们只进行对角线 #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "交叉 3D 气槽大小" #: fdmprinter.def.json msgctxt "cross_infill_pocket_size description" msgid "The size of pockets at four-way crossings in the cross 3D pattern at heights where the pattern is touching itself." -msgstr "" +msgstr "交叉 3D 图案的四向交叉处的气槽大小,高度为图案与自身接触的位置。" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "交替交叉 3D 气槽" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "" +msgstr "仅在交叉 3D 图案的一半四向交叉处应用气槽,并在图案与自身接触的高度之间交替气槽的位置。" #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4635,9 +4629,7 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "" -"以半速挤出的上行移动的距离。\n" -"这会与之前的层产生更好的附着,而不会将这些层中的材料过度加热。 仅应用于单线打印。" +msgstr "以半速挤出的上行移动的距离。\n这会与之前的层产生更好的附着,而不会将这些层中的材料过度加热。 仅应用于单线打印。" #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -4757,12 +4749,12 @@ msgstr "再一次经过顶部表面,但不挤出材料。 这是为了进一 #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "仅熨平最高层" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "" +msgstr "仅在网格的最后一层执行熨平。 如果较低的层不需要平滑的表面效果,这将节省时间。" #: fdmprinter.def.json msgctxt "ironing_pattern label" @@ -5006,4 +4998,4 @@ msgstr "在将模型从文件中载入时应用在模型上的转换矩阵。" #~ msgctxt "machine_gcode_flavor option RepRap (Volumatric)" #~ msgid "RepRap (Volumetric)" -#~ msgstr "RepRap (Volumetric)" +#~ msgstr "RepRap (Volumetric)" \ No newline at end of file From 33fdca4a6b625d0436289178d250317040ab58c5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 27 Sep 2017 17:27:47 +0200 Subject: [PATCH 22/26] Fix mistakes in translations from Bothof What do we pay these guys for? Contributes to issue CURA-4341. --- resources/i18n/es_ES/cura.po | 14 +++++++------- resources/i18n/es_ES/fdmprinter.def.json.po | 8 ++++---- resources/i18n/fr_FR/cura.po | 4 ++-- resources/i18n/fr_FR/fdmprinter.def.json.po | 4 ++-- resources/i18n/nl_NL/cura.po | 12 ++++++------ resources/i18n/nl_NL/fdmprinter.def.json.po | 18 +++++++++--------- 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index c4e0dd333c..4971703962 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 2.7\n" +"Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" @@ -2900,12 +2900,12 @@ msgstr "Importar material" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:320 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" -msgstr "No se pudo importar el material en %1: %2." +msgstr "No se pudo importar el material en %1: %2." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:324 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" -msgstr "El material se ha importado correctamente en %1." +msgstr "El material se ha importado correctamente en %1." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 @@ -2916,12 +2916,12 @@ msgstr "Exportar material" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:362 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" -msgstr "Se ha producido un error al exportar el material a %1: %2." +msgstr "Se ha producido un error al exportar el material a %1: %2." #: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:368 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" -msgstr "El material se ha exportado correctamente a %1." +msgstr "El material se ha exportado correctamente a %1." #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:766 @@ -3163,12 +3163,12 @@ msgstr "Tiempo de impresión" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:409 msgctxt "@label" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "%1m/~ %2g/~ %4 %3" +msgstr "%1m / ~ %2g/ ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:414 msgctxt "@label" msgid "%1m / ~ %2g" -msgstr "%1m/~ %2g" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:476 msgctxt "@tooltip" diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index dcf8c318c7..b472fd44a7 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 2.7\n" +"Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" @@ -56,7 +56,7 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "Los comandos de Gcode que se ejecutarán justo al inicio, separados por \n." +msgstr "Los comandos de Gcode que se ejecutarán justo al inicio - separados por \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +68,7 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "Los comandos de Gcode que se ejecutarán justo al final, separados por \n." +msgstr "Los comandos de Gcode que se ejecutarán justo al final - separados por \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -4320,7 +4320,7 @@ msgstr "Tamaño de las bolsas en cruces del patrón de cruz 3D en las alturas en #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "Bolsas 3D en cruz alternantes" +msgstr "Alternar bolsas 3D en cruz" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index ffdff5e74f..d5cc344828 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 2.7\n" +"Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" @@ -3934,7 +3934,7 @@ msgstr "Connexion au réseau UM3" #: CuraPrintClusterUpload/plugin.json msgctxt "name" msgid "UM3 Network Connection (Cluster)" -msgstr "Connexion au réseau UM3 (cluster)" +msgstr "Connexion au réseau UM3 (Cluster)" #: FirmwareUpdateChecker/plugin.json msgctxt "description" diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index ebad6779de..0a4a135b99 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 2.7\n" +"Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" @@ -4320,7 +4320,7 @@ msgstr "La taille de poches aux croisements à quatre branches dans le motif ent #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "Poches entrecroisées 3D alternatives" +msgstr "Alterner les poches entrecroisées 3D" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 48da7e783e..2444bf6a4c 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -488,7 +488,7 @@ msgstr "De gegevens worden naar de printer verzonden" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:839 msgctxt "@info:title" msgid "Sending Data" -msgstr "De gegevens worden verzonden" +msgstr "Gegevens Verzenden" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:908 #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/NetworkPrinterOutputDevice.py:890 @@ -1541,12 +1541,12 @@ msgstr "Configuratie Activeren" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:284 msgctxt "@label" msgid "This printer is not set up to host a group of connected Ultimaker 3 printers" -msgstr "Deze printer is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" +msgstr "Deze printer is niet ingesteld voor het hosten van een groep aaneengesloten Ultimaker 3-printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/DiscoverUM3Action.qml:287 msgctxt "@label" msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -msgstr "Deze printer is de host voor een groep van %1 aangesloten Ultimaker 3-printers" +msgstr "Deze printer is de host voor een groep van %1 aaneengesloten Ultimaker 3-printers" #: /home/ruben/Projects/Cura/plugins/CuraPrintClusterUpload/PrintWindow.qml:24 msgctxt "@title:window" @@ -2954,7 +2954,7 @@ msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\nCura is er trots op gebruik te maken van de volgende opensourceprojecten:" +msgstr "Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\nCura maakt met trots gebruik van de volgende opensourceprojecten:" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 msgctxt "@label" @@ -3057,7 +3057,7 @@ msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Sommige waarden voor instellingen/overschrijvingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n\nKlik om het profielbeheer te openen." +msgstr "Sommige waarden of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n\nKlik om het profielbeheer te openen." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:145 msgctxt "@label:textbox" @@ -3737,7 +3737,7 @@ msgstr "Met geleidelijke vulling neemt de hoeveelheid vulling naar boven toe." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:602 msgctxt "@label" msgid "Enable gradual" -msgstr "Geleidelijke vulling inschakelen" +msgstr "Geleidelijke vulling" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:668 msgctxt "@label" diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 03c3cc8d38..18b692c116 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 2.7\n" +"Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-08-02 16:53+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" @@ -1278,7 +1278,7 @@ msgstr "Kubische onderverdeling" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "Achtvlak" +msgstr "Octet" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" @@ -2833,7 +2833,7 @@ msgstr "Verbind de zigzaglijnen. Hiermee versterkt u de zigzag-supportstructuur. #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "Supportstructuur in stukken breken" +msgstr "Supportstructuur in Stukken Breken" #: fdmprinter.def.json msgctxt "support_skip_some_zags description" @@ -2843,7 +2843,7 @@ msgstr "Sla enkele verbindingen tussen lijnen van de supportstructuur over zodat #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "Grootte supportstuk" +msgstr "Grootte Supportstuk" #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm description" @@ -2853,7 +2853,7 @@ msgstr "Sla elke N millimeter een verbinding tussen de lijnen van de supportstru #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "Aantal lijnen supportstuk" +msgstr "Aantal Lijnen Supportstuk" #: fdmprinter.def.json msgctxt "support_zag_skip_count description" @@ -3455,7 +3455,7 @@ msgstr "De extruder wordt in deze mate gecorrigeerd ten opzichte van de normale #: fdmprinter.def.json msgctxt "z_offset_taper_layers label" msgid "Z Offset Taper Layers" -msgstr "Z-offset Taps Toelopende Lagen" +msgstr "Z-offset Aflopende Lagen" #: fdmprinter.def.json msgctxt "z_offset_taper_layers description" @@ -4160,7 +4160,7 @@ msgstr "Maak de gespiraliseerde contouren vlak om de zichtbaarheid van de Z-naad #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "Relatieve extrusie" +msgstr "Relatieve Extrusie" #: fdmprinter.def.json msgctxt "relative_extrusion description" @@ -4325,7 +4325,7 @@ msgstr "Afwisselend luchtbellen in kruis 3D" #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly description" msgid "Only apply pockets at half of the four-way crossings in the cross 3D pattern and alternate the location of the pockets between heights where the pattern is touching itself." -msgstr "Laat alleen luchtbellen achter in de helft van de kruispunten in het kruis 3D-patroon en wisselt de plaats van de luchtbellen op punten waar het patroon zichzelf raakt." +msgstr "Laat alleen luchtbellen achter in de helft van de kruispunten in het Kruis 3D-patroon en wisselt de plaats van de luchtbellen op punten waar het patroon zichzelf raakt." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -4752,7 +4752,7 @@ msgstr "Alleen hoogste laag strijken" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer description" msgid "Only perform ironing on the very last layer of the mesh. This saves time if the lower layers don't need a smooth surface finish." -msgstr "Strijk alleen de allerlaatste laag van het raster. Dit bespaart tijd als de daaronder gelegen lagen geen glad oppervlak vereisen." +msgstr "Strijk alleen de allerlaatste laag van het voorwerp. Dit bespaart tijd als de daaronder gelegen lagen geen glad oppervlak vereisen." #: fdmprinter.def.json msgctxt "ironing_pattern label" From fcc914cf0d2aab3c7c6ae31ceaf10fc2392b4986 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 27 Sep 2017 17:28:32 +0200 Subject: [PATCH 23/26] Make material colour indication a circle instead of square The rest of them are circles. This one should be one too. --- resources/qml/PrintMonitor.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 931a8ae23f..f9c6aff7ed 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -164,6 +164,7 @@ Column id: materialColor width: materialName.height * 0.75 height: materialName.height * 0.75 + radius: width / 2 color: (connectedPrinter != null && connectedPrinter.materialColors[index] != null && connectedPrinter.materialIds[index] != "") ? connectedPrinter.materialColors[index] : "#00000000" border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") From 0b036818909a036a67902b248515c1451c12a492 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Wed, 27 Sep 2017 22:28:20 +0200 Subject: [PATCH 24/26] Hide gradual infill checkbox if the gradual infill steps setting is disabled --- resources/qml/SidebarSimple.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 3a104e81a1..18518fe611 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -360,7 +360,7 @@ Item { id: infillCellRight - height: infillSlider.height + enableGradualInfillCheckBox.height + (UM.Theme.getSize("sidebar_margin").height * 2) + height: infillSlider.height + UM.Theme.getSize("sidebar_margin").height + enableGradualInfillCheckBox.visible * (enableGradualInfillCheckBox.height + UM.Theme.getSize("sidebar_margin").height) width: UM.Theme.getSize("sidebar").width * .55 anchors.left: infillCellLeft.right @@ -510,6 +510,7 @@ Item style: UM.Theme.styles.checkbox enabled: base.settingsEnabled + visible: infillSteps.properties.enabled == "True" checked: parseInt(infillSteps.properties.value) > 0 MouseArea { @@ -849,7 +850,7 @@ Item id: infillSteps containerStackId: Cura.MachineManager.activeStackId key: "gradual_infill_steps" - watchedProperties: ["value"] + watchedProperties: ["value", "enabled"] storeIndex: 0 } From 9a193ad5c5ab5324ad1335dd9adf80fef24a7977 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 28 Sep 2017 13:00:43 +0200 Subject: [PATCH 25/26] Changing AGPLv3 to LGPLv3 --- CuraEngine | Bin 0 -> 4739960 bytes LICENSE | 816 ++++-------------- cmake/CuraTests.cmake | 2 +- cura/ArrangeObjectsJob.py | 2 +- cura/BuildVolume.py | 2 +- cura/CameraAnimation.py | 2 +- cura/ConvexHullDecorator.py | 2 +- cura/ConvexHullNode.py | 2 +- cura/CuraActions.py | 2 +- cura/CuraApplication.py | 2 +- cura/CuraSplashScreen.py | 2 +- cura/CuraVersion.py.in | 2 +- cura/LayerData.py | 2 +- cura/LayerDataBuilder.py | 2 +- cura/LayerPolygon.py | 2 +- cura/MachineAction.py | 2 +- cura/MachineActionManager.py | 2 +- cura/MultiplyObjectsJob.py | 2 +- cura/OneAtATimeIterator.py | 2 +- cura/PlatformPhysics.py | 2 +- cura/PlatformPhysicsOperation.py | 2 +- cura/PrintInformation.py | 2 +- cura/PrinterOutputDevice.py | 2 +- cura/ProfileReader.py | 2 +- cura/ProfileWriter.py | 2 +- cura/QualityManager.py | 2 +- cura/SetParentOperation.py | 2 +- cura/Settings/ContainerManager.py | 2 +- cura/Settings/ContainerSettingsModel.py | 2 +- cura/Settings/CuraContainerRegistry.py | 2 +- cura/Settings/CuraContainerStack.py | 2 +- cura/Settings/CuraStackBuilder.py | 2 +- cura/Settings/Exceptions.py | 2 +- cura/Settings/ExtruderManager.py | 2 +- cura/Settings/ExtruderStack.py | 2 +- cura/Settings/ExtrudersModel.py | 2 +- cura/Settings/GlobalStack.py | 2 +- cura/Settings/MachineManager.py | 2 +- cura/Settings/MachineNameValidator.py | 2 +- cura/Settings/MaterialManager.py | 2 +- .../MaterialSettingsVisibilityHandler.py | 2 +- cura/Settings/MaterialsModel.py | 2 +- cura/Settings/ProfilesModel.py | 2 +- cura/Settings/QualityAndUserProfilesModel.py | 2 +- cura/Settings/QualitySettingsModel.py | 2 +- cura/Settings/SetObjectExtruderOperation.py | 2 +- cura/Settings/SettingInheritanceManager.py | 2 +- cura/Settings/SettingOverrideDecorator.py | 2 +- cura/Settings/UserProfilesModel.py | 2 +- cura/Settings/__init__.py | 2 +- cura_app.py | 2 +- plugins/3MFReader/ThreeMFReader.py | 2 +- plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +- plugins/3MFReader/WorkspaceDialog.py | 2 +- plugins/3MFReader/WorkspaceDialog.qml | 2 +- plugins/3MFReader/__init__.py | 2 +- plugins/3MFWriter/ThreeMFWorkspaceWriter.py | 2 +- plugins/3MFWriter/ThreeMFWriter.py | 2 +- plugins/3MFWriter/__init__.py | 2 +- plugins/AutoSave/AutoSave.py | 2 +- plugins/AutoSave/__init__.py | 2 +- plugins/ChangeLogPlugin/ChangeLog.py | 2 +- plugins/ChangeLogPlugin/ChangeLog.qml | 2 +- plugins/ChangeLogPlugin/__init__.py | 2 +- .../CuraEngineBackend/CuraEngineBackend.py | 2 +- plugins/CuraEngineBackend/ProcessGCodeJob.py | 2 +- .../ProcessSlicedLayersJob.py | 2 +- plugins/CuraEngineBackend/StartSliceJob.py | 2 +- plugins/CuraEngineBackend/__init__.py | 2 +- .../CuraProfileReader/CuraProfileReader.py | 2 +- plugins/CuraProfileReader/__init__.py | 2 +- .../CuraProfileWriter/CuraProfileWriter.py | 2 +- plugins/CuraProfileWriter/__init__.py | 2 +- .../FirmwareUpdateChecker.py | 2 +- .../FirmwareUpdateCheckerJob.py | 2 +- plugins/FirmwareUpdateChecker/__init__.py | 2 +- .../GCodeProfileReader/GCodeProfileReader.py | 2 +- plugins/GCodeProfileReader/__init__.py | 2 +- plugins/GCodeReader/GCodeReader.py | 2 +- plugins/GCodeReader/__init__.py | 2 +- plugins/GCodeWriter/GCodeWriter.py | 2 +- plugins/GCodeWriter/__init__.py | 2 +- plugins/ImageReader/ConfigUI.qml | 2 +- plugins/ImageReader/ImageReader.py | 2 +- plugins/ImageReader/ImageReaderUI.py | 2 +- plugins/ImageReader/__init__.py | 2 +- plugins/LayerView/LayerPass.py | 2 +- plugins/LayerView/LayerView.py | 2 +- plugins/LayerView/LayerView.qml | 2 +- plugins/LayerView/__init__.py | 2 +- .../LegacyProfileReader.py | 2 +- plugins/LegacyProfileReader/__init__.py | 2 +- .../MachineSettingsAction.py | 2 +- .../MachineSettingsAction.qml | 2 +- plugins/MachineSettingsAction/__init__.py | 2 +- .../PerObjectCategory.qml | 2 +- .../PerObjectSettingsTool/PerObjectItem.qml | 2 +- .../PerObjectSettingVisibilityHandler.py | 2 +- .../PerObjectSettingsPanel.qml | 2 +- .../PerObjectSettingsTool.py | 2 +- plugins/PerObjectSettingsTool/__init__.py | 2 +- plugins/PluginBrowser/PluginBrowser.py | 2 +- plugins/PluginBrowser/__init__.py | 2 +- .../LinuxRemovableDrivePlugin.py | 2 +- .../OSXRemovableDrivePlugin.py | 2 +- .../RemovableDriveOutputDevice.py | 2 +- .../RemovableDrivePlugin.py | 2 +- .../WindowsRemovableDrivePlugin.py | 2 +- .../RemovableDriveOutputDevice/__init__.py | 2 +- plugins/SliceInfoPlugin/SliceInfo.py | 2 +- plugins/SliceInfoPlugin/SliceInfoJob.py | 2 +- plugins/SliceInfoPlugin/__init__.py | 2 +- plugins/SolidView/SolidView.py | 2 +- plugins/SolidView/__init__.py | 2 +- .../NetworkPrinterOutputDevice.py | 2 +- .../NetworkPrinterOutputDevicePlugin.py | 2 +- plugins/UM3NetworkPrinting/PrintWindow.qml | 2 +- plugins/UM3NetworkPrinting/__init__.py | 2 +- plugins/USBPrinting/FirmwareUpdateWindow.qml | 2 +- plugins/USBPrinting/USBPrinterOutputDevice.py | 2 +- .../USBPrinterOutputDeviceManager.py | 2 +- plugins/USBPrinting/__init__.py | 2 +- .../BedLevelMachineAction.qml | 2 +- .../UM2UpgradeSelection.py | 2 +- .../UM2UpgradeSelectionMachineAction.qml | 2 +- .../UMOUpgradeSelection.py | 2 +- .../UMOUpgradeSelectionMachineAction.qml | 2 +- .../UpgradeFirmwareMachineAction.qml | 2 +- plugins/UltimakerMachineActions/__init__.py | 2 +- .../VersionUpgrade21to22/MachineInstance.py | 2 +- .../VersionUpgrade21to22/Preferences.py | 2 +- .../VersionUpgrade21to22/Profile.py | 2 +- .../VersionUpgrade21to22.py | 2 +- .../VersionUpgrade21to22/__init__.py | 2 +- .../VersionUpgrade22to24/VersionUpgrade.py | 2 +- .../VersionUpgrade22to24/__init__.py | 2 +- .../VersionUpgrade25to26.py | 2 +- .../VersionUpgrade25to26/__init__.py | 2 +- .../tests/TestVersionUpgrade25to26.py | 2 +- .../VersionUpgrade26to27.py | 2 +- .../VersionUpgrade26to27/__init__.py | 2 +- .../tests/TestVersionUpgrade26to27.py | 2 +- .../VersionUpgrade27to30.py | 2 +- .../VersionUpgrade27to30/__init__.py | 2 +- .../tests/TestVersionUpgrade27to30.py | 2 +- plugins/X3DReader/X3DReader.py | 2 +- plugins/XRayView/XRayPass.py | 2 +- plugins/XRayView/XRayView.py | 2 +- plugins/XRayView/__init__.py | 2 +- .../XmlMaterialProfile/XmlMaterialProfile.py | 2 +- .../XmlMaterialProfile/XmlMaterialUpgrader.py | 2 +- plugins/XmlMaterialProfile/__init__.py | 2 +- resources/qml/AboutDialog.qml | 10 +- resources/qml/Actions.qml | 2 +- resources/qml/AddMachineDialog.qml | 2 +- .../qml/AskOpenAsProjectOrModelsDialog.qml | 2 +- resources/qml/Cura.qml | 2 +- .../qml/DiscardOrKeepProfileChangesDialog.qml | 2 +- resources/qml/EngineLog.qml | 2 +- resources/qml/ExtruderButton.qml | 2 +- resources/qml/JobSpecs.qml | 2 +- resources/qml/Menus/ContextMenu.qml | 2 +- resources/qml/Menus/MaterialMenu.qml | 2 +- resources/qml/Menus/NozzleMenu.qml | 2 +- resources/qml/Menus/PrinterMenu.qml | 2 +- resources/qml/Menus/ProfileMenu.qml | 2 +- resources/qml/Menus/RecentFilesMenu.qml | 2 +- resources/qml/Menus/ViewMenu.qml | 2 +- resources/qml/MonitorButton.qml | 2 +- .../qml/OpenFilesIncludingProjectsDialog.qml | 2 +- resources/qml/Preferences/GeneralPage.qml | 2 +- resources/qml/Preferences/MachinesPage.qml | 2 +- resources/qml/Preferences/MaterialView.qml | 2 +- resources/qml/Preferences/MaterialsPage.qml | 2 +- resources/qml/Preferences/ProfileTab.qml | 2 +- resources/qml/Preferences/ProfilesPage.qml | 2 +- resources/qml/Preferences/ReadOnlySpinBox.qml | 2 +- .../qml/Preferences/ReadOnlyTextArea.qml | 2 +- .../qml/Preferences/ReadOnlyTextField.qml | 2 +- .../qml/Preferences/SettingVisibilityPage.qml | 2 +- resources/qml/PrintMonitor.qml | 2 +- resources/qml/SaveButton.qml | 2 +- resources/qml/Settings/SettingCategory.qml | 2 +- resources/qml/Settings/SettingCheckBox.qml | 2 +- resources/qml/Settings/SettingComboBox.qml | 2 +- resources/qml/Settings/SettingExtruder.qml | 2 +- resources/qml/Settings/SettingItem.qml | 2 +- .../qml/Settings/SettingOptionalExtruder.qml | 2 +- resources/qml/Settings/SettingTextField.qml | 2 +- resources/qml/Settings/SettingUnknown.qml | 2 +- resources/qml/Settings/SettingView.qml | 2 +- resources/qml/Sidebar.qml | 2 +- resources/qml/SidebarAdvanced.qml | 2 +- resources/qml/SidebarContents.qml | 2 +- resources/qml/SidebarHeader.qml | 2 +- resources/qml/SidebarSimple.qml | 2 +- resources/qml/SidebarTooltip.qml | 2 +- resources/qml/Toolbar.qml | 2 +- resources/qml/Topbar.qml | 2 +- resources/qml/WorkspaceSummaryDialog.qml | 2 +- resources/themes/cura-light/styles.qml | 2 +- setup.py | 2 +- tests/Settings/TestCuraContainerRegistry.py | 2 +- tests/Settings/TestExtruderStack.py | 2 +- tests/Settings/TestGlobalStack.py | 2 +- 205 files changed, 367 insertions(+), 863 deletions(-) create mode 100755 CuraEngine diff --git a/CuraEngine b/CuraEngine new file mode 100755 index 0000000000000000000000000000000000000000..3cee13468b3835775c22754503ff0d0e271b3346 GIT binary patch literal 4739960 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 z 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¡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%0DHmi@r>!WaW(ucM;GQ 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